mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 05:03:43 +01:00
Merge remote-tracking branch 'arma/ticket5528'
Conflicts: src/or/router.c src/test/test_dir.c
This commit is contained in:
commit
f0b2dc83b6
4
changes/ticket5528
Normal file
4
changes/ticket5528
Normal file
@ -0,0 +1,4 @@
|
||||
o Code simplifications and refactoring:
|
||||
- Get rid of router->address, since in all cases it was just the
|
||||
string representation of router->addr. Resolves ticket 5528.
|
||||
|
@ -606,27 +606,30 @@ int
|
||||
inform_testing_reachability(void)
|
||||
{
|
||||
char dirbuf[128];
|
||||
char *address;
|
||||
const routerinfo_t *me = router_get_my_routerinfo();
|
||||
if (!me)
|
||||
return 0;
|
||||
address = tor_dup_ip(me->addr);
|
||||
control_event_server_status(LOG_NOTICE,
|
||||
"CHECKING_REACHABILITY ORADDRESS=%s:%d",
|
||||
me->address, me->or_port);
|
||||
address, me->or_port);
|
||||
if (me->dir_port) {
|
||||
tor_snprintf(dirbuf, sizeof(dirbuf), " and DirPort %s:%d",
|
||||
me->address, me->dir_port);
|
||||
address, me->dir_port);
|
||||
control_event_server_status(LOG_NOTICE,
|
||||
"CHECKING_REACHABILITY DIRADDRESS=%s:%d",
|
||||
me->address, me->dir_port);
|
||||
address, me->dir_port);
|
||||
}
|
||||
log_notice(LD_OR, "Now checking whether ORPort %s:%d%s %s reachable... "
|
||||
"(this may take up to %d minutes -- look for log "
|
||||
"messages indicating success)",
|
||||
me->address, me->or_port,
|
||||
address, me->or_port,
|
||||
me->dir_port ? dirbuf : "",
|
||||
me->dir_port ? "are" : "is",
|
||||
TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT/60);
|
||||
|
||||
tor_free(address);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -82,8 +82,7 @@ static void dir_microdesc_download_failed(smartlist_t *failed,
|
||||
static void note_client_request(int purpose, int compressed, size_t bytes);
|
||||
static int client_likes_consensus(networkstatus_t *v, const char *want_url);
|
||||
|
||||
static void directory_initiate_command_rend(const char *address,
|
||||
const tor_addr_t *addr,
|
||||
static void directory_initiate_command_rend(const tor_addr_t *addr,
|
||||
uint16_t or_port,
|
||||
uint16_t dir_port,
|
||||
const char *digest,
|
||||
@ -464,7 +463,7 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
|
||||
tor_addr_t addr;
|
||||
routerinfo_t *ri = node->ri;
|
||||
node_get_addr(node, &addr);
|
||||
directory_initiate_command(ri->address, &addr,
|
||||
directory_initiate_command(&addr,
|
||||
ri->or_port, 0/*no dirport*/,
|
||||
ri->cache_info.identity_digest,
|
||||
dir_purpose,
|
||||
@ -593,9 +592,6 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
|
||||
{
|
||||
const or_options_t *options = get_options();
|
||||
const node_t *node;
|
||||
char address_buf[INET_NTOA_BUF_LEN+1];
|
||||
struct in_addr in;
|
||||
const char *address;
|
||||
tor_addr_t addr;
|
||||
const int anonymized_connection = dirind_is_anon(indirection);
|
||||
node = node_get_by_id(status->identity_digest);
|
||||
@ -605,13 +601,6 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
|
||||
"don't have its router descriptor.",
|
||||
routerstatus_describe(status));
|
||||
return;
|
||||
} else if (node) {
|
||||
node_get_address_string(node, address_buf, sizeof(address_buf));
|
||||
address = address_buf;
|
||||
} else {
|
||||
in.s_addr = htonl(status->addr);
|
||||
tor_inet_ntoa(&in, address_buf, sizeof(address_buf));
|
||||
address = address_buf;
|
||||
}
|
||||
tor_addr_from_ipv4h(&addr, status->addr);
|
||||
|
||||
@ -625,7 +614,7 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
|
||||
return;
|
||||
}
|
||||
|
||||
directory_initiate_command_rend(address, &addr,
|
||||
directory_initiate_command_rend(&addr,
|
||||
status->or_port, status->dir_port,
|
||||
status->identity_digest,
|
||||
dir_purpose, router_purpose,
|
||||
@ -867,7 +856,7 @@ directory_command_should_use_begindir(const or_options_t *options,
|
||||
* <b>supports_begindir</b>, and whose identity key digest is
|
||||
* <b>digest</b>. */
|
||||
void
|
||||
directory_initiate_command(const char *address, const tor_addr_t *_addr,
|
||||
directory_initiate_command(const tor_addr_t *_addr,
|
||||
uint16_t or_port, uint16_t dir_port,
|
||||
const char *digest,
|
||||
uint8_t dir_purpose, uint8_t router_purpose,
|
||||
@ -875,7 +864,7 @@ directory_initiate_command(const char *address, const tor_addr_t *_addr,
|
||||
const char *payload, size_t payload_len,
|
||||
time_t if_modified_since)
|
||||
{
|
||||
directory_initiate_command_rend(address, _addr, or_port, dir_port,
|
||||
directory_initiate_command_rend(_addr, or_port, dir_port,
|
||||
digest, dir_purpose,
|
||||
router_purpose, indirection,
|
||||
resource, payload, payload_len,
|
||||
@ -897,7 +886,7 @@ is_sensitive_dir_purpose(uint8_t dir_purpose)
|
||||
/** Same as directory_initiate_command(), but accepts rendezvous data to
|
||||
* fetch a hidden service descriptor. */
|
||||
static void
|
||||
directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
|
||||
directory_initiate_command_rend(const tor_addr_t *_addr,
|
||||
uint16_t or_port, uint16_t dir_port,
|
||||
const char *digest,
|
||||
uint8_t dir_purpose, uint8_t router_purpose,
|
||||
@ -915,7 +904,6 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
|
||||
const int anonymized_connection = dirind_is_anon(indirection);
|
||||
tor_addr_t addr;
|
||||
|
||||
tor_assert(address);
|
||||
tor_assert(_addr);
|
||||
tor_assert(or_port || dir_port);
|
||||
tor_assert(digest);
|
||||
@ -948,7 +936,7 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
|
||||
/* set up conn so it's got all the data we need to remember */
|
||||
tor_addr_copy(&conn->base_.addr, &addr);
|
||||
conn->base_.port = use_begindir ? or_port : dir_port;
|
||||
conn->base_.address = tor_strdup(address);
|
||||
conn->base_.address = tor_dup_addr(&addr);
|
||||
memcpy(conn->identity_digest, digest, DIGEST_LEN);
|
||||
|
||||
conn->base_.purpose = dir_purpose;
|
||||
|
@ -63,7 +63,7 @@ int connection_dir_process_inbuf(dir_connection_t *conn);
|
||||
int connection_dir_finished_flushing(dir_connection_t *conn);
|
||||
int connection_dir_finished_connecting(dir_connection_t *conn);
|
||||
void connection_dir_about_to_close(dir_connection_t *dir_conn);
|
||||
void directory_initiate_command(const char *address, const tor_addr_t *addr,
|
||||
void directory_initiate_command(const tor_addr_t *addr,
|
||||
uint16_t or_port, uint16_t dir_port,
|
||||
const char *digest,
|
||||
uint8_t dir_purpose, uint8_t router_purpose,
|
||||
|
@ -79,7 +79,6 @@ static int add_fingerprint_to_dir(const char *nickname, const char *fp,
|
||||
struct authdir_config_t *list);
|
||||
static uint32_t
|
||||
dirserv_get_status_impl(const char *fp, const char *nickname,
|
||||
const char *address,
|
||||
uint32_t addr, uint16_t or_port,
|
||||
const char *platform, const char *contact,
|
||||
const char **msg, int should_log);
|
||||
@ -327,7 +326,6 @@ dirserv_router_get_status(const routerinfo_t *router, const char **msg)
|
||||
}
|
||||
|
||||
return dirserv_get_status_impl(d, router->nickname,
|
||||
router->address,
|
||||
router->addr, router->or_port,
|
||||
router->platform, router->contact_info,
|
||||
msg, 1);
|
||||
@ -341,7 +339,6 @@ dirserv_would_reject_router(const routerstatus_t *rs)
|
||||
uint32_t res;
|
||||
|
||||
res = dirserv_get_status_impl(rs->identity_digest, rs->nickname,
|
||||
"", /* address is only used in logs */
|
||||
rs->addr, rs->or_port,
|
||||
NULL, NULL,
|
||||
NULL, 0);
|
||||
@ -380,7 +377,6 @@ dirserv_get_name_status(const char *id_digest, const char *nickname)
|
||||
*/
|
||||
static uint32_t
|
||||
dirserv_get_status_impl(const char *id_digest, const char *nickname,
|
||||
const char *address,
|
||||
uint32_t addr, uint16_t or_port,
|
||||
const char *platform, const char *contact,
|
||||
const char **msg, int should_log)
|
||||
@ -452,14 +448,14 @@ dirserv_get_status_impl(const char *id_digest, const char *nickname,
|
||||
if (should_log)
|
||||
log_info(LD_DIRSERV,
|
||||
"Marking '%s' as bad directory because of address '%s'",
|
||||
nickname, address);
|
||||
nickname, fmt_addr32(addr));
|
||||
result |= FP_BADDIR;
|
||||
}
|
||||
|
||||
if (authdir_policy_badexit_address(addr, or_port)) {
|
||||
if (should_log)
|
||||
log_info(LD_DIRSERV, "Marking '%s' as bad exit because of address '%s'",
|
||||
nickname, address);
|
||||
nickname, fmt_addr32(addr));
|
||||
result |= FP_BADEXIT;
|
||||
}
|
||||
|
||||
@ -467,7 +463,7 @@ dirserv_get_status_impl(const char *id_digest, const char *nickname,
|
||||
if (!authdir_policy_permits_address(addr, or_port)) {
|
||||
if (should_log)
|
||||
log_info(LD_DIRSERV, "Rejecting '%s' because of address '%s'",
|
||||
nickname, address);
|
||||
nickname, fmt_addr32(addr));
|
||||
if (msg)
|
||||
*msg = "Authdir is rejecting routers in this range.";
|
||||
return FP_REJECT;
|
||||
@ -475,7 +471,7 @@ dirserv_get_status_impl(const char *id_digest, const char *nickname,
|
||||
if (!authdir_policy_valid_address(addr, or_port)) {
|
||||
if (should_log)
|
||||
log_info(LD_DIRSERV, "Not marking '%s' valid because of address '%s'",
|
||||
nickname, address);
|
||||
nickname, fmt_addr32(addr));
|
||||
result |= FP_INVALID;
|
||||
}
|
||||
if (reject_unlisted) {
|
||||
@ -524,19 +520,12 @@ dirserv_free_fingerprint_list(void)
|
||||
static int
|
||||
dirserv_router_has_valid_address(routerinfo_t *ri)
|
||||
{
|
||||
struct in_addr iaddr;
|
||||
if (get_options()->DirAllowPrivateAddresses)
|
||||
return 0; /* whatever it is, we're fine with it */
|
||||
if (!tor_inet_aton(ri->address, &iaddr)) {
|
||||
log_info(LD_DIRSERV,"Router %s published non-IP address '%s'. Refusing.",
|
||||
router_describe(ri),
|
||||
ri->address);
|
||||
return -1;
|
||||
}
|
||||
if (is_internal_IP(ntohl(iaddr.s_addr), 0)) {
|
||||
if (is_internal_IP(ri->addr, 0)) {
|
||||
log_info(LD_DIRSERV,
|
||||
"Router %s published internal IP address '%s'. Refusing.",
|
||||
router_describe(ri), ri->address);
|
||||
"Router %s published internal IP address. Refusing.",
|
||||
router_describe(ri));
|
||||
return -1; /* it's a private IP, we should reject it */
|
||||
}
|
||||
return 0;
|
||||
@ -588,12 +577,10 @@ authdir_wants_to_reject_router(routerinfo_t *ri, const char **msg,
|
||||
}
|
||||
if (dirserv_router_has_valid_address(ri) < 0) {
|
||||
log_fn(severity, LD_DIRSERV,
|
||||
"Router %s has invalid address '%s'. "
|
||||
"Not adding (%s).",
|
||||
"Router %s has invalid address. Not adding (%s).",
|
||||
router_describe(ri),
|
||||
ri->address,
|
||||
esc_router_info(ri));
|
||||
*msg = "Rejected: Address is not an IP, or IP is a private address.";
|
||||
*msg = "Rejected: Address is a private address.";
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -3279,7 +3266,7 @@ dirserv_single_reachability_test(time_t now, routerinfo_t *router)
|
||||
|
||||
/* IPv4. */
|
||||
log_debug(LD_OR,"Testing reachability of %s at %s:%u.",
|
||||
router->nickname, router->address, router->or_port);
|
||||
router->nickname, fmt_addr32(router->addr), router->or_port);
|
||||
tor_addr_from_ipv4h(&router_addr, router->addr);
|
||||
chan = channel_tls_connect(&router_addr, router->or_port,
|
||||
router->cache_info.identity_digest);
|
||||
|
@ -1967,7 +1967,6 @@ get_socks_args_by_bridge_addrport(const tor_addr_t *addr, uint16_t port)
|
||||
static void
|
||||
launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge)
|
||||
{
|
||||
char *address;
|
||||
const or_options_t *options = get_options();
|
||||
|
||||
if (connection_get_by_type_addr_port_purpose(
|
||||
@ -1982,15 +1981,12 @@ launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge)
|
||||
return;
|
||||
}
|
||||
|
||||
address = tor_dup_addr(&bridge->addr);
|
||||
|
||||
directory_initiate_command(address, &bridge->addr,
|
||||
directory_initiate_command(&bridge->addr,
|
||||
bridge->port, 0/*no dirport*/,
|
||||
bridge->identity,
|
||||
DIR_PURPOSE_FETCH_SERVERDESC,
|
||||
ROUTER_PURPOSE_BRIDGE,
|
||||
DIRIND_ONEHOP, "authority.z", NULL, 0, 0);
|
||||
tor_free(address);
|
||||
}
|
||||
|
||||
/** Fetching the bridge descriptor from the bridge authority returned a
|
||||
@ -2108,13 +2104,11 @@ rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node)
|
||||
} else {
|
||||
if (tor_addr_family(&bridge->addr) == AF_INET) {
|
||||
ri->addr = tor_addr_to_ipv4h(&bridge->addr);
|
||||
tor_free(ri->address);
|
||||
ri->address = tor_dup_ip(ri->addr);
|
||||
ri->or_port = bridge->port;
|
||||
log_info(LD_DIR,
|
||||
"Adjusted bridge routerinfo for '%s' to match configured "
|
||||
"address %s:%d.",
|
||||
ri->nickname, ri->address, ri->or_port);
|
||||
ri->nickname, fmt_addr32(ri->addr), ri->or_port);
|
||||
} else if (tor_addr_family(&bridge->addr) == AF_INET6) {
|
||||
tor_addr_copy(&ri->ipv6_addr, &bridge->addr);
|
||||
ri->ipv6_orport = bridge->port;
|
||||
|
@ -1670,24 +1670,28 @@ second_elapsed_callback(periodic_timer_t *timer, void *arg)
|
||||
/* every 20 minutes, check and complain if necessary */
|
||||
const routerinfo_t *me = router_get_my_routerinfo();
|
||||
if (me && !check_whether_orport_reachable()) {
|
||||
char *address = tor_dup_ip(me->addr);
|
||||
log_warn(LD_CONFIG,"Your server (%s:%d) has not managed to confirm that "
|
||||
"its ORPort is reachable. Please check your firewalls, ports, "
|
||||
"address, /etc/hosts file, etc.",
|
||||
me->address, me->or_port);
|
||||
address, me->or_port);
|
||||
control_event_server_status(LOG_WARN,
|
||||
"REACHABILITY_FAILED ORADDRESS=%s:%d",
|
||||
me->address, me->or_port);
|
||||
address, me->or_port);
|
||||
tor_free(address);
|
||||
}
|
||||
|
||||
if (me && !check_whether_dirport_reachable()) {
|
||||
char *address = tor_dup_ip(me->addr);
|
||||
log_warn(LD_CONFIG,
|
||||
"Your server (%s:%d) has not managed to confirm that its "
|
||||
"DirPort is reachable. Please check your firewalls, ports, "
|
||||
"address, /etc/hosts file, etc.",
|
||||
me->address, me->dir_port);
|
||||
address, me->dir_port);
|
||||
control_event_server_status(LOG_WARN,
|
||||
"REACHABILITY_FAILED DIRADDRESS=%s:%d",
|
||||
me->address, me->dir_port);
|
||||
address, me->dir_port);
|
||||
tor_free(address);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -785,7 +785,7 @@ void
|
||||
node_get_address_string(const node_t *node, char *buf, size_t len)
|
||||
{
|
||||
if (node->ri) {
|
||||
strlcpy(buf, node->ri->address, len);
|
||||
strlcpy(buf, fmt_addr32(node->ri->addr), len);
|
||||
} else if (node->rs) {
|
||||
tor_addr_t addr;
|
||||
tor_addr_from_ipv4h(&addr, node->rs->addr);
|
||||
|
@ -2009,7 +2009,6 @@ typedef int16_t country_t;
|
||||
/** Information about another onion router in the network. */
|
||||
typedef struct {
|
||||
signed_descriptor_t cache_info;
|
||||
char *address; /**< Location of OR: either a hostname or an IP address. */
|
||||
char *nickname; /**< Human-readable OR name. */
|
||||
|
||||
uint32_t addr; /**< IPv4 address of OR, in host order. */
|
||||
|
@ -438,7 +438,7 @@ validate_addr_policies(const or_options_t *options, char **msg)
|
||||
|
||||
if (policies_parse_exit_policy(options->ExitPolicy, &addr_policy,
|
||||
options->IPv6Exit,
|
||||
options->ExitPolicyRejectPrivate, NULL,
|
||||
options->ExitPolicyRejectPrivate, 0,
|
||||
!options->BridgeRelay))
|
||||
REJECT("Error in ExitPolicy entry.");
|
||||
|
||||
@ -962,7 +962,7 @@ exit_policy_remove_redundancies(smartlist_t *dest)
|
||||
int
|
||||
policies_parse_exit_policy(config_line_t *cfg, smartlist_t **dest,
|
||||
int ipv6_exit,
|
||||
int rejectprivate, const char *local_address,
|
||||
int rejectprivate, uint32_t local_address,
|
||||
int add_default_policy)
|
||||
{
|
||||
if (!ipv6_exit) {
|
||||
@ -972,7 +972,7 @@ policies_parse_exit_policy(config_line_t *cfg, smartlist_t **dest,
|
||||
append_exit_policy_string(dest, "reject private:*");
|
||||
if (local_address) {
|
||||
char buf[POLICY_BUF_LEN];
|
||||
tor_snprintf(buf, sizeof(buf), "reject %s:*", local_address);
|
||||
tor_snprintf(buf, sizeof(buf), "reject %s:*", fmt_addr32(local_address));
|
||||
append_exit_policy_string(dest, buf);
|
||||
}
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ addr_policy_result_t compare_tor_addr_to_node_policy(const tor_addr_t *addr,
|
||||
|
||||
int policies_parse_exit_policy(config_line_t *cfg, smartlist_t **dest,
|
||||
int ipv6exit,
|
||||
int rejectprivate, const char *local_address,
|
||||
int rejectprivate, uint32_t local_address,
|
||||
int add_default_policy);
|
||||
void policies_exit_policy_append_reject_star(smartlist_t **dest);
|
||||
void addr_policy_append_reject_addr(smartlist_t **dest,
|
||||
|
@ -1177,7 +1177,7 @@ consider_testing_reachability(int test_or, int test_dir)
|
||||
/* XXX IPv6 self testing */
|
||||
log_info(LD_CIRC, "Testing %s of my ORPort: %s:%d.",
|
||||
!orport_reachable ? "reachability" : "bandwidth",
|
||||
me->address, me->or_port);
|
||||
fmt_addr32(me->addr), me->or_port);
|
||||
circuit_launch_by_extend_info(CIRCUIT_PURPOSE_TESTING, ei,
|
||||
CIRCLAUNCH_NEED_CAPACITY|CIRCLAUNCH_IS_INTERNAL);
|
||||
extend_info_free(ei);
|
||||
@ -1189,7 +1189,7 @@ consider_testing_reachability(int test_or, int test_dir)
|
||||
CONN_TYPE_DIR, &addr, me->dir_port,
|
||||
DIR_PURPOSE_FETCH_SERVERDESC)) {
|
||||
/* ask myself, via tor, for my server descriptor. */
|
||||
directory_initiate_command(me->address, &addr,
|
||||
directory_initiate_command(&addr,
|
||||
me->or_port, me->dir_port,
|
||||
me->cache_info.identity_digest,
|
||||
DIR_PURPOSE_FETCH_SERVERDESC,
|
||||
@ -1204,6 +1204,7 @@ router_orport_found_reachable(void)
|
||||
{
|
||||
const routerinfo_t *me = router_get_my_routerinfo();
|
||||
if (!can_reach_or_port && me) {
|
||||
char *address = tor_dup_ip(me->addr);
|
||||
log_notice(LD_OR,"Self-testing indicates your ORPort is reachable from "
|
||||
"the outside. Excellent.%s",
|
||||
get_options()->PublishServerDescriptor_ != NO_DIRINFO ?
|
||||
@ -1212,7 +1213,8 @@ router_orport_found_reachable(void)
|
||||
mark_my_descriptor_dirty("ORPort found reachable");
|
||||
control_event_server_status(LOG_NOTICE,
|
||||
"REACHABILITY_SUCCEEDED ORADDRESS=%s:%d",
|
||||
me->address, me->or_port);
|
||||
address, me->or_port);
|
||||
tor_free(address);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1222,6 +1224,7 @@ router_dirport_found_reachable(void)
|
||||
{
|
||||
const routerinfo_t *me = router_get_my_routerinfo();
|
||||
if (!can_reach_dir_port && me) {
|
||||
char *address = tor_dup_ip(me->addr);
|
||||
log_notice(LD_DIRSERV,"Self-testing indicates your DirPort is reachable "
|
||||
"from the outside. Excellent.");
|
||||
can_reach_dir_port = 1;
|
||||
@ -1229,7 +1232,8 @@ router_dirport_found_reachable(void)
|
||||
mark_my_descriptor_dirty("DirPort found reachable");
|
||||
control_event_server_status(LOG_NOTICE,
|
||||
"REACHABILITY_SUCCEEDED DIRADDRESS=%s:%d",
|
||||
me->address, me->dir_port);
|
||||
address, me->dir_port);
|
||||
tor_free(address);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1800,7 +1804,6 @@ router_rebuild_descriptor(int force)
|
||||
|
||||
ri = tor_malloc_zero(sizeof(routerinfo_t));
|
||||
ri->cache_info.routerlist_index = -1;
|
||||
ri->address = tor_dup_ip(addr);
|
||||
ri->nickname = tor_strdup(options->Nickname);
|
||||
ri->addr = addr;
|
||||
ri->or_port = router_get_advertised_or_port(options);
|
||||
@ -1865,7 +1868,7 @@ router_rebuild_descriptor(int force)
|
||||
policies_parse_exit_policy(options->ExitPolicy, &ri->exit_policy,
|
||||
options->IPv6Exit,
|
||||
options->ExitPolicyRejectPrivate,
|
||||
ri->address, !options->BridgeRelay);
|
||||
ri->addr, !options->BridgeRelay);
|
||||
}
|
||||
ri->policy_is_reject_star =
|
||||
policy_is_reject_star(ri->exit_policy, AF_INET) &&
|
||||
@ -2271,8 +2274,7 @@ char *
|
||||
router_dump_router_to_string(routerinfo_t *router,
|
||||
crypto_pk_t *ident_key)
|
||||
{
|
||||
/* XXXX025 Make this look entirely at its arguments, and not at globals.
|
||||
*/
|
||||
char *address = NULL;
|
||||
char *onion_pkey = NULL; /* Onion key, PEM-encoded. */
|
||||
char *identity_pkey = NULL; /* Identity key, PEM-encoded. */
|
||||
char digest[DIGEST_LEN];
|
||||
@ -2346,7 +2348,9 @@ router_dump_router_to_string(routerinfo_t *router,
|
||||
}
|
||||
}
|
||||
|
||||
address = tor_dup_ip(router->addr);
|
||||
chunks = smartlist_new();
|
||||
|
||||
/* Generate the easy portion of the router descriptor. */
|
||||
smartlist_add_asprintf(chunks,
|
||||
"router %s %s %d 0 %d\n"
|
||||
@ -2362,7 +2366,7 @@ router_dump_router_to_string(routerinfo_t *router,
|
||||
"signing-key\n%s"
|
||||
"%s%s%s%s",
|
||||
router->nickname,
|
||||
router->address,
|
||||
address,
|
||||
router->or_port,
|
||||
decide_to_advertise_dirport(options, router->dir_port),
|
||||
extra_or_address ? extra_or_address : "",
|
||||
@ -2476,6 +2480,7 @@ router_dump_router_to_string(routerinfo_t *router,
|
||||
SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
|
||||
smartlist_free(chunks);
|
||||
}
|
||||
tor_free(address);
|
||||
tor_free(family_line);
|
||||
tor_free(onion_pkey);
|
||||
tor_free(identity_pkey);
|
||||
|
@ -2709,7 +2709,6 @@ routerinfo_free(routerinfo_t *router)
|
||||
return;
|
||||
|
||||
tor_free(router->cache_info.signed_descriptor_body);
|
||||
tor_free(router->address);
|
||||
tor_free(router->nickname);
|
||||
tor_free(router->platform);
|
||||
tor_free(router->contact_info);
|
||||
@ -4720,7 +4719,7 @@ router_differences_are_cosmetic(const routerinfo_t *r1, const routerinfo_t *r2)
|
||||
}
|
||||
|
||||
/* If any key fields differ, they're different. */
|
||||
if (strcasecmp(r1->address, r2->address) ||
|
||||
if (r1->addr != r2->addr ||
|
||||
strcasecmp(r1->nickname, r2->nickname) ||
|
||||
r1->or_port != r2->or_port ||
|
||||
!tor_addr_eq(&r1->ipv6_addr, &r2->ipv6_addr) ||
|
||||
|
@ -1195,8 +1195,7 @@ router_parse_entry_from_string(const char *s, const char *end,
|
||||
log_warn(LD_DIR,"Router nickname is invalid");
|
||||
goto err;
|
||||
}
|
||||
router->address = tor_strdup(tok->args[1]);
|
||||
if (!tor_inet_aton(router->address, &in)) {
|
||||
if (!tor_inet_aton(tok->args[1], &in)) {
|
||||
log_warn(LD_DIR,"Router address is not an IP address.");
|
||||
goto err;
|
||||
}
|
||||
|
@ -638,7 +638,7 @@ test_policy_summary_helper(const char *policy_str,
|
||||
line.value = (char *)policy_str;
|
||||
line.next = NULL;
|
||||
|
||||
r = policies_parse_exit_policy(&line, &policy, 1, 0, NULL, 1);
|
||||
r = policies_parse_exit_policy(&line, &policy, 1, 0, 0, 1);
|
||||
test_eq(r, 0);
|
||||
summary = policy_summarize(policy, AF_INET);
|
||||
|
||||
@ -695,7 +695,7 @@ test_policies(void)
|
||||
test_assert(ADDR_POLICY_REJECTED ==
|
||||
compare_tor_addr_to_addr_policy(&tar, 2, policy));
|
||||
|
||||
test_assert(0 == policies_parse_exit_policy(NULL, &policy2, 1, 1, NULL, 1));
|
||||
test_assert(0 == policies_parse_exit_policy(NULL, &policy2, 1, 1, 0, 1));
|
||||
test_assert(policy2);
|
||||
|
||||
policy3 = smartlist_new();
|
||||
@ -782,7 +782,7 @@ test_policies(void)
|
||||
line.key = (char*)"foo";
|
||||
line.value = (char*)"accept *:80,reject private:*,reject *:*";
|
||||
line.next = NULL;
|
||||
test_assert(0 == policies_parse_exit_policy(&line, &policy, 1, 0, NULL, 1));
|
||||
test_assert(0 == policies_parse_exit_policy(&line, &policy, 1, 0, 0, 1));
|
||||
test_assert(policy);
|
||||
//test_streq(policy->string, "accept *:80");
|
||||
//test_streq(policy->next->string, "reject *:*");
|
||||
|
@ -97,7 +97,6 @@ test_dir_formats(void)
|
||||
|
||||
get_platform_str(platform, sizeof(platform));
|
||||
r1 = tor_malloc_zero(sizeof(routerinfo_t));
|
||||
r1->address = tor_strdup("18.244.0.1");
|
||||
r1->addr = 0xc0a80001u; /* 192.168.0.1 */
|
||||
r1->cache_info.published_on = 0;
|
||||
r1->or_port = 9000;
|
||||
@ -124,7 +123,6 @@ test_dir_formats(void)
|
||||
ex2->maskbits = 8;
|
||||
ex2->prt_min = ex2->prt_max = 24;
|
||||
r2 = tor_malloc_zero(sizeof(routerinfo_t));
|
||||
r2->address = tor_strdup("1.1.1.1");
|
||||
r2->addr = 0x0a030201u; /* 10.3.2.1 */
|
||||
r2->platform = tor_strdup(platform);
|
||||
r2->cache_info.published_on = 5;
|
||||
@ -153,7 +151,7 @@ test_dir_formats(void)
|
||||
tor_free(options->ContactInfo);
|
||||
test_assert(buf);
|
||||
|
||||
strlcpy(buf2, "router Magri 18.244.0.1 9000 0 9003\n"
|
||||
strlcpy(buf2, "router Magri 192.168.0.1 9000 0 9003\n"
|
||||
"or-address [1:2:3:4::]:9999\n"
|
||||
"platform Tor "VERSION" on ", sizeof(buf2));
|
||||
strlcat(buf2, get_uname(), sizeof(buf2));
|
||||
@ -187,7 +185,7 @@ test_dir_formats(void)
|
||||
cp = buf;
|
||||
rp1 = router_parse_entry_from_string((const char*)cp,NULL,1,0,NULL);
|
||||
test_assert(rp1);
|
||||
test_streq(rp1->address, r1->address);
|
||||
test_eq(rp1->addr, r1->addr);
|
||||
test_eq(rp1->or_port, r1->or_port);
|
||||
//test_eq(rp1->dir_port, r1->dir_port);
|
||||
test_eq(rp1->bandwidthrate, r1->bandwidthrate);
|
||||
@ -198,7 +196,7 @@ test_dir_formats(void)
|
||||
//test_assert(rp1->exit_policy == NULL);
|
||||
|
||||
strlcpy(buf2,
|
||||
"router Fred 1.1.1.1 9005 0 0\n"
|
||||
"router Fred 10.3.2.1 9005 0 0\n"
|
||||
"platform Tor "VERSION" on ", sizeof(buf2));
|
||||
strlcat(buf2, get_uname(), sizeof(buf2));
|
||||
strlcat(buf2, "\n"
|
||||
@ -231,7 +229,7 @@ test_dir_formats(void)
|
||||
cp = buf;
|
||||
rp2 = router_parse_entry_from_string((const char*)cp,NULL,1,0,NULL);
|
||||
test_assert(rp2);
|
||||
test_streq(rp2->address, r2->address);
|
||||
test_eq(rp2->addr, r2->addr);
|
||||
test_eq(rp2->or_port, r2->or_port);
|
||||
test_eq(rp2->dir_port, r2->dir_port);
|
||||
test_eq(rp2->bandwidthrate, r2->bandwidthrate);
|
||||
|
Loading…
Reference in New Issue
Block a user