On Apr 21, 2009, at 04:15, Greg Hudson wrote:
> On Tue, 2009-04-21 at 00:34 -0400, James Y Knight wrote:
>> Perhaps the svnserve
>> process to notice that its *input* pipe had been closed, and abort
> It already does this; try running svnserve -t and hitting ctrl-D to
> terminate the input stream, and you'll see that it exits.
> (I don't know why that's not enough to solve the problem.)
It's not enough because Apple's sshd codebase is broken. I have filed
bug report rdar://6810722 with Apple about this. Here are some
details from an email exchange I've been having:
On Apr 20, 2009, at 23:53, Damien Miller wrote:
> On Mon, 20 Apr 2009, Kyle McKay wrote:
>> Thanks for your response.
>> On Apr 20, 2009, at 23:10, Damien Miller wrote:
>>> This doesn't look like bug#85 based on what you sent below. It looks
>>> more like a whatever that you were running failing to notice its
>> Actually after looking at this some more, I think Apple's sshd is
>> missing the Bug 85 patch and I think the debug messages back this up.
> No, Apple's sshd clearly does have the bug #85 patch:
>> debug2: channel 0: rcvd eow
> Would not be printed otherwise. Perhaps they have forcibly disabled
> USE_PIPES in session.c? It is required for the patch to correctly
>> And in this case sshd included the Bug 85 fix and so was using
>> pipes to
>> communicate with the child and the child therefore got a SIGPIPE on
>> the input
>> open -> closed transition and exited.
> No, in both cases the signalling between sshd and the child process is
> identical from the logs. There may be differences depending on whether
> Apple has modified their sshd to avoid using pipes (thwarting the
> half-close fix in the process), but you will need to post a full debug
> log from the server to tell.
Yup, you're right. Apple has disabled the USE_PIPES define in their
Here's the original file:
And the file they're using:
Here's the diff:
@@ -424,7 +424,9 @@
* This is called to fork and execute a command when we have no tty.
* will call do_child from the child, and server_loop from the parent
@@ -2082,8 +2084,10 @@
n_bytes = packet_remaining();
/* Set window size from the packet. */
pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel);
@@ -2321,9 +2325,11 @@
if (s->pid != 0)
record_logout(s->pid, s->tty, s->pw->pw_name);
/* Release the pseudo-tty. */
if (getuid() == 0)
* Close the server side of the socket pairs. We must do this after
Thanks for your help.
To unsubscribe from this discussion, e-mail: [users-unsubscribe_at_subversion.tigris.org].
Received on 2009-04-21 13:40:37 CEST