Skip to contentSkip to conversation

setregid: Fallback to `nogroup' group

PATCH New Petr Vorel 2 participants 4 messages May 4, 2018

lore
Share & tools
lore

Petr Vorel

author
#0 lore raw

PATCH 1/1 setregid: Fallback to `nogroup' group

if group `nobody' does not exist

This is at least on default installation of Debian 9.

Fixes 1b7cf9474 setregid: use common user and group names.
---
 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
index 97102e0ee..a4caf238d 100644
@@ -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
index 73f8bcb03..bf744ff05 100644
@@ -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
#1 lore raw

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]
author
#2 lore raw

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

author
#3 lore raw

PATCH 1/1 setregid: Fallback to `nogroup' group

In reply to Cyril Hrubis

Hi,

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