commit 401a4823826dbc288565b11bc582c1f2d976099f Author: Colin Teberg me@cteberg.net Date: Tue Dec 30 17:11:47 2014 -0500
Added exception handing to function validate_external_mode_cli, in accordance with ticket #9823.
Note: I had to adjust the sleep time to .1 from .05 on line 121 in test/tester.py. My machine was taking longer to setup the client and servers during testing (my machine is an older core2duo). --- obfsproxy/pyobfsproxy.py | 12 +++++++++--- obfsproxy/transports/base.py | 18 +++++++++--------- obfsproxy/transports/obfs2.py | 8 ++++++-- 3 files changed, 24 insertions(+), 14 deletions(-)
diff --git a/obfsproxy/pyobfsproxy.py b/obfsproxy/pyobfsproxy.py index 90e5729..4a3ca83 100755 --- a/obfsproxy/pyobfsproxy.py +++ b/obfsproxy/pyobfsproxy.py @@ -66,7 +66,11 @@ def set_up_cli_parsing(): for transport, transport_class in transports.transports.items(): subparser = subparsers.add_parser(transport, help='%s help' % transport) transport_class['base'].register_external_mode_cli(subparser) - subparser.set_defaults(validation_function=transport_class['base'].validate_external_mode_cli) + try: + subparser.set_defaults(validation_function=transport_class['base'].validate_external_mode_cli) + except ValueError, err: + log.error(err) + sys.exit(1)
return parser
@@ -178,8 +182,10 @@ def pyobfsproxy(): # they can initialize and setup themselves. Exit if the # provided arguments were corrupted.
- # XXX use exceptions - if (args.validation_function(args) == False): + try: + args.validation_function(args) + except Exception, err: + log.error(err) sys.exit(1)
do_external_mode(args) diff --git a/obfsproxy/transports/base.py b/obfsproxy/transports/base.py index a2b78f1..ae1d13b 100644 --- a/obfsproxy/transports/base.py +++ b/obfsproxy/transports/base.py @@ -140,18 +140,18 @@ class BaseTransport(object): # If we are not 'socks', we need to have a static destination # to send our data to. if (args.mode != 'socks') and (not args.dest): - log.error("'client' and 'server' modes need a destination address.") - return False + err = "'client' and 'server' modes need a destination address."
- if (args.mode != 'ext_server') and args.ext_cookie_file: - log.error("No need for --ext-cookie-file if not an ext_server.") - return False + elif (args.mode != 'ext_server') and args.ext_cookie_file: + err = "No need for --ext-cookie-file if not an ext_server."
- if (args.mode == 'ext_server') and (not args.ext_cookie_file): - log.error("You need to specify --ext-cookie-file as an ext_server.") - return False + elif (args.mode == 'ext_server') and (not args.ext_cookie_file): + err = "You need to specify --ext-cookie-file as an ext_server."
- return True + try: + raise argparse.ArgumentTypeError(err) + except NameError: + return True
class PluggableTransportError(Exception): pass class SOCKSArgsError(Exception): pass diff --git a/obfsproxy/transports/obfs2.py b/obfsproxy/transports/obfs2.py index 23a60d4..c77c5cd 100644 --- a/obfsproxy/transports/obfs2.py +++ b/obfsproxy/transports/obfs2.py @@ -126,8 +126,12 @@ class Obfs2Transport(base.BaseTransport): if args.ss_hash_iterations: cls.ss_hash_iterations = args.ss_hash_iterations
- super(Obfs2Transport, cls).validate_external_mode_cli(args) - + try: + super(Obfs2Transport, cls).validate_external_mode_cli(args) + except ValueError, err: + log.error(err) + sys.exit(1) + def handle_socks_args(self, args): log.debug("obfs2: Got '%s' as SOCKS arguments." % args)