|
|
1.1 ! root 1: /* ! 2: * $Source: /usr/src/kerberosIV/krb/RCS/getrealm.c,v $ ! 3: * $Author: kfall $ ! 4: * ! 5: * Copyright 1988 by the Massachusetts Institute of Technology. ! 6: * ! 7: * For copying and distribution information, please see the file ! 8: * <mit-copyright.h>. ! 9: * ! 10: * routine to convert hostname into realm name. ! 11: */ ! 12: ! 13: #ifndef lint ! 14: static char rcsid_getrealm_c[] = ! 15: "$Id: getrealm.c,v 4.7 90/06/25 20:56:21 kfall Exp $"; ! 16: #endif lint ! 17: ! 18: #include <mit-copyright.h> ! 19: #include <strings.h> ! 20: #include <stdio.h> ! 21: #include <ctype.h> ! 22: #include <des.h> ! 23: #include <krb.h> ! 24: #include <sys/param.h> ! 25: ! 26: /* for Ultrix and friends ... */ ! 27: #ifndef MAXHOSTNAMELEN ! 28: #define MAXHOSTNAMELEN 64 ! 29: #endif ! 30: ! 31: /* ! 32: * krb_realmofhost. ! 33: * Given a fully-qualified domain-style primary host name, ! 34: * return the name of the Kerberos realm for the host. ! 35: * If the hostname contains no discernable domain, or an error occurs, ! 36: * return the local realm name, as supplied by get_krbrlm(). ! 37: * If the hostname contains a domain, but no translation is found, ! 38: * the hostname's domain is converted to upper-case and returned. ! 39: * ! 40: * The format of each line of the translation file is: ! 41: * domain_name kerberos_realm ! 42: * -or- ! 43: * host_name kerberos_realm ! 44: * ! 45: * domain_name should be of the form .XXX.YYY (e.g. .LCS.MIT.EDU) ! 46: * host names should be in the usual form (e.g. FOO.BAR.BAZ) ! 47: */ ! 48: ! 49: static char ret_realm[REALM_SZ+1]; ! 50: ! 51: char * ! 52: krb_realmofhost(host) ! 53: char *host; ! 54: { ! 55: char *domain; ! 56: FILE *trans_file; ! 57: char trans_host[MAXHOSTNAMELEN+1]; ! 58: char trans_realm[REALM_SZ+1]; ! 59: int retval; ! 60: ! 61: domain = index(host, '.'); ! 62: ! 63: /* prepare default */ ! 64: if (domain) { ! 65: char *cp; ! 66: ! 67: strncpy(ret_realm, &domain[1], REALM_SZ); ! 68: ret_realm[REALM_SZ] = '\0'; ! 69: /* Upper-case realm */ ! 70: for (cp = ret_realm; *cp; cp++) ! 71: if (islower(*cp)) ! 72: *cp = toupper(*cp); ! 73: } else { ! 74: krb_get_lrealm(ret_realm, 1); ! 75: } ! 76: ! 77: if ((trans_file = fopen(KRB_RLM_TRANS, "r")) == (FILE *) 0) { ! 78: /* krb_errno = KRB_NO_TRANS */ ! 79: return(ret_realm); ! 80: } ! 81: while (1) { ! 82: if ((retval = fscanf(trans_file, "%s %s", ! 83: trans_host, trans_realm)) != 2) { ! 84: if (retval == EOF) { ! 85: fclose(trans_file); ! 86: return(ret_realm); ! 87: } ! 88: continue; /* ignore broken lines */ ! 89: } ! 90: trans_host[MAXHOSTNAMELEN] = '\0'; ! 91: trans_realm[REALM_SZ] = '\0'; ! 92: if (!strcasecmp(trans_host, host)) { ! 93: /* exact match of hostname, so return the realm */ ! 94: (void) strcpy(ret_realm, trans_realm); ! 95: fclose(trans_file); ! 96: return(ret_realm); ! 97: } ! 98: if ((trans_host[0] == '.') && domain) { ! 99: /* this is a domain match */ ! 100: if (!strcasecmp(trans_host, domain)) { ! 101: /* domain match, save for later */ ! 102: (void) strcpy(ret_realm, trans_realm); ! 103: continue; ! 104: } ! 105: } ! 106: } ! 107: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.