50 lines
1007 B
C
50 lines
1007 B
C
|
#include "busybox.h"
|
||
|
|
||
|
unsigned uidgid_get(struct bb_uidgid_t *u, const char *ug /*, unsigned dogrp */)
|
||
|
{
|
||
|
struct passwd *pwd;
|
||
|
struct group *gr;
|
||
|
const char *g;
|
||
|
|
||
|
/* g = 0; if (dogrp) g = strchr(ug, ':'); */
|
||
|
g = strchr(ug, ':');
|
||
|
if (g) {
|
||
|
int sz = (++g) - ug;
|
||
|
char buf[sz];
|
||
|
safe_strncpy(buf, ug, sz);
|
||
|
pwd = getpwnam(buf);
|
||
|
} else
|
||
|
pwd = getpwnam(ug);
|
||
|
if (!pwd)
|
||
|
return 0;
|
||
|
u->uid = pwd->pw_uid;
|
||
|
u->gid = pwd->pw_gid;
|
||
|
if (g) {
|
||
|
gr = getgrnam(g);
|
||
|
if (!gr) return 0;
|
||
|
u->gid = gr->gr_gid;
|
||
|
}
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
#if 0
|
||
|
#include <stdio.h>
|
||
|
int main()
|
||
|
{
|
||
|
unsigned u;
|
||
|
struct bb_uidgid_t ug;
|
||
|
u = uidgid_get(&ug, "apache");
|
||
|
printf("%u = %u:%u\n", u, ug.uid, ug.gid);
|
||
|
ug.uid = ug.gid = 1111;
|
||
|
u = uidgid_get(&ug, "apache");
|
||
|
printf("%u = %u:%u\n", u, ug.uid, ug.gid);
|
||
|
ug.uid = ug.gid = 1111;
|
||
|
u = uidgid_get(&ug, "apache:users");
|
||
|
printf("%u = %u:%u\n", u, ug.uid, ug.gid);
|
||
|
ug.uid = ug.gid = 1111;
|
||
|
u = uidgid_get(&ug, "apache:users");
|
||
|
printf("%u = %u:%u\n", u, ug.uid, ug.gid);
|
||
|
return 0;
|
||
|
}
|
||
|
#endif
|