Annotation of 43BSDReno/kerberosIV/krb/getrealm.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.