logo

utils

~/.local/bin tools and git-hooks git clone https://hacktivis.me/git/utils.git
commit: ef80524385258d796a09700e181ea60292a29b96
parent bd6c19ef913c397e39e091e201c0cef65f0e20bf
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Sat, 12 Mar 2022 03:58:24 +0100

test-bin/id: Add test case for missing /etc/group

Diffstat:

Mbin/id.c14+++++++++-----
Mtest-bin/id25+++++++++++++++++++++++++
2 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/bin/id.c b/bin/id.c @@ -87,7 +87,7 @@ list_groups(struct passwd *pw) // getgrouplist(3) BSD extension might not be in all Unixes int grls = getgrouplist(pw->pw_name, pw->pw_gid, groups, &ngroups); - if(grls >= 0) + if(grls > 0) { printf(" groups="); @@ -338,7 +338,7 @@ main(int argc, char *argv[]) ret = print_uid(" euid", epw, euid); if(ret < 0) { - return 1; + goto failure; } } @@ -347,7 +347,7 @@ main(int argc, char *argv[]) ret = print_gid(" gid", gr, gid); if(ret < 0) { - return 1; + goto failure; } struct group *egr = getgrgid(egid); @@ -357,7 +357,7 @@ main(int argc, char *argv[]) if(ret < 0) { - return 1; + goto failure; } } @@ -365,7 +365,7 @@ main(int argc, char *argv[]) { if(list_groups(pw) != 0) { - return 1; + goto failure; } } @@ -376,4 +376,8 @@ main(int argc, char *argv[]) } return 0; + +failure: + printf("\n"); + return 1; } diff --git a/test-bin/id b/test-bin/id @@ -79,6 +79,30 @@ noetc_body() { atf_check -o "inline:$(id -gr)\n" -- bwrap ${bwrap_args} ../bin/id -gr } +atf_test_case nogroup +nogroup_body() { + bwrap_args="--bind / / --bind /dev/null /etc/group" + + command -v bwrap >/dev/null 2>/dev/null || atf_skip "'bwrap' command not found" + + set -f + + # shellcheck disable=SC2086 + atf_check -o "inline:uid=$(id -u)($(id -un)) gid=$(id -g) groups=$(id -g)\n" -- bwrap ${bwrap_args} ../bin/id + # shellcheck disable=SC2086 + atf_check -o "inline:uid=$(id -ur)($(id -unr)) gid=$(id -gr) groups=$(id -gr)\n" -- bwrap ${bwrap_args} ../bin/id + + # shellcheck disable=SC2086 + atf_check -s exit:1 -o "inline:uid=$(id -un)\n" -- bwrap ${bwrap_args} ../bin/id -n + # shellcheck disable=SC2086 + atf_check -s exit:1 -o "inline:uid=$(id -unr)\n" -- bwrap ${bwrap_args} ../bin/id -nr + + # shellcheck disable=SC2086 + atf_check -o "inline:$(id -g)\n" -- bwrap ${bwrap_args} ../bin/id -g + # shellcheck disable=SC2086 + atf_check -o "inline:$(id -gr)\n" -- bwrap ${bwrap_args} ../bin/id -gr +} + atf_init_test_cases() { cd "$(atf_get_srcdir)" || exit 1 @@ -93,4 +117,5 @@ atf_init_test_cases() { atf_add_test_case groups atf_add_test_case noetc + atf_add_test_case nogroup }