1 /* $Id: plog.c,v 1.6 2004/07/12 20:15:08 ludvigm Exp $ */
4 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the project nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 #include <sys/types.h>
35 #include <sys/param.h>
46 #if TIME_WITH_SYS_TIME
47 # include <sys/time.h>
51 # include <sys/time.h>
67 # define VA_COPY(dst,src) memcpy(&(dst), &(src), sizeof(va_list))
71 u_int32_t loglevel = LLV_BASE;
74 int print_location = 0;
76 static struct log *logp = NULL;
77 static char *logfile = NULL;
79 static char *plog_common __P((int, const char *, const char *));
81 static struct plogtags {
85 { "(not defined)", 0, },
86 { "INFO", LOG_INFO, },
87 { "NOTIFY", LOG_INFO, },
88 { "WARNING", LOG_INFO, },
89 { "ERROR", LOG_INFO, },
90 { "DEBUG", LOG_DEBUG, },
91 { "DEBUG2", LOG_DEBUG, },
95 plog_common(pri, fmt, func)
97 const char *fmt, *func;
99 static char buf[800]; /* XXX shoule be allocated every time ? */
104 reslen = sizeof(buf);
106 if (logfile || f_foreground) {
112 len = strftime(p, reslen, "%Y-%m-%d %T: ", tm);
117 if (pri < ARRAYLEN(ptab)) {
118 len = snprintf(p, reslen, "%s: ", ptab[pri].name);
119 if (len >= 0 && len < reslen) {
127 snprintf(p, reslen, "%s: %s", func, fmt);
129 snprintf(p, reslen, "%s", fmt);
135 plog(int pri, const char *func, struct sockaddr *sa, const char *fmt, ...)
140 plogv(pri, func, sa, fmt, ap);
145 plogv(int pri, const char *func, struct sockaddr *sa,
146 const char *fmt, va_list ap)
154 newfmt = plog_common(pri, fmt, func);
162 log_vaprint(logp, newfmt, ap_bak);
164 if (pri < ARRAYLEN(ptab))
165 vsyslog(ptab[pri].priority, newfmt, ap_bak);
167 vsyslog(LOG_ALERT, newfmt, ap_bak);
172 plogdump(pri, data, len)
185 * 2 words a bytes + 1 space 4 bytes + 1 newline 32 bytes
188 buflen = (len * 2) + (len / 4) + (len / 32) + 3;
189 buf = racoon_malloc(buflen);
199 snprintf(&buf[i], buflen - i, "%02x",
200 ((unsigned char *)data)[j] & 0xff);
204 if (buflen - i >= 2) {
208 plog(pri, LOCATION, NULL, "%s", buf);
217 logp = log_open(250, logfile);
219 errx(1, "ERROR: failed to open log file %s.", logfile);
223 openlog(pname, LOG_NDELAY, LOG_DAEMON);
231 racoon_free(logfile);
232 logfile = strdup(file);