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