12 #include <sys/types.h>
17 #ifdef HAVE_SYS_SYSCALL_H
18 #include <sys/syscall.h>
24 #define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x))
26 static void test_uwrap_seteuid(void **state)
32 env = getenv("UID_WRAPPER");
34 printf("UID_WRAPPER env not set, uid_wrapper is disabled\n");
38 (void) state; /* unused */
41 assert_int_equal(rc, -1);
44 assert_int_equal(rc, 0);
47 #ifdef SYS_geteuid /* not available on Solaris */
48 assert_int_equal(u, syscall(SYS_geteuid));
52 assert_int_equal(rc, 0);
55 assert_int_equal(u, 42);
58 static void test_uwrap_setuid(void **state)
64 env = getenv("UID_WRAPPER");
66 printf("UID_WRAPPER env not set, uid_wrapper is disabled\n");
70 (void) state; /* unused */
73 assert_int_equal(rc, -1);
76 assert_int_equal(rc, 0);
79 assert_int_equal(u, 42);
82 static void test_uwrap_setegid(void **state)
88 env = getenv("UID_WRAPPER");
90 printf("UID_WRAPPER env not set, uid_wrapper is disabled\n");
94 (void) state; /* unused */
97 assert_int_equal(rc, 0);
100 #ifdef SYS_getegid /* Not available on Solaris */
101 assert_int_equal(u, syscall(SYS_getegid));
105 assert_int_equal(rc, 0);
108 assert_int_equal(u, 42);
111 static void test_uwrap_setgid(void **state)
117 env = getenv("UID_WRAPPER");
119 printf("UID_WRAPPER env not set, uid_wrapper is disabled\n");
123 (void) state; /* unused */
126 assert_int_equal(rc, -1);
129 assert_int_equal(rc, 0);
132 assert_int_equal(u, 42);
135 static void test_uwrap_syscall(void **state)
139 struct timeval tv1, tv2;
140 struct timezone tz1, tz2;
142 env = getenv("UID_WRAPPER");
144 printf("UID_WRAPPER env not set, uid_wrapper is disabled\n");
148 (void) state; /* unused */
150 rc = syscall(SYS_getpid);
151 assert_int_equal(rc, getpid());
153 rc = access(".", R_OK);
154 assert_int_equal(rc, 0);
156 rc = syscall(SYS_access, ".", R_OK);
157 assert_int_equal(rc, 0);
164 rc = gettimeofday(&tv1, &tz1);
165 assert_int_equal(rc, 0);
167 rc = syscall(SYS_gettimeofday, &tv2, &tz2);
168 assert_int_equal(rc, 0);
170 assert_int_equal(tv1.tv_sec, tv2.tv_sec);
171 assert_int_equal(tz2.tz_dsttime, tz2.tz_dsttime);
172 assert_int_equal(tz2.tz_minuteswest, tz2.tz_minuteswest);
175 static void test_uwrap_syscall_setreuid(void **state)
181 env = getenv("UID_WRAPPER");
183 printf("UID_WRAPPER env not set, uid_wrapper is disabled\n");
187 (void) state; /* unused */
189 rc = syscall(SYS_setreuid, -1, 0);
190 assert_int_equal(rc, 0);
193 #ifdef SYS_geteuid /* not available on Solaris */
194 assert_int_equal(u, syscall(SYS_geteuid));
197 rc = syscall(SYS_setreuid, -1, 42);
198 assert_int_equal(rc, 0);
201 assert_int_equal(u, 42);
204 static void test_uwrap_syscall_setregid(void **state)
210 env = getenv("UID_WRAPPER");
212 printf("UID_WRAPPER env not set, uid_wrapper is disabled\n");
216 (void) state; /* unused */
218 rc = syscall(SYS_setregid, -1, 0);
219 assert_int_equal(rc, 0);
222 #ifdef SYS_getegid /* Not available on Solaris */
223 assert_int_equal(g, syscall(SYS_getegid));
226 rc = syscall(SYS_setregid, -1, 42);
227 assert_int_equal(rc, 0);
230 assert_int_equal(g, 42);
236 const UnitTest tests[] = {
237 unit_test(test_uwrap_syscall),
238 unit_test(test_uwrap_seteuid),
239 unit_test(test_uwrap_setuid),
240 unit_test(test_uwrap_setegid),
241 unit_test(test_uwrap_setgid),
242 unit_test(test_uwrap_syscall_setreuid),
243 unit_test(test_uwrap_syscall_setregid),
246 rc = run_tests(tests);