date and time created 83/12/02 17:14:37 by ralph
[unix-history] / usr / src / lib / libc / gen / getpwnamuid.c
CommitLineData
8b87132c
RC
1/* getpwnamuid.c 4.1 83/12/02 */
2
3#include <stdio.h>
4#include <pwd.h>
5#include <ndbm.h>
6
7#include <sys/file.h>
8
9static char PASSWD[] = "/etc/passwd";
10static char EMPTY[] = "";
11static char line[BUFSIZ+1];
12static struct passwd passwd;
13static datum curkey;
14static DBM *db = 0;
15
16static struct passwd *
17fetchpw(key)
18 datum key;
19{
20 register char *cp;
21
22 curkey = key;
23 if (curkey.dptr == 0)
24 return ((struct passwd *)NULL);
25 key = dbmfetch(db, curkey);
26 if (key.dptr == 0)
27 return ((struct passwd *)NULL);
28 cp = key.dptr;
29
30#define EXPAND(e) passwd.pw_/**/e = cp; while (*cp++);
31 EXPAND(name);
32 EXPAND(passwd);
33 passwd.pw_uid = *(int *)cp; cp += sizeof (int);
34 passwd.pw_gid = *(int *)cp; cp += sizeof (int);
35 passwd.pw_quota = *(int *)cp; cp += sizeof (int);
36 EXPAND(comment);
37 EXPAND(gecos);
38 EXPAND(dir);
39 EXPAND(shell);
40 return (&passwd);
41}
42
43struct passwd *
44getpwnam(nam)
45 char *nam;
46{
47 datum key;
48 register struct passwd *pw;
49
50 if ((db = ndbmopen(PASSWD, O_RDONLY)) == (DBM *)0)
51 return ((struct passwd *)NULL);
52 key.dptr = nam;
53 key.dsize = strlen(nam);
54 pw = fetchpw(key);
55 ndbmclose(db);
56 return (pw);
57}
58
59struct passwd *
60getpwuid(uid)
61 int uid;
62{
63 datum key;
64 register struct passwd *pw;
65
66 if ((db = ndbmopen(PASSWD, O_RDONLY)) == (DBM *)0)
67 return ((struct passwd *)NULL);
68 key.dptr = (char *) &uid;
69 key.dsize = sizeof uid;
70 pw = fetchpw(key);
71 ndbmclose(db);
72 return (pw);
73}