]> git.saurik.com Git - apple/dyld.git/blob - unit-tests/test-cases/dlopen-codesign-dynamic/main.c
dyld-733.6.tar.gz
[apple/dyld.git] / unit-tests / test-cases / dlopen-codesign-dynamic / main.c
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 }