Annotation of 43BSDTahoe/new/xns/morexnslib/ch/CHusername.c, revision 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.