commit 03b72fd7946f6246ea41ab9182642ce2ece863ab Author: Damian Johnson atagar@torproject.org Date: Sun Sep 8 16:44:04 2013 -0700
Simplifying _getController() helper
I'm still not happy with the _getController() function, but at least now it's a tad better... --- arm/starter.py | 45 +++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 24 deletions(-)
diff --git a/arm/starter.py b/arm/starter.py index 67fc5a6..5c51812 100644 --- a/arm/starter.py +++ b/arm/starter.py @@ -220,34 +220,31 @@ def _getController(controlAddr="127.0.0.1", controlPort=9051, passphrase=None, i """ Custom handler for establishing a stem connection (... needs an overhaul). """ - - controller = None + + chroot = arm.util.torTools.getPathPrefix() + try: - chroot = arm.util.torTools.getPathPrefix() controller = Controller.from_port(controlAddr, controlPort) - + except stem.SocketError as exc: + print exc + return None + + try: + controller.authenticate(password = passphrase, chroot_path = chroot) + except stem.connection.MissingPassword: try: + passphrase = getpass.getpass("Controller password: ") controller.authenticate(password = passphrase, chroot_path = chroot) - except stem.connection.MissingPassword: - try: - passphrase = getpass.getpass("Controller password: ") - controller.authenticate(password = passphrase, chroot_path = chroot) - except: - return None - - return controller - except Exception, exc: - if controller: controller.close() - - if passphrase and str(exc) == "Unable to authenticate: password incorrect": - # provide a warning that the provided password didn't work, then try - # again prompting for the user to enter it - print incorrectPasswordMsg - return _getController(controlAddr, controlPort) - else: - print exc - - return None + except: + # Huh? The old version just silently failed when it got an incorrect password? + return None + except stem.connection.IncorrectPassword: + # provide a warning that the provided password didn't work, then try + # again prompting for the user to enter it + print incorrectPasswordMsg + return _getController(controlAddr, controlPort) + + return controller
def _dumpConfig(): """