From 7712c60c36e1bf5a4432b146502b0533307417f4 Mon Sep 17 00:00:00 2001 From: Avery Pennarun Date: Tue, 3 May 2011 13:59:25 -0700 Subject: [PATCH] Insert two binary NUL bytes (\0) before SSHUTTLE0001 sync string. ...and search for those null bytes before looking for the sync string. This helps when people have misconfigured .bashrc to print messages even in non-interactive mode. (On my Debian Lenny system, .bashrc doesn't seem to run when you do 'ssh localhost ls', but on MacOS servers, it does. Hmm...) --- client.py | 7 +++++++ server.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/client.py b/client.py index 0ff5f2b..449a75a 100644 --- a/client.py +++ b/client.py @@ -198,7 +198,14 @@ def _main(listener, fw, ssh_cmd, remotename, python, latency_control, handlers.append(mux) expected = 'SSHUTTLE0001' + try: + v = 'x' + while v and v != '\0': + v = serversock.recv(1) + v = 'x' + while v and v != '\0': + v = serversock.recv(1) initstring = serversock.recv(len(expected)) except socket.error, e: if e.args[0] == errno.ECONNRESET: diff --git a/server.py b/server.py index c62c8b5..e1b327d 100644 --- a/server.py +++ b/server.py @@ -173,7 +173,7 @@ def main(): debug1(' %s/%d\n' % r) # synchronization header - sys.stdout.write('SSHUTTLE0001') + sys.stdout.write('\0\0SSHUTTLE0001') sys.stdout.flush() handlers = []