summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2012-11-25 14:31:35 -0500
committerNick Mathewson <nickm@torproject.org>2012-12-17 14:50:55 -0500
commit963b3d15492c6cda3feac6efcff768913352ac2c (patch)
treecb64e60f1151894ce8971ce1ff16f57916e7e3f6
parent88d7312ff29cda982f928caf3ddab4df189b245c (diff)
downloadtor-963b3d15492c6cda3feac6efcff768913352ac2c.tar.gz
tor-963b3d15492c6cda3feac6efcff768913352ac2c.zip
Refactor the code to check if an address is matched by automapsuffixes
-rw-r--r--src/or/addressmap.c28
-rw-r--r--src/or/addressmap.h2
-rw-r--r--src/or/connection_edge.c8
3 files changed, 23 insertions, 15 deletions
diff --git a/src/or/addressmap.c b/src/or/addressmap.c
index 5815bfba61..8502178860 100644
--- a/src/or/addressmap.c
+++ b/src/or/addressmap.c
@@ -210,6 +210,24 @@ addressmap_clear_excluded_trackexithosts(const or_options_t *options)
} STRMAP_FOREACH_END;
}
+/** Return true iff <b>address</b> is one that we are configured to
+ * automap on resolve according to <b>options</b>. */
+int
+addressmap_address_should_automap(const char *address,
+ const or_options_t *options)
+{
+ const smartlist_t *suffix_list = options->AutomapHostsSuffixes;
+
+ if (!suffix_list)
+ return 0;
+
+ SMARTLIST_FOREACH_BEGIN(suffix_list, const char *, suffix) {
+ if (!strcasecmpend(address, suffix))
+ return 1;
+ } SMARTLIST_FOREACH_END(suffix);
+ return 0;
+}
+
/** Remove all AUTOMAP mappings from the addressmap for which the
* source address no longer matches AutomapHostsSuffixes, which is
* no longer allowed by AutomapHostsOnResolve, or for which the
@@ -232,15 +250,7 @@ addressmap_clear_invalid_automaps(const or_options_t *options)
continue; /* not an automap mapping. */
if (!remove) {
- int suffix_found = 0;
- SMARTLIST_FOREACH(suffixes, const char *, suffix, {
- if (!strcasecmpend(src_address, suffix)) {
- suffix_found = 1;
- break;
- }
- });
- if (!suffix_found)
- remove = 1;
+ remove = ! addressmap_address_should_automap(src_address, options);
}
if (!remove && ! address_is_in_virtual_range(ent->new_address))
diff --git a/src/or/addressmap.h b/src/or/addressmap.h
index 0c73201f39..4534fffb94 100644
--- a/src/or/addressmap.h
+++ b/src/or/addressmap.h
@@ -42,6 +42,8 @@ void clear_trackexithost_mappings(const char *exitname);
void client_dns_set_reverse_addressmap(entry_connection_t *for_conn,
const char *address, const char *v,
const char *exitname, int ttl);
+int addressmap_address_should_automap(const char *address,
+ const or_options_t *options);
#endif
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index 3207f588ec..9ccf58e5c8 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -928,12 +928,8 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
if (socks->command == SOCKS_COMMAND_RESOLVE &&
!tor_inet_aton(socks->address, &addr_tmp) &&
- options->AutomapHostsOnResolve && options->AutomapHostsSuffixes) {
- SMARTLIST_FOREACH(options->AutomapHostsSuffixes, const char *, cp,
- if (!strcasecmpend(socks->address, cp)) {
- automap = 1;
- break;
- });
+ options->AutomapHostsOnResolve) {
+ automap = addressmap_address_should_automap(socks->address, options);
if (automap) {
const char *new_addr;
new_addr = addressmap_register_virtual_address(