[PATCH 1/1] log: do not print carriage return

Christian Hesse list at eworm.de
Sat Sep 7 02:05:33 AEST 2019

From: Christian Hesse <mail at eworm.de>

Logging to stderr results in line endings being terminated with carriage
return (\r) and new line (\n). While this is fine for terminals it may
have undesired effects when running from crond and logging to syslog
or similar.

I run ssh from cron on an recent linux host. Viewing logs with
journalctl I see:

Sep 06 16:50:01 linux CROND[152575]: [96B blob data]

Adding switch --all for unprintable characters it shows:

Sep 06 16:50:01 linux CROND[152575]: (root) CMDOUT (Warning: Permanently
added '' (ED25519) to the list of known hosts.^M)

Note the control character ^M. Removing the carriage return fixes this.

Signed-off-by: Christian Hesse <mail at eworm.de>
 log.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/log.c b/log.c
index d9c2d136..7e0737c4 100644
--- a/log.c
+++ b/log.c
@@ -462,7 +462,7 @@ do_log(LogLevel level, const char *fmt, va_list args)
 		tmp_handler(level, fmtbuf, log_handler_ctx);
 		log_handler = tmp_handler;
 	} else if (log_on_stderr) {
-		snprintf(msgbuf, sizeof msgbuf, "%.*s\r\n",
+		snprintf(msgbuf, sizeof msgbuf, "%.*s\n",
 		    (int)sizeof msgbuf - 3, fmtbuf);
 		(void)write(log_stderr_fd, msgbuf, strlen(msgbuf));
 	} else {

More information about the openssh-unix-dev mailing list