mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -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
28
os-posix.c
28
os-posix.c
|
@ -28,6 +28,7 @@
|
|||
#include <signal.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
#include <pwd.h>
|
||||
#include <libgen.h>
|
||||
|
||||
/* Needed early for CONFIG_BSD etc. */
|
||||
|
@ -36,6 +37,8 @@
|
|||
#include "net/slirp.h"
|
||||
#include "qemu-options.h"
|
||||
|
||||
static struct passwd *user_pwd;
|
||||
|
||||
void os_setup_early_signal_handling(void)
|
||||
{
|
||||
struct sigaction act;
|
||||
|
@ -146,6 +149,31 @@ void os_parse_cmd_args(int index, const char *optarg)
|
|||
exit(1);
|
||||
break;
|
||||
#endif
|
||||
case QEMU_OPTION_runas:
|
||||
user_pwd = getpwnam(optarg);
|
||||
if (!user_pwd) {
|
||||
fprintf(stderr, "User \"%s\" doesn't exist\n", optarg);
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void os_change_process_uid(void)
|
||||
{
|
||||
if (user_pwd) {
|
||||
if (setgid(user_pwd->pw_gid) < 0) {
|
||||
fprintf(stderr, "Failed to setgid(%d)\n", user_pwd->pw_gid);
|
||||
exit(1);
|
||||
}
|
||||
if (setuid(user_pwd->pw_uid) < 0) {
|
||||
fprintf(stderr, "Failed to setuid(%d)\n", user_pwd->pw_uid);
|
||||
exit(1);
|
||||
}
|
||||
if (setuid(0) != -1) {
|
||||
fprintf(stderr, "Dropping privileges failed\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue