--- openssh-4.0p1/clientloop.c.orig 2005-03-01 11:24:33.000000000 +0100 +++ openssh-4.0p1/clientloop.c 2005-03-10 15:10:05.000000000 +0100 @@ -104,6 +104,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 @@ -1236,6 +1239,8 @@ signal(SIGQUIT, signal_handler); if (signal(SIGTERM, SIG_IGN) != SIG_IGN) signal(SIGTERM, signal_handler); + if (enable_sigpipe) + signal(SIGPIPE, signal_handler); signal(SIGWINCH, window_change_handler); if (have_pty) diff -urN openssh-3.9p1.org/ssh.0 openssh-3.9p1/ssh.0 --- openssh-3.9p1.org/ssh.0 2004-08-17 19:03:29.327565840 +0200 +++ openssh-3.9p1/ssh.0 2004-08-17 19:03:41.809668272 +0200 @@ -235,6 +235,8 @@ that enable them to authenticate using the identities loaded into the agent. + -B Enable SIGPIPE processing. + -a Disables forwarding of the authentication agent connection. -b bind_address --- openssh-5.6p1/ssh.1~ 2010-08-24 14:05:48.000000000 +0300 +++ openssh-5.6p1/ssh.1 2010-08-24 14:06:57.879253682 +0300 @@ -44,7 +44,7 @@ .Sh SYNOPSIS .Nm ssh .Bk -words -.Op Fl 1246AaCfgKkMNnqsTtVvXxYy +.Op Fl 1246AaBCfgKkMNnqsTtVvXxYy .Op Fl b Ar bind_address .Op Fl c Ar cipher_spec .Op Fl D Oo Ar bind_address : Oc Ns Ar port @@ -425,6 +425,10 @@ on the local machine as the source address of the connection. Only useful on systems with more than one address. +.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-4.0p1/ssh.c.orig 2005-03-02 02:04:33.000000000 +0100 +++ openssh-4.0p1/ssh.c 2005-03-10 15:11:10.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; @@ -157,7 +160,7 @@ usage(void) { fprintf(stderr, -"usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]\n" +"usage: ssh [-1246AaBCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]\n" " [-D [bind_address:]port] [-e escape_char] [-F configfile]\n" " [-i identity_file] [-L [bind_address:]port:host:hostport]\n" " [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]\n" @@ -275,7 +275,7 @@ again: while ((opt = getopt(ac, av, "1246ab:c:e:fgi:kl:m:no:p:qstvx" - "ACD:F:I:KL:MNO:PR:S:TVw:W:XYy")) != -1) { + "ABCD:F:I:KL:MNO:PR:S:TVw:W:XYy")) != -1) { switch (opt) { case '1': options.protocol = SSH_PROTO_1; @@ -291,6 +294,9 @@ case 'A': options.forward_agent = 1; break; + case 'B': + enable_sigpipe = 1; + break; case 'k': options.gss_deleg_creds = 0; break;