|
@@ -430,8 +430,11 @@ int addressmap_already_mapped(const char *address) {
|
|
|
|
|
|
* which will expire on <b>expires</b> (or 0 if never expires).
|
|
|
*
|
|
|
- * new_address should be a newly dup'ed string, which we'll use or
|
|
|
+ * <b>new_address</b> should be a newly dup'ed string, which we'll use or
|
|
|
* free as appropriate. We will leave address alone.
|
|
|
+ *
|
|
|
+ * If <b>new_address</b> is NULL, or equal to <b>address</b>, remove
|
|
|
+ * any mappings that exist from <b>address</b>.
|
|
|
*/
|
|
|
void addressmap_register(const char *address, char *new_address, time_t expires) {
|
|
|
addressmap_entry_t *ent;
|
|
@@ -442,6 +445,15 @@ void addressmap_register(const char *address, char *new_address, time_t expires)
|
|
|
tor_free(new_address);
|
|
|
return;
|
|
|
}
|
|
|
+ if (!new_address || !strcasecmp(address,new_address)) {
|
|
|
+ tor_free(new_address);
|
|
|
+
|
|
|
+ if (ent) {
|
|
|
+ addressmap_ent_free(ent);
|
|
|
+ strmap_remove(addressmap, address);
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
if (ent) {
|
|
|
tor_free(ent->new_address);
|
|
|
} else {
|
|
@@ -487,7 +499,7 @@ void client_dns_set_addressmap(const char *address, uint32_t val)
|
|
|
tor_assert(address); tor_assert(val);
|
|
|
|
|
|
if (tor_inet_aton(address, &in))
|
|
|
- return;
|
|
|
+ return;
|
|
|
in.s_addr = htonl(val);
|
|
|
addr = tor_malloc(INET_NTOA_BUF_LEN);
|
|
|
tor_inet_ntoa(&in,addr,INET_NTOA_BUF_LEN);
|