From 94d661ac8cb907e0a869759f76cd7134c9105e6c Mon Sep 17 00:00:00 2001 From: brian Date: Mon, 9 Jun 1997 03:27:43 +0000 Subject: Overhaul ppp: o Use syslog o Remove references to stdout/stderr (incl perror()) o Introduce VarTerm - the interactive terminal or zero o Allow "set timeout" to affect current session o Change "set debug" to "set log" o Allow "set log [+|-]flag" o Make MSEXT and PASSWDAUTH stuff the default o Move all #ifdef DEBUG stuff into the code - this shouldn't be too much overhead. It's now controlled with "set log +debug" o Add "set log command, debug, tun, warn, error, alert" o Remove cdefs.h, and assume an ansi compiler. o Improve all diagnostic output o Don't trap SIGSEGV o SIGHUP now terminates again (log files are controlled by syslog) o Call CloseModem() when changing devices o Fix parsing of third arg of "delete" I think this fixes the "magic is same" problems that some people have been experiencing. The man page is being rewritten. It'll follow soon. --- usr.sbin/ppp/log.c | 373 +++++++++++++++-------------------------------------- 1 file changed, 102 insertions(+), 271 deletions(-) (limited to 'usr.sbin/ppp/log.c') diff --git a/usr.sbin/ppp/log.c b/usr.sbin/ppp/log.c index 7cd4332..a9ec54a 100644 --- a/usr.sbin/ppp/log.c +++ b/usr.sbin/ppp/log.c @@ -1,317 +1,148 @@ -/* - * PPP logging facility - * - * Written by Toshiharu OHNO (tony-o@iij.ad.jp) - * - * Copyright (C) 1993, Internet Initiative Japan, Inc. All rights reserverd. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the Internet Initiative Japan, Inc. The name of the - * IIJ may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * $Id: log.c,v 1.11 1997/05/26 00:44:05 brian Exp $ - * - */ -#include "defs.h" -#include -#include -#ifdef __STDC__ +#include +#include +#include +#include +#include #include -#else -#include -#endif -#ifdef NO_VSPRINTF #include -#endif - -#include "hdlc.h" - -#define MAXLOG 70 - -#define USELOGFILE - -#ifdef USELOGFILE -static FILE *logfile; -#endif -static char logbuff[MAX_MRU*3+(MAX_MRU/16+1)*22+80]; -char *logptr; -static struct mbuf *logtop; -static struct mbuf *lognext; -static int logcnt; -static int mypid; - -int loglevel = LOG_LINK_BIT | LOG_CARRIER_BIT | LOG_PHASE_BIT; - -void -ListLog() +#include "mbuf.h" +#include "log.h" +#include "loadalias.h" +#include "vars.h" + +static char *LogNames[] = { + "Async", + "Carrier", + "Chat", + "Command", + "Connect", + "Debug", + "HDLC", + "LCP", + "Link", + "LQM", + "Phase", + "TCP/IP", + "Tun", + "Warning", + "Error", + "Alert" +}; + +#define MSK(n) (1<<((n)-1)) + +static u_long LogMask = MSK(LogLINK) | MSK(LogCARRIER) | MSK(LogPHASE); +static int LogTunno = -1; + +static int +syslogLevel(int lev) { - struct mbuf *bp; - - for (bp = logtop; bp; bp = bp->next) { - write(1, MBUF_CTOP(bp), bp->cnt); - usleep(10); - } + switch (lev) { + case LogDEBUG: return LOG_DEBUG; + case LogWARN: return LOG_WARNING; + case LogERROR: return LOG_ERR; + case LogALERT: return LOG_ALERT; + } + return lev >= LogMIN && lev <= LogMAX ? LOG_INFO : 0; } -int -LogOpen(tunno) -int tunno; +const char * +LogName(int id) { -#ifdef USELOGFILE - char buf[80]; - - sprintf(buf, LOGFILE, tunno); - logfile = fopen(buf, "a"); - if (logfile == NULL) { - fprintf(stderr, "can't open %s.\r\n", buf); - return(1); - } -#endif - if (!(mode & MODE_DIRECT)) - fprintf(stderr, "Log level is %02x\r\n", loglevel); - logptr = logbuff; - logcnt = 0; - logtop = lognext = NULL; - return(0); + return id < LogMIN || id > LogMAX ? "Unknown" : LogNames[id-1]; } void -LogFlush() +LogKeep(int id) { - struct mbuf *bp; - int cnt; - -#ifdef USELOGFILE - *logptr = 0; - fprintf(logfile, "%s", logbuff); - fflush(logfile); -#endif - cnt = logptr - logbuff + 1; - bp = mballoc(cnt, MB_LOG); - bcopy(logbuff, MBUF_CTOP(bp), cnt); - bp->cnt = cnt; - if (lognext) { - lognext->next = bp; - lognext = bp; - if (++logcnt > MAXLOG) { - logcnt--; - logtop = mbfree(logtop); - } - } else { - lognext = logtop = bp; - } - logptr = logbuff; + if (id >= LogMIN && id <= LogMAXCONF) + LogMask |= MSK(id); } void -DupLog() +LogDiscard(int id) { - mypid = 0; -#ifdef USELOGFILE - dup2(fileno(logfile), 2); -#endif + if (id >= LogMIN && id <= LogMAXCONF) + LogMask &= ~MSK(id); } void -LogClose() +LogDiscardAll() { - LogFlush(); -#ifdef USELOGFILE - fclose(logfile); -#endif - logptr = NULL; + LogMask = 0; } -#ifdef NO_VSPRINTF -void -vsprintf(buf, fmt, av) -char *buf; -char *fmt; -va_list av; -{ - FILE foo; - - foo._cnt = BUFSIZ; - foo._base = foo._ptr = buf; /* may have to cast(unsigned char *) */ - foo._flag = _IOWRT+_IOSTRG; - (void) _doprnt(fmt, (va_list)av, &foo); - *foo._ptr = '\0'; /* plant terminating null character */ -} -#endif - -static void -vlogprintf(format, ap) -char *format; -va_list ap; +int +LogIsKept(int id) { - if (logptr) { - vsnprintf(logptr, sizeof(logbuff)-(logptr-logbuff), format, ap); - logptr += strlen(logptr); - LogFlush(); - } + if (id < LogMIN) + return 0; + if (id <= LogMAXCONF) + return LogMask & MSK(id); + return id <= LogMAX; } void -#ifdef __STDC__ -logprintf(char *format, ...) -#else -logprintf(va_alist) -va_dcl -#endif +LogOpen(const char *Name) { - va_list ap; -#ifdef __STDC__ - va_start(ap, format); -#else - char *format; - - va_start(ap); - format = va_arg(ap, char *); -#endif - vlogprintf(format, ap); - va_end(ap); + openlog(Name, LOG_PID, LOG_DAEMON); } void -LogDumpBp(level, header, bp) -int level; -char *header; -struct mbuf *bp; +LogSetTun(int tunno) { - u_char *cp; - int cnt, loc; - - if (!(loglevel & (1 << level))) - return; - LogTimeStamp(); - snprintf(logptr, sizeof(logbuff)-(logptr-logbuff), "%s\n", header); - logptr += strlen(logptr); - loc = 0; - LogTimeStamp(); - while (bp) { - cp = MBUF_CTOP(bp); - cnt = bp->cnt; - while (cnt-- > 0) { - snprintf(logptr, sizeof(logbuff)-(logptr-logbuff), " %02x", *cp++); - logptr += strlen(logptr); - if (++loc == 16) { - loc = 0; - *logptr++ = '\n'; - if (logptr - logbuff > 1500) - LogFlush(); - if (cnt) LogTimeStamp(); - } - } - bp = bp->next; - } - if (loc) *logptr++ = '\n'; - LogFlush(); + LogTunno = tunno; } void -LogDumpBuff(level, header, ptr, cnt) -int level; -char *header; -u_char *ptr; -int cnt; +LogClose() { - int loc; - - if (cnt < 1) return; - if (!(loglevel & (1 << level))) - return; - LogTimeStamp(); - snprintf(logptr, sizeof(logbuff)-(logptr-logbuff), "%s\n", header); - logptr += strlen(logptr); - LogTimeStamp(); - loc = 0; - while (cnt-- > 0) { - snprintf(logptr, sizeof(logbuff)-(logptr-logbuff), " %02x", *ptr++); - logptr += strlen(logptr); - if (++loc == 16) { - loc = 0; - *logptr++ = '\n'; - if (cnt) LogTimeStamp(); - } - } - if (loc) *logptr++ = '\n'; - LogFlush(); + closelog(); + LogTunno = -1; } void -LogTimeStamp() +LogPrintf(int lev, char *fmt, ...) { - struct tm *ptm; - time_t ltime; - - if (mypid == 0) - mypid = getpid(); - ltime = time(0); - ptm = localtime(<ime); - snprintf(logptr, sizeof(logbuff)-(logptr-logbuff), - "%02d-%02d %02d:%02d:%02d [%d] ", - ptm->tm_mon + 1, ptm->tm_mday, - ptm->tm_hour, ptm->tm_min, ptm->tm_sec, mypid); - logptr += strlen(logptr); + va_list ap; + va_start(ap, fmt); + if (LogIsKept(lev)) { + static char nfmt[200]; + + if (LogIsKept(LogTUN) && LogTunno != -1) + snprintf(nfmt, sizeof nfmt, "tun%d: %s: %s", + LogTunno, LogName(lev), fmt); + else + snprintf(nfmt, sizeof nfmt, "%s: %s", LogName(lev), fmt); + if ((lev == LogERROR || lev == LogALERT || lev == LogWARN) && VarTerm) + vfprintf(VarTerm, fmt, ap); + if (lev != LogWARN || !VarTerm) + vsyslog(syslogLevel(lev), nfmt, ap); + } + va_end(ap); } void -#ifdef __STDC__ -LogPrintf(int level, char *format, ...) -#else -LogPrintf(va_alist) -va_dcl -#endif +LogDumpBp(int lev, char *hdr, struct mbuf *bp) { - va_list ap; -#ifdef __STDC__ - va_start(ap, format); -#else - int level; - char *format; - - va_start(ap); - int = va_arg(ap, int); - format = va_arg(ap, char *); -#endif - if (!(loglevel & level)) - return; - LogTimeStamp(); - vlogprintf(format, ap); - va_end(ap); + LogDumpBuff(lev, hdr, MBUF_CTOP(bp), bp->cnt); } void -LogReOpen( sig ) -int sig; +LogDumpBuff(int lev, char *hdr, u_char *ptr, int n) { -#ifdef USELOGFILE - FILE *nlogfile; - char buf[80]; - - sprintf(buf, LOGFILE, tunno); - nlogfile = fopen(buf, "a"); - if (nlogfile == NULL) { - LogPrintf(~0,"can't re-open %s.\r\n", buf); - } - else { - LogPrintf(~0,"log file closed due to signal %d.\r\n",sig); - LogFlush(); - fclose(logfile); - logfile = nlogfile; - logptr = logbuff; - logcnt = 0; - logtop = lognext = NULL; - LogPrintf(~0,"log file opened due to signal %d.\r\n",sig); - } -#endif - LogFlush(); + if (LogIsKept(lev)) { + char buf[49]; + char *b; + int f; + + if (hdr && *hdr) + LogPrintf(lev, "%s", hdr); + while (n > 0) { + b = buf; + for (f = 0; f < 16 && n--; f++, b += 3) + sprintf(b, " %02x", (int)*ptr++); + LogPrintf(lev, buf); + } + } } -- cgit v1.1