Commit f07d8a1a authored by David Goulet's avatar David Goulet 🐼
Browse files

Merge branch 'tor-github/pr/1692'

parents a1dec447 f3ecf0b0
Loading
Loading
Loading
Loading

changes/ticket33091

0 → 100644
+3 −0
Original line number Diff line number Diff line
  o Code simplification and refactoring (mainloop):
    - Simplify the ip_address_changed() function by removing redundant checks.
      Closes ticket 33091.
+3 −3
Original line number Diff line number Diff line
@@ -4970,10 +4970,10 @@ connection_finished_flushing(connection_t *conn)
  }
}

/** Called when our attempt to connect() to another server has just
 * succeeded.
/** Called when our attempt to connect() to a server has just 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.
 */
static int
+17 −13
Original line number Diff line number Diff line
@@ -2273,18 +2273,23 @@ systemd_watchdog_callback(periodic_timer_t *timer, void *arg)

#define UPTIME_CUTOFF_FOR_NEW_BANDWIDTH_TEST (6*60*60)

/** Called when our IP address seems to have changed. <b>at_interface</b>
 * should be true if we detected a change in our interface, and false if we
 * detected a change in our published address. */
/** 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 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
ip_address_changed(int at_interface)
ip_address_changed(int on_client_conn)
{
  const or_options_t *options = get_options();
  int server = server_mode(options);
  int exit_reject_interfaces = (server && options->ExitRelay
                                && options->ExitPolicyRejectLocalInterfaces);

  if (at_interface) {
  if (on_client_conn) {
    if (! server) {
      /* Okay, change our keys. */
      if (init_keys_client() < 0)
@@ -2296,14 +2301,13 @@ ip_address_changed(int at_interface)
        reset_bandwidth_test();
      reset_uptime();
      router_reset_reachability();
    }
  }

  /* Exit relays incorporate interface addresses in their exit policies when
   * ExitPolicyRejectLocalInterfaces is set */
  if (exit_reject_interfaces || (server && !at_interface)) {
      /* 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");
    }
  }

  dns_servers_relaunch_checks();
}
+1 −1
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ MOCK_DECL(int, connection_count_moribund, (void));
void directory_all_unreachable(time_t now);
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 reset_all_main_loop_timers(void);
void reschedule_directory_downloads(void);