diff options
author | Andreas Schneider <asn@samba.org> | 2015-10-08 17:03:48 +0200 |
---|---|---|
committer | Andreas Schneider <asn@samba.org> | 2015-10-27 14:56:16 +0100 |
commit | 35d070cb178fe07f1f902eaa5c9d91ea734dc932 (patch) | |
tree | 168078bbef197f02c40ff5612692cb910fcee5a9 | |
parent | 77fdff705f6e82a923f0b66ea0859bbd1f1358d6 (diff) | |
download | uid_wrapper-35d070cb178fe07f1f902eaa5c9d91ea734dc932.tar.gz uid_wrapper-35d070cb178fe07f1f902eaa5c9d91ea734dc932.tar.xz uid_wrapper-35d070cb178fe07f1f902eaa5c9d91ea734dc932.zip |
tests: Get the tests working on BSD
The setuid and seteuid behaviour is different to Linux and Solaris.
The setuid euid tests on BSD look like a bug?
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_seteuid.c | 3 | ||||
-rw-r--r-- | tests/test_setuid.c | 3 | ||||
-rw-r--r-- | tests/test_setuid_euid1.c | 40 | ||||
-rw-r--r-- | tests/test_setuid_euid2.c | 48 |
5 files changed, 70 insertions, 28 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 60efb11..d9fc0ca 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -17,6 +17,10 @@ endif () set(TESTSUITE_LIBRARIES ${UWRAP_REQUIRED_LIBRARIES} ${CMOCKA_LIBRARY}) +if (BSD) + add_definitions(-DBSD) +endif (BSD) + set(UWRAP_UID_TESTS test_setuid test_seteuid) diff --git a/tests/test_seteuid.c b/tests/test_seteuid.c index b4f170c..02f4891 100644 --- a/tests/test_seteuid.c +++ b/tests/test_seteuid.c @@ -33,9 +33,12 @@ static void test_uwrap_seteuid(void **state) assert_int_equal(u, 0x0); +#ifndef BSD + /* BSD sets 0xFFFFFF as the UID number in this case */ rc = seteuid(-1); assert_int_equal(rc, -1); assert_int_equal(errno, EINVAL); +#endif u = geteuid(); assert_int_equal(u, 0x0); diff --git a/tests/test_setuid.c b/tests/test_setuid.c index 517c0d4..f928451 100644 --- a/tests/test_setuid.c +++ b/tests/test_setuid.c @@ -30,9 +30,12 @@ static void test_uwrap_setuid(void **state) assert_int_equal(cp_suid, 0); #endif +#ifndef BSD + /* BSD sets 0xFFFFFF as the UID number in this case */ rc = setuid(-1); assert_int_equal(rc, -1); assert_int_equal(errno, EINVAL); +#endif u = getuid(); assert_int_equal(u, 0x0); diff --git a/tests/test_setuid_euid1.c b/tests/test_setuid_euid1.c index b4ceb73..41a0567 100644 --- a/tests/test_setuid_euid1.c +++ b/tests/test_setuid_euid1.c @@ -46,18 +46,34 @@ static void test_uwrap_setuid(void **state) assert_int_equal(u, 0x5555); rc = setuid(0x5555); - assert_int_equal(rc, -1); - assert_int_equal(errno, EPERM); - - rc = setuid(0x4444); - assert_return_code(rc, errno); - - 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, 0x4444); - assert_int_equal(cp_euid, 0x4444); - assert_int_equal(cp_suid, 0x6666); + if (rc == 0) { + /* This is BSD */ + 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, 0x5555); + assert_int_equal(cp_euid, 0x5555); + assert_int_equal(cp_suid, 0x5555); + } else { + /* This is Linux and uid_wrapper */ + assert_int_equal(rc, -1); + assert_int_equal(errno, EPERM); + + rc = setuid(0x4444); + assert_return_code(rc, errno); + + 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, 0x4444); + assert_int_equal(cp_euid, 0x4444); + assert_int_equal(cp_suid, 0x6666); + + u = getuid(); + assert_int_equal(u, 0x4444); + u = geteuid(); + assert_int_equal(u, 0x4444); + } } int main(void) { diff --git a/tests/test_setuid_euid2.c b/tests/test_setuid_euid2.c index a722de9..18b05d7 100644 --- a/tests/test_setuid_euid2.c +++ b/tests/test_setuid_euid2.c @@ -50,24 +50,40 @@ static void test_uwrap_setuid(void **state) rc = setuid(0x5555); - assert_int_equal(rc, -1); - assert_int_equal(errno, EPERM); + if (rc == 0) { + /* This is BSD */ + 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, 0x5555); + assert_int_equal(cp_euid, 0x5555); + assert_int_equal(cp_suid, 0x5555); + } else { + /* This is Linux and uid_wrapper */ + assert_int_equal(rc, -1); + assert_int_equal(errno, EPERM); + } rc = setuid(0x6666); - assert_return_code(rc, errno); - - 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, 0x4444); - assert_int_equal(cp_euid, 0x6666); - assert_int_equal(cp_suid, 0x6666); - - u = getuid(); - assert_int_equal(u, 0x4444); - - u = geteuid(); - assert_int_equal(u, 0x6666); + if (rc == -1) { + /* This is BSD */ + assert_int_equal(rc, -1); + assert_int_equal(errno, EPERM); + } else { + assert_return_code(rc, errno); + + 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, 0x4444); /* 0x6666 */ + assert_int_equal(cp_euid, 0x6666); + assert_int_equal(cp_suid, 0x6666); + + u = getuid(); + assert_int_equal(u, 0x4444); + u = geteuid(); + assert_int_equal(u, 0x6666); + } } int main(void) { |