]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Teach retry_listener about "auto" ports.
authorNick Mathewson <nickm@torproject.org>
Mon, 2 May 2011 19:26:39 +0000 (15:26 -0400)
committerNick Mathewson <nickm@torproject.org>
Fri, 13 May 2011 14:41:18 +0000 (10:41 -0400)
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

index 47e5423e0bc085de94abfd0776e7257391cd60a0..bc18dab1ec2363b2c149bce908159aa076fb59f9 100644 (file)
@@ -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;
               }