12 #include <sys/types.h>
19 #ifdef HAVE_SYS_SYSCALL_H
20 #include <sys/syscall.h>
26 #define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x))
27 #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
29 static void test_uwrap_seteuid(void **state)
34 (void) state; /* unused */
37 assert_int_equal(rc, -1);
40 assert_int_equal(rc, 0);
43 #ifdef SYS_geteuid /* not available on Solaris */
44 assert_int_equal(u, syscall(SYS_geteuid));
48 assert_int_equal(rc, 0);
51 assert_int_equal(u, 42);
54 static void test_uwrap_setuid(void **state)
59 (void) state; /* unused */
62 assert_int_equal(rc, -1);
65 assert_int_equal(rc, 0);
68 assert_int_equal(u, 42);
71 static void test_uwrap_setegid(void **state)
76 (void) state; /* unused */
79 assert_int_equal(rc, 0);
82 #ifdef SYS_getegid /* Not available on Solaris */
83 assert_int_equal(u, syscall(SYS_getegid));
87 assert_int_equal(rc, 0);
90 assert_int_equal(u, 42);
93 static void test_uwrap_setgid(void **state)
98 (void) state; /* unused */
101 assert_int_equal(rc, -1);
104 assert_int_equal(rc, 0);
107 assert_int_equal(u, 42);
110 static void test_uwrap_syscall(void **state)
113 struct timeval tv1, tv2;
114 struct timezone tz1, tz2;
116 (void) state; /* unused */
118 rc = syscall(SYS_getpid);
119 assert_int_equal(rc, getpid());
121 rc = access(".", R_OK);
122 assert_int_equal(rc, 0);
124 rc = syscall(SYS_access, ".", R_OK);
125 assert_int_equal(rc, 0);
132 rc = gettimeofday(&tv1, &tz1);
133 assert_int_equal(rc, 0);
135 rc = syscall(SYS_gettimeofday, &tv2, &tz2);
136 assert_int_equal(rc, 0);
138 assert_int_equal(tv1.tv_sec, tv2.tv_sec);
139 assert_int_equal(tz2.tz_dsttime, tz2.tz_dsttime);
140 assert_int_equal(tz2.tz_minuteswest, tz2.tz_minuteswest);
143 static void test_uwrap_syscall_setreuid(void **state)
148 (void) state; /* unused */
150 rc = syscall(SYS_setreuid, -1, 0);
151 assert_int_equal(rc, 0);
154 #ifdef SYS_geteuid /* not available on Solaris */
155 assert_int_equal(u, syscall(SYS_geteuid));
158 rc = syscall(SYS_setreuid, -1, 42);
159 assert_int_equal(rc, 0);
162 assert_int_equal(u, 42);
165 static void test_uwrap_syscall_setregid(void **state)
170 (void) state; /* unused */
172 rc = syscall(SYS_setregid, -1, 0);
173 assert_int_equal(rc, 0);
176 #ifdef SYS_getegid /* Not available on Solaris */
177 assert_int_equal(g, syscall(SYS_getegid));
180 rc = syscall(SYS_setregid, -1, 42);
181 assert_int_equal(rc, 0);
184 assert_int_equal(g, 42);
187 static void test_uwrap_getgroups(void **state)
189 gid_t rlist[16] = {0};
192 (void) state; /* unused */
194 rc = getgroups(ARRAY_SIZE(rlist), rlist);
195 assert_int_equal(rc, 1);
196 assert_int_equal(rlist[0], getegid());
199 static void test_uwrap_setgroups(void **state)
201 gid_t glist[] = { 100, 200, 300, 400, 500 };
205 (void) state; /* unused */
207 rc = setgroups(ARRAY_SIZE(glist), glist);
208 assert_int_equal(rc, 0);
210 rc = getgroups(ARRAY_SIZE(rlist), rlist);
211 assert_int_equal(rc, 5);
213 assert_memory_equal(glist, rlist, sizeof(glist));
219 const UnitTest tests[] = {
220 unit_test(test_uwrap_syscall),
221 unit_test(test_uwrap_getgroups),
223 unit_test(test_uwrap_seteuid),
224 unit_test(test_uwrap_setuid),
225 unit_test(test_uwrap_setegid),
226 unit_test(test_uwrap_setgid),
227 unit_test(test_uwrap_syscall_setreuid),
228 unit_test(test_uwrap_syscall_setregid),
229 unit_test(test_uwrap_setgroups),
232 rc = run_tests(tests);