|
|
|
@ -983,15 +983,9 @@ static int ast_tryconnect(void)
|
|
|
|
|
Called by soft_hangup to interrupt the poll, read, or other
|
|
|
|
|
system call. We don't actually need to do anything though.
|
|
|
|
|
Remember: Cannot EVER ast_log from within a signal handler
|
|
|
|
|
SLD: seems to be some pthread activity relating to the printf anyway:
|
|
|
|
|
which is leading to a deadlock?
|
|
|
|
|
*/
|
|
|
|
|
static void urg_handler(int num)
|
|
|
|
|
{
|
|
|
|
|
#if 0
|
|
|
|
|
if (option_debug > 2)
|
|
|
|
|
printf("-- Asterisk Urgent handler\n");
|
|
|
|
|
#endif
|
|
|
|
|
signal(num, urg_handler);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
@ -1248,46 +1242,40 @@ static void consolehandler(char *s)
|
|
|
|
|
{
|
|
|
|
|
printf(term_end());
|
|
|
|
|
fflush(stdout);
|
|
|
|
|
|
|
|
|
|
/* Called when readline data is available */
|
|
|
|
|
if (s && !ast_all_zeros(s))
|
|
|
|
|
if (!ast_all_zeros(s))
|
|
|
|
|
ast_el_add_history(s);
|
|
|
|
|
/* Give the console access to the shell */
|
|
|
|
|
if (s) {
|
|
|
|
|
/* The real handler for bang */
|
|
|
|
|
if (s[0] == '!') {
|
|
|
|
|
if (s[1])
|
|
|
|
|
ast_safe_system(s+1);
|
|
|
|
|
else
|
|
|
|
|
ast_safe_system(getenv("SHELL") ? getenv("SHELL") : "/bin/sh");
|
|
|
|
|
} else
|
|
|
|
|
/* The real handler for bang */
|
|
|
|
|
if (s[0] == '!') {
|
|
|
|
|
if (s[1])
|
|
|
|
|
ast_safe_system(s+1);
|
|
|
|
|
else
|
|
|
|
|
ast_safe_system(getenv("SHELL") ? getenv("SHELL") : "/bin/sh");
|
|
|
|
|
} else
|
|
|
|
|
ast_cli_command(STDOUT_FILENO, s);
|
|
|
|
|
} else
|
|
|
|
|
fprintf(stdout, "\nUse \"quit\" to exit\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int remoteconsolehandler(char *s)
|
|
|
|
|
{
|
|
|
|
|
int ret = 0;
|
|
|
|
|
|
|
|
|
|
/* Called when readline data is available */
|
|
|
|
|
if (s && !ast_all_zeros(s))
|
|
|
|
|
if (!ast_all_zeros(s))
|
|
|
|
|
ast_el_add_history(s);
|
|
|
|
|
/* Give the console access to the shell */
|
|
|
|
|
if (s) {
|
|
|
|
|
/* The real handler for bang */
|
|
|
|
|
if (s[0] == '!') {
|
|
|
|
|
if (s[1])
|
|
|
|
|
ast_safe_system(s+1);
|
|
|
|
|
else
|
|
|
|
|
ast_safe_system(getenv("SHELL") ? getenv("SHELL") : "/bin/sh");
|
|
|
|
|
ret = 1;
|
|
|
|
|
}
|
|
|
|
|
if ((strncasecmp(s, "quit", 4) == 0 || strncasecmp(s, "exit", 4) == 0) &&
|
|
|
|
|
(s[4] == '\0' || isspace(s[4]))) {
|
|
|
|
|
quit_handler(0, 0, 0, 0);
|
|
|
|
|
ret = 1;
|
|
|
|
|
}
|
|
|
|
|
} else
|
|
|
|
|
fprintf(stdout, "\nUse \"quit\" to exit\n");
|
|
|
|
|
/* The real handler for bang */
|
|
|
|
|
if (s[0] == '!') {
|
|
|
|
|
if (s[1])
|
|
|
|
|
ast_safe_system(s+1);
|
|
|
|
|
else
|
|
|
|
|
ast_safe_system(getenv("SHELL") ? getenv("SHELL") : "/bin/sh");
|
|
|
|
|
ret = 1;
|
|
|
|
|
}
|
|
|
|
|
if ((strncasecmp(s, "quit", 4) == 0 || strncasecmp(s, "exit", 4) == 0) &&
|
|
|
|
|
(s[4] == '\0' || isspace(s[4]))) {
|
|
|
|
|
quit_handler(0, 0, 0, 0);
|
|
|
|
|
ret = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
@ -2733,7 +2721,7 @@ int main(int argc, char *argv[])
|
|
|
|
|
consolehandler((char *)buf);
|
|
|
|
|
} else {
|
|
|
|
|
if (write(STDOUT_FILENO, "\nUse EXIT or QUIT to exit the asterisk console\n",
|
|
|
|
|
strlen("\nUse EXIT or QUIT to exit the asterisk console\n")) < 0) {
|
|
|
|
|
strlen("\nUse EXIT or QUIT to exit the asterisk console\n")) < 0) {
|
|
|
|
|
/* Whoa, stdout disappeared from under us... Make /dev/null's */
|
|
|
|
|
int fd;
|
|
|
|
|
fd = open("/dev/null", O_RDWR);
|
|
|
|
|