Merge branch 'tor-github/pr/1692'

This commit is contained in:
David Goulet 2020-01-30 13:53:32 -05:00
commit f07d8a1a92
4 changed files with 24 additions and 17 deletions

3
changes/ticket33091 Normal file
View file

@ -0,0 +1,3 @@
o Code simplification and refactoring (mainloop):
- Simplify the ip_address_changed() function by removing redundant checks.
Closes ticket 33091.

View file

@ -4970,10 +4970,10 @@ connection_finished_flushing(connection_t *conn)
} }
} }
/** Called when our attempt to connect() to another server has just /** Called when our attempt to connect() to a server has just succeeded.
* succeeded.
* *
* This function just passes conn to the connection-specific * This function checks if the interface address has changed (clients only),
* and then passes conn to the connection-specific
* connection_*_finished_connecting() function. * connection_*_finished_connecting() function.
*/ */
static int static int

View file

@ -2273,18 +2273,23 @@ systemd_watchdog_callback(periodic_timer_t *timer, void *arg)
#define UPTIME_CUTOFF_FOR_NEW_BANDWIDTH_TEST (6*60*60) #define UPTIME_CUTOFF_FOR_NEW_BANDWIDTH_TEST (6*60*60)
/** Called when our IP address seems to have changed. <b>at_interface</b> /** Called when our IP address seems to have changed. <b>on_client_conn</b>
* should be true if we detected a change in our interface, and false if we * should be true if:
* detected a change in our published address. */ * - we detected a change in our interface address, using an outbound
* connection, and therefore
* - our client TLS keys need to be rotated.
* Otherwise, it should be false, and:
* - we detected a change in our published address
* (using some other method), and therefore
* - the published addresses in our descriptor need to change.
*/
void void
ip_address_changed(int at_interface) ip_address_changed(int on_client_conn)
{ {
const or_options_t *options = get_options(); const or_options_t *options = get_options();
int server = server_mode(options); int server = server_mode(options);
int exit_reject_interfaces = (server && options->ExitRelay
&& options->ExitPolicyRejectLocalInterfaces);
if (at_interface) { if (on_client_conn) {
if (! server) { if (! server) {
/* Okay, change our keys. */ /* Okay, change our keys. */
if (init_keys_client() < 0) if (init_keys_client() < 0)
@ -2296,15 +2301,14 @@ ip_address_changed(int at_interface)
reset_bandwidth_test(); reset_bandwidth_test();
reset_uptime(); reset_uptime();
router_reset_reachability(); router_reset_reachability();
/* All relays include their IP addresses as their ORPort addresses in
* their descriptor.
* Exit relays also incorporate interface addresses in their exit
* policies, when ExitPolicyRejectLocalInterfaces is set. */
mark_my_descriptor_dirty("IP address changed");
} }
} }
/* Exit relays incorporate interface addresses in their exit policies when
* ExitPolicyRejectLocalInterfaces is set */
if (exit_reject_interfaces || (server && !at_interface)) {
mark_my_descriptor_dirty("IP address changed");
}
dns_servers_relaunch_checks(); dns_servers_relaunch_checks();
} }

View file

@ -56,7 +56,7 @@ MOCK_DECL(int, connection_count_moribund, (void));
void directory_all_unreachable(time_t now); void directory_all_unreachable(time_t now);
void directory_info_has_arrived(time_t now, int from_cache, int suppress_logs); void directory_info_has_arrived(time_t now, int from_cache, int suppress_logs);
void ip_address_changed(int at_interface); void ip_address_changed(int on_client_conn);
void dns_servers_relaunch_checks(void); void dns_servers_relaunch_checks(void);
void reset_all_main_loop_timers(void); void reset_all_main_loop_timers(void);
void reschedule_directory_downloads(void); void reschedule_directory_downloads(void);