Line data Source code
1 : /*
2 : * err.c
3 : *
4 : * error status reporting functions
5 : *
6 : * David A. McGrew
7 : * Cisco Systems, Inc.
8 : */
9 : /*
10 : *
11 : * Copyright(c) 2001-2006 Cisco Systems, Inc.
12 : * All rights reserved.
13 : *
14 : * Redistribution and use in source and binary forms, with or without
15 : * modification, are permitted provided that the following conditions
16 : * are met:
17 : *
18 : * Redistributions of source code must retain the above copyright
19 : * notice, this list of conditions and the following disclaimer.
20 : *
21 : * Redistributions in binary form must reproduce the above
22 : * copyright notice, this list of conditions and the following
23 : * disclaimer in the documentation and/or other materials provided
24 : * with the distribution.
25 : *
26 : * Neither the name of the Cisco Systems, Inc. nor the names of its
27 : * contributors may be used to endorse or promote products derived
28 : * from this software without specific prior written permission.
29 : *
30 : * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
31 : * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
32 : * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
33 : * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
34 : * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
35 : * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
36 : * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
37 : * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 : * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
40 : * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
41 : * OF THE POSSIBILITY OF SUCH DAMAGE.
42 : *
43 : */
44 :
45 : #include "err.h"
46 :
47 : #ifdef ERR_REPORTING_SYSLOG
48 : # ifdef HAVE_SYSLOG_H
49 : # include <syslog.h>
50 : # endif
51 : #endif
52 :
53 :
54 : /* err_level reflects the level of errors that are reported */
55 :
56 : err_reporting_level_t err_level = err_level_none;
57 :
58 : #ifdef SRTP_KERNEL_LINUX
59 : err_status_t
60 : err_reporting_init(char *ident) {
61 :
62 : return err_status_ok;
63 : }
64 :
65 : #else /* SRTP_KERNEL_LINUX */
66 :
67 : /* err_file is the FILE to which errors are reported */
68 :
69 : static FILE *err_file = NULL;
70 :
71 : err_status_t
72 0 : err_reporting_init(char *ident) {
73 : #ifdef ERR_REPORTING_SYSLOG
74 : openlog(ident, LOG_PID, LOG_AUTHPRIV);
75 : #endif
76 :
77 : /*
78 : * Believe it or not, openlog doesn't return an error on failure.
79 : * But then, neither does the syslog() call...
80 : */
81 :
82 : #ifdef ERR_REPORTING_STDOUT
83 : err_file = stdout;
84 : #elif defined(USE_ERR_REPORTING_FILE)
85 : /* open file for error reporting */
86 : err_file = fopen(ERR_REPORTING_FILE, "w");
87 : if (err_file == NULL)
88 : return err_status_init_fail;
89 : #endif
90 :
91 0 : return err_status_ok;
92 : }
93 :
94 : void
95 0 : err_report(int priority, char *format, ...) {
96 : va_list args;
97 :
98 0 : if ((err_reporting_level_t)priority <= err_level) {
99 :
100 0 : va_start(args, format);
101 0 : if (err_file != NULL) {
102 0 : vfprintf(err_file, format, args);
103 : /* fprintf(err_file, "\n"); */
104 : }
105 : #ifdef ERR_REPORTING_SYSLOG
106 : if (1) { /* FIXME: Make this a runtime option. */
107 : int syslogpri;
108 :
109 : switch (priority) {
110 : case err_level_emergency:
111 : syslogpri = LOG_EMERG;
112 : break;
113 : case err_level_alert:
114 : syslogpri = LOG_ALERT;
115 : break;
116 : case err_level_critical:
117 : syslogpri = LOG_CRIT;
118 : break;
119 : case err_level_error:
120 : syslogpri = LOG_ERR;
121 : break;
122 : case err_level_warning:
123 : syslogpri = LOG_WARNING;
124 : break;
125 : case err_level_notice:
126 : syslogpri = LOG_NOTICE;
127 : break;
128 : case err_level_info:
129 : syslogpri = LOG_INFO;
130 : break;
131 : case err_level_debug:
132 : case err_level_none:
133 : default:
134 : syslogpri = LOG_DEBUG;
135 : break;
136 : }
137 :
138 : vsyslog(syslogpri, format, args);
139 : }
140 : #endif
141 0 : va_end(args);
142 : }
143 0 : }
144 : #endif /* SRTP_KERNEL_LINUX */
145 :
146 : void
147 0 : err_reporting_set_level(err_reporting_level_t lvl) {
148 0 : err_level = lvl;
149 0 : }
|