diff options
author | Avery Pennarun <apenwarr@gmail.com> | 2011-05-03 13:59:25 -0700 |
---|---|---|
committer | Avery Pennarun <apenwarr@gmail.com> | 2011-05-03 13:59:25 -0700 |
commit | 7712c60c36e1bf5a4432b146502b0533307417f4 (patch) | |
tree | db84b2e3986c338690e9a1e6db588311f0c3ad3c | |
parent | 65b0390fe9fd403ab0593155dcd731e7a2ce1c98 (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.py | 7 | ||||
-rw-r--r-- | server.py | 2 |
2 files changed, 8 insertions, 1 deletions
@@ -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: @@ -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 = [] |