… | |
… | |
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) { |