1 /*
2 ** This program checks to see if your version of setreuid works.
3 ** Compile it, make it setuid root, and run it as yourself (NOT as
4 ** root). If it won't compile or outputs any MAYDAY messages, don't
5 ** define HASSETREUID in conf.h.
6 **
7 ** Compilation is trivial -- just "cc t_setreuid.c".
8 */
9
10 #include <sys/types.h>
11 #include <unistd.h>
12 #include <stdio.h>
13
14 #ifdef __hpux
15 #define setreuid(r, e) setresuid(r, e, -1)
16 #endif
17
main()18 main()
19 {
20 uid_t realuid = getuid();
21
22 printuids("initial uids", realuid, 0);
23
24 if (geteuid() != 0)
25 {
26 printf("re-run setuid root\n");
27 exit(1);
28 }
29
30 if (setreuid(0, 1) < 0)
31 printf("setreuid(0, 1) failure\n");
32 printuids("after setreuid(0, 1)", 0, 1);
33
34 if (geteuid() != 1)
35 printf("MAYDAY! Wrong effective uid\n");
36
37 /* do activity here */
38
39 if (setreuid(-1, 0) < 0)
40 printf("setreuid(-1, 0) failure\n");
41 printuids("after setreuid(-1, 0)", 0, 0);
42 if (setreuid(realuid, 0) < 0)
43 printf("setreuid(%d, 0) failure\n", realuid);
44 printuids("after setreuid(realuid, 0)", realuid, 0);
45
46 if (geteuid() != 0)
47 printf("MAYDAY! Wrong effective uid\n");
48 if (getuid() != realuid)
49 printf("MAYDAY! Wrong real uid\n");
50 printf("\n");
51
52 if (setreuid(0, 2) < 0)
53 printf("setreuid(0, 2) failure\n");
54 printuids("after setreuid(0, 2)", 0, 2);
55
56 if (geteuid() != 2)
57 printf("MAYDAY! Wrong effective uid\n");
58
59 /* do activity here */
60
61 if (setreuid(-1, 0) < 0)
62 printf("setreuid(-1, 0) failure\n");
63 printuids("after setreuid(-1, 0)", 0, 0);
64 if (setreuid(realuid, 0) < 0)
65 printf("setreuid(%d, 0) failure\n", realuid);
66 printuids("after setreuid(realuid, 0)", realuid, 0);
67
68 if (geteuid() != 0)
69 printf("MAYDAY! Wrong effective uid\n");
70 if (getuid() != realuid)
71 printf("MAYDAY! Wrong real uid\n");
72
73 exit(0);
74 }
75
printuids(str,r,e)76 printuids(str, r, e)
77 char *str;
78 int r, e;
79 {
80 printf("%s (should be %d/%d): r/euid=%d/%d\n", str, r, e,
81 getuid(), geteuid());
82 }
83