[tor-commits] [doctor/master] Support tracking multiple address or fingerprint entries

atagar at torproject.org atagar at torproject.org
Wed Feb 24 17:32:26 UTC 2016


commit a1fdff709edd7af3ae3009b480687bbc67de7dc1
Author: Damian Johnson <atagar at torproject.org>
Date:   Wed Feb 24 09:33:40 2016 -0800

    Support tracking multiple address or fingerprint entries
    
    dgoulet made the good point that we sometimes want to track multiple address
    ranges or fingerprints for a single bad actor. Supporting multiple
    'name.address' and 'name.fingerprint' per entries.
---
 track_relays.py | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/track_relays.py b/track_relays.py
index bc46216..deee467 100755
--- a/track_relays.py
+++ b/track_relays.py
@@ -32,8 +32,8 @@ class TrackedRelay(object):
   :var str identifier: brief identifier given to the entry
   :var str description: description of why we're tracking it
   :var datetime expires: when this entry expires
-  :var str address: address of the relay we're tracking
-  :var str fingerprint: fingerprint of the relay we're tracking
+  :var list addresses: address of the relay we're tracking
+  :var list fingerprints: fingerprint of the relay we're tracking
   """
 
   def __init__(self, identifier, config):
@@ -50,20 +50,20 @@ class TrackedRelay(object):
     except ValueError:
       raise ValueError("'%s.expires' is malformed. We expect it to be in the form 'Year-Month-Day'" % identifier)
 
-    self.address = config.get('%s.address' % identifier, None)
-    self.fingerprint = config.get('%s.fingerprint' % identifier, None)
+    self.addresses = config.get('%s.address' % identifier, [])
+    self.fingerprints = config.get('%s.fingerprint' % identifier, [])
 
-    if not self.address and not self.fingerprint:
+    if not self.addresses and not self.fingerprints:
       raise ValueError("We need either a '%s.address' or '%s.fingerprint' to track" % (identifier, identifier))
 
   def __str__(self):
     attr = []
 
-    if self.address:
-      attr.append('address: %s' % self.address)
+    for address in self.addresses:
+      attr.append('address: %s' % address)
 
-    if self.fingerprint:
-      attr.append('fingerprint: %s' % self.fingerprint)
+    for fingerprint in self.fingerprints:
+      attr.append('fingerprint: %s' % fingerprint)
 
     return '%s (%s)' % (self.identifier, ', '.join(attr))
 
@@ -110,17 +110,17 @@ def main():
   tracked_fingerprints = {}
 
   for relay in get_tracked_relays():
-    if relay.address:
-      if '/' in relay.address:
+    for address in relay.addresses:
+      if '/' in address:
         # It's a total hack, but taking advantage of exit policies where we
         # already support address ranges.
 
-        tracked_address_ranges[stem.exit_policy.ExitPolicyRule('accept %s:*' % relay.address)] = relay
+        tracked_address_ranges[stem.exit_policy.ExitPolicyRule('accept %s:*' % address)] = relay
       else:
-        tracked_addresses[relay.address] = relay
+        tracked_addresses[address] = relay
 
-    if relay.fingerprint:
-      tracked_fingerprints[relay.fingerprint] = relay
+    for fingerprint in relay.fingerprints:
+      tracked_fingerprints[fingerprint] = relay
 
   downloader = stem.descriptor.remote.DescriptorDownloader()
   found_relays = {}  # mapping of TrackedRelay => RouterStatusEntry



More information about the tor-commits mailing list