Initial import of binutils 2.22 on the new vendor branch
[dragonfly.git] / test / testcases / priv / setreuid / setreuid.c
1 /*
2  * usage:
3  * $ gcc -W -Wall at.c
4  * $ su
5  * # chown root a.out; chmod u+s a.out
6  * # exit
7  * $ ./a.out
8  */
9 #include <err.h>
10 #include <fcntl.h>
11 #include <stdio.h>
12 #include <unistd.h>
13
14 #define CHECK(expr) \
15 if ((expr) != 0) \
16   err(1, #expr)
17
18 int
19 main()
20 {
21         uid_t real_uid, effective_uid;
22         int fd;
23
24         real_uid = getuid();
25         effective_uid = geteuid();
26         CHECK(setreuid(effective_uid, real_uid));
27
28         CHECK(setreuid(real_uid, effective_uid));
29         fd = open("/etc/hosts", O_RDONLY);
30         CHECK(setreuid(effective_uid, real_uid));
31         close(fd), fd = -1;     /* move this above the previous line */
32
33         CHECK(setreuid(real_uid, effective_uid));
34         printf("uid %d, euid %d\n", getuid(), geteuid());
35         CHECK(setreuid(effective_uid, real_uid));
36         return 0;
37 }
38