All pastes #1474837 Raw Edit

clueless

public text v1 · immutable
#1474837 ·published 2009-06-25 23:36 UTC
rendered paste body
Index: include/asterisk/syslog.h===================================================================--- include/asterisk/syslog.h	(revision 0)+++ include/asterisk/syslog.h	(revision 0)@@ -0,0 +1,72 @@+/*+ * Asterisk -- An open source telephony toolkit.+ *+ * Copyright (C) 1999 - 2005, Digium, Inc.+ *+ * Mark Spencer <markster@digium.com>+ *+ * See http://www.asterisk.org for more information about+ * the Asterisk project. Please do not directly contact+ * any of the maintainers of this project for assistance;+ * the project provides a web site, mailing lists and IRC+ * channels for your use.+ *+ * This program is free software, distributed under the terms of+ * the GNU General Public License Version 2. See the LICENSE file+ * at the top of the source tree.+ */++/*!+ * \file logger.h+ * \brief Support for logging to various files, console and syslog+ *        Configuration in file logger.conf+ */++#ifndef _ASTERISK_SYSLOG_H+#define _ASTERISK_SYSLOG_H++#if defined(__cplusplus) || defined(c_plusplus)+extern "C" {+#endif++/*!+ * \since 1.6.3+ * \brief Maps a syslog facility name from a string to a syslog facility+ *        constant.+ *+ * \param facility Facility name to map (i.e. "daemon")+ *+ * \retval syslog facility constant (i.e. LOG_DAEMON) if found+ * \retval -1 if facility is not found+ */+int ast_syslog_facility(const char *facility);++/*!+ * \since 1.6.3+ * \brief Maps a syslog priority name from a string to a syslog priority+ *        constant.+ *+ * \param priority Priority name to map (i.e. "notice")+ *+ * \retval syslog priority constant (i.e. LOG_NOTICE) if found+ * \retval -1 if priority is not found+ */+int ast_syslog_priority(const char *priority);++/*!+ * \since 1.6.3+ * \brief Maps an Asterisk log level (i.e. LOG_ERROR) to a syslog priority+ *        constant.+ *+ * \param level Asterisk log level constant (i.e. LOG_ERROR)+ *+ * \retval syslog priority constant (i.e. LOG_ERR) if found+ * \retval -1 if priority is not found+ */+int ast_syslog_priority_from_loglevel(int level);++#if defined(__cplusplus) || defined(c_plusplus)+}+#endif++#endif /* _ASTERISK_SYSLOG_H */Index: main/syslog.c===================================================================--- main/syslog.c	(revision 0)+++ main/syslog.c	(revision 0)@@ -0,0 +1,114 @@+/*+ * Asterisk -- An open source telephony toolkit.+ *+ * Copyright (C) 2009, malleable, LLC.+ *+ * Sean Bright <sean@malleable.com>+ *+ * See http://www.asterisk.org for more information about+ * the Asterisk project. Please do not directly contact+ * any of the maintainers of this project for assistance;+ * the project provides a web site, mailing lists and IRC+ * channels for your use.+ *+ * This program is free software, distributed under the terms of+ * the GNU General Public License Version 2. See the LICENSE file+ * at the top of the source tree.+ */++/*! \file+ *+ * \brief Asterisk Syslog Utility Functions+ * \author Sean Bright <sean@malleable.com>+ */++#include "asterisk.h"+#include "asterisk/utils.h"+#include "asterisk/syslog.h"++ASTERISK_FILE_VERSION(__FILE__, "$Revision:$")++#include <syslog.h>++int ast_syslog_facility(const char *facility)+{+    if (!strcasecmp(facility, "KERN")) {+		return LOG_KERN;+    } else if (!strcasecmp(facility, "USER")) {+		return LOG_USER;+    } else if (!strcasecmp(facility, "MAIL")) {+		return LOG_MAIL;+    } else if (!strcasecmp(facility, "DAEMON")) {+		return LOG_DAEMON;+    } else if (!strcasecmp(facility, "AUTH")) {+		return LOG_AUTH;+    } else if (!strcasecmp(facility, "SYSLOG")) {+		return LOG_SYSLOG;+    } else if (!strcasecmp(facility, "LPR")) {+		return LOG_LPR;+    } else if (!strcasecmp(facility, "NEWS")) {+		return LOG_NEWS;+    } else if (!strcasecmp(facility, "UUCP")) {+		return LOG_UUCP;+    } else if (!strcasecmp(facility, "CRON")) {+		return LOG_CRON;+    } else if (!strcasecmp(facility, "LOCAL0")) {+		return LOG_LOCAL0;+    } else if (!strcasecmp(facility, "LOCAL1")) {+		return LOG_LOCAL1;+    } else if (!strcasecmp(facility, "LOCAL2")) {+		return LOG_LOCAL2;+    } else if (!strcasecmp(facility, "LOCAL3")) {+		return LOG_LOCAL3;+    } else if (!strcasecmp(facility, "LOCAL4")) {+		return LOG_LOCAL4;+    } else if (!strcasecmp(facility, "LOCAL5")) {+		return LOG_LOCAL5;+    } else if (!strcasecmp(facility, "LOCAL6")) {+		return LOG_LOCAL6;+    } else if (!strcasecmp(facility, "LOCAL7")) {+		return LOG_LOCAL7;+    }++    return -1;+}++int ast_syslog_priority(const char *priority)+{+    if (!strcasecmp(priority, "ALERT")) {+		return LOG_ALERT;+    } else if (!strcasecmp(priority, "CRIT")) {+		return LOG_CRIT;+    } else if (!strcasecmp(priority, "DEBUG")) {+		return LOG_DEBUG;+    } else if (!strcasecmp(priority, "EMERG")) {+		return LOG_EMERG;+    } else if (!strcasecmp(priority, "ERR")) {+		return LOG_ERR;+    } else if (!strcasecmp(priority, "INFO")) {+		return LOG_INFO;+    } else if (!strcasecmp(priority, "NOTICE")) {+		return LOG_NOTICE;+    } else if (!strcasecmp(priority, "WARNING")) {+		return LOG_WARNING;+    }++    return -1;+}++static const int logger_level_to_syslog_map[] = {+	[__LOG_DEBUG]   = LOG_DEBUG,+	[1]             = LOG_INFO,    /* Only kept for backwards compatibility */+	[__LOG_NOTICE]  = LOG_NOTICE,+	[__LOG_WARNING] = LOG_WARNING,+	[__LOG_ERROR]   = LOG_ERR,+	[__LOG_VERBOSE] = LOG_DEBUG,+	[__LOG_DTMF]    = LOG_DEBUG,+};++int ast_syslog_priority_from_loglevel(int level) {+	if (level < 0 || level >= ARRAY_LEN(logger_level_to_syslog_map)) {+		return -1;+	}+	return logger_level_to_syslog_map[level];+}Index: main/logger.c===================================================================--- main/logger.c	(revision 203447)+++ main/logger.c	(working copy)@@ -25,48 +25,15 @@  * \author Mark Spencer <markster@digium.com>  */ -/*- * define _ASTERISK_LOGGER_H to prevent the inclusion of logger.h;- * it redefines LOG_* which we need to define syslog_level_map.- * later, we force the inclusion of logger.h again.- */-#define _ASTERISK_LOGGER_H #include "asterisk.h"  ASTERISK_FILE_VERSION(__FILE__, "$Revision$") -/*- * WARNING: additional #include directives should NOT be placed here, they - * should be placed AFTER '#undef _ASTERISK_LOGGER_H' below- */-#include "asterisk/_private.h"-#include "asterisk/paths.h"	/* use ast_config_AST_LOG_DIR */-#include <signal.h>-#include <time.h>-#include <sys/stat.h>-#include <fcntl.h>-#ifdef HAVE_BKTR-#include <execinfo.h>-#define MAX_BACKTRACE_FRAMES 20-#endif--#define SYSLOG_NAMES /* so we can map syslog facilities names to their numeric values,-		        from <syslog.h> which is included by logger.h */+/* logger.h will trample on some stuff in syslog.h, but that's alright */ #include <syslog.h> -static const int syslog_level_map[] = {-	LOG_DEBUG,-	LOG_INFO,    /* arbitrary equivalent of LOG_EVENT */-	LOG_NOTICE,-	LOG_WARNING,-	LOG_ERR,-	LOG_DEBUG,-	LOG_DEBUG-};--#define SYSLOG_NLEVELS sizeof(syslog_level_map) / sizeof(int)--#undef _ASTERISK_LOGGER_H	/* now include logger.h */+#include "asterisk/_private.h"+#include "asterisk/paths.h"	/* use ast_config_AST_LOG_DIR */ #include "asterisk/logger.h" #include "asterisk/lock.h" #include "asterisk/channel.h"@@ -79,7 +46,17 @@ #include "asterisk/strings.h" #include "asterisk/pbx.h" #include "asterisk/app.h"+#include "asterisk/syslog.h" +#include <signal.h>+#include <time.h>+#include <sys/stat.h>+#include <fcntl.h>+#ifdef HAVE_BKTR+#include <execinfo.h>+#define MAX_BACKTRACE_FRAMES 20+#endif+ #if defined(__linux__) && !defined(__NR_gettid) #include <asm/unistd.h> #endif@@ -256,9 +233,6 @@ { 	struct logchannel *chan; 	char *facility;-#ifndef SOLARIS-	CODE *cptr;-#endif  	if (ast_strlen_zero(channel) || !(chan = ast_calloc(1, sizeof(*chan) + strlen(components) + 1))) 		return NULL;@@ -278,61 +252,9 @@ 			facility = "local0"; 		} -#ifndef SOLARIS-		/*- 		* Walk through the list of facilitynames (defined in sys/syslog.h)-		* to see if we can find the one we have been given-		*/-		chan->facility = -1;- 		cptr = facilitynames;-		while (cptr->c_name) {-			if (!strcasecmp(facility, cptr->c_name)) {-		 		chan->facility = cptr->c_val;-				break;-			}-			cptr++;-		}-#else-		chan->facility = -1;-		if (!strcasecmp(facility, "kern")) -			chan->facility = LOG_KERN;-		else if (!strcasecmp(facility, "USER")) -			chan->facility = LOG_USER;-		else if (!strcasecmp(facility, "MAIL")) -			chan->facility = LOG_MAIL;-		else if (!strcasecmp(facility, "DAEMON")) -			chan->facility = LOG_DAEMON;-		else if (!strcasecmp(facility, "AUTH")) -			chan->facility = LOG_AUTH;-		else if (!strcasecmp(facility, "SYSLOG")) -			chan->facility = LOG_SYSLOG;-		else if (!strcasecmp(facility, "LPR")) -			chan->facility = LOG_LPR;-		else if (!strcasecmp(facility, "NEWS")) -			chan->facility = LOG_NEWS;-		else if (!strcasecmp(facility, "UUCP")) -			chan->facility = LOG_UUCP;-		else if (!strcasecmp(facility, "CRON")) -			chan->facility = LOG_CRON;-		else if (!strcasecmp(facility, "LOCAL0")) -			chan->facility = LOG_LOCAL0;-		else if (!strcasecmp(facility, "LOCAL1")) -			chan->facility = LOG_LOCAL1;-		else if (!strcasecmp(facility, "LOCAL2")) -			chan->facility = LOG_LOCAL2;-		else if (!strcasecmp(facility, "LOCAL3")) -			chan->facility = LOG_LOCAL3;-		else if (!strcasecmp(facility, "LOCAL4")) -			chan->facility = LOG_LOCAL4;-		else if (!strcasecmp(facility, "LOCAL5")) -			chan->facility = LOG_LOCAL5;-		else if (!strcasecmp(facility, "LOCAL6")) -			chan->facility = LOG_LOCAL6;-		else if (!strcasecmp(facility, "LOCAL7")) -			chan->facility = LOG_LOCAL7;-#endif /* Solaris */+		chan->facility = ast_syslog_facility(facility); -		if (0 > chan->facility) {+		if (chan->facility < 0) { 			fprintf(stderr, "Logger Warning: bad syslog facility in logger.conf\n"); 			ast_free(chan); 			return NULL;@@ -843,8 +765,9 @@ static void ast_log_vsyslog(struct logmsg *msg) { 	char buf[BUFSIZ];+	int syslog_level = ast_syslog_priority_from_loglevel(msg->level); -	if (msg->level >= SYSLOG_NLEVELS) {+	if (syslog_level < 0) { 		/* we are locked here, so cannot ast_log() */ 		fprintf(stderr, "ast_log_vsyslog called with bogus level: %d\n", msg->level); 		return;@@ -862,7 +785,7 @@ 	}  	term_strip(buf, buf, strlen(buf) + 1);-	syslog(syslog_level_map[msg->level], "%s", buf);+	syslog(syslog_level, "%s", buf); }  /*! \brief Print a normal log message to the channels */