optimising includes
[cilux] / src / platform / linux / cilux.c
1
2 #include <kernelplat.h>
3 #include <container.h>
4 #include <version.h>
5
6 /* -------------------------------------------------------------------------- */
7
8 static void re_exec_as_other();
9
10 /* -------------------------------------------------------------------------- */
11
12 int main(int argc, char* argv[])
13 {
14         c_init(0, cilux_version, cilux_ciux, 0);
15         re_exec_as_other();
16         c_run(0);
17
18         return 0;
19 }
20
21 void re_exec_as_other()
22 {
23         char* other="other";
24         uid_t uid=0;
25         gid_t gid=0;
26         if(getuid()==0){
27                 struct passwd* pw=getpwnam(other);
28                 if(!pw){ printf("fail: getpwnam(\"%s\");\n", other); exit(1); }
29                 uid=pw->pw_uid;
30                 gid=pw->pw_gid;
31         }
32
33         pid_t pid=fork();
34         switch(pid){
35                 case 0:
36                         break;
37                 case -1:
38                         printf("Failed to fork\n");
39                         exit(1);
40                 default:
41                         printf("pid %d\n", pid);
42                         exit(0);
43         }
44         setsid();
45
46         if(getuid()==0){
47                 if(setgroups(0,0)== -1){
48                         printf("fail: setgroups(0,0)\n");
49                         exit(1);
50                 }
51                 if(setgid(gid)== -1){
52                         printf("fail: setgid(%d)\n", gid);
53                         exit(1);
54                 }
55                 if(initgroups(other, gid)== -1){
56                         printf("fail: initgroups(\"%s\",%d)\n", other, gid);
57                         exit(1);
58                 }
59                 if(setuid(uid)== -1){
60                         printf("fail: setuid(%d)\n", uid);
61                         exit(1);
62                 }
63         }
64 }
65
66 /* -------------------------------------------------------------------------- */
67
68