From f2329d26d213f4d635d79aa51befa1938a48462e Mon Sep 17 00:00:00 2001 From: tilghman Date: Thu, 17 Apr 2008 12:56:38 +0000 Subject: Add special case for when the agi cannot be executed, to comply with the documentation that we return failure in that case. (closes issue #12462) Reported by: fmueller Patches: 20080416__bug12462.diff.txt uploaded by Corydon76 (license 14) Tested by: fmueller git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@114195 f38db490-d61c-443f-a65b-d21fe96a405b --- res/res_agi.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'res') diff --git a/res/res_agi.c b/res/res_agi.c index b0de6db36..4b23b0110 100644 --- a/res/res_agi.c +++ b/res/res_agi.c @@ -346,6 +346,8 @@ static enum agi_result launch_script(char *script, char *argv[], int *fds, int * execv(script, argv); /* Can't use ast_log since FD's are closed */ fprintf(stdout, "verbose \"Failed to execute '%s': %s\" 2\n", script, strerror(errno)); + /* Special case to set status of AGI to failure */ + fprintf(stdout, "failure\n"); fflush(stdout); _exit(1); } @@ -1904,6 +1906,12 @@ static enum agi_result run_agi(struct ast_channel *chan, char *request, AGI *agi break; } + /* Special case for inability to execute child process */ + if (*buf && strncasecmp(buf, "failure", 7) == 0) { + returnstatus = AGI_RESULT_FAILURE; + break; + } + /* get rid of trailing newline, if any */ if (*buf && buf[strlen(buf) - 1] == '\n') buf[strlen(buf) - 1] = 0; @@ -2047,6 +2055,7 @@ static int agi_exec_full(struct ast_channel *chan, void *data, int enhanced, int } } #endif + ast_replace_sigchld(); res = launch_script(argv[0], argv, fds, enhanced ? &efd : NULL, &pid); if (res == AGI_RESULT_SUCCESS || res == AGI_RESULT_SUCCESS_FAST) { int status = 0; @@ -2062,8 +2071,8 @@ static int agi_exec_full(struct ast_channel *chan, void *data, int enhanced, int close(fds[1]); if (efd > -1) close(efd); - ast_unreplace_sigchld(); } + ast_unreplace_sigchld(); ast_module_user_remove(u); switch (res) { -- cgit v1.2.3