setregid: Fallback to `nogroup' group
PATCH 1/1 setregid: Fallback to `nogroup' group
if group `nobody' does not exist
This is at least on default installation of Debian 9.
--- testcases/kernel/syscalls/setregid/setregid03.c | 15 ++++++++++++++- testcases/kernel/syscalls/setregid/setregid04.c | 11 ++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-)
testcases/kernel/syscalls/setregid/setregid03.c +14 -1
@@ -195,7 +195,20 @@ static void setup(void) group ## _gr = *(junk); \ } while (0) -GET_GID (nobody); +#define GET_GID_FALLBACK (group, group2) do { \ + junk = getgrnam(#group); \ + if (junk == NULL) { \ + tst_resm(TINFO, "%s not found, trying fallback %s", #group, #group2); \ + junk = getgrnam(#group2); \ + if (junk == NULL) { \ + tst_brkm(TBROK, NULL, "%s or %s must be a valid group", #group, #group2); \ + } \ + } \ + GID16_CHECK(junk->gr_gid, setregid, NULL); \ + group ## _gr = *(junk); \ +} while (0) + +GET_GID_FALLBACK (nobody, nogroup);GET_GID (daemon);GET_GID (bin);
testcases/kernel/syscalls/setregid/setregid04.c +10 -1
@@ -116,6 +116,15 @@ int main(int ac, char **av) } \ GROUPNAME ## _gr = *(getgrnam(#GROUPNAME)); +#define SAFE_GETGROUP_FALLBACK (GROUPNAME ,GROUPNAME2 ) \ + if (getgrnam(#GROUPNAME) != NULL) \ + GROUPNAME ## _gr = *(getgrnam(#GROUPNAME)); \ + else if (getgrnam(#GROUPNAME2) != NULL) { \ + GROUPNAME ## _gr = *(getgrnam(#GROUPNAME2)); \ + tst_resm(TINFO, "`" #GROUPNAME "' group not found, trying fallback `" #GROUPNAME2 "' group"); \ + } else \ + tst_brkm(TBROK, NULL, "Couldn't find neither`" #GROUPNAME "' `" #GROUPNAME2 "' nor group"); +static void setup (void ) {tst_require_root ();
@@ -123,7 +132,7 @@ static void setup(void)tst_sig (FORK ,DEF_HANDLER , cleanup);SAFE_GETGROUP (root); -SAFE_GETGROUP (nobody); +SAFE_GETGROUP_FALLBACK (nobody, nogroup);SAFE_GETGROUP (daemon);SAFE_GETGROUP (bin);
Signature · 1 line
2.16.3
PATCH 1/1 setregid: Fallback to `nogroup' group
Hi!
Quoted 5 lines
testcases/kernel/syscalls/setregid/setregid03.c +4
-1-GET_GID (nobody); +#define GET_GID_FALLBACK (group, group2) do { \ + junk = getgrnam(#group); \ + if (junk == NULL) { \ + tst_resm(TINFO, "%s not found, trying fallback %s", #group, #group2); \
testcases/kernel/syscalls/setregid/setregid03.c static void setup(void) · line 211
Quoted 10 lines
testcases/kernel/syscalls/setregid/setregid03.c +10
-0+ junk = getgrnam(#group2); \ + if (junk == NULL) { \ + tst_brkm(TBROK, NULL, "%s or %s must be a valid group", #group, #group2); \ + } \ + } \ + GID16_CHECK(junk->gr_gid, setregid, NULL); \ + group ## _gr = *(junk); \ +} while (0) + +GET_GID_FALLBACK (nobody, nogroup);
Uh this macros are ugly, but then the original is is ugly as well.
So let's get this in for the release to keep the amount of changes minimal if you promise to clean it up after the release is finalized :-).
Signature · 2 lines
Cyril Hrubis [email protected]
PATCH 1/1 setregid: Fallback to `nogroup' group
Hi,
Quoted 19 lines
Hi!
Quoted 5 lines
testcases/kernel/syscalls/setregid/setregid03.c +4
-1-GET_GID (nobody); +#define GET_GID_FALLBACK (group, group2) do { \ + junk = getgrnam(#group); \ + if (junk == NULL) { \ + tst_resm(TINFO, "%s not found, trying fallback %s", #group, #group2); \testcases/kernel/syscalls/setregid/setregid03.c static void setup(void) · line 211
Quoted 10 lines
testcases/kernel/syscalls/setregid/setregid03.c +10
-0+ junk = getgrnam(#group2); \ + if (junk == NULL) { \ + tst_brkm(TBROK, NULL, "%s or %s must be a valid group", #group, #group2); \ + } \ + } \ + GID16_CHECK(junk->gr_gid, setregid, NULL); \ + group ## _gr = *(junk); \ +} while (0) + +GET_GID_FALLBACK (nobody, nogroup);Uh this macros are ugly, but then the original is is ugly as well.
Quoted 2 lines
So let's get this in for the release to keep the amount of changes minimal if you promise to clean it up after the release is finalized :-).
Agree, these tests needs to be rewritten + cleanup + remove duplicity. Right, I'll do it :).
Thanks for ack.
Kind regards,
Petr
PATCH 1/1 setregid: Fallback to `nogroup' group
In reply to Cyril HrubisHi,
Quoted 18 lines
Quoted 5 lines
testcases/kernel/syscalls/setregid/setregid03.c +4
-1-GET_GID (nobody); +#define GET_GID_FALLBACK (group, group2) do { \ + junk = getgrnam(#group); \ + if (junk == NULL) { \ + tst_resm(TINFO, "%s not found, trying fallback %s", #group, #group2); \testcases/kernel/syscalls/setregid/setregid03.c static void setup(void) · line 211
Quoted 10 lines
testcases/kernel/syscalls/setregid/setregid03.c +10
-0+ junk = getgrnam(#group2); \ + if (junk == NULL) { \ + tst_brkm(TBROK, NULL, "%s or %s must be a valid group", #group, #group2); \ + } \ + } \ + GID16_CHECK(junk->gr_gid, setregid, NULL); \ + group ## _gr = *(junk); \ +} while (0) + +GET_GID_FALLBACK (nobody, nogroup);Uh this macros are ugly, but then the original is is ugly as well.
Quoted 2 lines
So let's get this in for the release to keep the amount of changes minimal if you promise to clean it up after the release is finalized :-).
Pushed.
Kind regards,
Petr