blob: a2d02a84ff02691e40ce4cc5c6463dd6d24de214 [file] [log] [blame]
Denis Vlasenkode59c0f2006-10-05 22:50:22 +00001#include "busybox.h"
2
3unsigned uidgid_get(struct bb_uidgid_t *u, const char *ug /*, unsigned dogrp */)
4{
5 struct passwd *pwd;
6 struct group *gr;
7 const char *g;
8
9 /* g = 0; if (dogrp) g = strchr(ug, ':'); */
10 g = strchr(ug, ':');
11 if (g) {
12 int sz = (++g) - ug;
13 char buf[sz];
14 safe_strncpy(buf, ug, sz);
15 pwd = getpwnam(buf);
16 } else
17 pwd = getpwnam(ug);
18 if (!pwd)
19 return 0;
20 u->uid = pwd->pw_uid;
21 u->gid = pwd->pw_gid;
22 if (g) {
23 gr = getgrnam(g);
24 if (!gr) return 0;
25 u->gid = gr->gr_gid;
26 }
27 return 1;
28}
29
30#if 0
31#include <stdio.h>
32int main()
33{
34 unsigned u;
35 struct bb_uidgid_t ug;
36 u = uidgid_get(&ug, "apache");
37 printf("%u = %u:%u\n", u, ug.uid, ug.gid);
38 ug.uid = ug.gid = 1111;
39 u = uidgid_get(&ug, "apache");
40 printf("%u = %u:%u\n", u, ug.uid, ug.gid);
41 ug.uid = ug.gid = 1111;
42 u = uidgid_get(&ug, "apache:users");
43 printf("%u = %u:%u\n", u, ug.uid, ug.gid);
44 ug.uid = ug.gid = 1111;
45 u = uidgid_get(&ug, "apache:users");
46 printf("%u = %u:%u\n", u, ug.uid, ug.gid);
47 return 0;
48}
49#endif