* [LTP] [PATCH v2 2/5] tst_safe_macros: add SAFE_GETGRGID()
2018-09-10 14:18 [LTP] [PATCH v2 1/5] setregid01: Convert to newlib Clemens Famulla-Conrad
@ 2018-09-10 14:18 ` Clemens Famulla-Conrad
2018-10-02 14:20 ` Cyril Hrubis
2018-09-10 14:18 ` [LTP] [PATCH v2 3/5] setregid02: Convert to newlib Clemens Famulla-Conrad
` (4 subsequent siblings)
5 siblings, 1 reply; 10+ messages in thread
From: Clemens Famulla-Conrad @ 2018-09-10 14:18 UTC (permalink / raw)
To: ltp
Add tst safe wrapper for getgrgid() function.
Signed-off-by: Clemens Famulla-Conrad <cfamullaconrad@suse.de>
---
include/tst_safe_macros.h | 4 ++++
lib/tst_safe_macros.c | 13 +++++++++++++
2 files changed, 17 insertions(+)
diff --git a/include/tst_safe_macros.h b/include/tst_safe_macros.h
index 03657a410..d457ae92a 100644
--- a/include/tst_safe_macros.h
+++ b/include/tst_safe_macros.h
@@ -441,6 +441,10 @@ struct group *safe_getgrnam(const char *file, const int lineno,
#define SAFE_GETGRNAM(name) \
safe_getgrnam(__FILE__, __LINE__, (name))
+struct group *safe_getgrgid(const char *file, const int lineno, gid_t gid);
+#define SAFE_GETGRGID(gid) \
+ safe_getgrgid(__FILE__, __LINE__, (gid))
+
int safe_setxattr(const char *file, const int lineno, const char *path,
const char *name, const void *value, size_t size, int flags);
#define SAFE_SETXATTR(path, name, value, size, flags) \
diff --git a/lib/tst_safe_macros.c b/lib/tst_safe_macros.c
index 17384f32c..2e041c460 100644
--- a/lib/tst_safe_macros.c
+++ b/lib/tst_safe_macros.c
@@ -153,6 +153,19 @@ struct group *safe_getgrnam(const char *file, const int lineno,
return rval;
}
+struct group *safe_getgrgid(const char *file, const int lineno, gid_t gid)
+{
+ struct group *rval;
+
+ rval = getgrgid(gid);
+ if (rval == NULL) {
+ tst_brk_(file, lineno, TBROK | TERRNO,
+ "getgrgid(%li) failed", (long)gid);
+ }
+
+ return rval;
+}
+
int safe_chroot(const char *file, const int lineno, const char *path)
{
int rval;
--
2.16.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2 2/5] tst_safe_macros: add SAFE_GETGRGID()
2018-09-10 14:18 ` [LTP] [PATCH v2 2/5] tst_safe_macros: add SAFE_GETGRGID() Clemens Famulla-Conrad
@ 2018-10-02 14:20 ` Cyril Hrubis
2018-10-02 23:23 ` Clemens Famulla-Conrad
0 siblings, 1 reply; 10+ messages in thread
From: Cyril Hrubis @ 2018-10-02 14:20 UTC (permalink / raw)
To: ltp
Hi!
> +struct group *safe_getgrgid(const char *file, const int lineno, gid_t gid);
> +#define SAFE_GETGRGID(gid) \
> + safe_getgrgid(__FILE__, __LINE__, (gid))
> +
> int safe_setxattr(const char *file, const int lineno, const char *path,
> const char *name, const void *value, size_t size, int flags);
> #define SAFE_SETXATTR(path, name, value, size, flags) \
> diff --git a/lib/tst_safe_macros.c b/lib/tst_safe_macros.c
> index 17384f32c..2e041c460 100644
> --- a/lib/tst_safe_macros.c
> +++ b/lib/tst_safe_macros.c
> @@ -153,6 +153,19 @@ struct group *safe_getgrnam(const char *file, const int lineno,
> return rval;
> }
>
> +struct group *safe_getgrgid(const char *file, const int lineno, gid_t gid)
> +{
> + struct group *rval;
Looking at manual pages we should zero the errno here, since we print it
in the tst_brk_() in a case of NULL.
> + rval = getgrgid(gid);
> + if (rval == NULL) {
> + tst_brk_(file, lineno, TBROK | TERRNO,
> + "getgrgid(%li) failed", (long)gid);
> + }
I also wonder if it's okay to break the test in case that the entry
wasn't found (the return value would be NULL and errno would be
untouched) but I guess that it's OK for most of the cases.
> + return rval;
> +}
> +
> int safe_chroot(const char *file, const int lineno, const char *path)
> {
> int rval;
> --
> 2.16.4
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2 2/5] tst_safe_macros: add SAFE_GETGRGID()
2018-10-02 14:20 ` Cyril Hrubis
@ 2018-10-02 23:23 ` Clemens Famulla-Conrad
2018-10-03 7:46 ` Cyril Hrubis
0 siblings, 1 reply; 10+ messages in thread
From: Clemens Famulla-Conrad @ 2018-10-02 23:23 UTC (permalink / raw)
To: ltp
Hi,
On 10/2/18 4:20 PM, Cyril Hrubis wrote:
> Hi!
>> +struct group *safe_getgrgid(const char *file, const int lineno, gid_t gid);
>> +#define SAFE_GETGRGID(gid) \
>> + safe_getgrgid(__FILE__, __LINE__, (gid))
>> +
>> int safe_setxattr(const char *file, const int lineno, const char *path,
>> const char *name, const void *value, size_t size, int flags);
>> #define SAFE_SETXATTR(path, name, value, size, flags) \
>> diff --git a/lib/tst_safe_macros.c b/lib/tst_safe_macros.c
>> index 17384f32c..2e041c460 100644
>> --- a/lib/tst_safe_macros.c
>> +++ b/lib/tst_safe_macros.c
>> @@ -153,6 +153,19 @@ struct group *safe_getgrnam(const char *file, const int lineno,
>> return rval;
>> }
>>
>> +struct group *safe_getgrgid(const char *file, const int lineno, gid_t gid)
>> +{
>> + struct group *rval;
>
> Looking at manual pages we should zero the errno here, since we print it
> in the tst_brk_() in a case of NULL.
Thanks for pointing that. I'm going to change it here and in getgrnam().
>
>> + rval = getgrgid(gid);
>> + if (rval == NULL) {
>> + tst_brk_(file, lineno, TBROK | TERRNO,
>> + "getgrgid(%li) failed", (long)gid);
>> + }
>
> I also wonder if it's okay to break the test in case that the entry
> wasn't found (the return value would be NULL and errno would be
> untouched) but I guess that it's OK for most of the cases.
I think so too. Also I thought these safe_* functions are more for
setting up the test, where it is more likely requesting existing groups.
Maybe for the fallback approach it could be handy. But if we really need
more then two options, I think passing a array would do it.
Or should we go with an array now?
>
>> + return rval;
>> +}
>> +
>> int safe_chroot(const char *file, const int lineno, const char *path)
>> {
>> int rval;
>> --
>> 2.16.4
>>
>>
>> --
>> Mailing list info: https://lists.linux.it/listinfo/ltp
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2 2/5] tst_safe_macros: add SAFE_GETGRGID()
2018-10-02 23:23 ` Clemens Famulla-Conrad
@ 2018-10-03 7:46 ` Cyril Hrubis
0 siblings, 0 replies; 10+ messages in thread
From: Cyril Hrubis @ 2018-10-03 7:46 UTC (permalink / raw)
To: ltp
Hi!
> >> + rval = getgrgid(gid);
> >> + if (rval == NULL) {
> >> + tst_brk_(file, lineno, TBROK | TERRNO,
> >> + "getgrgid(%li) failed", (long)gid);
> >> + }
> >
> > I also wonder if it's okay to break the test in case that the entry
> > wasn't found (the return value would be NULL and errno would be
> > untouched) but I guess that it's OK for most of the cases.
>
> I think so too. Also I thought these safe_* functions are more for
> setting up the test, where it is more likely requesting existing groups.
>
> Maybe for the fallback approach it could be handy. But if we really need
> more then two options, I think passing a array would do it.
> Or should we go with an array now?
Unless there is a case for it I woudln't bother at this point.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2 3/5] setregid02: Convert to newlib
2018-09-10 14:18 [LTP] [PATCH v2 1/5] setregid01: Convert to newlib Clemens Famulla-Conrad
2018-09-10 14:18 ` [LTP] [PATCH v2 2/5] tst_safe_macros: add SAFE_GETGRGID() Clemens Famulla-Conrad
@ 2018-09-10 14:18 ` Clemens Famulla-Conrad
2018-09-10 14:19 ` [LTP] [PATCH v2 4/5] tst_safe_macros: add SAFE_GETGRNAM_FALLBACK() Clemens Famulla-Conrad
` (3 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: Clemens Famulla-Conrad @ 2018-09-10 14:18 UTC (permalink / raw)
To: ltp
* Changed some messaged to show errno as string.
* Used SAVE_* functions for getgrnam(), getgrgid() and getpwnam()
* Format changes, put constants on right side
Signed-off-by: Clemens Famulla-Conrad <cfamullaconrad@suse.de>
---
testcases/kernel/syscalls/setregid/setregid02.c | 138 ++++++++----------------
1 file changed, 44 insertions(+), 94 deletions(-)
diff --git a/testcases/kernel/syscalls/setregid/setregid02.c b/testcases/kernel/syscalls/setregid/setregid02.c
index 21d1c823a..ea262b8c8 100644
--- a/testcases/kernel/syscalls/setregid/setregid02.c
+++ b/testcases/kernel/syscalls/setregid/setregid02.c
@@ -1,21 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0
/*
- *
* Copyright (c) International Business Machines Corp., 2001
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
* Ported by John George
*/
@@ -29,13 +15,9 @@
#include <pwd.h>
#include <grp.h>
#include <stdlib.h>
-#include <string.h>
-#include "test.h"
-#include "safe_macros.h"
-#include "compat_16.h"
-
-TCID_DEFINE(setregid02);
+#include "tst_test.h"
+#include "compat_tst_16.h"
static gid_t neg_one = -1;
@@ -48,14 +30,14 @@ static struct group ltpgroup, root, bin;
* is used for a separate test. The tests are executed in the for loop below.
*/
-struct test_data_t {
+static struct tcase {
gid_t *real_gid;
gid_t *eff_gid;
int exp_errno;
struct group *exp_real_usr;
struct group *exp_eff_usr;
char *test_msg;
-} test_data[] = {
+} tcases[] = {
{
&neg_one, &root.gr_gid, EPERM, <pgroup, <pgroup,
"After setregid(-1, root),"}, {
@@ -71,113 +53,81 @@ struct test_data_t {
"After setregid(bin, root),"}
};
-int TST_TOTAL = ARRAY_SIZE(test_data);
-
-static void setup(void);
static void gid_verify(struct group *ru, struct group *eu, char *when);
static struct group get_group_by_name(const char *name);
static struct group get_group_by_gid(gid_t gid);
-int main(int ac, char **av)
+static void run(unsigned int n)
{
- int lc;
-
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- int i;
-
- tst_count = 0;
-
- for (i = 0; i < TST_TOTAL; i++) {
- /* Set the real or effective group id */
- TEST(SETREGID(NULL, *test_data[i].real_gid,
- *test_data[i].eff_gid));
-
- if (TEST_RETURN == -1) {
- if (TEST_ERRNO == test_data[i].exp_errno) {
- tst_resm(TPASS, "setregid(%d, %d) "
- "failed as expected.",
- *test_data[i].real_gid,
- *test_data[i].eff_gid);
- } else {
- tst_resm(TFAIL, "setregid(%d, %d) "
- "failed (%d) but did not set the "
- "expected errno (%d).",
- *test_data[i].real_gid,
- *test_data[i].eff_gid,
- TEST_ERRNO,
- test_data[i].exp_errno);
- }
- } else {
- tst_resm(TFAIL, "setregid(%d, %d) "
- "did not fail (ret: %ld) as expected (ret: -1).",
- *test_data[i].real_gid,
- *test_data[i].eff_gid, TEST_RETURN);
- }
- gid_verify(test_data[i].exp_real_usr,
- test_data[i].exp_eff_usr,
- test_data[i].test_msg);
+ struct tcase *tc = &tcases[n];
+
+ /* Set the real or effective group id */
+ TEST(SETREGID(*tc->real_gid, *tc->eff_gid));
+
+ if (TST_RET == -1) {
+ if (tc->exp_errno == TST_ERR) {
+ tst_res(TPASS | TTERRNO,
+ "setregid(%d, %d) failed as expected",
+ *tc->real_gid, *tc->eff_gid);
+ } else {
+ tst_res(TFAIL | TTERRNO,
+ "setregid(%d, %d) failed unexpectedly, expected %s",
+ *tc->real_gid, *tc->eff_gid,
+ tst_strerrno(tc->exp_errno));
}
+ } else {
+ tst_res(TFAIL,
+ "setregid(%d, %d) did not fail (ret: %ld) as expected (ret: -1).",
+ *tc->real_gid, *tc->eff_gid, TST_RET);
}
-
- tst_exit();
+ gid_verify(tc->exp_real_usr, tc->exp_eff_usr, tc->test_msg);
}
static void setup(void)
{
- tst_require_root();
+ ltpuser = SAFE_GETPWNAM("nobody");
- tst_sig(FORK, DEF_HANDLER, NULL);
-
- ltpuser = getpwnam("nobody");
- if (ltpuser == NULL)
- tst_brkm(TBROK, NULL, "getpwnam(\"nobody\") failed");
-
- SAFE_SETGID(NULL, ltpuser->pw_gid);
- SAFE_SETUID(NULL, ltpuser->pw_uid);
+ SAFE_SETGID(ltpuser->pw_gid);
+ SAFE_SETUID(ltpuser->pw_uid);
root = get_group_by_name("root");
ltpgroup = get_group_by_gid(ltpuser->pw_gid);
bin = get_group_by_name("bin");
-
- TEST_PAUSE;
}
static struct group get_group_by_name(const char *name)
{
- struct group *ret = getgrnam(name);
-
- if (ret == NULL)
- tst_brkm(TBROK|TERRNO, NULL, "getgrnam(\"%s\") failed", name);
+ struct group *ret = SAFE_GETGRNAM(name);
- GID16_CHECK(ret->gr_gid, setregid, NULL);
+ GID16_CHECK(ret->gr_gid, setregid);
return *ret;
}
static struct group get_group_by_gid(gid_t gid)
{
- struct group *ret = getgrgid(gid);
+ struct group *ret = SAFE_GETGRGID(gid);
- if (ret == NULL)
- tst_brkm(TBROK|TERRNO, NULL, "getgrgid(\"%d\") failed", gid);
-
- GID16_CHECK(ret->gr_gid, setregid, NULL);
+ GID16_CHECK(ret->gr_gid, setregid);
return *ret;
}
-
void gid_verify(struct group *rg, struct group *eg, char *when)
{
if ((getgid() != rg->gr_gid) || (getegid() != eg->gr_gid)) {
- tst_resm(TFAIL, "ERROR: %s real gid = %d; effective gid = %d",
+ tst_res(TFAIL, "ERROR: %s real gid = %d; effective gid = %d",
when, getgid(), getegid());
- tst_resm(TINFO, "Expected: real gid = %d; effective gid = %d",
+ tst_res(TINFO, "Expected: real gid = %d; effective gid = %d",
rg->gr_gid, eg->gr_gid);
} else {
- tst_resm(TPASS, "real or effective gid was modified as expected");
+ tst_res(TPASS,
+ "real or effective gid was modified as expected");
}
}
+
+static struct tst_test test = {
+ .tcnt = ARRAY_SIZE(tcases),
+ .needs_root = 1,
+ .test = run,
+ .setup = setup,
+};
--
2.16.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2 4/5] tst_safe_macros: add SAFE_GETGRNAM_FALLBACK()
2018-09-10 14:18 [LTP] [PATCH v2 1/5] setregid01: Convert to newlib Clemens Famulla-Conrad
2018-09-10 14:18 ` [LTP] [PATCH v2 2/5] tst_safe_macros: add SAFE_GETGRGID() Clemens Famulla-Conrad
2018-09-10 14:18 ` [LTP] [PATCH v2 3/5] setregid02: Convert to newlib Clemens Famulla-Conrad
@ 2018-09-10 14:19 ` Clemens Famulla-Conrad
2018-09-10 14:19 ` [LTP] [PATCH v2 5/5] setregid04: Convert to newlib Clemens Famulla-Conrad
` (2 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: Clemens Famulla-Conrad @ 2018-09-10 14:19 UTC (permalink / raw)
To: ltp
This function retrieves the group by name. If the group doesn't
exists fall back to the second name given. If the second group
doesn't exists, exit with TBROK.
Signed-off-by: Clemens Famulla-Conrad <cfamullaconrad@suse.de>
---
include/tst_safe_macros.h | 5 +++++
lib/tst_safe_macros.c | 16 ++++++++++++++++
2 files changed, 21 insertions(+)
diff --git a/include/tst_safe_macros.h b/include/tst_safe_macros.h
index d457ae92a..e8b68ce9d 100644
--- a/include/tst_safe_macros.h
+++ b/include/tst_safe_macros.h
@@ -441,6 +441,11 @@ struct group *safe_getgrnam(const char *file, const int lineno,
#define SAFE_GETGRNAM(name) \
safe_getgrnam(__FILE__, __LINE__, (name))
+struct group *safe_getgrnam_fallback(const char *file, const int lineno,
+ const char *name, const char *fallback);
+#define SAFE_GETGRNAM_FALLBACK(name, fallback) \
+ safe_getgrnam_fallback(__FILE__, __LINE__, (name), (fallback))
+
struct group *safe_getgrgid(const char *file, const int lineno, gid_t gid);
#define SAFE_GETGRGID(gid) \
safe_getgrgid(__FILE__, __LINE__, (gid))
diff --git a/lib/tst_safe_macros.c b/lib/tst_safe_macros.c
index 2e041c460..83994cdea 100644
--- a/lib/tst_safe_macros.c
+++ b/lib/tst_safe_macros.c
@@ -153,6 +153,22 @@ struct group *safe_getgrnam(const char *file, const int lineno,
return rval;
}
+struct group *safe_getgrnam_fallback(const char *file, const int lineno,
+ const char *name, const char *fallback)
+{
+ struct group *rval;
+
+ rval = getgrnam(name);
+ if (rval == NULL) {
+ tst_res_(file, lineno, TINFO,
+ "getgrnam(%s) failed - try fallback %s",
+ name, fallback);
+ rval = safe_getgrnam(file, lineno, fallback);
+ }
+
+ return rval;
+}
+
struct group *safe_getgrgid(const char *file, const int lineno, gid_t gid)
{
struct group *rval;
--
2.16.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2 5/5] setregid04: Convert to newlib
2018-09-10 14:18 [LTP] [PATCH v2 1/5] setregid01: Convert to newlib Clemens Famulla-Conrad
` (2 preceding siblings ...)
2018-09-10 14:19 ` [LTP] [PATCH v2 4/5] tst_safe_macros: add SAFE_GETGRNAM_FALLBACK() Clemens Famulla-Conrad
@ 2018-09-10 14:19 ` Clemens Famulla-Conrad
2018-09-11 7:42 ` [LTP] [PATCH v2 1/5] setregid01: " Richard Palethorpe
2018-10-02 14:07 ` Cyril Hrubis
5 siblings, 0 replies; 10+ messages in thread
From: Clemens Famulla-Conrad @ 2018-09-10 14:19 UTC (permalink / raw)
To: ltp
Signed-off-by: Clemens Famulla-Conrad <cfamullaconrad@suse.de>
---
testcases/kernel/syscalls/setregid/setregid04.c | 116 ++++++------------------
1 file changed, 27 insertions(+), 89 deletions(-)
diff --git a/testcases/kernel/syscalls/setregid/setregid04.c b/testcases/kernel/syscalls/setregid/setregid04.c
index bf744ff05..e0f1853a1 100644
--- a/testcases/kernel/syscalls/setregid/setregid04.c
+++ b/testcases/kernel/syscalls/setregid/setregid04.c
@@ -1,20 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) International Business Machines Corp., 2001
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
* Ported by John George
*/
@@ -22,16 +9,8 @@
* Test setregid() when executed by root.
*/
-#include <errno.h>
-#include <pwd.h>
-#include <grp.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "test.h"
-#include "compat_16.h"
-
-TCID_DEFINE(setregid04);
+#include "tst_test.h"
+#include "compat_tst_16.h"
static gid_t neg_one = -1;
@@ -70,88 +49,47 @@ struct test_data_t {
"After setregid(-1, nobody)"}
};
-int TST_TOTAL = sizeof(test_data) / sizeof(test_data[0]);
-
static void setup(void);
-static void cleanup(void);
static void gid_verify(struct group *ru, struct group *eu, const char *when);
-int main(int ac, char **av)
+static void run(unsigned int i)
{
- int lc;
+ /* Set the real or effective group id */
+ TEST(SETREGID(*test_data[i].real_gid, *test_data[i].eff_gid));
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- int i;
-
- tst_count = 0;
-
- for (i = 0; i < TST_TOTAL; i++) {
- /* Set the real or effective group id */
- TEST(SETREGID(cleanup, *test_data[i].real_gid,
- *test_data[i].eff_gid));
-
- if (TEST_RETURN == -1) {
- tst_resm(TBROK, "setregid(%d, %d) failed",
- *test_data[i].real_gid,
- *test_data[i].eff_gid);
- } else {
- gid_verify(test_data[i].exp_real_usr,
- test_data[i].exp_eff_usr,
- test_data[i].test_msg);
- }
- }
+ if (TST_RET == -1) {
+ tst_res(TBROK | TTERRNO, "setregid(%d, %d) failed",
+ *test_data[i].real_gid, *test_data[i].eff_gid);
+ } else {
+ gid_verify(test_data[i].exp_real_usr, test_data[i].exp_eff_usr,
+ test_data[i].test_msg);
}
-
- cleanup();
- tst_exit();
}
-#define SAFE_GETGROUP(GROUPNAME) \
- if (getgrnam(#GROUPNAME) == NULL) { \
- tst_brkm(TBROK, NULL, "Couldn't find the `" #GROUPNAME "' group"); \
- } \
- 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();
-
- tst_sig(FORK, DEF_HANDLER, cleanup);
-
- SAFE_GETGROUP(root);
- SAFE_GETGROUP_FALLBACK(nobody, nogroup);
- SAFE_GETGROUP(daemon);
- SAFE_GETGROUP(bin);
-
- TEST_PAUSE;
-}
-
-static void cleanup(void)
-{
+ root_gr = *SAFE_GETGRNAM("root");
+ nobody_gr = *SAFE_GETGRNAM_FALLBACK("nobody", "nogroup");
+ daemon_gr = *SAFE_GETGRNAM("daemon");
+ bin_gr = *SAFE_GETGRNAM("bin");
}
static void gid_verify(struct group *rg, struct group *eg, const char *when)
{
if ((getgid() != rg->gr_gid) || (getegid() != eg->gr_gid)) {
- tst_resm(TFAIL, "ERROR: %s real gid = %d; effective gid = %d",
+ tst_res(TFAIL, "ERROR: %s real gid = %d; effective gid = %d",
when, getgid(), getegid());
- tst_resm(TINFO, "Expected: real gid = %d; effective gid = %d",
+ tst_res(TINFO, "Expected: real gid = %d; effective gid = %d",
rg->gr_gid, eg->gr_gid);
} else {
- tst_resm(TPASS, "real or effective gid was modified as "
- "expected");
+ tst_res(TPASS,
+ "real or effective gid was modified as expected");
}
}
+
+static struct tst_test test = {
+ .tcnt = ARRAY_SIZE(test_data),
+ .needs_root = 1,
+ .test = run,
+ .setup = setup,
+};
--
2.16.4
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2 1/5] setregid01: Convert to newlib
2018-09-10 14:18 [LTP] [PATCH v2 1/5] setregid01: Convert to newlib Clemens Famulla-Conrad
` (3 preceding siblings ...)
2018-09-10 14:19 ` [LTP] [PATCH v2 5/5] setregid04: Convert to newlib Clemens Famulla-Conrad
@ 2018-09-11 7:42 ` Richard Palethorpe
2018-10-02 14:07 ` Cyril Hrubis
5 siblings, 0 replies; 10+ messages in thread
From: Richard Palethorpe @ 2018-09-11 7:42 UTC (permalink / raw)
To: ltp
Hello,
LGTM
--
Thank you,
Richard.
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2 1/5] setregid01: Convert to newlib
2018-09-10 14:18 [LTP] [PATCH v2 1/5] setregid01: Convert to newlib Clemens Famulla-Conrad
` (4 preceding siblings ...)
2018-09-11 7:42 ` [LTP] [PATCH v2 1/5] setregid01: " Richard Palethorpe
@ 2018-10-02 14:07 ` Cyril Hrubis
5 siblings, 0 replies; 10+ messages in thread
From: Cyril Hrubis @ 2018-10-02 14:07 UTC (permalink / raw)
To: ltp
Hi!
Applied, thanks.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 10+ messages in thread