1706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh/*- 2706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * Copyright (c) 1997 Brian Somers <brian@Awfulhak.org> 3706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * All rights reserved. 4706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 5706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * Redistribution and use in source and binary forms, with or without 6706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * modification, are permitted provided that the following conditions 7706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * are met: 8706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 1. Redistributions of source code must retain the above copyright 9706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * notice, this list of conditions and the following disclaimer. 10706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 2. Redistributions in binary form must reproduce the above copyright 11706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * notice, this list of conditions and the following disclaimer in the 12706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * documentation and/or other materials provided with the distribution. 13706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 14706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * SUCH DAMAGE. 25706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 26706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * $FreeBSD: src/usr.sbin/ppp/log.c,v 1.53.34.1 2010/12/21 17:10:29 kensmith Exp $ 27706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh */ 28706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 29706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#include <sys/types.h> 30706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 31706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#include <ctype.h> 32706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#include <stdarg.h> 33706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#include <stdio.h> 34706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#include <string.h> 35706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#include <syslog.h> 36706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#include <termios.h> 37706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 38706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#include "defs.h" 39706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#include "command.h" 40706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#include "mbuf.h" 41706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#include "log.h" 42706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#include "descriptor.h" 43706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#include "prompt.h" 44706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 45706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstatic const char *const LogNames[] = { 46706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Async", 47706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "CBCP", 48706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "CCP", 49706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Chat", 50706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Command", 51706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Connect", 52706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Debug", 53706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "DNS", 54706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Filter", /* Log discarded packets */ 55706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "HDLC", 56706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "ID0", 57706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "IPCP", 58706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "IPV6CP", 59706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "LCP", 60706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "LQM", 61706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Phase", 62706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Physical", 63706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Radius", 64706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Sync", 65706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "TCP/IP", 66706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Timer", 67706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Tun", 68706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Warning", 69706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Error", 70706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh "Alert" 71706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh}; 72706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 73706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define MSK(n) (1<<((n)-1)) 74706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 75706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstatic u_long LogMask = MSK(LogPHASE); 76706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstatic u_long LogMaskLocal = MSK(LogERROR) | MSK(LogALERT) | MSK(LogWARN); 77706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstatic int LogTunno = -1; 78706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstatic struct prompt *promptlist; /* Where to log local stuff */ 79706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstruct prompt *log_PromptContext; 80706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehint log_PromptListChanged; 81706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 82706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstruct prompt * 83706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_PromptList() 84706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 85706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return promptlist; 86706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 87706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 88706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 89706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_RegisterPrompt(struct prompt *prompt) 90706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 91706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt->next = promptlist; 92706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh promptlist = prompt; 93706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt->active = 1; 94706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_DiscardAllLocal(&prompt->logmask); 95706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 96706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 97706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 98706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_ActivatePrompt(struct prompt *prompt) 99706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 100706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt->active = 1; 101706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogMaskLocal |= prompt->logmask; 102706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 103706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 104706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstatic void 105706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi YehLogSetMaskLocal(void) 106706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 107706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct prompt *p; 108706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 109706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogMaskLocal = MSK(LogERROR) | MSK(LogALERT) | MSK(LogWARN); 110706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh for (p = promptlist; p; p = p->next) 111706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogMaskLocal |= p->logmask; 112706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 113706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 114706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 115706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_DeactivatePrompt(struct prompt *prompt) 116706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 117706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (prompt->active) { 118706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt->active = 0; 119706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogSetMaskLocal(); 120706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 121706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 122706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 123706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 124706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_UnRegisterPrompt(struct prompt *prompt) 125706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 126706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (prompt) { 127706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct prompt **p; 128706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 129706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh for (p = &promptlist; *p; p = &(*p)->next) 130706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (*p == prompt) { 131706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh *p = prompt->next; 132706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt->next = NULL; 133706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh break; 134706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 135706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogSetMaskLocal(); 136706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_PromptListChanged++; 137706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 138706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 139706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 140706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 141706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_DestroyPrompts(struct server *s) 142706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 143706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct prompt *p, *pn, *pl; 144706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 145706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh p = promptlist; 146706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh pl = NULL; 147706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh while (p) { 148706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh pn = p->next; 149706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (s && p->owner == s) { 150706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (pl) 151706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh pl->next = p->next; 152706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh else 153706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh promptlist = p->next; 154706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh p->next = NULL; 155706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_Destroy(p, 1); 156706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } else 157706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh pl = p; 158706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh p = pn; 159706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 160706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 161706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 162706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 163706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_DisplayPrompts() 164706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 165706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct prompt *p; 166706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 167706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh for (p = promptlist; p; p = p->next) 168706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_Required(p); 169706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 170706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 171706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 172706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_WritePrompts(struct datalink *dl, const char *fmt,...) 173706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 174706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh va_list ap; 175706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct prompt *p; 176706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 177706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh va_start(ap, fmt); 178706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh for (p = promptlist; p; p = p->next) 179706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (prompt_IsTermMode(p, dl)) 180706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_vPrintf(p, fmt, ap); 181706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh va_end(ap); 182706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 183706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 184706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 185706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_SetTtyCommandMode(struct datalink *dl) 186706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 187706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct prompt *p; 188706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 189706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh for (p = promptlist; p; p = p->next) 190706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (prompt_IsTermMode(p, dl)) 191706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_TtyCommandMode(p); 192706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 193706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 194706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstatic int 195706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi YehsyslogLevel(int lev) 196706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 197706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh switch (lev) { 198706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh case LogLOG: 199706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return LOG_INFO; 200706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh case LogDEBUG: 201706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh case LogTIMER: 202706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return LOG_DEBUG; 203706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh case LogWARN: 204706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return LOG_WARNING; 205706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh case LogERROR: 206706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return LOG_ERR; 207706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh case LogALERT: 208706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return LOG_ALERT; 209706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 210706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return lev >= LogMIN && lev <= LogMAX ? LOG_INFO : 0; 211706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 212706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 213706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehconst char * 214706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_Name(int id) 215706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 216706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (id == LogLOG) 217706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return "LOG"; 218706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return id < LogMIN || id > LogMAX ? "Unknown" : LogNames[id - 1]; 219706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 220706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 221706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 222706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_Keep(int id) 223706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 224706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (id >= LogMIN && id <= LogMAXCONF) 225706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogMask |= MSK(id); 226706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 227706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 228706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 229706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_KeepLocal(int id, u_long *mask) 230706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 231706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (id >= LogMIN && id <= LogMAXCONF) { 232706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogMaskLocal |= MSK(id); 233706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh *mask |= MSK(id); 234706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 235706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 236706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 237706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 238706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_Discard(int id) 239706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 240706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (id >= LogMIN && id <= LogMAXCONF) 241706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogMask &= ~MSK(id); 242706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 243706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 244706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 245706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_DiscardLocal(int id, u_long *mask) 246706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 247706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (id >= LogMIN && id <= LogMAXCONF) { 248706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh *mask &= ~MSK(id); 249706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogSetMaskLocal(); 250706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 251706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 252706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 253706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 254706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_DiscardAll() 255706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 256706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogMask = 0; 257706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 258706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 259706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 260706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_DiscardAllLocal(u_long *mask) 261706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 262706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh *mask = MSK(LogERROR) | MSK(LogALERT) | MSK(LogWARN); 263706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogSetMaskLocal(); 264706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 265706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 266706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehint 267706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_IsKept(int id) 268706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 269706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (id == LogLOG) 270706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return LOG_KEPT_SYSLOG; 271706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (id < LogMIN || id > LogMAX) 272706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return 0; 273706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (id > LogMAXCONF) 274706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return LOG_KEPT_LOCAL | LOG_KEPT_SYSLOG; 275706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 276706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return ((LogMaskLocal & MSK(id)) ? LOG_KEPT_LOCAL : 0) | 277706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh ((LogMask & MSK(id)) ? LOG_KEPT_SYSLOG : 0); 278706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 279706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 280706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehint 281706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_IsKeptLocal(int id, u_long mask) 282706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 283706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (id < LogMIN || id > LogMAX) 284706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return 0; 285706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (id > LogMAXCONF) 286706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return LOG_KEPT_LOCAL | LOG_KEPT_SYSLOG; 287706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 288706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return ((mask & MSK(id)) ? LOG_KEPT_LOCAL : 0) | 289706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh ((LogMask & MSK(id)) ? LOG_KEPT_SYSLOG : 0); 290706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 291706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 292706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 293706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_Open(const char *Name) 294706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 295706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh openlog(Name, LOG_PID, LOG_DAEMON); 296706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 297706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 298706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 299706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_SetTun(int tunno) 300706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 301706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogTunno = tunno; 302706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 303706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 304706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 305706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_Close() 306706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 307706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh closelog(); 308706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogTunno = -1; 309706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 310706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 311706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 312706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_Printf(int lev, const char *fmt,...) 313706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 314706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh va_list ap; 315706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct prompt *prompt; 316706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 317706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (log_IsKept(lev)) { 318706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh char nfmt[200]; 319706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 320706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh va_start(ap, fmt); 321706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (promptlist && (log_IsKept(lev) & LOG_KEPT_LOCAL)) { 322706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if ((log_IsKept(LogTUN) & LOG_KEPT_LOCAL) && LogTunno != -1) 323706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh snprintf(nfmt, sizeof nfmt, "%s%d: %s: %s", TUN_NAME, 324706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogTunno, log_Name(lev), fmt); 325706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh else 326706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh snprintf(nfmt, sizeof nfmt, "%s: %s", log_Name(lev), fmt); 327706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 328706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (log_PromptContext && lev == LogWARN) 329706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh /* Warnings just go to the current prompt */ 330706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_vPrintf(log_PromptContext, nfmt, ap); 331706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh else for (prompt = promptlist; prompt; prompt = prompt->next) 332706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (lev > LogMAXCONF || (prompt->logmask & MSK(lev))) 333706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_vPrintf(prompt, nfmt, ap); 334706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 335706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh va_end(ap); 336706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 337706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh va_start(ap, fmt); 338706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if ((log_IsKept(lev) & LOG_KEPT_SYSLOG) && 339706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh (lev != LogWARN || !log_PromptContext)) { 340706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if ((log_IsKept(LogTUN) & LOG_KEPT_SYSLOG) && LogTunno != -1) 341706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh snprintf(nfmt, sizeof nfmt, "%s%d: %s: %s", TUN_NAME, 342706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh LogTunno, log_Name(lev), fmt); 343706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh else 344706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh snprintf(nfmt, sizeof nfmt, "%s: %s", log_Name(lev), fmt); 345706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh vsyslog(syslogLevel(lev), nfmt, ap); 346706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 347706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh va_end(ap); 348706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 349706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 350706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 351706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 352706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_DumpBp(int lev, const char *hdr, const struct mbuf *bp) 353706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 354706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (log_IsKept(lev)) { 355706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh char buf[68]; 356706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh char *b, *c; 357706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh const u_char *ptr; 358706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh int f; 359706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 360706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (hdr && *hdr) 361706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_Printf(lev, "%s\n", hdr); 362706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 363706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh b = buf; 364706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh c = b + 50; 365706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh do { 366706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh f = bp->m_len; 367706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh ptr = CONST_MBUF_CTOP(bp); 368706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh while (f--) { 369706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh sprintf(b, " %02x", (int) *ptr); 370706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh *c++ = isprint(*ptr) ? *ptr : '.'; 371706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh ptr++; 372706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh b += 3; 373706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (b == buf + 48) { 374706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh memset(b, ' ', 2); 375706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh *c = '\0'; 376706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_Printf(lev, "%s\n", buf); 377706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh b = buf; 378706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh c = b + 50; 379706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 380706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 381706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } while ((bp = bp->m_next) != NULL); 382706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 383706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (b > buf) { 384706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh memset(b, ' ', 50 - (b - buf)); 385706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh *c = '\0'; 386706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_Printf(lev, "%s\n", buf); 387706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 388706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 389706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 390706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 391706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehvoid 392706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_DumpBuff(int lev, const char *hdr, const u_char *ptr, int n) 393706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 394706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (log_IsKept(lev)) { 395706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh char buf[68]; 396706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh char *b, *c; 397706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 398706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (hdr && *hdr) 399706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_Printf(lev, "%s\n", hdr); 400706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh while (n > 0) { 401706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh b = buf; 402706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh c = b + 50; 403706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh for (b = buf; b != buf + 48 && n--; b += 3, ptr++) { 404706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh sprintf(b, " %02x", (int) *ptr); 405706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh *c++ = isprint(*ptr) ? *ptr : '.'; 406706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 407706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh memset(b, ' ', 50 - (b - buf)); 408706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh *c = '\0'; 409706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_Printf(lev, "%s\n", buf); 410706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 411706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 412706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 413706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 414706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehint 415706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_ShowLevel(struct cmdargs const *arg) 416706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 417706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh int i; 418706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 419706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_Printf(arg->prompt, "Log: "); 420706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh for (i = LogMIN; i <= LogMAX; i++) 421706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (log_IsKept(i) & LOG_KEPT_SYSLOG) 422706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_Printf(arg->prompt, " %s", log_Name(i)); 423706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 424706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_Printf(arg->prompt, "\nLocal:"); 425706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh for (i = LogMIN; i <= LogMAX; i++) 426706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (log_IsKeptLocal(i, arg->prompt->logmask) & LOG_KEPT_LOCAL) 427706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_Printf(arg->prompt, " %s", log_Name(i)); 428706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 429706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_Printf(arg->prompt, "\n"); 430706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 431706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return 0; 432706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 433706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 434706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehint 435706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_SetLevel(struct cmdargs const *arg) 436706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 437706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh int i, res, argc, local; 438706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh char const *const *argv, *argp; 439706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 440706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh argc = arg->argc - arg->argn; 441706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh argv = arg->argv + arg->argn; 442706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh res = 0; 443706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 444706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (argc == 0 || strcasecmp(argv[0], "local")) 445706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh local = 0; 446706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh else { 447706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (arg->prompt == NULL) { 448706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_Printf(LogWARN, "set log local: Only available on the" 449706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh " command line\n"); 450706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return 1; 451706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 452706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh argc--; 453706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh argv++; 454706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh local = 1; 455706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 456706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 457706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (argc == 0 || (argv[0][0] != '+' && argv[0][0] != '-')) { 458706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (local) 459706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_DiscardAllLocal(&arg->prompt->logmask); 460706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh else 461706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_DiscardAll(); 462706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 463706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 464706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh while (argc--) { 465706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh argp = **argv == '+' || **argv == '-' ? *argv + 1 : *argv; 466706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh /* Special case 'all' */ 467706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (strcasecmp(argp, "all") == 0) { 468706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (**argv == '-') { 469706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (local) 470706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh for (i = LogMIN; i <= LogMAX; i++) 471706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_DiscardLocal(i, &arg->prompt->logmask); 472706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh else 473706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh for (i = LogMIN; i <= LogMAX; i++) 474706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_Discard(i); 475706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } else if (local) 476706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh for (i = LogMIN; i <= LogMAX; i++) 477706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_KeepLocal(i, &arg->prompt->logmask); 478706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh else 479706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh for (i = LogMIN; i <= LogMAX; i++) 480706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_Keep(i); 481706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh argv++; 482706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh continue; 483706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 484706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh for (i = LogMIN; i <= LogMAX; i++) 485706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (strcasecmp(argp, log_Name(i)) == 0) { 486706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (**argv == '-') { 487706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (local) 488706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_DiscardLocal(i, &arg->prompt->logmask); 489706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh else 490706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_Discard(i); 491706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } else if (local) 492706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_KeepLocal(i, &arg->prompt->logmask); 493706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh else 494706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_Keep(i); 495706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh break; 496706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 497706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (i > LogMAX) { 498706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh log_Printf(LogWARN, "%s: Invalid log value\n", argp); 499706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh res = -1; 500706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 501706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh argv++; 502706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 503706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return res; 504706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 505706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 506706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehint 507706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehlog_ShowWho(struct cmdargs const *arg) 508706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh{ 509706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct prompt *p; 510706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 511706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh for (p = promptlist; p; p = p->next) { 512706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_Printf(arg->prompt, "%s (%s)", p->src.type, p->src.from); 513706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (p == arg->prompt) 514706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_Printf(arg->prompt, " *"); 515706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh if (!p->active) 516706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_Printf(arg->prompt, " ^Z"); 517706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh prompt_Printf(arg->prompt, "\n"); 518706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } 519706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 520706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh return 0; 521706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh} 522