libbb: make parse_chown_usergroup_or_die() set unspecified uid/gid to -1

function                                             old     new   delta
parse_chown_usergroup_or_die                         102     115     +13
chown_main                                           190     175     -15
start_stop_daemon_main                              1043    1027     -16
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/2 up/down: 13/-31)            Total: -18 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2015-10-19 04:37:19 +02:00
parent 526d85831e
commit 3d0805e9e7
3 changed files with 6 additions and 8 deletions

View File

@ -112,10 +112,6 @@ int chown_main(int argc UNUSED_PARAM, char **argv)
int opt, flags; int opt, flags;
struct param_t param; struct param_t param;
/* Just -1 might not work: uid_t may be unsigned long */
param.ugid.uid = -1L;
param.ugid.gid = -1L;
#if ENABLE_FEATURE_CHOWN_LONG_OPTIONS #if ENABLE_FEATURE_CHOWN_LONG_OPTIONS
applet_long_options = chown_longopts; applet_long_options = chown_longopts;
#endif #endif

View File

@ -539,15 +539,15 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv)
write_pidfile(pidfile); write_pidfile(pidfile);
} }
if (opt & OPT_c) { if (opt & OPT_c) {
struct bb_uidgid_t ugid = { -1, -1 }; struct bb_uidgid_t ugid;
parse_chown_usergroup_or_die(&ugid, chuid); parse_chown_usergroup_or_die(&ugid, chuid);
if (ugid.uid != (uid_t) -1) { if (ugid.uid != (uid_t) -1L) {
struct passwd *pw = xgetpwuid(ugid.uid); struct passwd *pw = xgetpwuid(ugid.uid);
if (ugid.gid != (gid_t) -1) if (ugid.gid != (gid_t) -1L)
pw->pw_gid = ugid.gid; pw->pw_gid = ugid.gid;
/* initgroups, setgid, setuid: */ /* initgroups, setgid, setuid: */
change_identity(pw); change_identity(pw);
} else if (ugid.gid != (gid_t) -1) { } else if (ugid.gid != (gid_t) -1L) {
xsetgid(ugid.gid); xsetgid(ugid.gid);
setgroups(1, &ugid.gid); setgroups(1, &ugid.gid);
} }

View File

@ -90,6 +90,8 @@ void FAST_FUNC parse_chown_usergroup_or_die(struct bb_uidgid_t *u, char *user_gr
{ {
char *group; char *group;
u->uid = u->gid = (gid_t)-1L;
/* Check if there is a group name */ /* Check if there is a group name */
group = strchr(user_group, '.'); /* deprecated? */ group = strchr(user_group, '.'); /* deprecated? */
if (!group) if (!group)