diff options
Diffstat (limited to 'runit/uidgid.c')
-rw-r--r-- | runit/uidgid.c | 63 |
1 files changed, 0 insertions, 63 deletions
diff --git a/runit/uidgid.c b/runit/uidgid.c deleted file mode 100644 index a8fec40..0000000 --- a/runit/uidgid.c +++ /dev/null @@ -1,63 +0,0 @@ -#include <sys/types.h> -#include <pwd.h> -#include <grp.h> -#include "uidgid.h" - -static unsigned str_chr(const char *s, int c) -{ - const char *t = s; - while (t[0] && t[0] != (char)c) - t++; - return t - s; -} - - -unsigned uidgid_get(struct uidgid *u, char *ug, unsigned dogrp) { - char *g = 0; - struct passwd *pwd = 0; - struct group *gr = 0; - int i, d = 0; - - if (dogrp) - d = str_chr(ug, ':'); - if (ug[d] == ':') { - ug[d] = 0; - g = ug + d + 1; - } - pwd = getpwnam(ug); - if (!pwd) { - if (g) ug[d] = ':'; - return 0; - } - if (g) { - ug[d] = ':'; - for (i = 0; i < 60; ++i) { - d = str_chr(g, ':'); - if (g[d] == ':') { - g[d] = 0; - gr = getgrnam(g); - if (!gr) { - g[d] = ':'; - return 0; - } - g[d] = ':'; - u->gid[i] = gr->gr_gid; - g += d+1; - } - else { - gr = getgrnam(g); - if (!gr) return 0; - u->gid[i++] = gr->gr_gid; - break; - } - } - u->gid[i] = 0; - u->gids = i; - } - if (!g) { - u->gid[0] = pwd->pw_gid; - u->gids = 1; - } - u->uid = pwd->pw_uid; - return 1; -} |