Bump version to 1.2.5
[uid_wrapper.git] / tests / test_syscall_setreuid32.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_setreuid32(void **state)
22 {
23         long int rc;
24         uid_t u;
25 #ifdef HAVE_GETRESUID
26         uid_t cp_ruid, cp_euid, cp_suid;
27 #endif
28
29         (void) state; /* unused */
30
31 #ifdef HAVE_GETRESUID
32         cp_ruid = cp_euid = cp_suid = -1;
33         rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
34         assert_return_code(rc, errno);
35         assert_int_equal(cp_ruid, 0);
36         assert_int_equal(cp_euid, 0);
37         assert_int_equal(cp_suid, 0);
38 #endif
39         u = geteuid();
40         assert_int_equal(u, 0x0);
41
42         rc = syscall(SYS_setreuid32, -1, -1);
43         assert_int_equal(rc, 0);
44
45         rc = setreuid(0x4444, 0x5555);
46         assert_int_equal(rc, 0);
47
48 #ifdef HAVE_GETRESUID
49         cp_ruid = cp_euid = cp_suid = -1;
50         rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
51         assert_return_code(rc, errno);
52         assert_int_equal(cp_ruid, 0x4444);
53         assert_int_equal(cp_euid, 0x5555);
54         assert_int_equal(cp_suid, 0x5555);
55 #endif
56
57         u = getuid();
58         assert_int_equal(u, 0x4444);
59
60         u = geteuid();
61         assert_int_equal(u, 0x5555);
62
63         rc = syscall(SYS_setreuid32, 0, -1);
64         assert_int_equal(rc, -1);
65         assert_int_equal(errno, EPERM);
66
67 #ifdef HAVE_GETRESUID
68         cp_ruid = cp_euid = cp_suid = -1;
69         rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
70         assert_return_code(rc, errno);
71         assert_int_equal(cp_ruid, 0x4444);
72         assert_int_equal(cp_euid, 0x5555);
73         assert_int_equal(cp_suid, 0x5555);
74 #endif
75         u = getuid();
76         assert_int_equal(u, 0x4444);
77
78         u = geteuid();
79         assert_int_equal(u, 0x5555);
80
81         rc = syscall(SYS_setreuid32, -1, 0);
82         assert_int_equal(rc, -1);
83         assert_int_equal(errno, EPERM);
84
85 #ifdef HAVE_GETRESUID
86         cp_ruid = cp_euid = cp_suid = -1;
87         rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
88         assert_return_code(rc, errno);
89         assert_int_equal(cp_ruid, 0x4444);
90         assert_int_equal(cp_euid, 0x5555);
91         assert_int_equal(cp_suid, 0x5555);
92 #endif
93 }
94
95 int main(void) {
96         int rc;
97
98         const struct CMUnitTest uwrap_tests[] = {
99                 cmocka_unit_test(test_uwrap_syscall_setreuid32),
100         };
101
102         rc = cmocka_run_group_tests(uwrap_tests, NULL, NULL);
103
104         return rc;
105 }
106