]> granicus.if.org Git - strace/blob - tests/uid.c
Use printnum_int64 instead of print_loff_t
[strace] / tests / uid.c
1 #ifdef HAVE_CONFIG_H
2 # include "config.h"
3 #endif
4 #include <assert.h>
5 #include <stdlib.h>
6 #include <unistd.h>
7 #include <sys/syscall.h>
8
9 int
10 main(void)
11 {
12 #if (defined __NR_getuid || defined __NR_getxuid) \
13  && defined(__NR_setuid) \
14  && defined(__NR_getresuid) \
15  && defined(__NR_setreuid) \
16  && defined(__NR_setresuid) \
17  && defined(__NR_fchown) \
18  && defined(__NR_getgroups)
19         int uid;
20         int size;
21         int *list = 0;
22
23 #ifndef __NR_getuid
24 # define __NR_getuid __NR_getxuid
25 #endif
26         uid = syscall(__NR_getuid);
27         assert(syscall(__NR_setuid, uid) == 0);
28         {
29                 /*
30                  * uids returned by getresuid should be ignored
31                  * to avoid 16bit vs 32bit issues.
32                  */
33                 int r, e, s;
34                 assert(syscall(__NR_getresuid, &r, &e, &s) == 0);
35         }
36         assert(syscall(__NR_setreuid, -1, -1L) == 0);
37         assert(syscall(__NR_setresuid, uid, -1, -1L) == 0);
38         assert(syscall(__NR_fchown, 1, -1, -1L) == 0);
39         assert((size = syscall(__NR_getgroups, 0, list)) >= 0);
40         assert(list = calloc(size + 1, sizeof(*list)));
41         assert(syscall(__NR_getgroups, size, list) == size);
42         return 0;
43 #else
44         return 77;
45 #endif
46 }