static int
main_exec(int argc, char **argv)
{
- char *fields[] = { "sessionid", NULL, "command", NULL, "filename", NULL, "mimetype", NULL };
+ char *fields[] = { "sessionid", NULL, "command", NULL, "filename", NULL, "mimetype", NULL, "stderr", NULL };
int i, devnull, status, fds[2];
- bool allowed = false;
+ bool allowed = false, redir_stderr = false;
ssize_t len = 0;
const char *exe;
char *p, **args;
pid_t pid;
- autochar *post = postdecode(fields, 4);
+ autochar *post = postdecode(fields, 5);
(void) post;
if (!fields[1] || !session_access(fields[1], "cgi-io", "exec", "read"))
if (!isalnum(*p) && !strchr(" .;=/-", *p))
return failure(400, 0, "Invalid characters in mimetype");
+ p = fields[9];
+ if (p && p[0] == '1' && p[1] == '\0')
+ redir_stderr = true;
+
args = fields[3] ? parse_command(fields[3]) : NULL;
if (!args)
if (devnull > -1) {
dup2(devnull, 0);
- dup2(devnull, 2);
+ if (!redir_stderr)
+ dup2(devnull, 2);
close(devnull);
}
else {
}
dup2(fds[1], 1);
+ if (redir_stderr)
+ dup2(fds[1], 2);
close(fds[0]);
close(fds[1]);