Fix sighup with AGI (bug #4854)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6264 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.2-netsec
Mark Spencer 20 years ago
parent 033d64ba42
commit 4f0d1b8428

@ -211,6 +211,7 @@ static int launch_script(char *script, char *argv[], int *fds, int *efd, int *op
int audio[2]; int audio[2];
int x; int x;
int res; int res;
sigset_t signal_set;
if (!strncasecmp(script, "agi://", 6)) if (!strncasecmp(script, "agi://", 6))
return launch_netscript(script, argv, fds, efd, opid); return launch_netscript(script, argv, fds, efd, opid);
@ -266,9 +267,17 @@ static int launch_script(char *script, char *argv[], int *fds, int *efd, int *op
} else { } else {
close(STDERR_FILENO + 1); close(STDERR_FILENO + 1);
} }
/* unblock important signal handlers */
if (sigfillset(&signal_set) || pthread_sigmask(SIG_UNBLOCK, &signal_set, NULL)) {
ast_log(LOG_WARNING, "unable to unblock signals for AGI script: %s\n", strerror(errno));
exit(1);
}
/* Close everything but stdin/out/error */ /* Close everything but stdin/out/error */
for (x=STDERR_FILENO + 2;x<1024;x++) for (x=STDERR_FILENO + 2;x<1024;x++)
close(x); close(x);
/* Execute script */ /* Execute script */
execv(script, argv); execv(script, argv);
/* Can't use ast_log since FD's are closed */ /* Can't use ast_log since FD's are closed */
@ -1817,8 +1826,10 @@ static int run_agi(struct ast_channel *chan, char *request, AGI *agi, int pid, i
} }
} }
/* Notify process */ /* Notify process */
if (pid > -1) if (pid > -1) {
kill(pid, SIGHUP); if (kill(pid, SIGHUP))
ast_log(LOG_WARNING, "unable to send SIGHUP to AGI process %d: %s\n", pid, strerror(errno));
}
fclose(readf); fclose(readf);
return returnstatus; return returnstatus;
} }

Loading…
Cancel
Save