]>
Commit | Line | Data |
---|---|---|
1 | #include <stdio.h> | |
2 | #include <stdlib.h> | |
3 | #include <dlfcn.h> | |
4 | #include <unistd.h> | |
5 | #include <stdlib.h> | |
6 | #include <string.h> | |
7 | ||
8 | #include <mach/mach.h> | |
9 | #include <System/sys/codesign.h> | |
10 | ||
11 | #include "test.h" | |
12 | ||
13 | ||
14 | int main() | |
15 | { | |
16 | #if ENFORCE | |
17 | uint32_t flags = CS_ENFORCEMENT | CS_KILL; | |
18 | if ( csops(0, CS_OPS_SET_STATUS, &flags, sizeof(flags)) != 0 ) { | |
19 | FAIL("dlopen-codesign-dynamic: csops() failed"); | |
20 | return EXIT_SUCCESS; | |
21 | } | |
22 | ||
23 | void* handle = dlopen("libfoo.dylib", RTLD_LAZY); | |
24 | if ( handle != NULL ) { | |
25 | FAIL("dlopen-codesign-dynamic: load of libfoo.dylib should have failed"); | |
26 | return EXIT_SUCCESS; | |
27 | } | |
28 | const char* msg = dlerror(); | |
29 | if ( strstr(msg, "signature") == NULL ) { | |
30 | FAIL("dlopen-codesign-dynamic: load of libfoo.dylib failed, but message was wrong: %s", msg); | |
31 | return EXIT_SUCCESS; | |
32 | } | |
33 | ||
34 | #else | |
35 | void* handle = dlopen("libfoo.dylib", RTLD_LAZY); | |
36 | if ( handle == NULL ) { | |
37 | FAIL("dlopen-codesign-dynamic: load of libfoo.dylib failed"); | |
38 | return EXIT_SUCCESS; | |
39 | } | |
40 | ||
41 | #endif | |
42 | ||
43 | PASS("dlopen-codesign-dynamic"); | |
44 | return EXIT_SUCCESS; | |
45 | } |