[1/1] setregid: Fallback to `nogroup' group
diff mbox series

Message ID 20180504082829.10973-1-pvorel@suse.cz
State Accepted
Delegated to: Petr Vorel
Headers show
Series
  • [1/1] setregid: Fallback to `nogroup' group
Related show

Commit Message

Petr Vorel May 4, 2018, 8:28 a.m. UTC
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.

Signed-off-by: Petr Vorel <pvorel@suse.cz>
Reported-by: Cyril Hrubis <chrubis@suse.cz>
---
 testcases/kernel/syscalls/setregid/setregid03.c | 15 ++++++++++++++-
 testcases/kernel/syscalls/setregid/setregid04.c | 11 ++++++++++-
 2 files changed, 24 insertions(+), 2 deletions(-)

Comments

Cyril Hrubis May 4, 2018, 2:53 p.m. UTC | #1
Hi!
> -	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);

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 :-).
Petr Vorel May 4, 2018, 2:58 p.m. UTC | #2
Hi,

> Hi!
> > -	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);

> 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 :-).
Agree, these tests needs to be rewritten + cleanup + remove duplicity.
Right, I'll do it :).
Thanks for ack.

Kind regards,
Petr
Petr Vorel May 4, 2018, 3:02 p.m. UTC | #3
Hi,

> > -	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);

> 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 :-).

Pushed.


Kind regards,
Petr

Patch
diff mbox series

diff --git a/testcases/kernel/syscalls/setregid/setregid03.c b/testcases/kernel/syscalls/setregid/setregid03.c
index 97102e0ee..a4caf238d 100644
--- a/testcases/kernel/syscalls/setregid/setregid03.c
+++ b/testcases/kernel/syscalls/setregid/setregid03.c
@@ -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);
 
diff --git a/testcases/kernel/syscalls/setregid/setregid04.c b/testcases/kernel/syscalls/setregid/setregid04.c
index 73f8bcb03..bf744ff05 100644
--- a/testcases/kernel/syscalls/setregid/setregid04.c
+++ b/testcases/kernel/syscalls/setregid/setregid04.c
@@ -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);