3 add_library(uwrap_fake_socket_wrapper SHARED uwrap_fake_socket_wrapper.c)
4 target_compile_options(uwrap_fake_socket_wrapper
6 ${DEFAULT_C_COMPILE_FLAGS}
8 target_include_directories(uwrap_fake_socket_wrapper
9 PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
10 set(UWRAP_FAKE_SOCKET_WRAPPER_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}uwrap_fake_socket_wrapper${CMAKE_SHARED_LIBRARY_SUFFIX}")
12 function(ADD_CMOCKA_TEST_ENVIRONMENT _TEST_NAME)
14 string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
15 if (CMAKE_BUILD_TYPE_LOWER STREQUAL "addresssanitizer")
16 find_library(ASAN_LIBRARY
19 foreach(version RANGE 10 1)
21 find_library(ASAN_LIBRARY libasan.so.${version})
29 list(APPEND PRELOAD_LIBRARIES ${ASAN_LIBRARY})
31 list(APPEND PRELOAD_LIBRARIES ${UWRAP_FAKE_SOCKET_WRAPPER_LOCATION})
32 list(APPEND PRELOAD_LIBRARIES ${UID_WRAPPER_LOCATION})
35 set(TORTURE_ENVIRONMENT "DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${UID_WRAPPER_LOCATION}")
37 string(REPLACE ";" ":" _TMP_ENV "${PRELOAD_LIBRARIES}")
38 set(TORTURE_ENVIRONMENT "LD_PRELOAD=${_TMP_ENV}")
41 list(APPEND TORTURE_ENVIRONMENT UID_WRAPPER=1)
44 string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
45 if (CMAKE_BUILD_TYPE_LOWER STREQUAL "addresssanitizer" OR
46 CMAKE_BUILD_TYPE_LOWER STREQUAL "threadsanitizer" OR
47 CMAKE_BUILD_TYPE_LOWER STREQUAL "undefinedsanitizer")
48 list(APPEND TORTURE_ENVIRONMENT "UID_WRAPPER_DISABLE_DEEPBIND=1")
53 list(APPEND TORTURE_ENVIRONMENT ${_arg})
59 ENVIRONMENT "${TORTURE_ENVIRONMENT}")
62 set(TESTSUITE_LIBRARIES ${UWRAP_REQUIRED_LIBRARIES} ${CMOCKA_LIBRARY})
65 add_definitions(-DBSD)
68 add_executable(mock_exec_uid mock_exec_uid.c)
69 target_compile_options(mock_exec_uid
71 ${DEFAULT_C_COMPILE_FLAGS}
73 target_include_directories(mock_exec_uid
74 PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
81 list(APPEND UWRAP_UID_TESTS test_setreuid)
85 list(APPEND UWRAP_UID_TESTS test_setresuid test_setuid_euid1 test_setuid_euid2)
87 list(APPEND UWRAP_UID_TESTS test_getresuid test_fork_exec)
88 endif (HAVE_GETRESUID)
89 endif (HAVE_SETRESUID)
91 set(UWRAP_SYSCALL_UID_TESTS
94 test_syscall_setresuid)
101 list(APPEND UWRAP_GID_TESTS test_setregid)
102 endif (HAVE_SETREGID)
105 list(APPEND UWRAP_GID_TESTS test_setresgid)
108 list(APPEND UWRAP_GID_TESTS test_setresgid_unprivileged)
109 endif (HAVE_GETRESGID)
110 endif (HAVE_SETRESGID)
118 ${UWRAP_SYSCALL_UID_TESTS}
121 if (HAVE_LINUX_32BIT_SYSCALLS)
124 test_syscall_setuid32
125 test_syscall_setreuid32
126 test_syscall_setresuid32
127 test_syscall_setgid32
128 test_syscall_setregid32
129 test_syscall_setresgid32
130 test_syscall_setgroups32)
131 endif (HAVE_LINUX_32BIT_SYSCALLS)
133 foreach(_UWRAP_TEST ${UWRAP_TESTS})
134 add_cmocka_test(${_UWRAP_TEST}
135 SOURCES ${_UWRAP_TEST}.c
136 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
137 LINK_LIBRARIES ${TESTSUITE_LIBRARIES}
138 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
140 target_include_directories(${_UWRAP_TEST}
141 PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
142 add_cmocka_test_environment(${_UWRAP_TEST} UID_WRAPPER_ROOT=1)
145 # helper library implementing uid_wrapper_enabled()
146 add_library(uwrap_enabled SHARED uwrap_enabled.c)
147 target_compile_options(uwrap_enabled
149 ${DEFAULT_C_COMPILE_FLAGS})
151 add_cmocka_test(test_uwrap_enabled
152 SOURCES test_uwrap_enabled.c
153 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
154 LINK_LIBRARIES ${TESTSUITE_LIBRARIES} uwrap_enabled
155 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
156 target_include_directories(test_uwrap_enabled
157 PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
158 add_cmocka_test_environment(test_uwrap_enabled)
160 if (NOT CMAKE_BUILD_TYPE_LOWER MATCHES "sanitizer" AND
161 NOT CMAKE_CROSSCOMPILING)
162 add_cmocka_test(test_uwrap_disabled
163 SOURCES test_uwrap_disabled.c
164 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
165 LINK_LIBRARIES ${TESTSUITE_LIBRARIES}
166 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
167 target_include_directories(test_uwrap_disabled
168 PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
173 ENVIRONMENT LD_PRELOAD=${UID_WRAPPER_LOCATION})
176 add_cmocka_test(test_thread_setuid
177 SOURCES test_thread_setuid.c
178 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
179 LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
180 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
181 target_include_directories(test_thread_setuid
182 PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
183 add_cmocka_test_environment(test_thread_setuid UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)
185 add_cmocka_test(test_thread_setreuid
186 SOURCES test_thread_setreuid.c
187 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
188 LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
189 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
190 target_include_directories(test_thread_setreuid
191 PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
192 add_cmocka_test_environment(test_thread_setreuid UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)
194 add_cmocka_test(test_thread_sync_setreuid
195 SOURCES test_thread_sync_setreuid.c
196 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
197 LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
198 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
199 target_include_directories(test_thread_sync_setreuid
200 PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
201 add_cmocka_test_environment(test_thread_sync_setreuid UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)
203 add_cmocka_test(test_glibc_thread_support
204 SOURCES test_glibc_thread_support.c
205 COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
206 LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
207 LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
208 target_include_directories(test_glibc_thread_support
209 PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
210 add_cmocka_test_environment(test_glibc_thread_support UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)
213 add_executable(getuids getuids.c)
214 target_compile_options(getuids
216 ${DEFAULT_C_COMPILE_FLAGS}