]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Merge remote-tracking branch 'teor/routerset-parse-IPv6-literals'
authorNick Mathewson <nickm@torproject.org>
Fri, 2 Oct 2015 11:54:20 +0000 (13:54 +0200)
committerNick Mathewson <nickm@torproject.org>
Fri, 2 Oct 2015 11:54:20 +0000 (13:54 +0200)
(Minor conflicts)

1  2 
src/or/routerset.c
src/test/test_routerset.c

index 3be55d34042e8a69d9796c8611ff509242f9bac7,6a93a327eea7622f3523a6f2c0b0bf585a91245c..debe9ec6e14656edb8f0f9cbe04c0b5149b36736
@@@ -107,15 -104,16 +107,17 @@@ routerset_parse(routerset_t *target, co
                    description);
          smartlist_add(target->country_names, countryname);
          added_countries = 1;
-       } else if ((strchr(nick,'.') || strchr(nick, '*')) &&
-                  (p = router_parse_addr_policy_item_from_string(
+       } else if ((strchr(nick,'.') || strchr(nick, ':') ||  strchr(nick, '*'))
+                  && (p = router_parse_addr_policy_item_from_string(
 -                                        nick, ADDR_POLICY_REJECT))) {
 +                                     nick, ADDR_POLICY_REJECT,
 +                                     &malformed_list))) {
+         /* IPv4 addresses contain '.', IPv6 addresses contain ':',
+          * and wildcard addresses contain '*'. */
          log_debug(LD_CONFIG, "Adding address %s to %s", nick, description);
          smartlist_add(target->policies, p);
 -      } else {
 -        log_warn(LD_CONFIG, "Entry '%s' in %s is malformed.", nick,
 -                 description);
 +      } else if (malformed_list) {
 +        log_warn(LD_CONFIG, "Entry '%s' in %s is malformed. Discarding entire"
 +                 " list.", nick, description);
          r = -1;
          tor_free(nick);
          SMARTLIST_DEL_CURRENT(list, nick);
index 90dfb28c6bfddc291d98ab8b7ad66056495fa0da,39d088b90ea1c9585c7af41ee3c16544b61c34a6..3e9317c54f45d58aff96cbfd58de8eda9b657ebf
@@@ -469,6 -466,96 +469,100 @@@ NS(router_parse_addr_policy_item_from_s
    return NS(mock_addr_policy);
  }
  
 -        (const char *s, int assume_action));
+ #undef NS_SUBMODULE
+ #define NS_SUBMODULE ASPECT(routerset_parse, policy_ipv4)
+ /*
+  * Structural test for routerset_parse, when given a valid IPv4 address
+  * literal policy.
+  */
+ NS_DECL(addr_policy_t *, router_parse_addr_policy_item_from_string,
 -NS(router_parse_addr_policy_item_from_string)(const char *s, int assume_action)
++        (const char *s, int assume_action, int *bogus));
+ addr_policy_t *NS(mock_addr_policy);
+ static void
+ NS(test_main)(void *arg)
+ {
+   routerset_t *set;
+   const char *s;
+   int r;
+   (void)arg;
+   NS_MOCK(router_parse_addr_policy_item_from_string);
+   NS(mock_addr_policy) = tor_malloc_zero(sizeof(addr_policy_t));
+   set = routerset_new();
+   s = "127.0.0.1";
+   r = routerset_parse(set, s, "");
+   tt_int_op(r, OP_EQ, 0);
+   tt_int_op(smartlist_len(set->policies), OP_NE, 0);
+   tt_int_op(CALLED(router_parse_addr_policy_item_from_string), OP_EQ, 1);
+ done:
+   routerset_free(set);
+ }
+ addr_policy_t *
 -        (const char *s, int assume_action));
++NS(router_parse_addr_policy_item_from_string)(const char *s, int assume_action,
++                                              int *bogus)
+ {
+   (void)s;
+   (void)assume_action;
+   CALLED(router_parse_addr_policy_item_from_string)++;
++  *bogus = 0;
+   return NS(mock_addr_policy);
+ }
+ #undef NS_SUBMODULE
+ #define NS_SUBMODULE ASPECT(routerset_parse, policy_ipv6)
+ /*
+  * Structural test for routerset_parse, when given a valid IPv6 address
+  * literal policy.
+  */
+ NS_DECL(addr_policy_t *, router_parse_addr_policy_item_from_string,
 -NS(router_parse_addr_policy_item_from_string)(const char *s, int assume_action)
++        (const char *s, int assume_action, int *bad));
+ addr_policy_t *NS(mock_addr_policy);
+ static void
+ NS(test_main)(void *arg)
+ {
+   routerset_t *set;
+   const char *s;
+   int r;
+   (void)arg;
+   NS_MOCK(router_parse_addr_policy_item_from_string);
+   NS(mock_addr_policy) = tor_malloc_zero(sizeof(addr_policy_t));
+   set = routerset_new();
+   s = "::1";
+   r = routerset_parse(set, s, "");
+   tt_int_op(r, OP_EQ, 0);
+   tt_int_op(smartlist_len(set->policies), OP_NE, 0);
+   tt_int_op(CALLED(router_parse_addr_policy_item_from_string), OP_EQ, 1);
+ done:
+   routerset_free(set);
+ }
+ addr_policy_t *
++NS(router_parse_addr_policy_item_from_string)(const char *s,
++                                              int assume_action, int *bad)
+ {
+   (void)s;
+   (void)assume_action;
+   CALLED(router_parse_addr_policy_item_from_string)++;
++  *bad = 0;
+   return NS(mock_addr_policy);
+ }
  #undef NS_SUBMODULE
  #define NS_SUBMODULE ASPECT(routerset_union, source_bad)