[tor-commits] [pytorctl/master] Handling for connections to non-control sockets

mikeperry at torproject.org mikeperry at torproject.org
Fri Jun 17 23:32:02 UTC 2011


commit e76418e507319887626b9d3921bdc0ac44b28e76
Author: Damian Johnson <atagar at torproject.org>
Date:   Mon Jun 13 09:50:13 2011 -0700

    Handling for connections to non-control sockets
    
    When we attempt to initiate a control connection to a non-control port (for
    instance tor's socks port instead)...
    - the socket shutdown issues an error since it's not connected yet
    - checking the authentication type fails with a TorCtlClosed rather than error
      reply
    
    For more information see bug 2580.
---
 TorCtl.py  |    5 +++--
 TorUtil.py |    7 ++++++-
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/TorCtl.py b/TorCtl.py
index 056a65c..44a612b 100755
--- a/TorCtl.py
+++ b/TorCtl.py
@@ -590,8 +590,9 @@ class Connection:
       # check PROTOCOLINFO for authentication type
       try:
         authInfo = self.sendAndRecv("PROTOCOLINFO\r\n")[1][1]
-      except ErrorReply, exc:
-        raise IOError("Unable to query PROTOCOLINFO for the authentication type: %s" % exc)
+      except Exception, exc:
+        excMsg = ": %s" % exc if exc.message else ""
+        raise IOError("Unable to query PROTOCOLINFO for the authentication type%s" % excMsg)
       
       authType, cookiePath = None, None
       if authInfo.startswith("AUTH METHODS=NULL"):
diff --git a/TorUtil.py b/TorUtil.py
index 29c44bf..fcbef70 100644
--- a/TorUtil.py
+++ b/TorUtil.py
@@ -231,7 +231,12 @@ class BufSock:
 
   def close(self):
     self._isDone = True
-    self._s.shutdown(socket.SHUT_RDWR)
+
+    # if we haven't yet established a connection then this raises an error
+    # socket.error: [Errno 107] Transport endpoint is not connected
+    try: self._s.shutdown(socket.SHUT_RDWR)
+    except socket.error: pass
+
     self._s.close()
 
 # SocketServer.TCPServer is nuts.. 





More information about the tor-commits mailing list