Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 3 Mar 2001 19:49:48 -0800
From:      Don Lewis <Don.Lewis@tsc.tdk.com>
To:        Mike Tancsa <mike@sentex.net>, Don Lewis <Don.Lewis@tsc.tdk.com>, Cy Schubert - ITSD Open Systems Group <Cy.Schubert@uumail.gov.bc.ca>, green@FreeBSD.org, kris@FreeBSD.org
Cc:        stable@FreeBSD.org
Subject:   Re: more strange problem with broken pipes and ssh
Message-ID:  <200103040349.TAA25614@salsa.gv.tsc.tdk.com>
In-Reply-To: <4.2.2.20010303223335.01e487d8@marble.sentex.net>
References:  <200103021433.f22EXHS61992@cwsys.cwsent.com> <200103021433.f22EXHS61992@cwsys.cwsent.com> <4.2.2.20010303223335.01e487d8@marble.sentex.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mar 3, 10:35pm, Mike Tancsa wrote:
} Subject: Re: more strange problem with broken pipes and ssh
} At 07:18 PM 3/3/2001 -0800, Don Lewis wrote:
} >I believe the fix is to call "signal(SIGPIPE, SIG_DFL)" in do_exec_pty()
} >in session.c.
} 
} Well, I just popped this in the function, and it worked!  Thank you very 
} much for validating and fixing this most annoying problem!
} 
}          ---Mike

I'm also wondering of the signal(SIGPIPE, SIG_DFL) in do_exec_no_pty(),
which is a FreeBSD addition, might be misplaced.  I think it shouldn't
be called until after the fork().  Here's a slightly different patch
which removes the signal() call from do_exec_no_pty() and adds it to
do_child(), which handles the child process for both do_exec_no_pty()
and do_exec_pty().


Index: crypto/openssh/session.c
===================================================================
RCS file: /home/ncvs/src/crypto/openssh/session.c,v
retrieving revision 1.4.2.7
diff -u -u -r1.4.2.7 session.c
--- crypto/openssh/session.c	2001/02/04 20:21:06	1.4.2.7
+++ crypto/openssh/session.c	2001/03/04 03:36:26
@@ -448,8 +448,6 @@
 	if (s == NULL)
 		fatal("do_exec_no_pty: no session");
 
-	signal(SIGPIPE, SIG_DFL);
-
 	session_proctitle(s);
 
 #ifdef USE_PAM
@@ -972,6 +970,9 @@
 	extern char **environ;
 	struct stat st;
 	char *argv[10];
+
+	/* Allow the child processes to receive SIGPIPE */
+	signal(SIGPIPE, SIG_DFL);
 
 	/* login(1) is only called if we execute the login shell */
 	if (options.use_login && command != NULL)

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200103040349.TAA25614>