]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
partial sync of regress/netcat.c with upstream
authortobias <tobias@openbsd.org>
Thu, 26 Mar 2015 21:22:50 +0000 (21:22 +0000)
committerDamien Miller <djm@mindrot.org>
Fri, 29 May 2020 04:47:50 +0000 (14:47 +1000)
The code in socks.c writes multiple times in a row to a socket. If the socket becomes invalid between these calls (e.g. connection closed), write will throw SIGPIPE. With this patch, SIGPIPE is ignored so we can handle write's -1 return value (errno will be EPIPE). Ultimately, it leads to program exit, too -- but with nicer error message. :)

with input by and ok djm

regress/netcat.c

index 30e49ac01760e6fc05a00072c83be0e79759db10..dff2364cc725af5f5fa75eb32e2ca47b8111b134 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: netcat.c,v 1.128 2015/03/26 10:36:03 tobias Exp $ */
+/* $OpenBSD: netcat.c,v 1.129 2015/03/26 21:22:50 tobias Exp $ */
 /*
  * Copyright (c) 2001 Eric Jackson <ericj@monkey.org>
  *
 #include <netinet/ip.h>
 
 #include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
 #include <netdb.h>
+#include <signal.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <fcntl.h>
-#include <limits.h>
 #include "atomicio.h"
 
 #ifdef HAVE_POLL_H
@@ -162,6 +163,8 @@ main(int argc, char *argv[])
        uport = NULL;
        sv = NULL;
 
+       signal(SIGPIPE, SIG_IGN);
+
        while ((ch = getopt(argc, argv,
            "46DdFhI:i:klNnO:P:p:rSs:tT:UuV:vw:X:x:z")) != -1) {
                switch (ch) {