freebsd-dev/eBones/krb/get_krbhst.c
Geoff Rehmet 60643d379b Initial import of eBones.
(Including all changes for FreeBSD - importing the original eBones distribution
would be too complex at this stage, since I don't have access to Piero's 
CVS.)
(If you want to include eBones in your system, don't forget to include
MAKE_EBONES in /etc/make.conf.)
(This stuff is now also suppable from braae.ru.ac.za.)

Bones originally from MIT SIPB.
Original port to FreeBSD 1.x  by Piero Serini.
Moved to FreeBSD 2.0 by Doug Rabson and Geoff Rehmet.
Nice bug fixes from Doug Rabson.
1994-09-30 14:50:09 +00:00

85 lines
2.5 KiB
C

/*
* Copyright 1985, 1986, 1987, 1988 by the Massachusetts Institute
* of Technology.
* For copying and distribution information, please see the file
* <Copyright.MIT>.
*
* from: get_krbhst.c,v 4.8 89/01/22 20:00:29 rfrench Exp $
* $Id: get_krbhst.c,v 1.2 1994/07/19 19:25:17 g89r4222 Exp $
*/
#ifndef lint
static char *rcsid =
"$Id: get_krbhst.c,v 1.2 1994/07/19 19:25:17 g89r4222 Exp $";
#endif /* lint */
#include <stdio.h>
#include <krb.h>
#include <strings.h>
/*
* Given a Kerberos realm, find a host on which the Kerberos authenti-
* cation server can be found.
*
* krb_get_krbhst takes a pointer to be filled in, a pointer to the name
* of the realm for which a server is desired, and an integer, n, and
* returns (in h) the nth entry from the configuration file (KRB_CONF,
* defined in "krb.h") associated with the specified realm.
*
* On end-of-file, krb_get_krbhst returns KFAILURE. If n=1 and the
* configuration file does not exist, krb_get_krbhst will return KRB_HOST
* (also defined in "krb.h"). If all goes well, the routine returnes
* KSUCCESS.
*
* The KRB_CONF file contains the name of the local realm in the first
* line (not used by this routine), followed by lines indicating realm/host
* entries. The words "admin server" following the hostname indicate that
* the host provides an administrative database server.
*
* For example:
*
* ATHENA.MIT.EDU
* ATHENA.MIT.EDU kerberos-1.mit.edu admin server
* ATHENA.MIT.EDU kerberos-2.mit.edu
* LCS.MIT.EDU kerberos.lcs.mit.edu admin server
*
* This is a temporary hack to allow us to find the nearest system running
* kerberos. In the long run, this functionality will be provided by a
* nameserver.
*/
krb_get_krbhst(h,r,n)
char *h;
char *r;
int n;
{
FILE *cnffile;
char tr[REALM_SZ];
char linebuf[BUFSIZ];
register int i;
if ((cnffile = fopen(KRB_CONF,"r")) == NULL) {
if (n==1) {
(void) strcpy(h,KRB_HOST);
return(KSUCCESS);
}
else
return(KFAILURE);
}
if (fscanf(cnffile,"%s",tr) == EOF)
return(KFAILURE);
/* run through the file, looking for the nth server for this realm */
for (i = 1; i <= n;) {
if (fgets(linebuf, BUFSIZ, cnffile) == NULL) {
(void) fclose(cnffile);
return(KFAILURE);
}
if (sscanf(linebuf, "%s %s", tr, h) != 2)
continue;
if (!strcmp(tr,r))
i++;
}
(void) fclose(cnffile);
return(KSUCCESS);
}