setregid01: Convert to newlib
PATCH v2 1/5 setregid01: Convert to newlib
Compared to previous patchset, change tst_brk() to tst_res() as it was in the original tests.
Store testcases in array and use newlib to iterate over this.
--- testcases/kernel/syscalls/setregid/setregid01.c | 171 +++++------------------- 1 file changed, 36 insertions(+), 135 deletions(-)
testcases/kernel/syscalls/setregid/setregid01.c +36 -135
@@ -1,25 +1,7 @@ +// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. * -* This program is free software; you can redistribute it and/or modify it -* under the terms of version 2 of the GNU General Public License as -* published by the Free Software Foundation. -* -* This program is distributed in the hope that it would be useful, but -* WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -* -* Further, this software is distributed without any warranty that it is -* free of the rightful claim of any third person regarding infringement -* or the like. Any license provided herein, whether implied or -* otherwise, applies only to this software file. Patent licenses, if -* any, provided herein do not apply to combinations of this program with -* other software, or any other product whatsoever. -* -* You should have received a copy of the GNU General Public License along -* with this program; if not, write the Free Software Foundation, Inc., -* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -* * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, * Mountain View, CA 94043, or: *
@@ -37,128 +19,47 @@* Testcase to test the basic functionality of setregid(2) systemm call. */ -#include <errno.h> -#include <string.h> -#include <signal.h> -#include <sys/types.h> - -#include "test.h" -#include "compat_16.h" - -static void setup (void ); - -TCID_DEFINE (setregid01); -int TST_TOTAL =5 ; - -static gid_t gid, egid;/* current real and effective group id */ - -int main (int ac,char **av) +#include "tst_test.h" +#include "compat_tst_16.h" + +static gid_t gid, egid;/* current real and effective group id */ +static gid_t neg_one =-1 ; + +static struct tcase { +gid_t *arg1; +gid_t *arg2; +const char *msg; +} tcases[] = { + {&neg_one, &neg_one,"Dont change either real or effective gid" }, + {&neg_one, &egid,"Change effective to effective gid" }, + {&gid, &neg_one,"Change real to real gid" }, + {&neg_one, &gid,"Change effective to real gid" }, + {&gid, &gid,"Try to change real to current real" } +}; + +static void run (unsigned int n) { -int lc; - -tst_parse_opts (ac, av,NULL ,NULL ); - -setup (); - -for (lc =0 ;TEST_LOOPING (lc); lc++) { - - tst_count =0 ; - -/* -* TEST CASE: -* Dont change either real or effective gid -*/ - gid =getgid (); -GID16_CHECK (gid, setregid,NULL ); - - egid =getegid (); -GID16_CHECK (egid, setregid,NULL ); +struct tcase *tc = &tcases[n]; -TEST (SETREGID (NULL ,-1 ,-1 )); +TEST (SETREGID (*tc->arg1, *tc->arg2)); -if (TEST_RETURN ==-1 ) { -tst_resm (TFAIL , -"setregid - Dont change either real or effective gid failed, errno=%d : %s" , -TEST_ERRNO ,strerror (TEST_ERRNO )); - }else { -tst_resm (TPASS , -"setregid - Dont change either real or effective gid returned %ld" , -TEST_RETURN ); - } - -/* -* TEST CASE: -* change effective to effective gid -*/ - -TEST (SETREGID (NULL ,-1 , egid)); - -if (TEST_RETURN ==-1 ) { -tst_resm (TFAIL , -"setregid - change effective to effective gid failed, errno=%d : %s" , -TEST_ERRNO ,strerror (TEST_ERRNO )); - }else { -tst_resm (TPASS , -"setregid - change effective to effective gid returned %ld" , -TEST_RETURN ); - } - -/* -* TEST CASE: -* change real to real gid -*/ - -TEST (SETREGID (NULL , gid,-1 )); - -if (TEST_RETURN ==-1 ) { -tst_resm (TFAIL , -"setregid - change real to real gid failed, errno=%d : %s" , -TEST_ERRNO ,strerror (TEST_ERRNO )); - }else { -tst_resm (TPASS , -"setregid - change real to real gid returned %ld" , -TEST_RETURN ); - } - -/* -* TEST CASE: -* change effective to real gid -*/ - -TEST (SETREGID (NULL ,-1 , gid)); - -if (TEST_RETURN ==-1 ) { -tst_resm (TFAIL , -"setregid - change effective to real gid failed, errno=%d : %s" , -TEST_ERRNO ,strerror (TEST_ERRNO )); - }else { -tst_resm (TPASS , -"setregid - change effective to real gid returned %ld" , -TEST_RETURN ); - } - -/* -* TEST CASE: -* try to change real to current real -*/ - -TEST (SETREGID (NULL , gid, gid)); - -if (TEST_RETURN ==-1 ) { -tst_resm (TFAIL |TTERRNO ,"setregid failed" ); - }else { -tst_resm (TPASS ,"setregid return %ld" , -TEST_RETURN ); - } - - } - -tst_exit (); +if (TST_RET ==-1 ) +tst_res (TFAIL |TTERRNO , tc->msg); +else +tst_res (TPASS , tc->msg); }static void setup (void ) { -tst_sig (NOFORK ,DEF_HANDLER ,NULL ); + gid =getgid (); +GID16_CHECK (gid, setregid); -TEST_PAUSE ; + egid =getegid (); +GID16_CHECK (egid, setregid); } + +static struct tst_test test = { + .tcnt =ARRAY_SIZE (tcases), + .test = run, + .setup = setup, +};
Signature · 1 line
2.16.4
PATCH v2 2/5 tst_safe_macros: add SAFE_GETGRGID()
Add tst safe wrapper for getgrgid() function.
--- include/tst_safe_macros.h | 4 ++++ lib/tst_safe_macros.c | 13 +++++++++++++ 2 files changed, 17 insertions(+)
include/tst_safe_macros.h +4 -0
@@ -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) \
lib/tst_safe_macros.c +13 -0
@@ -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;
Signature · 1 line
2.16.4
PATCH v2 2/5 tst_safe_macros: add SAFE_GETGRGID()
Hi!
Quoted 12 lines
include/tst_safe_macros.h +4
-0+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) \lib/tst_safe_macros.c +0
-0
lib/tst_safe_macros.c struct group *safe_getgrnam(const char *file, const int lineno, · line 158
Quoted 6 lines
lib/tst_safe_macros.c +3
-0@@ -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.
lib/tst_safe_macros.c struct group *safe_getgrnam(const char *file, const int lineno, · line 164
Quoted 5 lines
lib/tst_safe_macros.c +5
-0+ 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.
Quoted 12 lines
lib/tst_safe_macros.c +3
-0+return rval; +} +int safe_chroot (const char *file,const int lineno,const char *path) {int rval;Signature · 5 lines
2.16.4 -- Mailing list info: https://lists.linux.it/listinfo/ltp
Signature · 2 lines
Cyril Hrubis [email protected]
PATCH v2 2/5 tst_safe_macros: add SAFE_GETGRGID()
Hi,
Quoted 16 lines · Cyril Hrubis
Hi!
Quoted 15 lines
include/tst_safe_macros.h +4
-0+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) \lib/tst_safe_macros.c +0
-0@@ -153,6 +153,19 @@ struct group *safe_getgrnam(const char *file, const int lineno,return rval; }
Quoted 6 lines
lib/tst_safe_macros.c struct group *safe_getgrnam(const char *file, const int lineno, · line 158
Quoted 3 lines
lib/tst_safe_macros.c +3
-0+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().
Quoted 10 lines
lib/tst_safe_macros.c struct group *safe_getgrnam(const char *file, const int lineno, · line 164
Quoted 6 lines
lib/tst_safe_macros.c +5
-0+ 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?
Quoted 14 lines
Quoted 13 lines
lib/tst_safe_macros.c +3
-0+return rval; +} +int safe_chroot (const char *file,const int lineno,const char *path) {int rval;Signature · 5 lines
2.16.4 -- Mailing list info: https://lists.linux.it/listinfo/ltp
PATCH v2 2/5 tst_safe_macros: add SAFE_GETGRGID()
Hi!
Quoted 10 lines
Quoted 9 lines
lib/tst_safe_macros.c struct group *safe_getgrnam(const char *file, const int lineno, · line 164
Quoted 5 lines
lib/tst_safe_macros.c +5
-0+ 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.
Quoted 6 lines
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.
Signature · 2 lines
Cyril Hrubis [email protected]
PATCH v2 3/5 setregid02: Convert to newlib
In reply to Clemens Famulla-Conrad* Changed some messaged to show errno as string.
* Used SAVE_* functions for getgrnam(), getgrgid() and getpwnam()
* Format changes, put constants on right side
--- testcases/kernel/syscalls/setregid/setregid02.c | 138 ++++++++---------------- 1 file changed, 44 insertions(+), 94 deletions(-)
testcases/kernel/syscalls/setregid/setregid02.c +44 -94
@@ -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, +};
Signature · 1 line
2.16.4
PATCH v2 4/5 tst_safe_macros: add SAFE_GETGRNAM_FALLBACK()
In reply to Clemens Famulla-ConradThis 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.
--- include/tst_safe_macros.h | 5 +++++ lib/tst_safe_macros.c | 16 ++++++++++++++++ 2 files changed, 21 insertions(+)
include/tst_safe_macros.h +5 -0
@@ -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))
lib/tst_safe_macros.c +16 -0
@@ -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;
Signature · 1 line
2.16.4
PATCH v2 5/5 setregid04: Convert to newlib
In reply to Clemens Famulla-Conrad--- testcases/kernel/syscalls/setregid/setregid04.c | 116 ++++++------------------ 1 file changed, 27 insertions(+), 89 deletions(-)
testcases/kernel/syscalls/setregid/setregid04.c +27 -89
@@ -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, +};
Signature · 1 line
2.16.4
PATCH v2 1/5 setregid01: Convert to newlib
In reply to Clemens Famulla-ConradHello,
LGTM
Signature · 2 lines
Thank you, Richard.
PATCH v2 1/5 setregid01: Convert to newlib
In reply to Clemens Famulla-ConradHi!
Applied, thanks.
Signature · 2 lines
Cyril Hrubis [email protected]