[tor-commits] [tor/master] Teach retry_listener about "auto" ports.

nickm at torproject.org nickm at torproject.org
Fri May 13 14:47:11 UTC 2011


commit 61c06cbc66ecfaece20501417ef81b3f6f202391
Author: Nick Mathewson <nickm at torproject.org>
Date:   Mon May 2 15:26:39 2011 -0400

    Teach retry_listener about "auto" ports.
    
    Otherwise, it will just immediately close any port declared with "auto"
    on the grounds that it wasn't configured.  Now, it will allow "auto" to
    match any port.
    
    This means FWIW if you configure a socks port with SocksPort 9999
    and then transition to SocksPort auto, the original socksport will
    not get closed and reopened.  I'm considering this a feature.
---
 src/or/connection.c |   19 ++++++++++++++++---
 1 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/or/connection.c b/src/or/connection.c
index 47e5423..bc18dab 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -1772,10 +1772,23 @@ retry_listeners(int type, config_line_t *cfg,
             if (!parse_addr_port(LOG_WARN,
                                  wanted->value, &address, NULL, &port)) {
               int addr_matches = !strcasecmp(address, conn->address);
+              int port_matches;
               tor_free(address);
-              if (! port)
-                port = port_option;
-              if (port == conn->port && addr_matches) {
+              if (port) {
+                /* The Listener line has a port */
+                port_matches = (port == conn->port);
+              } else if (port_option == CFG_AUTO_PORT) {
+                /* The Listener line has no port, and the Port line is "auto".
+                 * "auto" matches anything; transitions from any port to
+                 * "auto" succeed. */
+                port_matches = 1;
+              } else {
+                /*  The Listener line has no port, and the Port line is "auto".
+                 * "auto" matches anything; transitions from any port to
+                 * "auto" succeed. */
+                port_matches = (port_option == conn->port);
+              }
+              if (port_matches  && addr_matches) {
                 line = wanted;
                 break;
               }





More information about the tor-commits mailing list