Deleted Added
full compact
log.c (31962) log.c (32663)
1/*-
2 * Copyright (c) 1997 Brian Somers <brian@Awfulhak.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
1/*-
2 * Copyright (c) 1997 Brian Somers <brian@Awfulhak.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $Id: log.c,v 1.23 1997/12/21 12:11:07 brian Exp $
26 * $Id: log.c,v 1.24 1997/12/24 09:29:05 brian Exp $
27 */
28
29#include <sys/param.h>
30#include <netinet/in.h>
27 */
28
29#include <sys/param.h>
30#include <netinet/in.h>
31#include <sys/socket.h>
32
33#include <stdarg.h>
34#include <stdio.h>
35#include <syslog.h>
36
37#include "command.h"
38#include "mbuf.h"
39#include "log.h"
40#include "loadalias.h"
41#include "defs.h"
42#include "vars.h"
43
44static const char *LogNames[] = {
45 "Async",
46 "Carrier",
47 "CCP",
48 "Chat",
49 "Command",
50 "Connect",
51 "Debug",
52 "HDLC",
53 "ID0",
54 "IPCP",
55 "LCP",
56 "Link",
57 "LQM",
58 "Phase",
59 "TCP/IP",
60 "Tun",
61 "Warning",
62 "Error",
63 "Alert"
64};
65
66#define MSK(n) (1<<((n)-1))
67
68static u_long LogMask = MSK(LogLINK) | MSK(LogCARRIER) | MSK(LogPHASE);
69static u_long LogMaskLocal = MSK(LogERROR) | MSK(LogALERT) | MSK(LogWARN);
70static int LogTunno = -1;
71
72static int
73syslogLevel(int lev)
74{
75 switch (lev) {
76 case LogDEBUG:return LOG_DEBUG;
77 case LogWARN:
78 return LOG_WARNING;
79 case LogERROR:
80 return LOG_ERR;
81 case LogALERT:
82 return LOG_ALERT;
83 }
84 return lev >= LogMIN && lev <= LogMAX ? LOG_INFO : 0;
85}
86
87const char *
88LogName(int id)
89{
90 return id < LogMIN || id > LogMAX ? "Unknown" : LogNames[id - 1];
91}
92
93void
94LogKeep(int id)
95{
96 if (id >= LogMIN && id <= LogMAXCONF)
97 LogMask |= MSK(id);
98}
99
100void
101LogKeepLocal(int id)
102{
103 if (id >= LogMIN && id <= LogMAXCONF)
104 LogMaskLocal |= MSK(id);
105}
106
107void
108LogDiscard(int id)
109{
110 if (id >= LogMIN && id <= LogMAXCONF)
111 LogMask &= ~MSK(id);
112}
113
114void
115LogDiscardLocal(int id)
116{
117 if (id >= LogMIN && id <= LogMAXCONF)
118 LogMaskLocal &= ~MSK(id);
119}
120
121void
122LogDiscardAll()
123{
124 LogMask = 0;
125}
126
127void
128LogDiscardAllLocal()
129{
130 LogMaskLocal = 0;
131}
132
133int
134LogIsKept(int id)
135{
136 if (id < LogMIN || id > LogMAX)
137 return 0;
138 if (id > LogMAXCONF)
139 return LOG_KEPT_LOCAL | LOG_KEPT_SYSLOG;
140
141 return ((LogMaskLocal & MSK(id)) ? LOG_KEPT_LOCAL : 0) |
142 ((LogMask & MSK(id)) ? LOG_KEPT_SYSLOG : 0);
143}
144
145void
146LogOpen(const char *Name)
147{
148 openlog(Name, LOG_PID, LOG_DAEMON);
149}
150
151void
152LogSetTun(int tunno)
153{
154 LogTunno = tunno;
155}
156
157void
158LogClose()
159{
160 closelog();
161 LogTunno = -1;
162}
163
164void
165LogPrintf(int lev, const char *fmt,...)
166{
167 va_list ap;
168
169 va_start(ap, fmt);
170 if (LogIsKept(lev)) {
171 static char nfmt[200];
172
173 if ((LogIsKept(lev) & LOG_KEPT_LOCAL) && VarTerm) {
174 if ((LogIsKept(LogTUN) & LOG_KEPT_LOCAL) && LogTunno != -1)
175 snprintf(nfmt, sizeof nfmt, "tun%d: %s: %s",
176 LogTunno, LogName(lev), fmt);
177 else
178 snprintf(nfmt, sizeof nfmt, "%s: %s", LogName(lev), fmt);
179 vfprintf(VarTerm, nfmt, ap);
180 fflush(VarTerm);
181 }
182
183 if ((LogIsKept(lev) & LOG_KEPT_SYSLOG) && (lev != LogWARN || !VarTerm)) {
184 if ((LogIsKept(LogTUN) & LOG_KEPT_SYSLOG) && LogTunno != -1)
185 snprintf(nfmt, sizeof nfmt, "tun%d: %s: %s",
186 LogTunno, LogName(lev), fmt);
187 else
188 snprintf(nfmt, sizeof nfmt, "%s: %s", LogName(lev), fmt);
189 vsyslog(syslogLevel(lev), nfmt, ap);
190 }
191 }
192 va_end(ap);
193}
194
195void
196LogDumpBp(int lev, const char *hdr, const struct mbuf * bp)
197{
198 if (LogIsKept(lev)) {
199 char buf[50];
200 char *b;
201 u_char *ptr;
202 int f;
203
204 if (hdr && *hdr)
205 LogPrintf(lev, "%s\n", hdr);
206
207 b = buf;
208 do {
209 f = bp->cnt;
210 ptr = MBUF_CTOP(bp);
211 while (f--) {
212 sprintf(b, " %02x", (int) *ptr++);
213 b += 3;
214 if (b == buf + sizeof buf - 2) {
215 strcpy(b, "\n");
216 LogPrintf(lev, buf);
217 b = buf;
218 }
219 }
220 } while ((bp = bp->next) != NULL);
221
222 if (b > buf) {
223 strcpy(b, "\n");
224 LogPrintf(lev, buf);
225 }
226 }
227}
228
229void
230LogDumpBuff(int lev, const char *hdr, const u_char * ptr, int n)
231{
232 if (LogIsKept(lev)) {
233 char buf[50];
234 char *b;
235
236 if (hdr && *hdr)
237 LogPrintf(lev, "%s\n", hdr);
238 while (n > 0) {
239 b = buf;
240 for (b = buf; b != buf + sizeof buf - 2 && n--; b += 3)
241 sprintf(b, " %02x", (int) *ptr++);
242 strcpy(b, "\n");
243 LogPrintf(lev, buf);
244 }
245 }
246}
31
32#include <stdarg.h>
33#include <stdio.h>
34#include <syslog.h>
35
36#include "command.h"
37#include "mbuf.h"
38#include "log.h"
39#include "loadalias.h"
40#include "defs.h"
41#include "vars.h"
42
43static const char *LogNames[] = {
44 "Async",
45 "Carrier",
46 "CCP",
47 "Chat",
48 "Command",
49 "Connect",
50 "Debug",
51 "HDLC",
52 "ID0",
53 "IPCP",
54 "LCP",
55 "Link",
56 "LQM",
57 "Phase",
58 "TCP/IP",
59 "Tun",
60 "Warning",
61 "Error",
62 "Alert"
63};
64
65#define MSK(n) (1<<((n)-1))
66
67static u_long LogMask = MSK(LogLINK) | MSK(LogCARRIER) | MSK(LogPHASE);
68static u_long LogMaskLocal = MSK(LogERROR) | MSK(LogALERT) | MSK(LogWARN);
69static int LogTunno = -1;
70
71static int
72syslogLevel(int lev)
73{
74 switch (lev) {
75 case LogDEBUG:return LOG_DEBUG;
76 case LogWARN:
77 return LOG_WARNING;
78 case LogERROR:
79 return LOG_ERR;
80 case LogALERT:
81 return LOG_ALERT;
82 }
83 return lev >= LogMIN && lev <= LogMAX ? LOG_INFO : 0;
84}
85
86const char *
87LogName(int id)
88{
89 return id < LogMIN || id > LogMAX ? "Unknown" : LogNames[id - 1];
90}
91
92void
93LogKeep(int id)
94{
95 if (id >= LogMIN && id <= LogMAXCONF)
96 LogMask |= MSK(id);
97}
98
99void
100LogKeepLocal(int id)
101{
102 if (id >= LogMIN && id <= LogMAXCONF)
103 LogMaskLocal |= MSK(id);
104}
105
106void
107LogDiscard(int id)
108{
109 if (id >= LogMIN && id <= LogMAXCONF)
110 LogMask &= ~MSK(id);
111}
112
113void
114LogDiscardLocal(int id)
115{
116 if (id >= LogMIN && id <= LogMAXCONF)
117 LogMaskLocal &= ~MSK(id);
118}
119
120void
121LogDiscardAll()
122{
123 LogMask = 0;
124}
125
126void
127LogDiscardAllLocal()
128{
129 LogMaskLocal = 0;
130}
131
132int
133LogIsKept(int id)
134{
135 if (id < LogMIN || id > LogMAX)
136 return 0;
137 if (id > LogMAXCONF)
138 return LOG_KEPT_LOCAL | LOG_KEPT_SYSLOG;
139
140 return ((LogMaskLocal & MSK(id)) ? LOG_KEPT_LOCAL : 0) |
141 ((LogMask & MSK(id)) ? LOG_KEPT_SYSLOG : 0);
142}
143
144void
145LogOpen(const char *Name)
146{
147 openlog(Name, LOG_PID, LOG_DAEMON);
148}
149
150void
151LogSetTun(int tunno)
152{
153 LogTunno = tunno;
154}
155
156void
157LogClose()
158{
159 closelog();
160 LogTunno = -1;
161}
162
163void
164LogPrintf(int lev, const char *fmt,...)
165{
166 va_list ap;
167
168 va_start(ap, fmt);
169 if (LogIsKept(lev)) {
170 static char nfmt[200];
171
172 if ((LogIsKept(lev) & LOG_KEPT_LOCAL) && VarTerm) {
173 if ((LogIsKept(LogTUN) & LOG_KEPT_LOCAL) && LogTunno != -1)
174 snprintf(nfmt, sizeof nfmt, "tun%d: %s: %s",
175 LogTunno, LogName(lev), fmt);
176 else
177 snprintf(nfmt, sizeof nfmt, "%s: %s", LogName(lev), fmt);
178 vfprintf(VarTerm, nfmt, ap);
179 fflush(VarTerm);
180 }
181
182 if ((LogIsKept(lev) & LOG_KEPT_SYSLOG) && (lev != LogWARN || !VarTerm)) {
183 if ((LogIsKept(LogTUN) & LOG_KEPT_SYSLOG) && LogTunno != -1)
184 snprintf(nfmt, sizeof nfmt, "tun%d: %s: %s",
185 LogTunno, LogName(lev), fmt);
186 else
187 snprintf(nfmt, sizeof nfmt, "%s: %s", LogName(lev), fmt);
188 vsyslog(syslogLevel(lev), nfmt, ap);
189 }
190 }
191 va_end(ap);
192}
193
194void
195LogDumpBp(int lev, const char *hdr, const struct mbuf * bp)
196{
197 if (LogIsKept(lev)) {
198 char buf[50];
199 char *b;
200 u_char *ptr;
201 int f;
202
203 if (hdr && *hdr)
204 LogPrintf(lev, "%s\n", hdr);
205
206 b = buf;
207 do {
208 f = bp->cnt;
209 ptr = MBUF_CTOP(bp);
210 while (f--) {
211 sprintf(b, " %02x", (int) *ptr++);
212 b += 3;
213 if (b == buf + sizeof buf - 2) {
214 strcpy(b, "\n");
215 LogPrintf(lev, buf);
216 b = buf;
217 }
218 }
219 } while ((bp = bp->next) != NULL);
220
221 if (b > buf) {
222 strcpy(b, "\n");
223 LogPrintf(lev, buf);
224 }
225 }
226}
227
228void
229LogDumpBuff(int lev, const char *hdr, const u_char * ptr, int n)
230{
231 if (LogIsKept(lev)) {
232 char buf[50];
233 char *b;
234
235 if (hdr && *hdr)
236 LogPrintf(lev, "%s\n", hdr);
237 while (n > 0) {
238 b = buf;
239 for (b = buf; b != buf + sizeof buf - 2 && n--; b += 3)
240 sprintf(b, " %02x", (int) *ptr++);
241 strcpy(b, "\n");
242 LogPrintf(lev, buf);
243 }
244 }
245}