]> pd.if.org Git - startuptools/blob - setid.c
fix empty module list handling
[startuptools] / setid.c
1 /*
2  * set id
3  */
4
5 #include <stdlib.h>
6 #include <stdio.h>
7 #include <errno.h>
8
9 #include <unistd.h>
10 #include <sys/types.h>
11 #include <pwd.h>
12
13 #include <grp.h>
14
15        int getgrouplist(const char *user, gid_t group,
16                         gid_t *groups, int *ngroups);
17
18
19
20 #include "exec.c"
21 #if 0
22 #include "die.c"
23 #endif
24
25 /*
26  * chids <uid> cmd... run command as uid, gid from passwd
27  * chids <uid:gid> cmd run command as uid, gid
28  * chids <uid:> cmd run command as uid, gid from passwd,groups
29  */
30 int main(int ac, char *av[]) {
31         struct passwd *pw;
32         uid_t uid;
33
34         uid = geteuid();
35
36         pw = getpwnam(av[1]);
37         if (!pw) {
38                 perror("getpwnam");
39                 exit(EXIT_FAILURE);
40         }
41
42         if (uid == 0 && setgroups(0,0) == -1) {
43                 perror("setgroups");
44                 exit(EXIT_FAILURE);
45         };
46
47         if (setgid(pw->pw_gid) == -1) {
48                 perror("setgid");
49                 exit(EXIT_FAILURE);
50         };
51
52         if (setuid(pw->pw_uid) == -1) {
53                 perror("setuid");
54                 exit(EXIT_FAILURE);
55         };
56
57         do_exec(2, ac, av);
58
59         /* shouldn't get here... */
60         return EXIT_FAILURE;
61 }