From 4169ea891c5b30470b07cb87c3692b73fbd794a9 Mon Sep 17 00:00:00 2001 From: Tilghman Lesher Date: Tue, 27 May 2008 18:59:06 +0000 Subject: Merged revisions 118465 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r118465 | tilghman | 2008-05-27 13:58:09 -0500 (Tue, 27 May 2008) | 8 lines NULL character should terminate only commands back to the core, not log messages to the console. (closes issue #12731) Reported by: seanbright Patches: 20080527__bug12731.diff.txt uploaded by Corydon76 (license 14) Tested by: seanbright ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@118466 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/asterisk.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'main/asterisk.c') diff --git a/main/asterisk.c b/main/asterisk.c index a6bc0e465..8d60acaa9 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -801,11 +801,18 @@ void ast_unregister_atexit(void (*func)(void)) free(ae); } -static int fdprint(int fd, const char *s) +/* Sending commands from consoles back to the daemon requires a terminating NULL */ +static int fdsend(int fd, const char *s) { return write(fd, s, strlen(s) + 1); } +/* Sending messages from the daemon back to the display requires _excluding_ the terminating NULL */ +static int fdprint(int fd, const char *s) +{ + return write(fd, s, strlen(s)); +} + /*! \brief NULL handler so we can collect the child exit status */ static void null_sig_handler(int signal) { @@ -1924,7 +1931,7 @@ static int ast_el_read_char(EditLine *el, char *cp) printf("%s", term_quit()); WELCOME_MESSAGE; if (!ast_opt_mute) - fdprint(ast_consock, "logger mute silent"); + fdsend(ast_consock, "logger mute silent"); else printf("log and verbose output currently muted ('logger mute' to unmute)\n"); break; @@ -2228,7 +2235,7 @@ static char *cli_complete(EditLine *el, int ch) if (ast_opt_remote) { snprintf(buf, sizeof(buf), "_COMMAND NUMMATCHES \"%s\" \"%s\"", lf->buffer, ptr); - fdprint(ast_consock, buf); + fdsend(ast_consock, buf); res = read(ast_consock, buf, sizeof(buf)); buf[res] = '\0'; nummatches = atoi(buf); @@ -2240,7 +2247,7 @@ static char *cli_complete(EditLine *el, int ch) if (!(mbuf = ast_malloc(maxmbuf))) return (char *)(CC_ERROR); snprintf(buf, sizeof(buf), "_COMMAND MATCHESARRAY \"%s\" \"%s\"", lf->buffer, ptr); - fdprint(ast_consock, buf); + fdsend(ast_consock, buf); res = 0; mbuf[0] = '\0'; while (!strstr(mbuf, AST_CLI_COMPLETE_EOF) && res != -1) { @@ -2425,11 +2432,11 @@ static void ast_remotecontrol(char * data) pid = -1; if (!data) { snprintf(tmp, sizeof(tmp), "core set verbose atleast %d", option_verbose); - fdprint(ast_consock, tmp); + fdsend(ast_consock, tmp); snprintf(tmp, sizeof(tmp), "core set debug atleast %d", option_debug); - fdprint(ast_consock, tmp); + fdsend(ast_consock, tmp); if (!ast_opt_mute) - fdprint(ast_consock, "logger mute silent"); + fdsend(ast_consock, "logger mute silent"); else printf("log and verbose output currently muted ('logger mute' to unmute)\n"); } -- cgit v1.2.3