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 *
|
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}
|