From 7dbd38dbc939d3ae12ca8e969f6510c4acf201b6 Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Mon, 8 Dec 2014 19:13:00 +0300 Subject: [PATCH] zdtm: set additional groups along with uids and gids Currently zdtm doesn't set additional groups when running tests. It sets uids and gids to some non-root values, but additional groups remain untouched, which allows tests to inherit groups list, which leads to different behaviour depending on a way you run tests. Signed-off-by: Ruslan Kuprieiev Acked-by: Andrew Vagin Signed-off-by: Pavel Emelyanov --- test/zdtm.sh | 2 ++ test/zdtm/lib/test.c | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) 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");