From 0232fbea388b4329e5da44ace7dce1e59909b667 Mon Sep 17 00:00:00 2001 From: Karsten Keil Date: Mon, 30 Aug 2004 14:59:25 +0000 Subject: [PATCH] secfix for vbox3 --- vbox3/vboxgetty/voice.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/vbox3/vboxgetty/voice.c b/vbox3/vboxgetty/voice.c index 721579fc..5f3fbf37 100644 --- a/vbox3/vboxgetty/voice.c +++ b/vbox3/vboxgetty/voice.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -157,8 +158,39 @@ int voice_init(struct vboxuser *vboxuser, struct vboxcall *vboxcall) voice_create_vboxcall(); + { + int r, pid, wstat; + if ((pid =fork()) == -1) { + log_line(LOG_E, "fork failed.\n"); + exit(1); + } + if (pid == 0) { + if (seteuid(0) == -1) { + log_line(LOG_E, "seteuid failed.\n"); + exit(1); + } + if (setgid(vboxuser->gid) == -1) { + log_line(LOG_E, "setgid failed.\n"); + exit(1); + } + if (setuid(vboxuser->uid) == -1) { + log_line(LOG_E, "setuid failed.\n"); + exit(1); + } + rc = scr_execute(vboxcall->script, vboxuser); + exit(rc); + } + do + r =waitpid(pid, &wstat, 0); + while ((r == -1) && (errno == EINTR)); + if (WIFEXITED(wstat) && (WEXITSTATUS(wstat) == 0)) + rc =0; + else + rc =-1; + } + voice_remove_vboxcall(); voice_hear(0);