328ab5e0bc3c8781fa4802fdc93689559c3bfd22
[asterisk/asterisk.git] / main / syslog.c
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 2009, malleable, LLC.
5  *
6  * Sean Bright <sean@malleable.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 /*! \file
20  *
21  * \brief Asterisk Syslog Utility Functions
22  * \author Sean Bright <sean@malleable.com>
23  */
24
25 #include "asterisk.h"
26 #include "asterisk/utils.h"
27 #include "asterisk/syslog.h"
28
29 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
30
31 #include <syslog.h>
32
33 static const struct {
34         const char *name;
35         int value;
36 } facility_map[] = {
37         /* POSIX only specifies USER and LOCAL0 - LOCAL7 */
38         { "USER",     LOG_USER     },
39         { "LOCAL0",   LOG_LOCAL0   },
40         { "LOCAL1",   LOG_LOCAL1   },
41         { "LOCAL2",   LOG_LOCAL2   },
42         { "LOCAL3",   LOG_LOCAL3   },
43         { "LOCAL4",   LOG_LOCAL4   },
44         { "LOCAL5",   LOG_LOCAL5   },
45         { "LOCAL6",   LOG_LOCAL6   },
46         { "LOCAL7",   LOG_LOCAL7   },
47 #if defined(HAVE_SYSLOG_FACILITY_LOG_KERN)
48         { "KERN",     LOG_KERN     },
49 #endif
50 #if defined(HAVE_SYSLOG_FACILITY_LOG_MAIL)
51         { "MAIL",     LOG_MAIL     },
52 #endif
53 #if defined(HAVE_SYSLOG_FACILITY_LOG_DAEMON)
54         { "DAEMON",   LOG_DAEMON   },
55 #endif
56 #if defined(HAVE_SYSLOG_FACILITY_LOG_AUTH)
57         { "AUTH",     LOG_AUTH     },
58         { "SECURITY", LOG_AUTH     },
59 #endif
60 #if defined(HAVE_SYSLOG_FACILITY_LOG_AUTHPRIV)
61         { "AUTHPRIV", LOG_AUTHPRIV },
62 #endif
63 #if defined(HAVE_SYSLOG_FACILITY_LOG_SYSLOG)
64         { "SYSLOG",   LOG_SYSLOG   },
65 #endif
66 #if defined(HAVE_SYSLOG_FACILITY_LOG_FTP)
67         { "FTP",      LOG_FTP      },
68 #endif
69 #if defined(HAVE_SYSLOG_FACILITY_LOG_LPR)
70         { "LPR",      LOG_LPR      },
71 #endif
72 #if defined(HAVE_SYSLOG_FACILITY_LOG_NEWS)
73         { "NEWS",     LOG_NEWS     },
74 #endif
75 #if defined(HAVE_SYSLOG_FACILITY_LOG_UUCP)
76         { "UUCP",     LOG_UUCP     },
77 #endif
78 #if defined(HAVE_SYSLOG_FACILITY_LOG_CRON)
79         { "CRON",     LOG_CRON     },
80 #endif
81 };
82
83 int ast_syslog_facility(const char *facility)
84 {
85         int index;
86
87         for (index = 0; index < ARRAY_LEN(facility_map); index++) {
88                 if (!strcasecmp(facility_map[index].name, facility)) {
89                         return facility_map[index].value;
90                 }
91         }
92
93         return -1;
94 }
95
96 static const struct {
97         const char *name;
98         int value;
99 } priority_map[] = {
100         { "ALERT",   LOG_ALERT   },
101         { "CRIT",    LOG_CRIT    },
102         { "DEBUG",   LOG_DEBUG   },
103         { "EMERG",   LOG_EMERG   },
104         { "ERR",     LOG_ERR     },
105         { "ERROR",   LOG_ERR     },
106         { "INFO",    LOG_INFO    },
107         { "NOTICE",  LOG_NOTICE  },
108         { "WARNING", LOG_WARNING }
109 };
110
111 int ast_syslog_priority(const char *priority)
112 {
113         int index;
114
115         for (index = 0; index < ARRAY_LEN(priority_map); index++) {
116                 if (!strcasecmp(priority_map[index].name, priority)) {
117                         return priority_map[index].value;
118                 }
119         }
120
121         return -1;
122 }
123
124 static const int logger_level_to_syslog_map[] = {
125         [__LOG_DEBUG]   = LOG_DEBUG,
126         [1]             = LOG_INFO, /* Only kept for backwards compatibility */
127         [__LOG_NOTICE]  = LOG_NOTICE,
128         [__LOG_WARNING] = LOG_WARNING,
129         [__LOG_ERROR]   = LOG_ERR,
130         [__LOG_VERBOSE] = LOG_DEBUG,
131         [__LOG_DTMF]    = LOG_DEBUG,
132 };
133
134 int ast_syslog_priority_from_loglevel(int level)
135 {
136         if (level < 0 || level >= ARRAY_LEN(logger_level_to_syslog_map)) {
137                 return -1;
138         }
139         return logger_level_to_syslog_map[level];
140 }