12 #define discard_const(ptr) ((void *)((uintptr_t)(ptr)))
15 #ifndef discard_const_p
16 #define discard_const_p(type, ptr) ((type *)discard_const(ptr))
26 static void print_usage(const char *prog_name)
29 "Usage: %s [-r ruid] [-e euid] [-s suid] [-g gid]\n"
31 " -r The ruid to validate\n"
32 " -e The euid to validate\n"
33 " -s The suid to validate\n"
34 " -g The gid to validate\n"
39 int main(int argc, char *argv[])
41 const struct option long_options[] = {
42 { discard_const_p(char, "ruid"), required_argument, 0, 'r' },
43 { discard_const_p(char, "euid"), required_argument, 0, 'e' },
44 { discard_const_p(char, "suid"), required_argument, 0, 's' },
45 { discard_const_p(char, "gid"), required_argument, 0, 'g' },
50 struct user_ids expected_ids = {
56 struct user_ids real_ids = {
64 for (opt = getopt_long(argc, argv, "r:e:s:g:", long_options, &opt_idx);
66 opt = getopt_long(argc, argv, "r:e:s:g:", long_options, &opt_idx)) {
73 expected_ids.ruid = strtol(optarg,
78 expected_ids.euid = strtol(optarg,
83 expected_ids.suid = strtol(optarg,
88 expected_ids.gid = strtol(optarg,
97 if (errno == EINVAL || errno == ERANGE) {
102 if (expected_ids.ruid == (uid_t)-1 &&
103 expected_ids.euid == (uid_t)-1 &&
104 expected_ids.suid == (uid_t)-1) {
105 print_usage(argv[0]);
109 rc = getresuid(&real_ids.ruid, &real_ids.euid, &real_ids.suid);
111 fprintf(stderr, "getresuid() failed - %s\n", strerror(errno));
115 if (expected_ids.ruid != (uid_t)-1) {
116 if (expected_ids.ruid != real_ids.ruid) {
117 printf("MOCK_TEST ruid mismatch - ruid=%u, expected ruid=%u\n",
122 printf("MOCK_TEST ruid=%d\n", real_ids.ruid);
125 if (expected_ids.euid != (uid_t)-1) {
126 if (expected_ids.euid != real_ids.euid) {
127 printf("MOCK_TEST euid mismatch - euid=%u, expected euid=%u\n",
132 printf("MOCK_TEST euid=%d\n", real_ids.euid);
135 if (expected_ids.suid != (uid_t)-1) {
136 if (expected_ids.suid != real_ids.suid) {
137 printf("MOCK_TEST suid mismatch - suid=%u, expected suid=%u\n",
142 printf("MOCK_TEST suid=%d\n", real_ids.suid);
145 real_ids.gid = getgid();
146 if (real_ids.gid != (gid_t)-1) {
147 if (expected_ids.gid != real_ids.gid) {
148 printf("MOCK_TEST gid mismatch - gid=%u, expected gid=%u\n",
153 printf("MOCK_TEST gid=%d\n", real_ids.gid);