|
|
1.1 root 1: /*
2: * getuid user group passwd uid gid acct bin gcid home shell
3: */
4: #include <stdio.h>
5: extern char *user(), *group(), *passwd(), *uid(), *gid(), *acct(), *bin(), *gcid(), *home(), *shell();
6: struct op{
7: char *name;
8: char * (*fn)();
9: } op[] = {
10: "user", user, /* login id */
11: "group", group, /* group id */
12: "passwd", passwd, /* encrypted password */
13: "uid", uid, /* numerical user id */
14: "gid", gid, /* numerical group id */
15: "acct", acct, /* GCOS account number */
16: "bin", bin, /* GCOS output bin */
17: "gcid", gcid, /* GCOS user id */
18: "home", home, /* home directory */
19: "shell", shell, /* default shell */
20: 0, 0,
21: };
22: int tagflag=0;
23: char buf[132];
24: main(argc, argv)
25: char *argv[];
26: {
27: register i;
28: if(getpw(getuid(), buf)!=0){
29: fprintf(stderr, "getuid: no line in /etc/passwd for %d\n", getuid());
30: return (1);
31: }
32: if(argc>1 && argv[1][0]=='-'){
33: tagflag++;
34: --argc; argv++;
35: }
36: if(argc < 2)
37: print(0);
38: else{
39: if(argc > 2)
40: tagflag++;
41: for(i=1; i<argc; i++)
42: print(lookup(argv[i]));
43: }
44: return (0);
45: }
46: lookup(s)
47: register char *s;
48: {
49: register struct op *p;
50: for(p=op; p->name; p++)
51: if(strcmp(p->name, s)==0)
52: return(p-op);
53: fprintf(stderr, "getuid: unknown option %s\n", s);
54: exit(1);
55: }
56: print(n)
57: register n;
58: {
59: if(tagflag)
60: printf("%s=", op[n].name);
61: printf("%s\n", (*op[n].fn)());
62: }
63: char *
64: field(b, n, delim)
65: register char *b;
66: register n, delim;
67: {
68: register char *s, *t;
69: static char rbuf[64];
70: s=b;
71: rbuf[0]='\0';
72: while(n-- > 0){
73: while(*s!=delim)
74: if(*s++ == '\0')
75: return(rbuf);
76: s++; /* Point past the delim */
77: }
78: t=rbuf;
79: while(*t = *s++)
80: if(*t++ == delim){
81: *--t = '\0';
82: break;
83: }
84: return(rbuf);
85: }
86: char *
87: whois(uid){
88: static char buf[132];
89: register char *p = buf;
90: if(getpw(uid,buf)!=0)
91: sprintf(buf, "%d", uid);
92: else{
93: while(*p!=':')
94: p++;
95: *p=0;
96: }
97: return(buf);
98: }
99: char *
100: user(){
101: return(field(buf, 0, ':'));
102: }
103: char *
104: passwd(){
105: return(field(buf, 1, ':'));
106: }
107: char *
108: uid(){
109: return(field(buf, 2, ':'));
110: }
111: char *
112: gid(){
113: return(field(buf, 3, ':'));
114: }
115: char *
116: group(){
117: # include <grp.h>
118: struct group *getgrgid();
119: register struct group *g;
120: g=getgrgid(atoi(field(buf, 3, ':')));
121: return(g? g->gr_name : field(buf, 3, ':'));
122: }
123: char *
124: acct(){
125: char sbuf[64];
126: strcpy(sbuf, field(buf, 4, ':'));
127: return(field(sbuf, 0, ','));
128: }
129: char *
130: bin(){
131: char sbuf[64];
132: strcpy(sbuf, field(buf, 4, ':'));
133: return(field(sbuf, 1, ','));
134: }
135: char *
136: gcid(){
137: char *c, sbuf[64];
138: strcpy(sbuf, field(buf, 4, ':'));
139: if (*(c = field(sbuf, 2, ',')) == '\0') {
140: return(field(buf, 0, ':'));
141: }
142: else {
143: return(c);
144: }
145: }
146: char *
147: home(){
148: return(field(buf, 5, ':'));
149: }
150: char *
151: shell(){
152: return(field(buf, 6, ':'));
153: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.