aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2015-10-08 17:03:48 +0200
committerAndreas Schneider <asn@samba.org>2015-10-27 14:56:16 +0100
commit35d070cb178fe07f1f902eaa5c9d91ea734dc932 (patch)
tree168078bbef197f02c40ff5612692cb910fcee5a9
parent77fdff705f6e82a923f0b66ea0859bbd1f1358d6 (diff)
downloaduid_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.txt4
-rw-r--r--tests/test_seteuid.c3
-rw-r--r--tests/test_setuid.c3
-rw-r--r--tests/test_setuid_euid1.c40
-rw-r--r--tests/test_setuid_euid2.c48
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) {