aboutsummaryrefslogtreecommitdiff
path: root/toys/posix
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2016-08-18 21:33:27 -0500
committerRob Landley <rob@landley.net>2016-08-18 21:33:27 -0500
commit3d64b0cc95c5957e53474c3e50f143c61a057104 (patch)
tree0c32cb7e4d104aa5d3c1f7ee0dcb7ac1f45f3a20 /toys/posix
parent05e1582ec435932a25db21fd3ae71fbf62a4b45d (diff)
downloadtoybox-3d64b0cc95c5957e53474c3e50f143c61a057104.tar.gz
Change xgetpwnamid/xgetgrnamid to xgetuid/xgetgid returning the id number
instead of a struct. This means it can return "12345" even if that user/group doesn't exist in /etc/passwd and similar. All the users were immediately dereferencing it to get pw_uid or gr_gid anyway, so just return it directly and adjust the users. This fixes things like "chown 12345:23456 filename".
Diffstat (limited to 'toys/posix')
-rw-r--r--toys/posix/chgrp.c4
-rw-r--r--toys/posix/cp.c4
-rw-r--r--toys/posix/find.c4
3 files changed, 6 insertions, 6 deletions
diff --git a/toys/posix/chgrp.c b/toys/posix/chgrp.c
index e0690c93..62e9eb1d 100644
--- a/toys/posix/chgrp.c
+++ b/toys/posix/chgrp.c
@@ -87,11 +87,11 @@ void chgrp_main(void)
*(grp++) = 0;
TT.group_name = grp;
}
- if (*own) TT.owner = xgetpwnamid(TT.owner_name = own)->pw_uid;
+ if (*own) TT.owner = xgetuid(TT.owner_name = own);
} else TT.group_name = *toys.optargs;
if (TT.group_name && *TT.group_name)
- TT.group = xgetgrnamid(TT.group_name)->gr_gid;
+ TT.group = xgetgid(TT.group_name);
for (s=toys.optargs+1; *s; s++)
dirtree_flagread(*s, DIRTREE_SYMFOLLOW*!!(toys.optflags&(FLAG_H|FLAG_L)),
diff --git a/toys/posix/cp.c b/toys/posix/cp.c
index eafabcd1..0dd63a7d 100644
--- a/toys/posix/cp.c
+++ b/toys/posix/cp.c
@@ -499,8 +499,8 @@ void install_main(void)
if (flags & FLAG_v) toys.optflags |= cp_flag_v();
if (flags & (FLAG_p|FLAG_o|FLAG_g)) toys.optflags |= cp_flag_p();
- if (TT.i.user) TT.uid = xgetpwnamid(TT.i.user)->pw_uid;
- if (TT.i.group) TT.gid = xgetgrnamid(TT.i.group)->gr_gid;
+ if (TT.i.user) TT.uid = xgetuid(TT.i.user);
+ if (TT.i.group) TT.gid = xgetgid(TT.i.group);
TT.callback = install_node;
cp_main();
diff --git a/toys/posix/find.c b/toys/posix/find.c
index 02f7702d..86fc141f 100644
--- a/toys/posix/find.c
+++ b/toys/posix/find.c
@@ -398,8 +398,8 @@ static int do_find(struct dirtree *new)
udl = xmalloc(sizeof(*udl));
dlist_add_nomalloc(&TT.argdata, (void *)udl);
- if (*s == 'u') udl->u.uid = xgetpwnamid(ss[1])->pw_uid;
- else if (*s == 'g') udl->u.gid = xgetgrnamid(ss[1])->gr_gid;
+ if (*s == 'u') udl->u.uid = xgetuid(ss[1]);
+ else if (*s == 'g') udl->u.gid = xgetgid(ss[1]);
else {
struct stat st;