diff options
Diffstat (limited to 'crypto/openssh/log.c')
-rw-r--r-- | crypto/openssh/log.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/crypto/openssh/log.c b/crypto/openssh/log.c index 84e4ce0..9bce255 100644 --- a/crypto/openssh/log.c +++ b/crypto/openssh/log.c @@ -34,12 +34,15 @@ */ #include "includes.h" -RCSID("$OpenBSD: log.c,v 1.25 2003/01/11 18:29:43 markus Exp $"); +RCSID("$OpenBSD: log.c,v 1.28 2003/05/24 09:02:22 djm Exp $"); #include "log.h" #include "xmalloc.h" #include <syslog.h> +#if defined(HAVE_STRNVIS) && defined(HAVE_VIS_H) +# include <vis.h> +#endif static LogLevel log_level = SYSLOG_LEVEL_INFO; static int log_on_stderr = 1; @@ -127,7 +130,7 @@ error(const char *fmt,...) /* Log this message (information that usually should go to the log). */ void -log(const char *fmt,...) +logit(const char *fmt,...) { va_list args; @@ -339,6 +342,9 @@ log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr) void do_log(LogLevel level, const char *fmt, va_list args) { +#ifdef OPENLOG_R + struct syslog_data sdata = SYSLOG_DATA_INIT; +#endif char msgbuf[MSGBUFSIZ]; char fmtbuf[MSGBUFSIZ]; char *txt = NULL; @@ -387,14 +393,19 @@ do_log(LogLevel level, const char *fmt, va_list args) } else { vsnprintf(msgbuf, sizeof(msgbuf), fmt, args); } - /* Escape magic chars in output. */ - strnvis(fmtbuf, msgbuf, sizeof(fmtbuf), VIS_OCTAL); - + strnvis(fmtbuf, msgbuf, sizeof(fmtbuf), VIS_SAFE|VIS_OCTAL); if (log_on_stderr) { - fprintf(stderr, "%s\r\n", fmtbuf); + snprintf(msgbuf, sizeof msgbuf, "%s\r\n", fmtbuf); + write(STDERR_FILENO, msgbuf, strlen(msgbuf)); } else { +#ifdef OPENLOG_R + openlog_r(argv0 ? argv0 : __progname, LOG_PID, log_facility, &sdata); + syslog_r(pri, &sdata, "%.500s", fmtbuf); + closelog_r(&sdata); +#else openlog(argv0 ? argv0 : __progname, LOG_PID, log_facility); syslog(pri, "%.500s", fmtbuf); closelog(); +#endif } } |