b40a8346dc6a55d2f15336a833eb2c76b50f78f2
[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         u = getuid();
61         assert_int_equal(u, 0x4444);
62
63         u = geteuid();
64         assert_int_equal(u, 0x5555);
65 #ifdef SYS_geteuid /* not available on Solaris */
66         assert_int_equal(u, syscall(SYS_geteuid));
67 #endif
68
69         rc = syscall(SYS_setreuid, -1, 0x6666);
70         assert_int_equal(rc, -1);
71 }
72
73 int main(void) {
74         int rc;
75
76         const struct CMUnitTest uwrap_tests[] = {
77                 cmocka_unit_test(test_uwrap_syscall_setreuid),
78         };
79
80         rc = cmocka_run_group_tests(uwrap_tests, NULL, NULL);
81
82         return rc;
83 }