File: CMakeLists.txt

package info (click to toggle)
uid-wrapper 1.3.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 544 kB
  • sloc: ansic: 5,785; sh: 21; makefile: 8
file content (222 lines) | stat: -rw-r--r-- 8,340 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
project(tests C)

if (TARGET cmocka::cmocka)
    set(CMOCKA_LIBRARY cmocka::cmocka)
endif()

add_library(uwrap_fake_socket_wrapper SHARED uwrap_fake_socket_wrapper.c)
target_compile_options(uwrap_fake_socket_wrapper
                       PRIVATE
                           ${DEFAULT_C_COMPILE_FLAGS}
                           -D_GNU_SOURCE)
target_include_directories(uwrap_fake_socket_wrapper
                           PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
set(UWRAP_FAKE_SOCKET_WRAPPER_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}uwrap_fake_socket_wrapper${CMAKE_SHARED_LIBRARY_SUFFIX}")

function(ADD_CMOCKA_TEST_ENVIRONMENT _TEST_NAME)
    if (CMAKE_BUILD_TYPE)
        string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
        if (CMAKE_BUILD_TYPE_LOWER STREQUAL "addresssanitizer")
            find_library(ASAN_LIBRARY
                         NAMES asan)
            if (NOT ASAN_LIBRARY)
                foreach(version RANGE 10 1)
                    if (NOT ASAN_LIBRARY)
                        find_library(ASAN_LIBRARY libasan.so.${version})
                    endif()
                endforeach()
            endif()
        endif()
    endif()

    if (ASAN_LIBRARY)
        list(APPEND PRELOAD_LIBRARIES ${ASAN_LIBRARY})
    endif()
    list(APPEND PRELOAD_LIBRARIES ${UWRAP_FAKE_SOCKET_WRAPPER_LOCATION})
    list(APPEND PRELOAD_LIBRARIES ${UID_WRAPPER_LOCATION})

    if (OSX)
        set(TORTURE_ENVIRONMENT "DYLD_FORCE_FLAT_NAMESPACE=1;DYLD_INSERT_LIBRARIES=${UID_WRAPPER_LOCATION}")
    else ()
        string(REPLACE ";" ":" _TMP_ENV "${PRELOAD_LIBRARIES}")
        set(TORTURE_ENVIRONMENT "LD_PRELOAD=${_TMP_ENV}")
    endif()

    list(APPEND TORTURE_ENVIRONMENT UID_WRAPPER=1)

    if (CMAKE_BUILD_TYPE)
        string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
        if (CMAKE_BUILD_TYPE_LOWER STREQUAL "addresssanitizer" OR
            CMAKE_BUILD_TYPE_LOWER STREQUAL "threadsanitizer" OR
            CMAKE_BUILD_TYPE_LOWER STREQUAL "undefinedsanitizer")
            list(APPEND TORTURE_ENVIRONMENT "UID_WRAPPER_DISABLE_DEEPBIND=1")
        endif()
    endif()

    foreach(_arg ${ARGN})
        list(APPEND TORTURE_ENVIRONMENT ${_arg})
    endforeach()

    set_property(TEST
                    ${_TEST_NAME}
                PROPERTY
                    ENVIRONMENT "${TORTURE_ENVIRONMENT}")
endfunction()

set(TESTSUITE_LIBRARIES ${UWRAP_REQUIRED_LIBRARIES} ${CMOCKA_LIBRARY})

if (BSD)
    add_definitions(-DBSD)
endif (BSD)

add_executable(mock_exec_uid mock_exec_uid.c)
target_compile_options(mock_exec_uid
                       PRIVATE
                           ${DEFAULT_C_COMPILE_FLAGS}
                           -D_GNU_SOURCE)
target_include_directories(mock_exec_uid
                           PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})

set(UWRAP_UID_TESTS
     test_setuid
     test_seteuid)

if (HAVE_SETREUID)
    list(APPEND UWRAP_UID_TESTS test_setreuid)
endif (HAVE_SETREUID)

if (HAVE_SETRESUID)
    list(APPEND UWRAP_UID_TESTS test_setresuid test_setuid_euid1 test_setuid_euid2)
    if (HAVE_GETRESUID)
        list(APPEND UWRAP_UID_TESTS test_getresuid test_fork_exec)
    endif (HAVE_GETRESUID)
endif (HAVE_SETRESUID)

set(UWRAP_SYSCALL_UID_TESTS
    test_syscall_setuid
    test_syscall_setreuid
    test_syscall_setresuid)

set(UWRAP_GID_TESTS
    test_setgid
    test_setegid)

