mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
Move runas handling from vl.c to OS specific files.
Move code to handle runas, ie. change of user id of QEMU process to OS specific files and provide dummy stub for Win32. Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com> Acked-by: Juan Quintela <quintela@redhat.com> Acked-by: Richard Henderson <rth@redhat.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
59a5264b99
commit
8847cfe8aa
4 changed files with 31 additions and 28 deletions
29
vl.c
29
vl.c
|
@ -34,7 +34,6 @@
|
|||
|
||||
#ifndef _WIN32
|
||||
#include <libgen.h>
|
||||
#include <pwd.h>
|
||||
#include <sys/times.h>
|
||||
#include <sys/wait.h>
|
||||
#include <termios.h>
|
||||
|
@ -2310,9 +2309,7 @@ int main(int argc, char **argv, char **envp)
|
|||
const char *incoming = NULL;
|
||||
#ifndef _WIN32
|
||||
int fd = 0;
|
||||
struct passwd *pwd = NULL;
|
||||
const char *chroot_dir = NULL;
|
||||
const char *run_as = NULL;
|
||||
#endif
|
||||
int show_vnc_port = 0;
|
||||
int defconfig = 1;
|
||||
|
@ -3060,9 +3057,6 @@ int main(int argc, char **argv, char **envp)
|
|||
case QEMU_OPTION_chroot:
|
||||
chroot_dir = optarg;
|
||||
break;
|
||||
case QEMU_OPTION_runas:
|
||||
run_as = optarg;
|
||||
break;
|
||||
#endif
|
||||
case QEMU_OPTION_xen_domid:
|
||||
if (!(xen_available())) {
|
||||
|
@ -3554,14 +3548,6 @@ int main(int argc, char **argv, char **envp)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
if (run_as) {
|
||||
pwd = getpwnam(run_as);
|
||||
if (!pwd) {
|
||||
fprintf(stderr, "User \"%s\" doesn't exist\n", run_as);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (chroot_dir) {
|
||||
if (chroot(chroot_dir) < 0) {
|
||||
fprintf(stderr, "chroot failed\n");
|
||||
|
@ -3573,20 +3559,7 @@ int main(int argc, char **argv, char **envp)
|
|||
}
|
||||
}
|
||||
|
||||
if (run_as) {
|
||||
if (setgid(pwd->pw_gid) < 0) {
|
||||
fprintf(stderr, "Failed to setgid(%d)\n", pwd->pw_gid);
|
||||
exit(1);
|
||||
}
|
||||
if (setuid(pwd->pw_uid) < 0) {
|
||||
fprintf(stderr, "Failed to setuid(%d)\n", pwd->pw_uid);
|
||||
exit(1);
|
||||
}
|
||||
if (setuid(0) != -1) {
|
||||
fprintf(stderr, "Dropping privileges failed\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
os_change_process_uid();
|
||||
|
||||
if (daemonize) {
|
||||
dup2(fd, 0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue