summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvery Pennarun <apenwarr@gmail.com>2011-05-03 13:59:25 -0700
committerAvery Pennarun <apenwarr@gmail.com>2011-05-03 13:59:25 -0700
commit7712c60c36e1bf5a4432b146502b0533307417f4 (patch)
treedb84b2e3986c338690e9a1e6db588311f0c3ad3c
parent65b0390fe9fd403ab0593155dcd731e7a2ce1c98 (diff)
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...)
-rw-r--r--client.py7
-rw-r--r--server.py2
2 files changed, 8 insertions, 1 deletions
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 = []