mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-30 18:40:46 +00:00
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: https://origsvn.digium.com/svn/asterisk/branches/1.4@114195 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -346,6 +346,8 @@ static enum agi_result launch_script(char *script, char *argv[], int *fds, int *
|
|||||||
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 */
|
||||||
fprintf(stdout, "verbose \"Failed to execute '%s': %s\" 2\n", script, strerror(errno));
|
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);
|
fflush(stdout);
|
||||||
_exit(1);
|
_exit(1);
|
||||||
}
|
}
|
||||||
@@ -1904,6 +1906,12 @@ static enum agi_result run_agi(struct ast_channel *chan, char *request, AGI *agi
|
|||||||
break;
|
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 */
|
/* get rid of trailing newline, if any */
|
||||||
if (*buf && buf[strlen(buf) - 1] == '\n')
|
if (*buf && buf[strlen(buf) - 1] == '\n')
|
||||||
buf[strlen(buf) - 1] = 0;
|
buf[strlen(buf) - 1] = 0;
|
||||||
@@ -2047,6 +2055,7 @@ static int agi_exec_full(struct ast_channel *chan, void *data, int enhanced, int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
ast_replace_sigchld();
|
||||||
res = launch_script(argv[0], argv, fds, enhanced ? &efd : NULL, &pid);
|
res = launch_script(argv[0], argv, fds, enhanced ? &efd : NULL, &pid);
|
||||||
if (res == AGI_RESULT_SUCCESS || res == AGI_RESULT_SUCCESS_FAST) {
|
if (res == AGI_RESULT_SUCCESS || res == AGI_RESULT_SUCCESS_FAST) {
|
||||||
int status = 0;
|
int status = 0;
|
||||||
@@ -2062,8 +2071,8 @@ static int agi_exec_full(struct ast_channel *chan, void *data, int enhanced, int
|
|||||||
close(fds[1]);
|
close(fds[1]);
|
||||||
if (efd > -1)
|
if (efd > -1)
|
||||||
close(efd);
|
close(efd);
|
||||||
ast_unreplace_sigchld();
|
|
||||||
}
|
}
|
||||||
|
ast_unreplace_sigchld();
|
||||||
ast_module_user_remove(u);
|
ast_module_user_remove(u);
|
||||||
|
|
||||||
switch (res) {
|
switch (res) {
|
||||||
|
Reference in New Issue
Block a user