plog.c revision 1c71527b277e2dc256262da2ed2169c566c5bf4d
1e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom/* $NetBSD: plog.c,v 1.4.6.2 2009/04/20 13:35:36 tteras Exp $ */ 2e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 3e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom/* Id: plog.c,v 1.11 2006/06/20 09:57:31 vanhu Exp */ 4e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 5e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom/* 6e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 7e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * All rights reserved. 8e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * 9e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * Redistribution and use in source and binary forms, with or without 10e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * modification, are permitted provided that the following conditions 11e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * are met: 12e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * 1. Redistributions of source code must retain the above copyright 13e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * notice, this list of conditions and the following disclaimer. 14e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * 2. Redistributions in binary form must reproduce the above copyright 15e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * notice, this list of conditions and the following disclaimer in the 16e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * documentation and/or other materials provided with the distribution. 17e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * 3. Neither the name of the project nor the names of its contributors 18e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * may be used to endorse or promote products derived from this software 195db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * without specific prior written permission. 205db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * 215db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 225db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 235db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 245db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 255db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 265db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 275db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 285db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 295db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 305db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 315db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root * SUCH DAMAGE. 325db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root */ 335db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 345db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#include "config.h" 355db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 365db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#include <sys/types.h> 375db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#include <sys/param.h> 385db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 395db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#include <stdlib.h> 405db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#include <stdio.h> 415db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#include <string.h> 425db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#include <errno.h> 435db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#ifdef HAVE_STDARG_H 445db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#include <stdarg.h> 455db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#else 465db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#include <varargs.h> 475db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#endif 485db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#if TIME_WITH_SYS_TIME 495db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root# include <sys/time.h> 505db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root# include <time.h> 515db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#else 525db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root# if HAVE_SYS_TIME_H 535db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root# include <sys/time.h> 545db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root# else 555db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root# include <time.h> 565db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root# endif 575db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root#endif 58e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom#include <ctype.h> 59e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom#include <err.h> 60e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 61e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom#include "var.h" 62a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom#include "misc.h" 63a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom#include "plog.h" 64a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom#include "logger.h" 65a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom#include "debug.h" 66a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom#include "gcmalloc.h" 67e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 68e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom#ifndef VA_COPY 69e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom# define VA_COPY(dst,src) memcpy(&(dst), &(src), sizeof(va_list)) 70e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom#endif 71e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 72e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromchar *pname = NULL; 73e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromu_int32_t loglevel = LLV_BASE; 74e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromint f_foreground = 0; 75e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 765db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootint print_location = 0; 775db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 785db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootstatic struct log *logp = NULL; 795db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootstatic char *logfile = NULL; 805db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 815db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootstatic char *plog_common __P((int, const char *, const char *)); 825db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root 835db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Rootstatic struct plogtags { 845db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root char *name; 855db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root int priority; 865db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root} ptab[] = { 875db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { "(not defined)", 0, }, 885db505e1f6a68c8d5dfdb0fed0b8607dea7bed96Kenny Root { "ERROR", LOG_INFO, }, 89e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { "WARNING", LOG_INFO, }, 90e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { "NOTIFY", LOG_INFO, }, 91e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { "INFO", LOG_INFO, }, 92e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { "DEBUG", LOG_DEBUG, }, 93e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom { "DEBUG2", LOG_DEBUG, }, 94e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom}; 95e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 96e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromstatic char * 97e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromplog_common(pri, fmt, func) 98e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom int pri; 99e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom const char *fmt, *func; 100e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{ 101e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom static char buf[800]; /* XXX shoule be allocated every time ? */ 102e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom char *p; 103e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom int reslen, len; 104e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 105e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom p = buf; 106e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom reslen = sizeof(buf); 107e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 108e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (logfile || f_foreground) { 109e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom time_t t; 110e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom struct tm *tm; 111e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 112e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom t = time(0); 113e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom tm = localtime(&t); 114e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom len = strftime(p, reslen, "%Y-%m-%d %T: ", tm); 115e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom p += len; 116e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom reslen -= len; 117e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 118e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 119e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (pri < ARRAYLEN(ptab)) { 120e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom len = snprintf(p, reslen, "%s: ", ptab[pri].name); 121e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (len >= 0 && len < reslen) { 122e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom p += len; 123e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom reslen -= len; 124e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } else 125e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom *p = '\0'; 126e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 127e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 128e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (print_location) 129e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom snprintf(p, reslen, "%s: %s", func, fmt); 130e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom else 131e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom snprintf(p, reslen, "%s", fmt); 132e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom#ifdef BROKEN_PRINTF 133e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom while ((p = strstr(buf,"%z")) != NULL) 134e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom p[1] = 'l'; 135e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom#endif 136e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 137e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return buf; 138e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom} 139e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 140e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromvoid 141e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom_plog(int pri, const char *func, struct sockaddr *sa, const char *fmt, ...) 142e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{ 143e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom va_list ap; 144e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 145e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom va_start(ap, fmt); 146e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom plogv(pri, func, sa, fmt, ap); 147e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom va_end(ap); 148e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom} 149e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 150e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromvoid 151e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromplogv(int pri, const char *func, struct sockaddr *sa, 152e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom const char *fmt, va_list ap) 153e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{ 154e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom char *newfmt; 155e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom va_list ap_bak; 156e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 157e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (pri > loglevel) 158e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return; 159e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 160e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom newfmt = plog_common(pri, fmt, func); 161e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 162e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom VA_COPY(ap_bak, ap); 163e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 164e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (f_foreground) 165e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom vprintf(newfmt, ap); 166e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 167e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (logfile) 168e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom log_vaprint(logp, newfmt, ap_bak); 169e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom else { 170e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (pri < ARRAYLEN(ptab)) 171e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom vsyslog(ptab[pri].priority, newfmt, ap_bak); 172e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom else 173e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom vsyslog(LOG_ALERT, newfmt, ap_bak); 174e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 175e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom} 176e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 177a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstromvoid 178e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromplogdump(pri, data, len) 179e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom int pri; 180e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom void *data; 181e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom size_t len; 182a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom{ 183e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom caddr_t buf; 184e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom size_t buflen; 185e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom int i, j; 186e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 187a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom if (pri > loglevel) 188e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return; 189e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 190e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom /* 191e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom * 2 words a bytes + 1 space 4 bytes + 1 newline 32 bytes 192a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom * + 2 newline + '\0' 193e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom */ 194e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom buflen = (len * 2) + (len / 4) + (len / 32) + 3; 195e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom buf = racoon_malloc(buflen); 196e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 197a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom i = 0; 198e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom j = 0; 199e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom while (j < len) { 200a198e1ecc615e26a167d0f2dca9fa7e5fc62de10Brian Carlstrom if (j % 32 == 0) 201e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom buf[i++] = '\n'; 202e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom else 203e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (j % 4 == 0) 204e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom buf[i++] = ' '; 205e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom snprintf(&buf[i], buflen - i, "%02x", 206e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom ((unsigned char *)data)[j] & 0xff); 207e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom i += 2; 208e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom j++; 209e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 210e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (buflen - i >= 2) { 211e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom buf[i++] = '\n'; 212e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom buf[i] = '\0'; 213e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 214e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom plog(pri, LOCATION, NULL, "%s", buf); 215e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 216e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom racoon_free(buf); 217e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom} 218e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 219e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromvoid 220e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromploginit() 221e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{ 222e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (logfile) { 223e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom logp = log_open(250, logfile); 224e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (logp == NULL) 225e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom errx(1, "ERROR: failed to open log file %s.", logfile); 226e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return; 227e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 228e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 229e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom openlog(pname, LOG_NDELAY, LOG_DAEMON); 230e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom} 231e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 232e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromvoid 233e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromplogset(file) 234e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom char *file; 235e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{ 236e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (logfile != NULL) 237e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom racoon_free(logfile); 238e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom logfile = racoon_strdup(file); 239e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom STRDUP_FATAL(logfile); 240e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom} 241e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 242e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom/* 243e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom Returns a printable string from (possibly) binary data ; 244e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom concatenates all unprintable chars to one space. 245e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom XXX Maybe the printable chars range is too large... 246e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom */ 247e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromchar* 248e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrombinsanitize(binstr, n) 249e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom char *binstr; 250e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom size_t n; 251e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{ 252e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom int p,q; 253e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom char* d; 254e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 255e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom d = racoon_malloc(n + 1); 256e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom for (p = 0, q = 0; p < n; p++) { 257e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (isgraph((int)binstr[p])) { 258e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom d[q++] = binstr[p]; 259e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } else { 260e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom if (q && d[q - 1] != ' ') 261e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom d[q++] = ' '; 262e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 263e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom } 264e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom d[q++] = '\0'; 265e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 266e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom return d; 267e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom} 268e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom 269e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom