Annotation of 43BSDReno/kerberosIV/kdb/krb_lib.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * $Source: /afs/athena.mit.edu/astaff/project/kerberos/src/lib/kdb/RCS/krb_lib.c,v $
                      3:  * $Author: jtkohl $ 
                      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: 
                     11: #ifndef        lint
                     12: static char rcsid_krb_lib_c[] =
                     13: "$Id: krb_lib.c,v 4.7 89/12/14 16:05:00 jtkohl Exp $";
                     14: #endif lint
                     15: 
                     16: #include <mit-copyright.h>
                     17: #include <stdio.h>
                     18: #include <sys/types.h>
                     19: #include <netinet/in.h>
                     20: #include <sys/uio.h>
                     21: #include <sys/time.h>
                     22: #include <sys/resource.h>
                     23: #include <strings.h>
                     24: #include <des.h>
                     25: #include <krb.h>
                     26: #include <krb_db.h>
                     27: 
                     28: #ifdef DEBUG
                     29: extern int debug;
                     30: extern char *progname;
                     31: long    kerb_debug;
                     32: #endif
                     33: 
                     34: extern char *strncpy();
                     35: extern char *ctime();
                     36: extern char *getenv();
                     37: 
                     38: static  init = 0;
                     39: 
                     40: /*
                     41:  * initialization routine for data base 
                     42:  */
                     43: 
                     44: int
                     45: kerb_init()
                     46: {
                     47: #ifdef DEBUG
                     48:     if (!init) {
                     49:        char *dbg = getenv("KERB_DBG");
                     50:        if (dbg)
                     51:            sscanf(dbg, "%d", &kerb_debug);
                     52:        init = 1;
                     53:     }
                     54: #endif
                     55:     kerb_db_init();
                     56: 
                     57: #ifdef CACHE
                     58:     kerb_cache_init();
                     59: #endif
                     60: 
                     61:     /* successful init, return 0, else errcode */
                     62:     return (0);
                     63: }
                     64: 
                     65: /*
                     66:  * finalization routine for database -- NOTE: MUST be called by any
                     67:  * program using kerb_init.  ALSO will have to be modified to finalize
                     68:  * caches, if they're ever really implemented. 
                     69:  */
                     70: 
                     71: int
                     72: kerb_fini()
                     73: {
                     74:     kerb_db_fini();
                     75: }
                     76: 
                     77: /*
                     78:  * look up a principal in the cache or data base returns number of
                     79:  * principals found 
                     80:  */
                     81: 
                     82: int
                     83: kerb_get_principal(name, inst, principal, max, more)
                     84:     char   *name;              /* could have wild card */
                     85:     char   *inst;              /* could have wild card */
                     86:     Principal *principal;
                     87:     unsigned int max;          /* max number of name structs to return */
                     88:     int    *more;              /* more tuples than room for */
                     89: 
                     90: {
                     91:     int     found = 0;
                     92: #ifdef CACHE
                     93:     static int wild = 0;
                     94: #endif
                     95:     if (!init)
                     96:        kerb_init();
                     97: 
                     98: #ifdef DEBUG
                     99:     if (kerb_debug & 1)
                    100:        fprintf(stderr, "\n%s: kerb_get_principal for %s %s max = %d\n",
                    101:            progname, name, inst, max);
                    102: #endif
                    103:     
                    104:     /*
                    105:      * if this is a request including a wild card, have to go to db
                    106:      * since the cache may not be exhaustive. 
                    107:      */
                    108: 
                    109:     /* clear the principal area */
                    110:     bzero((char *) principal, max * sizeof(Principal));
                    111: 
                    112: #ifdef CACHE
                    113:     /*
                    114:      * so check to see if the name contains a wildcard "*" or "?", not
                    115:      * preceeded by a backslash. 
                    116:      */
                    117:     wild = 0;
                    118:     if (index(name, '*') || index(name, '?') ||
                    119:        index(inst, '*') || index(inst, '?'))
                    120:        wild = 1;
                    121: 
                    122:     if (!wild) {
                    123:        /* try the cache first */
                    124:        found = kerb_cache_get_principal(name, inst, principal, max, more);
                    125:        if (found)
                    126:            return (found);
                    127:     }
                    128: #endif
                    129:     /* If we didn't try cache, or it wasn't there, try db */
                    130:     found = kerb_db_get_principal(name, inst, principal, max, more);
                    131:     /* try to insert principal(s) into cache if it was found */
                    132: #ifdef CACHE
                    133:     if (found) {
                    134:        kerb_cache_put_principal(principal, found);
                    135:     }
                    136: #endif
                    137:     return (found);
                    138: }
                    139: 
                    140: /* principals */
                    141: kerb_put_principal(principal, n)
                    142:     Principal *principal;
                    143:     unsigned int n;            /* number of principal structs to write */
                    144: {
                    145:     long time();
                    146:     struct tm *tp, *localtime();
                    147: 
                    148:     /* set mod date */
                    149:     principal->mod_date = time((long *)0);
                    150:     /* and mod date string */
                    151: 
                    152:     tp = localtime(&principal->mod_date);
                    153:     (void) sprintf(principal->mod_date_txt, "%4d-%2d-%2d",
                    154:                   tp->tm_year > 1900 ? tp->tm_year : tp->tm_year + 1900,
                    155:                   tp->tm_mon + 1, tp->tm_mday); /* January is 0, not 1 */
                    156: #ifdef DEBUG
                    157:     if (kerb_debug & 1) {
                    158:        int i;
                    159:        fprintf(stderr, "\nkerb_put_principal...");
                    160:        for (i = 0; i < n; i++) {
                    161:            krb_print_principal(&principal[i]);
                    162:        }
                    163:     }
                    164: #endif
                    165:     /* write database */
                    166:     if (kerb_db_put_principal(principal, n) < 0) {
                    167: #ifdef DEBUG
                    168:        if (kerb_debug & 1)
                    169:            fprintf(stderr, "\n%s: kerb_db_put_principal err", progname);
                    170:        /* watch out for cache */
                    171: #endif
                    172:        return -1;
                    173:     }
                    174: #ifdef CACHE
                    175:     /* write cache */
                    176:     if (!kerb_cache_put_principal(principal, n)) {
                    177: #ifdef DEBUG
                    178:        if (kerb_debug & 1)
                    179:            fprintf(stderr, "\n%s: kerb_cache_put_principal err", progname);
                    180: #endif
                    181:        return -1;
                    182:     }
                    183: #endif
                    184:     return 0;
                    185: }
                    186: 
                    187: int
                    188: kerb_get_dba(name, inst, dba, max, more)
                    189:     char   *name;              /* could have wild card */
                    190:     char   *inst;              /* could have wild card */
                    191:     Dba    *dba;
                    192:     unsigned int max;          /* max number of name structs to return */
                    193:     int    *more;              /* more tuples than room for */
                    194: 
                    195: {
                    196:     int     found = 0;
                    197: #ifdef CACHE
                    198:     static int wild = 0;
                    199: #endif
                    200:     if (!init)
                    201:        kerb_init();
                    202: 
                    203: #ifdef DEBUG
                    204:     if (kerb_debug & 1)
                    205:        fprintf(stderr, "\n%s: kerb_get_dba for %s %s max = %d\n",
                    206:            progname, name, inst, max);
                    207: #endif
                    208:     /*
                    209:      * if this is a request including a wild card, have to go to db
                    210:      * since the cache may not be exhaustive. 
                    211:      */
                    212: 
                    213:     /* clear the dba area */
                    214:     bzero((char *) dba, max * sizeof(Dba));
                    215: 
                    216: #ifdef CACHE
                    217:     /*
                    218:      * so check to see if the name contains a wildcard "*" or "?", not
                    219:      * preceeded by a backslash. 
                    220:      */
                    221: 
                    222:     wild = 0;
                    223:     if (index(name, '*') || index(name, '?') ||
                    224:        index(inst, '*') || index(inst, '?'))
                    225:        wild = 1;
                    226: 
                    227:     if (!wild) {
                    228:        /* try the cache first */
                    229:        found = kerb_cache_get_dba(name, inst, dba, max, more);
                    230:        if (found)
                    231:            return (found);
                    232:     }
                    233: #endif
                    234:     /* If we didn't try cache, or it wasn't there, try db */
                    235:     found = kerb_db_get_dba(name, inst, dba, max, more);
                    236: #ifdef CACHE
                    237:     /* try to insert dba(s) into cache if it was found */
                    238:     if (found) {
                    239:        kerb_cache_put_dba(dba, found);
                    240:     }
                    241: #endif
                    242:     return (found);
                    243: }

unix.superglobalmegacorp.com

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