if (HAVE_SETREGID)
    list(APPEND UWRAP_GID_TESTS test_setregid)
endif (HAVE_SETREGID)

if (HAVE_SETRESGID)
    list(APPEND UWRAP_GID_TESTS test_setresgid)

    if (HAVE_GETRESGID)
        list(APPEND UWRAP_GID_TESTS test_setresgid_unprivileged)
    endif (HAVE_GETRESGID)
endif (HAVE_SETRESGID)

set(UWRAP_TESTS
    ${UWRAP_UID_TESTS}
    ${UWRAP_GID_TESTS}
    test_setgroups
    test_syscall
    test_syscall_swrap
    ${UWRAP_SYSCALL_UID_TESTS}
    test_syscall_gid)

if (HAVE_LINUX_32BIT_SYSCALLS)
    set(UWRAP_TESTS
        ${UWRAP_TESTS}
        test_syscall_setuid32
        test_syscall_setreuid32
        test_syscall_setresuid32
        test_syscall_setgid32
        test_syscall_setregid32
        test_syscall_setresgid32
        test_syscall_setgroups32)
endif (HAVE_LINUX_32BIT_SYSCALLS)

foreach(_UWRAP_TEST ${UWRAP_TESTS})
    add_cmocka_test(${_UWRAP_TEST}
                    SOURCES ${_UWRAP_TEST}.c
                    COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
                    LINK_LIBRARIES ${TESTSUITE_LIBRARIES}
                    LINK_OPTIONS ${DEFAULT_LINK_FLAGS})

    target_include_directories(${_UWRAP_TEST}
                               PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
    add_cmocka_test_environment(${_UWRAP_TEST} UID_WRAPPER_ROOT=1)
endforeach()

# helper library implementing uid_wrapper_enabled()
add_library(uwrap_enabled SHARED uwrap_enabled.c)
target_compile_options(uwrap_enabled
                       PRIVATE
                           ${DEFAULT_C_COMPILE_FLAGS})

add_cmocka_test(test_uwrap_enabled
                SOURCES test_uwrap_enabled.c
                COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
                LINK_LIBRARIES ${TESTSUITE_LIBRARIES} uwrap_enabled
                LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
target_include_directories(test_uwrap_enabled
                           PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
add_cmocka_test_environment(test_uwrap_enabled)

if (NOT CMAKE_BUILD_TYPE_LOWER MATCHES "sanitizer" AND
    NOT CMAKE_CROSSCOMPILING)
    add_cmocka_test(test_uwrap_disabled
                    SOURCES test_uwrap_disabled.c
                    COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
                    LINK_LIBRARIES ${TESTSUITE_LIBRARIES}
                    LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
    target_include_directories(test_uwrap_disabled
                               PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
    set_property(
        TEST
            test_uwrap_disabled
        PROPERTY
            ENVIRONMENT LD_PRELOAD=${UID_WRAPPER_LOCATION})
endif ()

add_cmocka_test(test_thread_setuid
                SOURCES test_thread_setuid.c
                COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
                LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
                LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
target_include_directories(test_thread_setuid
                           PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
add_cmocka_test_environment(test_thread_setuid UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)

add_cmocka_test(test_thread_setreuid
                SOURCES test_thread_setreuid.c
                COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
                LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
                LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
target_include_directories(test_thread_setreuid
                           PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
add_cmocka_test_environment(test_thread_setreuid UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)

add_cmocka_test(test_thread_sync_setreuid
                SOURCES test_thread_sync_setreuid.c
                COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
                LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
                LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
target_include_directories(test_thread_sync_setreuid
                           PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
add_cmocka_test_environment(test_thread_sync_setreuid UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)

add_cmocka_test(test_glibc_thread_support
                SOURCES test_glibc_thread_support.c
                COMPILE_OPTIONS ${DEFAULT_C_COMPILE_FLAGS} -D_GNU_SOURCE
                LINK_LIBRARIES ${TESTSUITE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
                LINK_OPTIONS ${DEFAULT_LINK_FLAGS})
target_include_directories(test_glibc_thread_support
                           PRIVATE ${CMAKE_BINARY_DIR} ${CMOCKA_INCLUDE_DIR})
add_cmocka_test_environment(test_glibc_thread_support UID_WRAPPER_ROOT=1 CMOCKA_TEST_ABORT=1)

if (LINUX)
    add_executable(getuids getuids.c)
    target_compile_options(getuids
                           PRIVATE
                               ${DEFAULT_C_COMPILE_FLAGS}
                               -D_GNU_SOURCE)
endif (LINUX)