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

commit a1fdff709edd7af3ae3009b480687bbc67de7dc1 Author: Damian Johnson <atagar@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
participants (1)
-
atagar@torproject.org