if you can't find the hertz rate, report time in ticks, not seconds.
[unix-history] / usr / src / lib / libc / gen / getpwnamuid.c
CommitLineData
18a41d70 1/* getpwnamuid.c 4.2 83/12/20 */
8b87132c
RC
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);
18a41d70
RC
52 if (flock(db->db_dirf, LOCK_SH) < 0)
53 return ((struct passwd *)NULL);
8b87132c
RC
54 key.dptr = nam;
55 key.dsize = strlen(nam);
56 pw = fetchpw(key);
57 ndbmclose(db);
58 return (pw);
59}
60
61struct passwd *
62getpwuid(uid)
63 int uid;
64{
65 datum key;
66 register struct passwd *pw;
67
68 if ((db = ndbmopen(PASSWD, O_RDONLY)) == (DBM *)0)
69 return ((struct passwd *)NULL);
18a41d70
RC
70 if (flock(db->db_dirf, LOCK_SH) < 0)
71 return ((struct passwd *)NULL);
8b87132c
RC
72 key.dptr = (char *) &uid;
73 key.dsize = sizeof uid;
74 pw = fetchpw(key);
75 ndbmclose(db);
76 return (pw);
77}