ctest: Move to new dashboard
[uid_wrapper.git] / tests / test_syscall_setgid32.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 <string.h>
10 #include <sys/types.h>
11 #include <unistd.h>
12
13 #include <grp.h>
14
15 #ifdef HAVE_SYS_SYSCALL_H
16 #include <sys/syscall.h>
17 #endif
18 #ifdef HAVE_SYSCALL_H
19 #include <syscall.h>
20 #endif
21
22 static void test_uwrap_syscall_setgid32_root(void **state)
23 {
24         int rc;
25         uid_t u;
26         gid_t g;
27 #ifdef HAVE_GETRESGID
28         gid_t cp_rgid, cp_egid, cp_sgid;
29 #endif
30
31         (void) state; /* unused */
32
33         u = getuid();
34         assert_int_equal(u, 0x0);
35         u = geteuid();
36         assert_int_equal(u, 0x0);
37
38 #ifdef HAVE_GETRESGID
39         cp_rgid = cp_egid = cp_sgid = -1;
40         rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
41         assert_return_code(rc, errno);
42         assert_int_equal(cp_rgid, 0);
43         assert_int_equal(cp_egid, 0);
44         assert_int_equal(cp_sgid, 0);
45 #endif
46
47         g = getgid();
48         assert_int_equal(g, 0x0);
49
50         g = getegid();
51         assert_int_equal(g, 0x0);
52
53         rc = syscall(SYS_setgid32, -1);
54         assert_int_equal(rc, -1);
55         assert_int_equal(errno, EINVAL);
56
57 #ifdef HAVE_GETRESGID
58         cp_rgid = cp_egid = cp_sgid = -1;
59         rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
60         assert_return_code(rc, errno);
61         assert_int_equal(cp_rgid, 0);
62         assert_int_equal(cp_egid, 0);
63         assert_int_equal(cp_sgid, 0);
64 #endif
65
66         rc = syscall(SYS_setgid32, 0x5555);
67         assert_return_code(rc, errno);
68
69 #ifdef HAVE_GETRESGID
70         cp_rgid = cp_egid = cp_sgid = -1;
71         rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
72         assert_return_code(rc, errno);
73         assert_int_equal(cp_rgid, 0x5555);
74         assert_int_equal(cp_egid, 0x5555);
75         assert_int_equal(cp_sgid, 0x5555);
76 #endif
77
78         g = getgid();
79         assert_int_equal(g, 0x5555);
80
81         g = getegid();
82         assert_int_equal(g, 0x5555);
83
84         rc = setgid(0);
85         assert_return_code(rc, errno);
86 }
87
88 static void test_uwrap_syscall_setgid32_user(void **state)
89 {
90         int rc;
91         uid_t u;
92 #ifdef HAVE_GETRESGID
93         gid_t cp_rgid, cp_egid, cp_sgid;
94 #endif
95
96         (void) state; /* unused */
97
98         u = getuid();
99         assert_int_equal(u, 0x0);
100         u = geteuid();
101         assert_int_equal(u, 0x0);
102
103 #ifdef HAVE_GETRESGID
104         cp_rgid = cp_egid = cp_sgid = -1;
105         rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
106         assert_return_code(rc, errno);
107         assert_int_equal(cp_rgid, 0);
108         assert_int_equal(cp_egid, 0);
109         assert_int_equal(cp_sgid, 0);
110 #endif
111
112         setuid(0x5555);
113         assert_return_code(rc, errno);
114
115         u = getuid();
116         assert_int_equal(u, 0x5555);
117         u = geteuid();
118         assert_int_equal(u, 0x5555);
119
120 #ifdef HAVE_GETRESGID
121         cp_rgid = cp_egid = cp_sgid = -1;
122         rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
123         assert_return_code(rc, errno);
124         assert_int_equal(cp_rgid, 0);
125         assert_int_equal(cp_egid, 0);
126         assert_int_equal(cp_sgid, 0);
127 #endif
128
129         rc = syscall(SYS_setgid32, 0x5555);
130         assert_int_equal(rc, -1);
131         assert_int_equal(errno, EPERM);
132
133 #ifdef HAVE_GETRESGID
134         cp_rgid = cp_egid = cp_sgid = -1;
135         rc = getresgid(&cp_rgid, &cp_egid, &cp_sgid);
136         assert_return_code(rc, errno);
137         assert_int_equal(cp_rgid, 0);
138         assert_int_equal(cp_egid, 0);
139         assert_int_equal(cp_sgid, 0);
140 #endif
141
142         rc = syscall(SYS_setgid32, 0x0);
143         assert_return_code(rc, errno);
144 }
145
146 int main(void) {
147         int rc;
148
149         const struct CMUnitTest uwrap_tests[] = {
150                 cmocka_unit_test(test_uwrap_syscall_setgid32_root),
151                 cmocka_unit_test(test_uwrap_syscall_setgid32_user),
152         };
153
154         rc = cmocka_run_group_tests(uwrap_tests, NULL, NULL);
155
156         return rc;
157 }
158