|
|
1.1 ! root 1: /* ! 2: * $Source: /usr/src/kerberosIV/krb/RCS/get_krbhst.c,v $ ! 3: * $Author: kfall $ ! 4: * ! 5: * Copyright 1985, 1986, 1987, 1988 by the Massachusetts Institute ! 6: * of Technology. ! 7: * ! 8: * For copying and distribution information, please see the file ! 9: * <mit-copyright.h>. ! 10: */ ! 11: ! 12: #ifndef lint ! 13: static char *rcsid_get_krbhst_c = ! 14: "$Header: /usr/src/kerberosIV/krb/RCS/get_krbhst.c,v 4.9 90/06/25 20:55:54 kfall Exp $"; ! 15: #endif /* lint */ ! 16: ! 17: #include <mit-copyright.h> ! 18: #include <stdio.h> ! 19: #include <des.h> ! 20: #include <krb.h> ! 21: #include <strings.h> ! 22: ! 23: /* ! 24: * Given a Kerberos realm, find a host on which the Kerberos authenti- ! 25: * cation server can be found. ! 26: * ! 27: * krb_get_krbhst takes a pointer to be filled in, a pointer to the name ! 28: * of the realm for which a server is desired, and an integer, n, and ! 29: * returns (in h) the nth entry from the configuration file (KRB_CONF, ! 30: * defined in "krb.h") associated with the specified realm. ! 31: * ! 32: * On end-of-file, krb_get_krbhst returns KFAILURE. If n=1 and the ! 33: * configuration file does not exist, krb_get_krbhst will return KRB_HOST ! 34: * (also defined in "krb.h"). If all goes well, the routine returnes ! 35: * KSUCCESS. ! 36: * ! 37: * The KRB_CONF file contains the name of the local realm in the first ! 38: * line (not used by this routine), followed by lines indicating realm/host ! 39: * entries. The words "admin server" following the hostname indicate that ! 40: * the host provides an administrative database server. ! 41: * ! 42: * For example: ! 43: * ! 44: * ATHENA.MIT.EDU ! 45: * ATHENA.MIT.EDU kerberos-1.mit.edu admin server ! 46: * ATHENA.MIT.EDU kerberos-2.mit.edu ! 47: * LCS.MIT.EDU kerberos.lcs.mit.edu admin server ! 48: * ! 49: * This is a temporary hack to allow us to find the nearest system running ! 50: * kerberos. In the long run, this functionality will be provided by a ! 51: * nameserver. ! 52: */ ! 53: ! 54: krb_get_krbhst(h,r,n) ! 55: char *h; ! 56: char *r; ! 57: int n; ! 58: { ! 59: FILE *cnffile; ! 60: char tr[REALM_SZ]; ! 61: char linebuf[BUFSIZ]; ! 62: register int i; ! 63: ! 64: if ((cnffile = fopen(KRB_CONF,"r")) == NULL) { ! 65: if (n==1) { ! 66: (void) strcpy(h,KRB_HOST); ! 67: return(KSUCCESS); ! 68: } ! 69: else ! 70: return(KFAILURE); ! 71: } ! 72: if (fscanf(cnffile,"%s",tr) == EOF) ! 73: return(KFAILURE); ! 74: /* run through the file, looking for the nth server for this realm */ ! 75: for (i = 1; i <= n;) { ! 76: if (fgets(linebuf, BUFSIZ, cnffile) == NULL) { ! 77: (void) fclose(cnffile); ! 78: return(KFAILURE); ! 79: } ! 80: if (sscanf(linebuf, "%s %s", tr, h) != 2) ! 81: continue; ! 82: if (!strcmp(tr,r)) ! 83: i++; ! 84: } ! 85: (void) fclose(cnffile); ! 86: return(KSUCCESS); ! 87: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.