--- openssh-3.8p1/clientloop.c.orig 2003-12-17 06:33:11.000000000 +0100 +++ openssh-3.8p1/clientloop.c 2004-02-25 21:25:43.000000000 +0100 @@ -99,6 +99,9 @@ */ extern char *host; +/* if we process SIGPIPE */ +extern int enable_sigpipe; + /* * Flag to indicate that we have received a window change signal which has * not yet been processed. This will cause a message indicating the new @@ -940,6 +943,8 @@ signal(SIGQUIT, signal_handler); if (signal(SIGTERM, SIG_IGN) != SIG_IGN) signal(SIGTERM, signal_handler); + if (enable_sigpipe) + signal(SIGPIPE, signal_handler); if (have_pty) signal(SIGWINCH, window_change_handler); --- openssh-3.8p1/ssh.1.orig 2003-12-17 06:33:11.000000000 +0100 +++ openssh-3.8p1/ssh.1 2004-02-25 21:28:27.000000000 +0100 @@ -43,7 +43,7 @@ .Nd OpenSSH SSH client (remote login program) .Sh SYNOPSIS .Nm ssh -.Op Fl 1246AaCfgkNnqsTtVvXxY +.Op Fl 1246ABaCfgkNnqsTtVvXxY .Op Fl b Ar bind_address .Op Fl c Ar cipher_spec .Op Fl D Ar port @@ -426,6 +426,10 @@ .It Fl b Ar bind_address Specify the interface to transmit from on machines with multiple interfaces or aliased addresses. +.It Fl B +Enables processing of SIGPIPE. Useful when using ssh output as input for +another process, for example in a shell script. Be careful - it may break +port/X11 forwarding when used. .It Fl C Requests compression of all data (including stdin, stdout, stderr, and data for forwarded X11 and TCP/IP connections). --- openssh-3.8p1/ssh.c.orig 2003-12-17 06:33:11.000000000 +0100 +++ openssh-3.8p1/ssh.c 2004-02-25 21:30:51.000000000 +0100 @@ -135,6 +135,9 @@ /* Should we execute a command or invoke a subsystem? */ int subsystem_flag = 0; +/* Enable sigpipe */ +int enable_sigpipe = 0; + /* # of replies received for global requests */ static int client_global_request_id = 0; @@ -153,6 +156,7 @@ fprintf(stderr, " -F config Config file (default: ~/%s).\n", _PATH_SSH_USER_CONFFILE); fprintf(stderr, " -A Enable authentication agent forwarding.\n"); + fprintf(stderr, " -B Enable SIGPIPE processing.\n"); fprintf(stderr, " -a Disable authentication agent forwarding (default).\n"); fprintf(stderr, " -X Enable X11 connection forwarding.\n"); fprintf(stderr, " -Y Enable trusted X11 connection forwarding.\n"); @@ -265,7 +269,7 @@ again: while ((opt = getopt(ac, av, - "1246ab:c:e:fgi:kl:m:no:p:qstvxACD:F:I:L:NPR:TVXY")) != -1) { + "1246ab:c:e:fgi:kl:m:no:p:qstvxABCD:F:I:L:NPR:TVXY")) != -1) { switch (opt) { case '1': options.protocol = SSH_PROTO_1; @@ -308,6 +312,9 @@ case 'A': options.forward_agent = 1; break; + case 'B': + enable_sigpipe = 1; + break; case 'k': options.gss_deleg_creds = 0; break;