${CMOCKA_INCLUDE_DIR}
)
+set(PRELOAD_LIBS ${UID_WRAPPER_LOCATION})
+
if (OSX)
- set(TEST_ENVIRONMENT DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${UID_WRAPPER_LOCATION};UID_WRAPPER=1)
+ set(TEST_ENVIRONMENT DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${PRELOAD_LIBS};UID_WRAPPER=1)
add_definitions(-DOSX)
else ()
- set(TEST_ENVIRONMENT LD_PRELOAD=${UID_WRAPPER_LOCATION};UID_WRAPPER=1)
+ set(TEST_ENVIRONMENT LD_PRELOAD=${PRELOAD_LIBS})
endif ()
-add_cmocka_test(testsuite testsuite.c ${CMOCKA_LIBRARY})
-set_property(
- TEST
- testsuite
- PROPERTY
- ENVIRONMENT ${TEST_ENVIRONMENT})
+set(TESTSUITE_LIBRARIES ${UWRAP_REQUIRED_LIBRARIES} ${CMOCKA_LIBRARY})
+set(UWRAP_TESTS
+ testsuite
+ test_uid)
+
+foreach(_UWRAP_TEST ${UWRAP_TESTS})
+ add_cmocka_test(${_UWRAP_TEST} ${_UWRAP_TEST}.c ${TESTSUITE_LIBRARIES})
+
+ set_property(
+ TEST
+ ${_UWRAP_TEST}
+ PROPERTY
+ ENVIRONMENT ${TEST_ENVIRONMENT};UID_WRAPPER=1)
+endforeach()
+
+# helper library implementing uid_wrapper_enabled()
add_library(uwrap_enabled SHARED uwrap_enabled.c)
+
add_cmocka_test(test_uwrap_enabled test_uwrap_enabled.c ${CMOCKA_LIBRARY} uwrap_enabled)
set_property(
TEST
test_uwrap_enabled
PROPERTY
- ENVIRONMENT ${TEST_ENVIRONMENT})
+ ENVIRONMENT ${TEST_ENVIRONMENT};UID_WRAPPER=1)
-if (LINUX OR OSX)
-add_cmocka_test(test_glibc_thread_support test_glibc_thread_support.c ${CMOCKA_LIBRARY})
-target_link_libraries(test_glibc_thread_support ${CMAKE_THREAD_LIBS_INIT})
+add_cmocka_test(test_uwrap_disabled test_uwrap_disabled.c ${CMOCKA_LIBRARY})
set_property(
TEST
- test_glibc_thread_support
+ test_uwrap_disabled
PROPERTY
ENVIRONMENT ${TEST_ENVIRONMENT})
+
+if (LINUX OR OSX)
+ add_cmocka_test(test_glibc_thread_support test_glibc_thread_support.c ${CMOCKA_LIBRARY})
+ target_link_libraries(test_glibc_thread_support ${CMAKE_THREAD_LIBS_INIT})
+ set_property(
+ TEST
+ test_glibc_thread_support
+ PROPERTY
+ ENVIRONMENT ${TEST_ENVIRONMENT};UID_WRAPPER=1)
endif(LINUX OR OSX)
if (LINUX)
add_executable(getuids getuids.c)
endif (LINUX)
-add_cmocka_test(test_uwrap_disabled test_uwrap_disabled.c ${CMOCKA_LIBRARY})
-set_property(
- TEST
- test_uwrap_disabled
- PROPERTY
- ENVIRONMENT LD_PRELOAD=${CMAKE_BINARY_DIR}/src/libuid_wrapper.so)
--- /dev/null
+#include "config.h"
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <pwd.h>
+
+static void test_uwrap_setuid(void **state)
+{
+ int rc;
+ uid_t u;
+
+ (void) state; /* unused */
+
+ rc = setuid(-1);
+ assert_int_equal(rc, -1);
+
+ rc = setuid(42);
+ assert_int_equal(rc, 0);
+
+ u = getuid();
+ assert_int_equal(u, 42);
+}
+
+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)
+{
+ int rc;
+ uid_t u;
+
+ (void) state; /* unused */
+
+ rc = setreuid(1, 2);
+ assert_int_equal(rc, 0);
+
+ u = getuid();
+ assert_int_equal(u, 1);
+
+ u = geteuid();
+ assert_int_equal(u, 2);
+}
+#endif
+
+#ifdef HAVE_SETRESUID
+static void test_uwrap_setresuid(void **state)
+{
+ int rc;
+ uid_t u;
+
+ (void) state; /* unused */
+
+ rc = setresuid(1, 2, -1);
+ assert_int_equal(rc, 0);
+
+ u = getuid();
+ assert_int_equal(u, 1);
+
+ u = geteuid();
+ assert_int_equal(u, 2);
+}
+#endif
+
+#ifdef HAVE_GETRESUID
+static void test_uwrap_getresuid(void **state)
+{
+ int rc;
+ uid_t ru, eu, su;
+
+ (void) state; /* unused */
+
+ rc = setresuid(1, 2, -1);
+ assert_int_equal(rc, 0);
+
+ ru = getuid();
+ assert_int_equal(ru, 1);
+
+ eu = geteuid();
+ assert_int_equal(eu, 2);
+
+ rc = getresuid(&ru, &eu, &su);
+ assert_int_equal(ru, 1);
+ assert_int_equal(eu, 2);
+}
+#endif
+
+int main(void) {
+ int rc;
+
+ const struct CMUnitTest uwrap_tests[] = {
+ cmocka_unit_test(test_uwrap_setuid),
+ cmocka_unit_test(test_uwrap_seteuid),
+#ifdef HAVE_SETREUID
+ cmocka_unit_test(test_uwrap_setreuid),
+#endif
+#ifdef HAVE_SETRESUID
+ cmocka_unit_test(test_uwrap_setresuid),
+#endif
+#ifdef HAVE_GETRESUID
+ cmocka_unit_test(test_uwrap_getresuid),
+#endif
+ };
+
+ rc = cmocka_run_group_tests(uwrap_tests, NULL, NULL);
+
+ return rc;
+}
#define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x))
#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
-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();
-#ifdef SYS_geteuid /* not available on Solaris */
- assert_int_equal(u, syscall(SYS_geteuid));
-#endif
-
- 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)
-{
- int rc;
- uid_t u;
-
- (void) state; /* unused */
-
- rc = setreuid(1, 2);
- assert_int_equal(rc, 0);
-
- u = getuid();
- assert_int_equal(u, 1);
-
- u = geteuid();
- assert_int_equal(u, 2);
-}
-#endif
-
-#ifdef HAVE_SETRESUID
-static void test_uwrap_setresuid(void **state)
-{
- int rc;
- uid_t u;
-
- (void) state; /* unused */
-
- rc = setresuid(1, 2, -1);
- assert_int_equal(rc, 0);
-
- u = getuid();
- assert_int_equal(u, 1);
-
- u = geteuid();
- assert_int_equal(u, 2);
-}
-#endif
-
-#ifdef HAVE_GETRESUID
-static void test_uwrap_getresuid(void **state)
-{
- int rc;
- uid_t ru, eu, su;
-
- (void) state; /* unused */
-
- rc = setresuid(1, 2, -1);
- assert_int_equal(rc, 0);
-
- ru = getuid();
- assert_int_equal(ru, 1);
-
- eu = geteuid();
- assert_int_equal(eu, 2);
-
- rc = getresuid(&ru, &eu, &su);
- assert_int_equal(ru, 1);
- assert_int_equal(eu, 2);
-}
-#endif
-
-static void test_uwrap_setuid(void **state)
-{
- int rc;
- uid_t u;
-
- (void) state; /* unused */
-
- rc = setuid(-1);
- assert_int_equal(rc, -1);
-
- rc = setuid(42);
- assert_int_equal(rc, 0);
-
- u = getuid();
- assert_int_equal(u, 42);
-}
-
static void test_uwrap_setegid(void **state)
{
int rc;
(void) state; /* unused */
- rc = syscall(SYS_setresuid, -1, 0, -1);
+ rc = syscall(SYS_setresuid, 42, 0, -1);
assert_int_equal(rc, 0);
u = geteuid();
cmocka_unit_test(test_uwrap_syscall),
cmocka_unit_test(test_uwrap_getgroups),
- cmocka_unit_test(test_uwrap_seteuid),
-#ifdef HAVE_SETREUID
- cmocka_unit_test(test_uwrap_setreuid),
-#endif
-#ifdef HAVE_SETRESUID
- cmocka_unit_test(test_uwrap_setresuid),
-#endif
-#ifdef HAVE_GETRESUID
- cmocka_unit_test(test_uwrap_getresuid),
-#endif
- cmocka_unit_test(test_uwrap_setuid),
cmocka_unit_test(test_uwrap_setegid),
#ifdef HAVE_SETREGID
cmocka_unit_test(test_uwrap_setregid),