uwrap: Always enable logging
[uid_wrapper.git] / tests / test_syscall_setreuid.c
1 #include "config.h"
2
3 #include <stdarg.h>
4 #include <stddef.h>
5 #include <setjmp.h>
6 #include <cmocka.h>
7
8 #include <errno.h>
9 #include <sys/types.h>
10 #include <unistd.h>
11
12 #include <pwd.h>
13
14 #ifdef HAVE_SYS_SYSCALL_H
15 #include <sys/syscall.h>
16 #endif
17 #ifdef HAVE_SYSCALL_H
18 #include <syscall.h>
19 #endif
20
21 static void test_uwrap_syscall_setreuid(void **state)
22 {
23         long int rc;
24         uid_t u;
25 #ifdef SYS_getresuid
26         uid_t cp_ruid, cp_euid, cp_suid;
27 #endif
28
29         (void) state; /* unused */
30
31         u = getuid();
32         assert_int_equal(u, 0);
33         u = geteuid();
34         assert_int_equal(u, 0);
35
36 #ifdef SYS_getresuid
37         cp_ruid = cp_euid = cp_suid = -1;
38         rc = syscall(SYS_getresuid, &cp_ruid, &cp_euid, &cp_suid);
39         assert_return_code(rc, errno);
40         assert_int_equal(cp_ruid, 0);
41         assert_int_equal(cp_euid, 0);
42         assert_int_equal(cp_suid, 0);
43 #endif
44
45         rc = syscall(SYS_setreuid, -1, -1);
46         assert_return_code(rc, errno);
47
48 #ifdef SYS_getresuid
49         cp_ruid = cp_euid = cp_suid = -1;
50         rc = syscall(SYS_getresuid, &cp_ruid, &cp_euid, &cp_suid);
51         assert_return_code(rc, errno);
52         assert_int_equal(cp_ruid, 0);
53         assert_int_equal(cp_euid, 0);
54         assert_int_equal(cp_suid, 0);
55 #endif
56
57         rc = syscall(SYS_setreuid, 0x4444, 0x5555);
58         assert_return_code(rc, errno);
59
60 #ifdef SYS_getresuid
61         cp_ruid = cp_euid = cp_suid = -1;
62         rc = syscall(SYS_getresuid, &cp_ruid, &cp_euid, &cp_suid);
63         assert_return_code(rc, errno);
64         assert_int_equal(cp_ruid, 0x4444);
65         assert_int_equal(cp_euid, 0x5555);
66         assert_int_equal(cp_suid, 0x5555);
67 #endif
68
69         u = getuid();
70         assert_int_equal(u, 0x4444);
71
72         u = geteuid();
73         assert_int_equal(u, 0x5555);
74 #ifdef SYS_geteuid /* not available on Solaris */
75         assert_int_equal(u, syscall(SYS_geteuid));
76 #endif
77
78         rc = syscall(SYS_setreuid, -1, 0x6666);
79         assert_int_equal(rc, -1);
80         assert_int_equal(errno, EPERM);
81
82 #ifdef SYS_getresuid
83         cp_ruid = cp_euid = cp_suid = -1;
84         rc = syscall(SYS_getresuid, &cp_ruid, &cp_euid, &cp_suid);
85         assert_return_code(rc, errno);
86         assert_int_equal(cp_ruid, 0x4444);
87         assert_int_equal(cp_euid, 0x5555);
88         assert_int_equal(cp_suid, 0x5555);
89 #endif
90 }
91
92 int main(void) {
93         int rc;
94
95         const struct CMUnitTest uwrap_tests[] = {
96                 cmocka_unit_test(test_uwrap_syscall_setreuid),
97         };
98
99         rc = cmocka_run_group_tests(uwrap_tests, NULL, NULL);
100
101         return rc;
102 }