|
|
BSD 4.3tahoe
#ifndef lint
static char *rcsid = "$Header: /var/lib/cvsd/repos/CSRG/43BSDTahoe/new/xns/morexnslib/ch/CHusername.c,v 1.1.1.1 2018/04/24 16:12:58 root Exp $";
#endif lint
/* contains:
* CH_NameToUser
*/
#ifndef CHUSERIDFILE
#define CHUSERIDFILE "/usr/new/lib/xnscourier/chusermap"
#endif
#include <stdio.h>
#include <sys/types.h>
#include <netns/ns.h>
#include <xnscourier/Clearinghouse2.h>
#include <ctype.h>
#include <ndbm.h>
extern char *rindex(), *CH_NameToString();
/*
* produce a UNIX user name by table lookup given a CHS name
*/
char *
CH_NameToUser(chs_name)
Clearinghouse2_ThreePartName chs_name;
{
static char userid[12];
DBM *db;
datum cptr, uptr;
register char *ptr;
Clearinghouse2_ObjectName chdefault;
FILE *dbf;
char charbuf[100];
int n;
uptr.dptr = NULL;
cptr.dptr = CH_NameToString(chs_name);
for (ptr =cptr.dptr; *ptr != '\0'; ptr++)
if (islower(*ptr)) *ptr = toupper(*ptr);
/* lookup user id in hashed database */
if ( (db= dbm_open(CHUSERIDFILE, 0, 0)) != (DBM*)0 ) {
cptr.dsize = strlen(cptr.dptr);
uptr = dbm_fetch(db, cptr);
dbm_close(db);
}
/* lookup user id in text database using linear search */
else if ( (dbf = fopen(CHUSERIDFILE, 0)) >= 0 ) {
while ((n=fscanf(dbf, "%[^\t\n]\t%s\n",charbuf,userid)) >= 0) {
if (n != 2) continue;
for (ptr=charbuf; *ptr != '\0'; ptr++)
if (islower(*ptr)) *ptr = toupper(*ptr);
if (strcmp(charbuf,cptr.dptr) == 0) {
uptr.dptr = userid;
break; /* found it! */
}
}
fclose(dbf);
}
if (uptr.dptr != NULL) return(uptr.dptr);
/* default case */
chdefault.object = chdefault.domain = chdefault.organization = NULL;
CH_NameDefault(&chdefault);
if ( strcmp(chs_name.domain,chdefault.domain) != 0 ||
strcmp(chs_name.organization,chdefault.organization) != 0)
return("nobody");
else if ( (ptr= rindex(chs_name.object, ' ')) == 0 )
return(chs_name.object);
else
return(ptr+1);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.