From c8380583802b48dde2f45dc314512651361fce29 Mon Sep 17 00:00:00 2001 From: djm Date: Fri, 21 Jan 2022 07:04:19 +0000 Subject: [PATCH] add a helper for writing an error message to the stderr_buf and setting quit_pending; no functional change but saves a bunch of boilerplate --- usr.bin/ssh/clientloop.c | 50 ++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/usr.bin/ssh/clientloop.c b/usr.bin/ssh/clientloop.c index 4a828a4a2e9..7a98db945da 100644 --- a/usr.bin/ssh/clientloop.c +++ b/usr.bin/ssh/clientloop.c @@ -1,4 +1,4 @@ -/* $OpenBSD: clientloop.c,v 1.376 2022/01/11 01:26:47 djm Exp $ */ +/* $OpenBSD: clientloop.c,v 1.377 2022/01/21 07:04:19 djm Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -181,6 +181,24 @@ static struct global_confirms global_confirms = TAILQ_HEAD_INITIALIZER(global_confirms); void ssh_process_session2_setup(int, int, int, struct sshbuf *); +static void quit_message(const char *fmt, ...) + __attribute__((__format__ (printf, 1, 2))); + +static void +quit_message(const char *fmt, ...) +{ + char *msg; + va_list args; + int r; + + va_start(args, fmt); + xvasprintf(&msg, fmt, args); + va_end(args); + + if ((r = sshbuf_putf(stderr_buffer, "%s\r\n", msg)) != 0) + fatal_fr(r, "sshbuf_putf"); + quit_pending = 1; +} /* * Signal handler for the window change signal (SIGWINCH). This just sets a @@ -491,7 +509,7 @@ client_wait_until_can_do_something(struct ssh *ssh, struct pollfd **pfdp, { int timeout_secs, pollwait; time_t minwait_secs = 0, now = monotime(); - int r, ret; + int ret; u_int p; *conn_in_readyp = *conn_out_readyp = 0; @@ -558,10 +576,7 @@ client_wait_until_can_do_something(struct ssh *ssh, struct pollfd **pfdp, if (errno == EINTR) return; /* Note: we might still have data in the buffers. */ - if ((r = sshbuf_putf(stderr_buffer, - "poll: %s\r\n", strerror(errno))) != 0) - fatal_fr(r, "sshbuf_putf"); - quit_pending = 1; + quit_message("poll: %s", strerror(errno)); return; } @@ -609,7 +624,7 @@ static void client_process_net_input(struct ssh *ssh) { char buf[8192]; - int r, len; + int len; /* * Read input from the server, and add any such data to the buffer of @@ -620,11 +635,8 @@ client_process_net_input(struct ssh *ssh) len = read(connection_in, buf, sizeof(buf)); if (len == 0) { /* Received EOF. The remote host has closed the connection. */ - if ((r = sshbuf_putf(stderr_buffer, - "Connection to %.300s closed by remote host.\r\n", - host)) != 0) - fatal_fr(r, "sshbuf_putf"); - quit_pending = 1; + quit_message("Connection to %.300s closed by remote host.", + host); return; } /* @@ -639,11 +651,8 @@ client_process_net_input(struct ssh *ssh) * An error has encountered. Perhaps there is a * network problem. */ - if ((r = sshbuf_putf(stderr_buffer, - "Read from remote host %.300s: %.100s\r\n", - host, strerror(errno))) != 0) - fatal_fr(r, "sshbuf_putf"); - quit_pending = 1; + quit_message("Read from remote host %s: %s", + host, strerror(errno)); return; } ssh_packet_process_incoming(ssh, buf, len); @@ -1422,11 +1431,8 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg, * In interactive mode (with pseudo tty) display a message indicating * that the connection has been closed. */ - if (have_pty && options.log_level >= SYSLOG_LEVEL_INFO) { - if ((r = sshbuf_putf(stderr_buffer, - "Connection to %.64s closed.\r\n", host)) != 0) - fatal_fr(r, "sshbuf_putf"); - } + if (have_pty && options.log_level >= SYSLOG_LEVEL_INFO) + quit_message("Connection to %s closed.", host); /* Output any buffered data for stderr. */ if (sshbuf_len(stderr_buffer) > 0) { -- 2.20.1