diff --git a/test/zdtm.sh b/test/zdtm.sh index aacdc7172..7f3ef542c 100755 --- a/test/zdtm.sh +++ b/test/zdtm.sh @@ -475,10 +475,12 @@ start_test() unset ZDTM_UID unset ZDTM_GID + unset ZDTM_GROUPS if ! echo $TEST_SUID_LIST | grep -q $tname; then export ZDTM_UID=18943 export ZDTM_GID=58467 + export ZDTM_GROUPS="27495 48244" chmod a+w $tdir fi diff --git a/test/zdtm/lib/test.c b/test/zdtm/lib/test.c index 5d2a05d43..60b67d8ef 100644 --- a/test/zdtm/lib/test.c +++ b/test/zdtm/lib/test.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "zdtmtst.h" #include "lock.h" @@ -120,6 +121,24 @@ void test_init(int argc, char **argv) /* "3" -- run the test */ } + val = getenv("ZDTM_GROUPS"); + if (val) { + char *tok = NULL; + unsigned int size = 0, groups[NGROUPS_MAX]; + + tok = strtok(val, " "); + while (tok) { + size++; + groups[size - 1] = atoi(tok); + tok = strtok(NULL, " "); + } + + if (setgroups(size, groups)) { + fprintf(stderr, "Can't set groups: %m"); + exit(1); + } + } + val = getenv("ZDTM_GID"); if (val && (setgid(atoi(val)) == -1)) { fprintf(stderr, "Can't set gid: %m");