summaryrefslogtreecommitdiff
path: root/log.c
diff options
context:
space:
mode:
Diffstat (limited to 'log.c')
-rw-r--r--log.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/log.c b/log.c
index 70bfcfd34..45affca13 100644
--- a/log.c
+++ b/log.c
@@ -34,12 +34,15 @@
34 */ 34 */
35 35
36#include "includes.h" 36#include "includes.h"
37RCSID("$OpenBSD: log.c,v 1.25 2003/01/11 18:29:43 markus Exp $"); 37RCSID("$OpenBSD: log.c,v 1.28 2003/05/24 09:02:22 djm Exp $");
38 38
39#include "log.h" 39#include "log.h"
40#include "xmalloc.h" 40#include "xmalloc.h"
41 41
42#include <syslog.h> 42#include <syslog.h>
43#if defined(HAVE_STRNVIS) && defined(HAVE_VIS_H)
44# include <vis.h>
45#endif
43 46
44static LogLevel log_level = SYSLOG_LEVEL_INFO; 47static LogLevel log_level = SYSLOG_LEVEL_INFO;
45static int log_on_stderr = 1; 48static int log_on_stderr = 1;
@@ -128,7 +131,7 @@ error(const char *fmt,...)
128/* Log this message (information that usually should go to the log). */ 131/* Log this message (information that usually should go to the log). */
129 132
130void 133void
131log(const char *fmt,...) 134logit(const char *fmt,...)
132{ 135{
133 va_list args; 136 va_list args;
134 137
@@ -341,6 +344,9 @@ log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr)
341void 344void
342do_log(LogLevel level, const char *fmt, va_list args) 345do_log(LogLevel level, const char *fmt, va_list args)
343{ 346{
347#ifdef OPENLOG_R
348 struct syslog_data sdata = SYSLOG_DATA_INIT;
349#endif
344 char msgbuf[MSGBUFSIZ]; 350 char msgbuf[MSGBUFSIZ];
345 char fmtbuf[MSGBUFSIZ]; 351 char fmtbuf[MSGBUFSIZ];
346 char *txt = NULL; 352 char *txt = NULL;
@@ -389,14 +395,19 @@ do_log(LogLevel level, const char *fmt, va_list args)
389 } else { 395 } else {
390 vsnprintf(msgbuf, sizeof(msgbuf), fmt, args); 396 vsnprintf(msgbuf, sizeof(msgbuf), fmt, args);
391 } 397 }
392 /* Escape magic chars in output. */ 398 strnvis(fmtbuf, msgbuf, sizeof(fmtbuf), VIS_SAFE|VIS_OCTAL);
393 strnvis(fmtbuf, msgbuf, sizeof(fmtbuf), VIS_OCTAL);
394
395 if (log_on_stderr) { 399 if (log_on_stderr) {
396 fprintf(stderr, "%s\r\n", fmtbuf); 400 snprintf(msgbuf, sizeof msgbuf, "%s\r\n", fmtbuf);
401 write(STDERR_FILENO, msgbuf, strlen(msgbuf));
397 } else { 402 } else {
403#ifdef OPENLOG_R
404 openlog_r(argv0 ? argv0 : __progname, LOG_PID, log_facility, &sdata);
405 syslog_r(pri, &sdata, "%.500s", fmtbuf);
406 closelog_r(&sdata);
407#else
398 openlog(argv0 ? argv0 : __progname, LOG_PID, log_facility); 408 openlog(argv0 ? argv0 : __progname, LOG_PID, log_facility);
399 syslog(pri, "%.500s", fmtbuf); 409 syslog(pri, "%.500s", fmtbuf);
400 closelog(); 410 closelog();
411#endif
401 } 412 }
402} 413}