diff options
author | Elliott Hughes <enh@google.com> | 2019-11-04 21:24:42 -0800 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2019-11-05 19:20:52 -0600 |
commit | e6aac70496c05aed73c7c5ed881172ab5e23209b (patch) | |
tree | 8e13ac24ad26d7390acf705fdf57338282eae3cd | |
parent | e1ea687636435f9b8e2725671b96740fedf5347a (diff) | |
download | toybox-e6aac70496c05aed73c7c5ed881172ab5e23209b.tar.gz |
id: fix Android issues.
glibc doesn't set errno when getpw* fails, so the perror_exit() looked
fine. bionic sets ENOENT and the trailing "No such file or directory"
looks silly, so switch to error_exit().
Additionally, the default format tests fail on Android because of
SELinux (but for a different reason than usual!). There's no id
--no-context flag, so use sed to just throw away any SELinux context.
-rwxr-xr-x | tests/id.test | 8 | ||||
-rw-r--r-- | toys/posix/id.c | 2 |
2 files changed, 6 insertions, 4 deletions
diff --git a/tests/id.test b/tests/id.test index 05c5378c..32f26191 100755 --- a/tests/id.test +++ b/tests/id.test @@ -4,8 +4,10 @@ #testing "name" "command" "result" "infile" "stdin" -testing "id 0" "id 0" "uid=0(root) gid=0(root) groups=0(root)\n" "" "" -testing "id root" "id root" "uid=0(root) gid=0(root) groups=0(root)\n" "" "" +testing "id 0" "id 0 | sed 's/ context=.*//g'" \ + "uid=0(root) gid=0(root) groups=0(root)\n" "" "" +testing "id root" "id root | sed 's/ context=.*//g'" \ + "uid=0(root) gid=0(root) groups=0(root)\n" "" "" testing "id -G root" "id -G root" "0\n" "" "" testing "id -nG root" "id -nG root" "root\n" "" "" testing "id -g root" "id -g root" "0\n" "" "" @@ -13,4 +15,4 @@ testing "id -ng root" "id -ng root" "root\n" "" "" testing "id -u root" "id -u root" "0\n" "" "" testing "id -nu root" "id -nu root" "root\n" "" "" testing "id no-such-user" "id no-such-user 2>/dev/null ; echo \$?" "1\n" "" "" -testing "id 9999999" "id 9999999 2>/dev/null ; echo \$?" "1\n" "" "" +testing "id 2147483647" "id 2147483647 2>/dev/null ; echo \$?" "1\n" "" "" diff --git a/toys/posix/id.c b/toys/posix/id.c index ac29990b..6f71891b 100644 --- a/toys/posix/id.c +++ b/toys/posix/id.c @@ -98,7 +98,7 @@ static void do_id(char *username) uid = atolx_range(username, 0, INT_MAX); if ((pw = getpwuid(uid))) username = pw->pw_name; } - if (!pw) perror_exit("no such user '%s'", username); + if (!pw) error_exit("no such user '%s'", username); uid = euid = pw->pw_uid; gid = egid = pw->pw_gid; if (TT.is_groups) printf("%s : ", pw->pw_name); |