| … | |
… | |
| 43 | char *newargs[argc + 2]; |
43 | char *newargs[argc + 2]; |
| 44 | int i,fd,vlan,tapnr; |
44 | int i,fd,vlan,tapnr; |
| 45 | char *ptr; |
45 | char *ptr; |
| 46 | char *command; |
46 | char *command; |
| 47 | char *display; |
47 | char *display; |
|
|
48 | char *xauthfile; |
| 48 | |
49 | |
| 49 | /* Check parameters */ |
50 | /* Check parameters */ |
| 50 | if (argc < 4) { |
51 | if (argc < 4) { |
| 51 | fprintf(stderr, "Usage: qemu-start TAPDEVNR VLAN SYSTEM <qemu options>...\n"); |
52 | fprintf(stderr, "Usage: qemu-start TAPDEVNR VLAN SYSTEM <qemu options>...\n"); |
| 52 | fprintf(stderr, " A device tapTAPDEVNR must have been configured.\n"); |
53 | fprintf(stderr, " A device tapTAPDEVNR must have been configured.\n"); |
| … | |
… | |
| 87 | exit(1); |
88 | exit(1); |
| 88 | } |
89 | } |
| 89 | |
90 | |
| 90 | /* Fix X-display */ |
91 | /* Fix X-display */ |
| 91 | userdata = getpwuid(getuid()); |
92 | userdata = getpwuid(getuid()); |
|
|
93 | if (! (xauthfile = getenv("XAUTHORITY"))) |
|
|
94 | asprintf(&xauthfile,"~%s/.Xauthority",userdata->pw_name); |
| 92 | setuid(0); |
95 | setuid(0); |
| 93 | setgid(0); |
96 | setgid(0); |
| 94 | asprintf(&command,"xauth -f ~%s/.Xauthority extract - $(echo $DISPLAY|sed \"s,^localhost,$(hostname)/unix,\") | xauth -f ~%s/.Xauthority merge -; chown %s: ~%s/.Xauthority",userdata->pw_name,USER,USER,USER); |
97 | asprintf(&command,"xauth -f %s extract - $(echo $DISPLAY|sed \"s,^localhost,$(hostname)/unix,\") | xauth -f ~%s/.Xauthority merge -; chown %s: ~%s/.Xauthority",xauthfile,USER,USER,USER); |
|
|
98 | fprintf(stderr,"%s\n",command); |
| 95 | system(command); |
99 | system(command); |
| 96 | |
100 | |
| 97 | /* Set correct userid. */ |
101 | /* Set correct userid. */ |
| 98 | userdata = getpwnam(USER); |
102 | userdata = getpwnam(USER); |
| 99 | if (!userdata) { |
103 | if (!userdata) { |