Annotation of 43BSDTahoe/new/xns/morexnslib/ch/CHusername.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char *rcsid = "$Header: CHusername.c,v 1.1 87/05/11 09:59:41 ed Exp $";
                      3: #endif lint
                      4: 
                      5: /* contains:
                      6:  * CH_NameToUser
                      7:  */
                      8: 
                      9: #ifndef CHUSERIDFILE
                     10: #define CHUSERIDFILE "/usr/new/lib/xnscourier/chusermap"
                     11: #endif
                     12: 
                     13: #include <stdio.h>
                     14: #include <sys/types.h>
                     15: #include <netns/ns.h>
                     16: #include <xnscourier/Clearinghouse2.h>
                     17: #include <ctype.h>
                     18: #include <ndbm.h>
                     19: extern char *rindex(), *CH_NameToString();
                     20: 
                     21: /*
                     22:  * produce a UNIX user name by table lookup given a CHS name
                     23:  */
                     24: char *
                     25: CH_NameToUser(chs_name)
                     26:        Clearinghouse2_ThreePartName chs_name;
                     27: {
                     28:        static char userid[12];
                     29:        DBM *db;
                     30:        datum cptr, uptr;
                     31:        register char *ptr;
                     32:        Clearinghouse2_ObjectName chdefault;
                     33:        FILE *dbf;
                     34:        char charbuf[100];
                     35:        int n;
                     36: 
                     37:        uptr.dptr = NULL;
                     38:        cptr.dptr = CH_NameToString(chs_name);
                     39:        for (ptr =cptr.dptr; *ptr != '\0'; ptr++)
                     40:                if (islower(*ptr)) *ptr = toupper(*ptr);
                     41: 
                     42:        /* lookup user id in hashed database */
                     43:        if ( (db= dbm_open(CHUSERIDFILE, 0, 0)) != (DBM*)0 ) {
                     44:                cptr.dsize = strlen(cptr.dptr);
                     45:                uptr = dbm_fetch(db, cptr);
                     46:                dbm_close(db);
                     47:        }
                     48:        /* lookup user id in text database using linear search */
                     49:        else if ( (dbf = fopen(CHUSERIDFILE, 0)) >= 0 ) {
                     50:                while ((n=fscanf(dbf, "%[^\t\n]\t%s\n",charbuf,userid)) >= 0) {
                     51:                        if (n != 2) continue;
                     52:                        for (ptr=charbuf; *ptr != '\0'; ptr++)
                     53:                                if (islower(*ptr)) *ptr = toupper(*ptr);
                     54:                        if (strcmp(charbuf,cptr.dptr) == 0) {
                     55:                                uptr.dptr = userid;
                     56:                                break;  /* found it! */
                     57:                        }
                     58:                }
                     59:                fclose(dbf);
                     60:        }
                     61:        if (uptr.dptr != NULL) return(uptr.dptr);
                     62: 
                     63:        /* default case */
                     64:        chdefault.object = chdefault.domain = chdefault.organization = NULL;
                     65:        CH_NameDefault(&chdefault);
                     66:        if ( strcmp(chs_name.domain,chdefault.domain) != 0 ||
                     67:             strcmp(chs_name.organization,chdefault.organization) != 0)
                     68:                return("nobody");
                     69:        else if ( (ptr= rindex(chs_name.object, ' ')) == 0 )
                     70:                return(chs_name.object);
                     71:        else
                     72:                return(ptr+1);
                     73: }

unix.superglobalmegacorp.com

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