diff options
author | Andreas Schneider <asn@samba.org> | 2015-10-09 13:10:23 +0200 |
---|---|---|
committer | Andreas Schneider <asn@samba.org> | 2015-10-27 14:56:06 +0100 |
commit | 246a94bffd8224baa01d6a4f20cf2b58b5ff5a76 (patch) | |
tree | 6765b99ef0d5ceb9458da2e26590b2a34dee81bd | |
parent | f02727a26dd5a010028057f0ed4b8744b1c5818b (diff) | |
download | uid_wrapper-246a94bffd8224baa01d6a4f20cf2b58b5ff5a76.tar.gz uid_wrapper-246a94bffd8224baa01d6a4f20cf2b58b5ff5a76.tar.xz uid_wrapper-246a94bffd8224baa01d6a4f20cf2b58b5ff5a76.zip |
tests: Move setregid test to own executable
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
-rw-r--r-- | tests/CMakeLists.txt | 4 | ||||
-rw-r--r-- | tests/test_gid.c | 22 | ||||
-rw-r--r-- | tests/test_setregid.c | 190 |
3 files changed, 194 insertions, 22 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index dd8f480..85b6844 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -41,6 +41,10 @@ set(UWRAP_GID_TESTS test_setgid test_setegid) +if (HAVE_SETREGID) + list(APPEND UWRAP_GID_TESTS test_setregid) +endif (HAVE_SETREGID) + set(UWRAP_TESTS ${UWRAP_UID_TESTS} ${UWRAP_GID_TESTS} diff --git a/tests/test_gid.c b/tests/test_gid.c index 0ada6b7..222eadf 100644 --- a/tests/test_gid.c +++ b/tests/test_gid.c @@ -14,25 +14,6 @@ #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) -#ifdef HAVE_SETREGID -static void test_uwrap_setregid(void **state) -{ - int rc; - uid_t u; - - (void) state; /* unused */ - - rc = setregid(1, 2); - assert_int_equal(rc, 0); - - u = getgid(); - assert_int_equal(u, 1); - - u = getegid(); - assert_int_equal(u, 2); -} -#endif - #ifdef HAVE_SETRESGID static void test_uwrap_setresgid(void **state) { @@ -101,9 +82,6 @@ int main(void) { const struct CMUnitTest uwrap_tests[] = { cmocka_unit_test(test_uwrap_getgroups), -#ifdef HAVE_SETREGID - cmocka_unit_test(test_uwrap_setregid), -#endif #ifdef HAVE_SETRESGID cmocka_unit_test(test_uwrap_setresgid), #endif diff --git a/tests/test_setregid.c b/tests/test_setregid.c new file mode 100644 index 0000000..f4844f8 --- /dev/null +++ b/tests/test_setregid.c @@ -0,0 +1,190 @@ +#include "config.h" + +#include <stdarg.h> +#include <stddef.h> +#include <setjmp.h> +#include <cmocka.h> + +#include <errno.h> +#include <sys/types.h> +#include <unistd.h> + +#include <pwd.h> + +static void test_uwrap_setregid_root(void **state) +{ + int rc; + uid_t u; + gid_t g; +#ifdef HAVE_GETRESGID + gid_t cp_rgid, cp_egid, cp_sgid; +#endif + + (void) state; /* unused */ + + u = getuid(); + assert_int_equal(u, 0x0); + u = geteuid(); + assert_int_equal(u, 0x0); + +#ifdef HAVE_GETRESGID + cp_rgid = cp_egid = cp_sgid = -1; + rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid); + assert_return_code(rc, errno); + assert_int_equal(cp_rgid, 0); + assert_int_equal(cp_egid, 0); + assert_int_equal(cp_sgid, 0); +#endif + + g = getgid(); + assert_int_equal(g, 0x0); + + g = getegid(); + assert_int_equal(g, 0x0); + + rc = setregid(-1, -1); + assert_int_equal(rc, 0); + + rc = setregid(0x4444, 0x5555); + assert_int_equal(rc, 0); + +#ifdef HAVE_GETRESGID + cp_rgid = cp_egid = cp_sgid = -1; + rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid); + assert_return_code(rc, errno); + assert_int_equal(cp_rgid, 0x4444); + assert_int_equal(cp_egid, 0x5555); + assert_int_equal(cp_sgid, 0x5555); +#endif + + g = getgid(); + assert_int_equal(g, 0x4444); + + g = getegid(); + assert_int_equal(g, 0x5555); + + rc = setregid(0, -1); + assert_return_code(rc, errno); + +#ifdef HAVE_GETRESGID + cp_rgid = cp_egid = cp_sgid = -1; + rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid); + assert_return_code(rc, errno); + assert_int_equal(cp_rgid, 0); + assert_int_equal(cp_egid, 0x5555); + assert_int_equal(cp_sgid, 0x5555); +#endif + + rc = setregid(-1, 0); + assert_return_code(rc, errno); + +#ifdef HAVE_GETRESGID + cp_rgid = cp_egid = cp_sgid = -1; + rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid); + assert_return_code(rc, errno); + assert_int_equal(cp_rgid, 0); + assert_int_equal(cp_egid, 0); + assert_int_equal(cp_sgid, 0x5555); +#endif + + rc = setgid(0); + assert_return_code(rc, errno); + rc = setegid(0); + assert_return_code(rc, errno); +#ifdef HAVE_SETRESGID + rc = setresgid(0, 0, 0); + assert_return_code(rc, errno); +#endif +} + +static void test_uwrap_setregid_user(void **state) +{ + int rc; + uid_t u; +#ifdef HAVE_GETRESGID + gid_t cp_rgid, cp_egid, cp_sgid; +#endif + + (void) state; /* unused */ + + u = getuid(); + assert_int_equal(u, 0x0); + u = geteuid(); + assert_int_equal(u, 0x0); + +#ifdef HAVE_GETRESGID + cp_rgid = cp_egid = cp_sgid = -1; + rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid); + assert_return_code(rc, errno); + assert_int_equal(cp_rgid, 0); + assert_int_equal(cp_egid, 0); + assert_int_equal(cp_sgid, 0); +#endif + + rc = setuid(0x5555); + assert_return_code(rc, errno); + + u = getuid(); + assert_int_equal(u, 0x5555); + u = geteuid(); + assert_int_equal(u, 0x5555); + +#ifdef HAVE_GETRESGID + cp_rgid = cp_egid = cp_sgid = -1; + rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid); + assert_return_code(rc, errno); + assert_int_equal(cp_rgid, 0); + assert_int_equal(cp_egid, 0); + assert_int_equal(cp_sgid, 0); +#endif + + rc = setregid(0x4444, 0x5555); + assert_int_equal(rc, -1); + assert_int_equal(errno, EPERM); + +#ifdef HAVE_GETRESGID + cp_rgid = cp_egid = cp_sgid = -1; + rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid); + assert_return_code(rc, errno); + assert_int_equal(cp_rgid, 0); + assert_int_equal(cp_egid, 0); + assert_int_equal(cp_sgid, 0); +#endif + + rc = setregid(0, -1); + assert_return_code(rc, errno); + +#ifdef HAVE_GETRESGID + cp_rgid = cp_egid = cp_sgid = -1; + rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid); + assert_return_code(rc, errno); + assert_int_equal(cp_rgid, 0); + assert_int_equal(cp_egid, 0); + assert_int_equal(cp_sgid, 0); +#endif + + rc = setregid(-1, 0); + assert_return_code(rc, errno); + +#ifdef HAVE_GETRESGID + cp_rgid = cp_egid = cp_sgid = -1; + rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid); + assert_return_code(rc, errno); + assert_int_equal(cp_rgid, 0); + assert_int_equal(cp_egid, 0); + assert_int_equal(cp_sgid, 0); +#endif +} + +int main(void) { + int rc; + + const struct CMUnitTest uwrap_tests[] = { + cmocka_unit_test(test_uwrap_setregid_root), + cmocka_unit_test(test_uwrap_setregid_user), + }; + + rc = cmocka_run_group_tests(uwrap_tests, NULL, NULL); + + return rc; +} |