uwrap: Always enable logging
[uid_wrapper.git] / tests / test_setuid.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 static void test_uwrap_setuid(void **state)
15 {
16         int rc;
17         uid_t u;
18 #ifdef HAVE_GETRESUID
19         uid_t cp_ruid, cp_euid, cp_suid;
20 #endif
21
22         (void) state; /* unused */
23
24 #ifdef HAVE_GETRESUID
25         cp_ruid = cp_euid = cp_suid = -1;
26         rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
27         assert_return_code(rc, errno);
28         assert_int_equal(cp_ruid, 0);
29         assert_int_equal(cp_euid, 0);
30         assert_int_equal(cp_suid, 0);
31 #endif
32
33 #ifndef BSD
34         /* BSD sets 0xFFFFFF as the UID number in this case */
35         rc = setuid(-1);
36         assert_int_equal(rc, -1);
37         assert_int_equal(errno, EINVAL);
38 #endif
39
40         u = getuid();
41         assert_int_equal(u, 0x0);
42
43 #ifdef HAVE_GETRESUID
44         cp_ruid = cp_euid = cp_suid = -1;
45         rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
46         assert_return_code(rc, errno);
47         assert_int_equal(cp_ruid, 0);
48         assert_int_equal(cp_euid, 0);
49         assert_int_equal(cp_suid, 0);
50 #endif
51
52         rc = setuid(0x5555);
53         assert_int_equal(rc, 0);
54
55 #ifdef HAVE_GETRESUID
56         cp_ruid = cp_euid = cp_suid = -1;
57         rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
58         assert_return_code(rc, errno);
59         assert_int_equal(cp_ruid, 0x5555);
60         assert_int_equal(cp_euid, 0x5555);
61         assert_int_equal(cp_suid, 0x5555);
62 #endif
63
64         u = getuid();
65         assert_int_equal(u, 0x5555);
66
67         u = geteuid();
68         assert_int_equal(u, 0x5555);
69
70         rc = setuid(0x0);
71         assert_int_equal(rc, -1);
72         assert_int_equal(errno, EPERM);
73 }
74
75 int main(void) {
76         int rc;
77
78         const struct CMUnitTest uwrap_tests[] = {
79                 cmocka_unit_test(test_uwrap_setuid),
80         };
81
82         rc = cmocka_run_group_tests(uwrap_tests, NULL, NULL);
83
84         return rc;
85 }