diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-12-28 05:44:47 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-12-28 05:44:47 +0000 |
commit | 9a44c4f91ce7e517d5325fd3743e6ad9d54ef3f0 (patch) | |
tree | 34292ef12cab59b118e91a6c58844ae25f1bee94 | |
parent | ba092336f00644c1233735bae4b81382309955d8 (diff) | |
download | busybox-9a44c4f91ce7e517d5325fd3743e6ad9d54ef3f0.tar.gz |
bb_xget[pw/gr]nam were horribly misnamed - fixed.
uidgid_get -> get_uidgid, add additional param
(numeric_ok). Make chown use it.
chown: fix "chown user: ...."
install: fix incorrect use of bb_xget[pw/gr]nam
-rw-r--r-- | archival/rpm.c | 4 | ||||
-rw-r--r-- | coreutils/chown.c | 28 | ||||
-rw-r--r-- | coreutils/id.c | 4 | ||||
-rw-r--r-- | coreutils/install.c | 82 | ||||
-rw-r--r-- | debianutils/start_stop_daemon.c | 4 | ||||
-rw-r--r-- | e2fsprogs/old_e2fsprogs/tune2fs.c | 4 | ||||
-rw-r--r-- | include/libbb.h | 18 | ||||
-rw-r--r-- | libbb/bb_pwd.c | 127 | ||||
-rw-r--r-- | libpwdgrp/uidgid_get.c | 55 | ||||
-rw-r--r-- | loginutils/adduser.c | 4 | ||||
-rw-r--r-- | miscutils/makedevs.c | 4 | ||||
-rw-r--r-- | runit/chpst.c | 4 |
12 files changed, 186 insertions, 152 deletions
diff --git a/archival/rpm.c b/archival/rpm.c index c0a1deee2..deb87c180 100644 --- a/archival/rpm.c +++ b/archival/rpm.c @@ -348,8 +348,8 @@ static void fileaction_dobackup(char *filename, int fileref) static void fileaction_setowngrp(char *filename, int fileref) { int uid, gid; - uid = bb_xgetpwnam(rpm_getstr(TAG_FILEUSERNAME, fileref)); - gid = bb_xgetgrnam(rpm_getstr(TAG_FILEGROUPNAME, fileref)); + uid = xuname2uid(rpm_getstr(TAG_FILEUSERNAME, fileref)); + gid = xgroup2gid(rpm_getstr(TAG_FILEGROUPNAME, fileref)); chown(filename, uid, gid); } diff --git a/coreutils/chown.c b/coreutils/chown.c index fddce7cf1..a45348a24 100644 --- a/coreutils/chown.c +++ b/coreutils/chown.c @@ -54,32 +54,38 @@ static int fileAction(const char *fileName, struct stat *statbuf, int chown_main(int argc, char **argv) { - int retval = EXIT_SUCCESS; char *groupName; + int retval = EXIT_SUCCESS; opt_complementary = "-2"; getopt32(argc, argv, OPT_STR); + argv += optind; if (OPT_NODEREF) chown_func = lchown; - argv += optind; - /* First, check if there is a group name here */ - groupName = strchr(*argv, '.'); + groupName = strchr(*argv, '.'); /* deprecated? */ if (!groupName) { groupName = strchr(*argv, ':'); } - /* Check for the username and groupname */ - if (groupName) { - *groupName++ = '\0'; - gid = get_ug_id(groupName, bb_xgetgrnam); + /* First, try parsing "user[:[group]]" */ + if (!groupName) { /* "user" */ + uid = get_ug_id(*argv, xuname2uid); + } else if (groupName == *argv) { /* ":group" */ + gid = get_ug_id(groupName + 1, xgroup2gid); + } else { + struct bb_uidgid_t ugid; + if (!groupName[1]) /* "user:" */ + *groupName = '\0'; + if (!get_uidgid(&ugid, *argv, 1)) + bb_error_msg_and_die("unknown user/group %s", *argv); + uid = ugid.uid; + gid = ugid.gid; } - if (--groupName != *argv) - uid = get_ug_id(*argv, bb_xgetpwnam); - ++argv; /* Ok, ready to do the deed now */ + argv++; do { if (!recursive_action(*argv, OPT_RECURSE, // recurse diff --git a/coreutils/id.c b/coreutils/id.c index 66874a71e..35f945dba 100644 --- a/coreutils/id.c +++ b/coreutils/id.c @@ -62,8 +62,8 @@ int id_main(int argc, char **argv) if (argv[optind]) { p = getpwnam(argv[optind]); - /* bb_xgetpwnam is needed because it exits on failure */ - uid = bb_xgetpwnam(argv[optind]); + /* xuname2uid is needed because it exits on failure */ + uid = xuname2uid(argv[optind]); gid = p->pw_gid; /* in this case PRINT_REAL is the same */ } diff --git a/coreutils/install.c b/coreutils/install.c index 3e003905e..aa7e8bf2b 100644 --- a/coreutils/install.c +++ b/coreutils/install.c @@ -13,58 +13,62 @@ #include <libgen.h> #include <getopt.h> /* struct option */ -#define INSTALL_OPT_CMD 1 -#define INSTALL_OPT_DIRECTORY 2 -#define INSTALL_OPT_PRESERVE_TIME 4 -#define INSTALL_OPT_STRIP 8 -#define INSTALL_OPT_GROUP 16 -#define INSTALL_OPT_MODE 32 -#define INSTALL_OPT_OWNER 64 - #if ENABLE_FEATURE_INSTALL_LONG_OPTIONS static const struct option install_long_options[] = { - { "directory", 0, NULL, 'd' }, - { "preserve-timestamps", 0, NULL, 'p' }, - { "strip", 0, NULL, 's' }, - { "group", 0, NULL, 'g' }, - { "mode", 0, NULL, 'm' }, - { "owner", 0, NULL, 'o' }, - { 0, 0, 0, 0 } + { "directory", 0, NULL, 'd' }, + { "preserve-timestamps", 0, NULL, 'p' }, + { "strip", 0, NULL, 's' }, + { "group", 0, NULL, 'g' }, + { "mode", 0, NULL, 'm' }, + { "owner", 0, NULL, 'o' }, + { 0, 0, 0, 0 } }; #endif int install_main(int argc, char **argv) { + struct stat statbuf; mode_t mode; uid_t uid; gid_t gid; - char *gid_str = "-1"; - char *uid_str = "-1"; - char *mode_str = "0755"; + const char *gid_str; + const char *uid_str; + const char *mode_str; int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE; int ret = EXIT_SUCCESS, flags, i, isdir; + enum { + OPT_CMD = 0x1, + OPT_DIRECTORY = 0x2, + OPT_PRESERVE_TIME = 0x4, + OPT_STRIP = 0x8, + OPT_GROUP = 0x10, + OPT_MODE = 0x20, + OPT_OWNER = 0x40, + }; + #if ENABLE_FEATURE_INSTALL_LONG_OPTIONS applet_long_options = install_long_options; #endif opt_complementary = "?:s--d:d--s"; /* -c exists for backwards compatibility, its needed */ - flags = getopt32(argc, argv, "cdpsg:m:o:", &gid_str, &mode_str, &uid_str); /* 'a' must be 2nd */ + flags = getopt32(argc, argv, "cdpsg:m:o:", &gid_str, &mode_str, &uid_str); /* preserve access and modification time, this is GNU behaviour, BSD only preserves modification time */ - if (flags & INSTALL_OPT_PRESERVE_TIME) { + if (flags & OPT_PRESERVE_TIME) { copy_flags |= FILEUTILS_PRESERVE_STATUS; } - bb_parse_mode(mode_str, &mode); - gid = get_ug_id(gid_str, bb_xgetgrnam); - uid = get_ug_id(uid_str, bb_xgetpwnam); - umask(0); + mode = 0666; + if (flags & OPT_MODE) bb_parse_mode(mode_str, &mode); + uid = (flags & OPT_OWNER) ? get_ug_id(uid_str, xuname2uid) : getuid(); + gid = (flags & OPT_GROUP) ? get_ug_id(gid_str, xgroup2gid) : getgid(); + if (flags & (OPT_OWNER|OPT_GROUP)) umask(0); /* Create directories * don't use bb_make_directory() as it can't change uid or gid * perhaps bb_make_directory() should be improved. */ - if (flags & INSTALL_OPT_DIRECTORY) { + if (flags & OPT_DIRECTORY) { for (argv += optind; *argv; argv++) { char *old_argv_ptr = *argv + 1; char *argv_ptr; @@ -75,14 +79,16 @@ int install_main(int argc, char **argv) *argv_ptr = '\0'; old_argv_ptr++; } - if (mkdir(*argv, mode) == -1) { + if (mkdir(*argv, mode | 0111) == -1) { if (errno != EEXIST) { bb_perror_msg("cannot create %s", *argv); ret = EXIT_FAILURE; break; } } - else if (lchown(*argv, uid, gid) == -1) { + if ((flags & (OPT_OWNER|OPT_GROUP)) + && lchown(*argv, uid, gid) == -1 + ) { bb_perror_msg("cannot change ownership of %s", *argv); ret = EXIT_FAILURE; break; @@ -95,36 +101,36 @@ int install_main(int argc, char **argv) return ret; } - { - struct stat statbuf; - isdir = lstat(argv[argc - 1], &statbuf)<0 - ? 0 : S_ISDIR(statbuf.st_mode); - } + isdir = lstat(argv[argc - 1], &statbuf) < 0 ? 0 : S_ISDIR(statbuf.st_mode); + for (i = optind; i < argc - 1; i++) { char *dest; dest = argv[argc - 1]; - if (isdir) dest = concat_path_file(argv[argc - 1], basename(argv[i])); + if (isdir) + dest = concat_path_file(argv[argc - 1], basename(argv[i])); ret |= copy_file(argv[i], dest, copy_flags); /* Set the file mode */ - if (chmod(dest, mode) == -1) { + if ((flags & OPT_MODE) && chmod(dest, mode) == -1) { bb_perror_msg("cannot change permissions of %s", dest); ret = EXIT_FAILURE; } /* Set the user and group id */ - if (lchown(dest, uid, gid) == -1) { + if ((flags & (OPT_OWNER|OPT_GROUP)) + && lchown(dest, uid, gid) == -1 + ) { bb_perror_msg("cannot change ownership of %s", dest); ret = EXIT_FAILURE; } - if (flags & INSTALL_OPT_STRIP) { + if (flags & OPT_STRIP) { if (execlp("strip", "strip", dest, NULL) == -1) { - bb_error_msg("strip failed"); + bb_perror_msg("strip"); ret = EXIT_FAILURE; } } - if(ENABLE_FEATURE_CLEAN_UP && isdir) free(dest); + if (ENABLE_FEATURE_CLEAN_UP && isdir) free(dest); } return ret; diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c index d1f5e94c0..521b43d04 100644 --- a/debianutils/start_stop_daemon.c +++ b/debianutils/start_stop_daemon.c @@ -274,7 +274,7 @@ int start_stop_daemon_main(int argc, char **argv) if (userspec) { user_id = bb_strtou(userspec, NULL, 10); if (errno) - user_id = bb_xgetpwnam(userspec); + user_id = xuname2uid(userspec); } if (opt & CTX_STOP) { @@ -305,7 +305,7 @@ int start_stop_daemon_main(int argc, char **argv) if (chuid) { user_id = bb_strtou(chuid, NULL, 10); if (errno) - user_id = bb_xgetpwnam(chuid); + user_id = xuname2uid(chuid); xsetuid(user_id); } #if ENABLE_FEATURE_START_STOP_DAEMON_FANCY diff --git a/e2fsprogs/old_e2fsprogs/tune2fs.c b/e2fsprogs/old_e2fsprogs/tune2fs.c index a2ca1ba09..c4e084ecd 100644 --- a/e2fsprogs/old_e2fsprogs/tune2fs.c +++ b/e2fsprogs/old_e2fsprogs/tune2fs.c @@ -441,7 +441,7 @@ static void parse_tune2fs_options(int argc, char **argv) case 'g': resgid = bb_strtoul(optarg, NULL, 10); if (errno) - resgid = bb_xgetgrnam(optarg); + resgid = xgroup2gid(optarg); g_flag = 1; open_flag = EXT2_FLAG_RW; break; @@ -535,7 +535,7 @@ static void parse_tune2fs_options(int argc, char **argv) case 'u': resuid = bb_strtoul(optarg, NULL, 10); if (errno) - resuid = bb_xgetpwnam(optarg); + resuid = xuname2uid(optarg); u_flag = 1; open_flag = EXT2_FLAG_RW; break; diff --git a/include/libbb.h b/include/libbb.h index a2b9a82b2..ece1c9d91 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -338,17 +338,20 @@ uint16_t xatou16(const char *numstr); /* These parse entries in /etc/passwd and /etc/group. This is desirable * for BusyBox since we want to avoid using the glibc NSS stuff, which * increases target size and is often not needed on embedded systems. */ -extern long bb_xgetpwnam(const char *name); -extern long bb_xgetgrnam(const char *name); -/*extern char *bb_getug(char *buffer, char *idname, long id, int bufsize, char prefix);*/ -extern char *bb_getpwuid(char *name, long uid, int bufsize); -extern char *bb_getgrgid(char *group, long gid, int bufsize); -/* from chpst */ +extern long xuname2uid(const char *name); +extern long xgroup2gid(const char *name); +/* wrapper: allows string to contain numeric uid or gid */ +extern unsigned long get_ug_id(const char *s, long (*xname2id)(const char *)); +/* from chpst. Does not die, returns 0 on failure */ struct bb_uidgid_t { uid_t uid; gid_t gid; }; -extern unsigned uidgid_get(struct bb_uidgid_t*, const char* /*, unsigned*/); +extern int get_uidgid(struct bb_uidgid_t*, const char*, int numeric_ok); +/* what is this? */ +/*extern char *bb_getug(char *buffer, char *idname, long id, int bufsize, char prefix);*/ +extern char *bb_getpwuid(char *name, long uid, int bufsize); +extern char *bb_getgrgid(char *group, long gid, int bufsize); enum { BB_GETOPT_ERROR = 0x80000000 }; @@ -484,7 +487,6 @@ extern void vfork_daemon_rexec(int nochdir, int noclose, int argc, char **argv, char *foreground_opt); #endif extern int get_terminal_width_height(int fd, int *width, int *height); -extern unsigned long get_ug_id(const char *s, long (*__bb_getxxnam)(const char *)); int is_in_ino_dev_hashtable(const struct stat *statbuf, char **name); void add_to_ino_dev_hashtable(const struct stat *statbuf, const char *name); diff --git a/libbb/bb_pwd.c b/libbb/bb_pwd.c index b5125b0f4..223a6b44c 100644 --- a/libbb/bb_pwd.c +++ b/libbb/bb_pwd.c @@ -7,31 +7,30 @@ * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. */ -#include <stdio.h> -#include <string.h> -#include <assert.h> #include "libbb.h" - /* - * if bufsize is > 0 char *buffer cannot be set to NULL. - * If idname is not NULL it is written on the static - * allocated buffer (and a pointer to it is returned). - * if idname is NULL, id as string is written to the static - * allocated buffer and NULL is returned. - * if bufsize is = 0 char *buffer can be set to NULL. - * If idname exists a pointer to it is returned, - * else NULL is returned. - * if bufsize is < 0 char *buffer can be set to NULL. - * If idname exists a pointer to it is returned, - * else an error message is printed and the program exits. - */ +#define assert(x) ((void)0) + +/* + * if bufsize is > 0 char *buffer cannot be set to NULL. + * If idname is not NULL it is written on the static + * allocated buffer (and a pointer to it is returned). + * if idname is NULL, id as string is written to the static + * allocated buffer and NULL is returned. + * if bufsize is = 0 char *buffer can be set to NULL. + * If idname exists a pointer to it is returned, + * else NULL is returned. + * if bufsize is < 0 char *buffer can be set to NULL. + * If idname exists a pointer to it is returned, + * else an error message is printed and the program exits. + */ /* internal function for bb_getpwuid and bb_getgrgid */ -static char * bb_getug(char *buffer, char *idname, long id, int bufsize, char prefix) +static char* bb_getug(char *buffer, char *idname, long id, int bufsize, char prefix) { if (bufsize > 0 ) { - assert(buffer!=NULL); - if(idname) { + assert(buffer != NULL); + if (idname) { return safe_strncpy(buffer, idname, bufsize); } snprintf(buffer, bufsize, "%ld", id); @@ -41,75 +40,76 @@ static char * bb_getug(char *buffer, char *idname, long id, int bufsize, char pr return idname; } - /* Hacked by Tito Ragusa (c) 2004 <farmatito@tiscali.it> to make it more - * flexible : - * - * if bufsize is > 0 char *group cannot be set to NULL. - * On success groupname is written on static allocated buffer - * group (and a pointer to it is returned). - * On failure gid as string is written to static allocated - * buffer group and NULL is returned. - * if bufsize is = 0 char *group can be set to NULL. - * On success groupname is returned. - * On failure NULL is returned. - * if bufsize is < 0 char *group can be set to NULL. - * On success groupname is returned. - * On failure an error message is printed and - * the program exits. - */ +/* Hacked by Tito Ragusa (c) 2004 <farmatito@tiscali.it> to make it more + * flexible : + * + * if bufsize is > 0 char *group cannot be set to NULL. + * On success groupname is written on static allocated buffer + * group (and a pointer to it is returned). + * On failure gid as string is written to static allocated + * buffer group and NULL is returned. + * if bufsize is = 0 char *group can be set to NULL. + * On success groupname is returned. + * On failure NULL is returned. + * if bufsize is < 0 char *group can be set to NULL. + * On success groupname is returned. + * On failure an error message is printed and + * the program exits. + */ /* gets a groupname given a gid */ -char * bb_getgrgid(char *group, long gid, int bufsize) +char* bb_getgrgid(char *group, long gid, int bufsize) { struct group *mygroup = getgrgid(gid); - return bb_getug(group, (mygroup) ? - mygroup->gr_name : (char *)mygroup, gid, bufsize, 'g'); + return bb_getug(group, + mygroup ? mygroup->gr_name : (char *)mygroup, + gid, bufsize, 'g'); } /* returns a gid given a group name */ -long bb_xgetgrnam(const char *name) +long xgroup2gid(const char *name) { struct group *mygroup; - mygroup = getgrnam(name); - if (mygroup==NULL) + mygroup = getgrnam(name); + if (mygroup == NULL) bb_error_msg_and_die("unknown group name: %s", name); return mygroup->gr_gid; } /* returns a uid given a username */ -long bb_xgetpwnam(const char *name) +long xuname2uid(const char *name) { struct passwd *myuser; - myuser = getpwnam(name); - if (myuser==NULL) + myuser = getpwnam(name); + if (myuser == NULL) bb_error_msg_and_die("unknown user name: %s", name); return myuser->pw_uid; } - /* Hacked by Tito Ragusa (c) 2004 <farmatito@tiscali.it> to make it more - * flexible : - * - * if bufsize is > 0 char *name cannot be set to NULL. - * On success username is written on the static allocated - * buffer name (and a pointer to it is returned). - * On failure uid as string is written to the static - * allocated buffer name and NULL is returned. - * if bufsize is = 0 char *name can be set to NULL. - * On success username is returned. - * On failure NULL is returned. - * if bufsize is < 0 char *name can be set to NULL - * On success username is returned. - * On failure an error message is printed and - * the program exits. - */ +/* Hacked by Tito Ragusa (c) 2004 <farmatito@tiscali.it> to make it more + * flexible : + * + * if bufsize is > 0 char *name cannot be set to NULL. + * On success username is written on the static allocated + * buffer name (and a pointer to it is returned). + * On failure uid as string is written to the static + * allocated buffer name and NULL is returned. + * if bufsize is = 0 char *name can be set to NULL. + * On success username is returned. + * On failure NULL is returned. + * if bufsize is < 0 char *name can be set to NULL + * On success username is returned. + * On failure an error message is printed and + * the program exits. + */ /* gets a username given a uid */ -char * bb_getpwuid(char *name, long uid, int bufsize) +char* bb_getpwuid(char *name, long uid, int bufsize) { struct passwd *myuser = getpwuid(uid); @@ -118,13 +118,12 @@ char * bb_getpwuid(char *name, long uid, int bufsize) } unsigned long get_ug_id(const char *s, - long (*__bb_getxxnam)(const char *)) + long (*xname2id)(const char *)) { unsigned long r; r = bb_strtoul(s, NULL, 10); if (errno) - r = __bb_getxxnam(s); - + return xname2id(s); return r; } diff --git a/libpwdgrp/uidgid_get.c b/libpwdgrp/uidgid_get.c index a2d02a84f..32cbd21b9 100644 --- a/libpwdgrp/uidgid_get.c +++ b/libpwdgrp/uidgid_get.c @@ -1,26 +1,47 @@ #include "busybox.h" -unsigned uidgid_get(struct bb_uidgid_t *u, const char *ug /*, unsigned dogrp */) +int get_uidgid(struct bb_uidgid_t *u, const char *ug, int numeric_ok) { struct passwd *pwd; struct group *gr; - const char *g; + char *user, *group; + unsigned n; - /* 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); + user = (char*)ug; + group = strchr(ug, ':'); + if (group) { + int sz = (++group) - ug; + user = alloca(sz); + /* copies sz-1 bytes, stores terminating '\0' */ + safe_strncpy(user, ug, sz); + } + if (numeric_ok) { + n = bb_strtou(user, NULL, 10); + if (!errno) { + u->uid = n; + pwd = getpwuid(n); + /* If we have e.g. "500" string without user */ + /* with uid 500 in /etc/passwd, we set gid == uid */ + u->gid = pwd ? pwd->pw_gid : n; + goto skip; + } + } + pwd = getpwnam(user); if (!pwd) return 0; u->uid = pwd->pw_uid; u->gid = pwd->pw_gid; - if (g) { - gr = getgrnam(g); + + skip: + if (group) { + if (numeric_ok) { + n = bb_strtou(group, NULL, 10); + if (!errno) { + u->gid = n; + return 1; + } + } + gr = getgrnam(group); if (!gr) return 0; u->gid = gr->gr_gid; } @@ -33,16 +54,16 @@ int main() { unsigned u; struct bb_uidgid_t ug; - u = uidgid_get(&ug, "apache"); + u = get_uidgid(&ug, "apache", 0); printf("%u = %u:%u\n", u, ug.uid, ug.gid); ug.uid = ug.gid = 1111; - u = uidgid_get(&ug, "apache"); + u = get_uidgid(&ug, "apache", 0); printf("%u = %u:%u\n", u, ug.uid, ug.gid); ug.uid = ug.gid = 1111; - u = uidgid_get(&ug, "apache:users"); + u = get_uidgid(&ug, "apache:users", 0); printf("%u = %u:%u\n", u, ug.uid, ug.gid); ug.uid = ug.gid = 1111; - u = uidgid_get(&ug, "apache:users"); + u = get_uidgid(&ug, "apache:users", 0); printf("%u = %u:%u\n", u, ug.uid, ug.gid); return 0; } diff --git a/loginutils/adduser.c b/loginutils/adduser.c index 418d4c785..5766e5de3 100644 --- a/loginutils/adduser.c +++ b/loginutils/adduser.c @@ -157,7 +157,7 @@ static int adduser(struct passwd *p, unsigned long flags) * gecos * * can be customized via command-line parameters. - * ________________________________________________________________________ */ + */ int adduser_main(int argc, char **argv) { struct passwd pw; @@ -187,7 +187,7 @@ int adduser_main(int argc, char **argv) pw.pw_name = argv[optind]; pw.pw_passwd = "x"; pw.pw_uid = 0; - pw.pw_gid = (usegroup) ? bb_xgetgrnam(usegroup) : 0; /* exits on failure */ + pw.pw_gid = usegroup ? xgroup2gid(usegroup) : 0; /* exits on failure */ /* grand finale */ return adduser(&pw, flags); diff --git a/miscutils/makedevs.c b/miscutils/makedevs.c index 3bc1559c7..c25bdadc4 100644 --- a/miscutils/makedevs.c +++ b/miscutils/makedevs.c @@ -127,8 +127,8 @@ int makedevs_main(int argc, char **argv) continue; } - gid = (*group) ? get_ug_id(group, bb_xgetgrnam) : getgid(); - uid = (*user) ? get_ug_id(user, bb_xgetpwnam) : getuid(); + gid = (*group) ? get_ug_id(group, xgroup2gid) : getgid(); + uid = (*user) ? get_ug_id(user, xuname2uid) : getuid(); full_name = concat_path_file(rootdir, name); if (type == 'd') { diff --git a/runit/chpst.c b/runit/chpst.c index f8e63031f..14b8b5a15 100644 --- a/runit/chpst.c +++ b/runit/chpst.c @@ -59,7 +59,7 @@ static void suidgid(char *user) { struct bb_uidgid_t ugid; - if (!uidgid_get(&ugid, user)) { + if (!get_uidgid(&ugid, user, 1)) { bb_error_msg_and_die("unknown user/group: %s", user); } if (setgroups(1, &ugid.gid) == -1) @@ -72,7 +72,7 @@ static void euidgid(char *user) { struct bb_uidgid_t ugid; - if (!uidgid_get(&ugid, user)) { + if (!get_uidgid(&ugid, user, 1)) { bb_error_msg_and_die("unknown user/group: %s", user); } xsetenv("GID", utoa(ugid.gid)); |