12 #include <sys/types.h>
16 #ifdef HAVE_SYS_SYSCALL_H
17 #include <sys/syscall.h>
23 static void test_uwrap_seteuid(void **state)
29 env = getenv("UID_WRAPPER");
31 printf("UID_WRAPPER env not set, uid_wrapper is disabled\n");
35 (void) state; /* unused */
38 assert_int_equal(rc, -1);
41 assert_int_equal(rc, 0);
44 #ifdef SYS_geteuid /* not available on Solaris */
45 assert_int_equal(u, syscall(SYS_geteuid));
49 assert_int_equal(rc, 0);
52 assert_int_equal(u, 42);
55 static void test_uwrap_setuid(void **state)
61 env = getenv("UID_WRAPPER");
63 printf("UID_WRAPPER env not set, uid_wrapper is disabled\n");
67 (void) state; /* unused */
70 assert_int_equal(rc, -1);
73 assert_int_equal(rc, 0);
76 assert_int_equal(u, 42);
79 static void test_uwrap_setegid(void **state)
85 env = getenv("UID_WRAPPER");
87 printf("UID_WRAPPER env not set, uid_wrapper is disabled\n");
91 (void) state; /* unused */
94 assert_int_equal(rc, 0);
97 #ifdef SYS_getegid /* Not available on Solaris */
98 assert_int_equal(u, syscall(SYS_getegid));
102 assert_int_equal(rc, 0);
105 assert_int_equal(u, 42);
108 static void test_uwrap_syscall(void **state)
114 env = getenv("UID_WRAPPER");
116 printf("UID_WRAPPER env not set, uid_wrapper is disabled\n");
120 (void) state; /* unused */
122 rc = access(".", R_OK);
123 assert_int_equal(rc, 0);
125 rc = syscall(SYS_access, ".", R_OK);
126 assert_int_equal(rc, 0);
128 rc = syscall(SYS_stat, ".", &sb);
129 assert_int_equal(rc, 0);
131 assert_true(S_ISDIR(sb.st_mode));
134 static void test_uwrap_syscall_setreuid(void **state)
140 env = getenv("UID_WRAPPER");
142 printf("UID_WRAPPER env not set, uid_wrapper is disabled\n");
146 (void) state; /* unused */
148 rc = syscall(SYS_setreuid, -1, 0);
149 assert_int_equal(rc, 0);
152 assert_int_equal(u, syscall(SYS_geteuid));
154 rc = syscall(SYS_setreuid, -1, 42);
155 assert_int_equal(rc, 0);
158 assert_int_equal(u, 42);
161 static void test_uwrap_syscall_setregid(void **state)
167 env = getenv("UID_WRAPPER");
169 printf("UID_WRAPPER env not set, uid_wrapper is disabled\n");
173 (void) state; /* unused */
175 rc = syscall(SYS_setregid, -1, 0);
176 assert_int_equal(rc, 0);
179 assert_int_equal(g, syscall(SYS_getegid));
181 rc = syscall(SYS_setregid, -1, 42);
182 assert_int_equal(rc, 0);
185 assert_int_equal(g, 42);
191 const UnitTest tests[] = {
192 unit_test(test_uwrap_syscall),
193 unit_test(test_uwrap_seteuid),
194 unit_test(test_uwrap_setuid),
195 unit_test(test_uwrap_setegid),
196 unit_test(test_uwrap_syscall_setreuid),
197 unit_test(test_uwrap_syscall_setregid),
200 rc = run_tests(tests);