From: Andreas Schneider Date: Tue, 22 Sep 2015 12:21:17 +0000 (+0200) Subject: tests: Move seteuid test to own executable X-Git-Tag: uid_wrapper-1.2.0~30 X-Git-Url: http://git.samba.org/?a=commitdiff_plain;h=b0e109d5620d2e830dac7e4453c4a595c9e2c17f;p=uid_wrapper.git tests: Move seteuid test to own executable Signed-off-by: Andreas Schneider Reviewed-by: Stefan Metzmacher --- diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 72a46c7..9216d83 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -19,6 +19,7 @@ set(TESTSUITE_LIBRARIES ${UWRAP_REQUIRED_LIBRARIES} ${CMOCKA_LIBRARY}) set(UWRAP_TESTS test_setuid + test_seteuid test_uid test_gid test_syscall diff --git a/tests/test_seteuid.c b/tests/test_seteuid.c new file mode 100644 index 0000000..b4f170c --- /dev/null +++ b/tests/test_seteuid.c @@ -0,0 +1,119 @@ +#include "config.h" + +#include +#include +#include +#include + +#include +#include +#include + +#include + +static void test_uwrap_seteuid(void **state) +{ + int rc; + uid_t u; +#ifdef HAVE_GETRESUID + uid_t cp_ruid, cp_euid, cp_suid; +#endif + + (void) state; /* unused */ + +#ifdef HAVE_GETRESUID + cp_ruid = cp_euid = cp_suid = -1; + rc = getresuid(&cp_ruid, &cp_euid, &cp_suid); + assert_return_code(rc, errno); + assert_int_equal(cp_ruid, 0); + assert_int_equal(cp_euid, 0); + assert_int_equal(cp_suid, 0); +#endif + u = geteuid(); + assert_int_equal(u, 0x0); + + + rc = seteuid(-1); + assert_int_equal(rc, -1); + assert_int_equal(errno, EINVAL); + + u = geteuid(); + assert_int_equal(u, 0x0); + + rc = seteuid(0x4444); + assert_return_code(rc, errno); + +#ifdef HAVE_GETRESUID + cp_ruid = cp_euid = cp_suid = -1; + rc = getresuid(&cp_ruid, &cp_euid, &cp_suid); + assert_return_code(rc, errno); + assert_int_equal(cp_ruid, 0); + assert_int_equal(cp_euid, 0x4444); + assert_int_equal(cp_suid, 0); +#endif + + u = geteuid(); + assert_int_equal(u, 0x4444); + + /* + * The euid needs to be 0 in order to change to an + * unknown value (here 0x5555). + */ + rc = seteuid(0x5555); + assert_int_equal(rc, -1); + assert_int_equal(errno, EPERM); + +#ifdef HAVE_GETRESUID + cp_ruid = cp_euid = cp_suid = -1; + rc = getresuid(&cp_ruid, &cp_euid, &cp_suid); + assert_return_code(rc, errno); + assert_int_equal(cp_ruid, 0); + assert_int_equal(cp_euid, 0x4444); + assert_int_equal(cp_suid, 0); +#endif + + u = geteuid(); + assert_int_equal(u, 0x4444); + + rc = seteuid(0); + assert_int_equal(rc, 0); + +#ifdef HAVE_GETRESUID + cp_ruid = cp_euid = cp_suid = -1; + rc = getresuid(&cp_ruid, &cp_euid, &cp_suid); + assert_return_code(rc, errno); + assert_int_equal(cp_ruid, 0); + assert_int_equal(cp_euid, 0); + assert_int_equal(cp_suid, 0); +#endif + + u = geteuid(); + assert_int_equal(u, 0); + + rc = seteuid(0x5555); + assert_return_code(rc, errno); + +#ifdef HAVE_GETRESUID + cp_ruid = cp_euid = cp_suid = -1; + rc = getresuid(&cp_ruid, &cp_euid, &cp_suid); + assert_return_code(rc, errno); + assert_int_equal(cp_ruid, 0); + assert_int_equal(cp_euid, 0x5555); + assert_int_equal(cp_suid, 0); +#endif + + u = geteuid(); + assert_int_equal(u, 0x5555); +} + +int main(void) { + int rc; + + const struct CMUnitTest uwrap_tests[] = { + cmocka_unit_test(test_uwrap_seteuid), + }; + + rc = cmocka_run_group_tests(uwrap_tests, NULL, NULL); + + return rc; +} diff --git a/tests/test_uid.c b/tests/test_uid.c index e96caa6..575cd74 100644 --- a/tests/test_uid.c +++ b/tests/test_uid.c @@ -10,29 +10,6 @@ #include -static void test_uwrap_seteuid(void **state) -{ - int rc; - uid_t u; - - (void) state; /* unused */ - - rc = seteuid(-1); - assert_int_equal(rc, -1); - - rc = seteuid(0); - assert_int_equal(rc, 0); - - u = geteuid(); - assert_int_equal(u, 0); - - rc = setuid(42); - assert_int_equal(rc, 0); - - u = getuid(); - assert_int_equal(u, 42); -} - #ifdef HAVE_SETREUID static void test_uwrap_setreuid(void **state) { @@ -98,7 +75,6 @@ int main(void) { int rc; const struct CMUnitTest uwrap_tests[] = { - cmocka_unit_test(test_uwrap_seteuid), #ifdef HAVE_SETREUID cmocka_unit_test(test_uwrap_setreuid), #endif