summaryrefslogtreecommitdiffstats
path: root/usr.bin/ssh/log.c
diff options
context:
space:
mode:
authordtucker <dtucker@openbsd.org>2013-04-07 02:10:33 +0000
committerdtucker <dtucker@openbsd.org>2013-04-07 02:10:33 +0000
commit222f36dac09c7eadb95658f516b0d3d55a56bf5c (patch)
treebc103d9c6aa94f3e5a7863b06eb3d5f0c013da00 /usr.bin/ssh/log.c
parentTurn an error into a warning to be able to start l2tp tunnels even if (diff)
downloadwireguard-openbsd-222f36dac09c7eadb95658f516b0d3d55a56bf5c.tar.xz
wireguard-openbsd-222f36dac09c7eadb95658f516b0d3d55a56bf5c.zip
Add -E option to ssh and sshd to append debugging logs to a specified file
instead of stderr or syslog. ok markus@, man page help jmc@
Diffstat (limited to 'usr.bin/ssh/log.c')
-rw-r--r--usr.bin/ssh/log.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/usr.bin/ssh/log.c b/usr.bin/ssh/log.c
index 61a2b4afa52..454f628b393 100644
--- a/usr.bin/ssh/log.c
+++ b/usr.bin/ssh/log.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: log.c,v 1.43 2012/09/06 04:37:39 dtucker Exp $ */
+/* $OpenBSD: log.c,v 1.44 2013/04/07 02:10:33 dtucker Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -36,6 +36,7 @@
#include <sys/types.h>
+#include <fcntl.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
@@ -50,6 +51,7 @@
static LogLevel log_level = SYSLOG_LEVEL_INFO;
static int log_on_stderr = 1;
+static int log_stderr_fd = STDERR_FILENO;
static int log_facility = LOG_AUTH;
static char *argv0;
static log_handler_fn *log_handler;
@@ -310,6 +312,20 @@ log_is_on_stderr(void)
return log_on_stderr;
}
+/* redirect what would usually get written to stderr to specified file */
+void
+log_redirect_stderr_to(const char *logfile)
+{
+ int fd;
+
+ if ((fd = open(logfile, O_WRONLY|O_CREAT|O_APPEND, 0600)) == -1) {
+ fprintf(stderr, "Couldn't open logfile %s: %s\n", logfile,
+ strerror(errno));
+ exit(1);
+ }
+ log_stderr_fd = fd;
+}
+
#define MSGBUFSIZ 1024
void
@@ -392,7 +408,7 @@ do_log(LogLevel level, const char *fmt, va_list args)
log_handler = tmp_handler;
} else if (log_on_stderr) {
snprintf(msgbuf, sizeof msgbuf, "%s\r\n", fmtbuf);
- write(STDERR_FILENO, msgbuf, strlen(msgbuf));
+ write(log_stderr_fd, msgbuf, strlen(msgbuf));
} else {
openlog_r(argv0 ? argv0 : __progname, LOG_PID, log_facility, &sdata);
syslog_r(pri, &sdata, "%.500s", fmtbuf);