int * stderrfd,
char ** my_argv)
{
- int argc;
pid_t pid;
int i, inpipe[2], outpipe[2], errpipe[2], passwdpipe[2];
char number[NUM_STR_SIZE];
passwdvar = *my_argv++;
passwdfd = (int *)*my_argv++;
}
- g_debug("pipespawnv: stdoutfd is %d", *stdoutfd);
memset(inpipe, -1, SIZEOF(inpipe));
memset(outpipe, -1, SIZEOF(outpipe));
memset(errpipe, -1, SIZEOF(errpipe));
memset(passwdpipe, -1, SIZEOF(passwdpipe));
- argc = 0;
cmdline = stralloc(prog);
for(arg = my_argv; *arg != NULL; arg++) {
if (*arg != skip_argument) {
- argc++;
quoted = quote_string(*arg);
cmdline = vstrextend(&cmdline, " ", quoted, NULL);
amfree(quoted);
safe_fd(-1, 0);
}
- if (need_root)
+ if (need_root) {
become_root();
+ } else {
+ /* if our real userid is zero, the child shouldn't inherit
+ * that, so drop privs permanently */
+ if (getuid() == 0 && !set_root_privs(-1)) {
+ error(_("could not drop root privileges"));
+ }
+ }
+
execve(prog, my_argv, env);
e = strerror(errno);
error(_("error [exec %s: %s]"), prog, e);