/** Replace all "private" entries in *<b>policy</b> with their expanded * equivalents. */ void policy_expand_private(smartlist_t **policy) { uint16_t port_min, port_max; int i; smartlist_t *tmp; if (!*policy) /*XXXX disallow NULL policies? */ return; tmp = smartlist_create(); SMARTLIST_FOREACH(*policy, addr_policy_t *, p, { if (! p->is_private) { smartlist_add(tmp, p); continue; } for (i = 0; private_nets[i]; ++i) { addr_policy_t policy; memcpy(&policy, p, sizeof(addr_policy_t)); policy.is_private = 0; policy.is_canonical = 0; if (tor_addr_parse_mask_ports(private_nets[i], &policy.addr, &policy.maskbits, &port_min, &port_max)<0) { tor_assert(0); } smartlist_add(tmp, addr_policy_get_canonical_entry(&policy)); } addr_policy_free(p); });
/** Replace all "private" entries in *<b>policy</b> with their expanded * equivalents. */ void policy_expand_private(smartlist_t **policy) { static const char *private_nets[] = { "0.0.0.0/8", "169.254.0.0/16", "127.0.0.0/8", "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12", NULL }; uint16_t port_min, port_max; int i; smartlist_t *tmp; if (!*policy) return; tmp = smartlist_create(); SMARTLIST_FOREACH(*policy, addr_policy_t *, p, { if (! p->is_private) { smartlist_add(tmp, p); continue; } for (i = 0; private_nets[i]; ++i) { addr_policy_t policy; memcpy(&policy, p, sizeof(addr_policy_t)); policy.is_private = 0; policy.is_canonical = 0; if (parse_addr_and_port_range(private_nets[i], &policy.addr, &policy.maskbits, &port_min, &port_max)) { tor_assert(0); } smartlist_add(tmp, addr_policy_get_canonical_entry(&policy)); } addr_policy_free(p); });