[tor-commits] [stem/master] Truncating exit policies after a catch-all

atagar at torproject.org atagar at torproject.org
Mon Jan 14 01:39:16 UTC 2013


commit 67c00e3c89b0cebd00ce5f6f19ce194b200eb8f4
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Jan 13 16:19:17 2013 -0800

    Truncating exit policies after a catch-all
    
    It's pointless for an exit policy to contain rules after an 'accept *:*' or
    'reject *:*'. Cropping policies if they go on after that.
---
 stem/exit_policy.py             |    9 ++++++---
 test/unit/exit_policy/policy.py |    5 +++++
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/stem/exit_policy.py b/stem/exit_policy.py
index 45e0a98..3bccc27 100644
--- a/stem/exit_policy.py
+++ b/stem/exit_policy.py
@@ -290,9 +290,12 @@ class ExitPolicy(object):
 
       for rule in self._input_rules:
         if isinstance(rule, str):
-          rules.append(ExitPolicyRule(rule.strip()))
-        elif isinstance(rule, ExitPolicyRule):
-          rules.append(rule)
+          rule = ExitPolicyRule(rule.strip())
+
+        rules.append(rule)
+
+        if rule.is_address_wildcard() and rule.is_port_wildcard():
+          break  # this is a catch-all, no reason to include more
 
       self._rules = rules
       self._input_rules = None
diff --git a/test/unit/exit_policy/policy.py b/test/unit/exit_policy/policy.py
index 4da21b0..b8ac286 100644
--- a/test/unit/exit_policy/policy.py
+++ b/test/unit/exit_policy/policy.py
@@ -37,6 +37,11 @@ class TestExitPolicy(unittest.TestCase):
     policy = ExitPolicy(*"accept *:80, accept *:443, reject *:*".split(","))
     self.assertEquals(expected_policy, policy)
 
+    # checks that we truncate after getting a catch-all policy
+
+    policy = ExitPolicy(*"accept *:80, accept *:443, reject *:*, accept *:20-50".split(","))
+    self.assertEquals(expected_policy, policy)
+
   def test_set_default_allowed(self):
     policy = ExitPolicy('reject *:80', 'accept *:443')
 





More information about the tor-commits mailing list