Make sure myport is set correctly when running with Port = 0.
authorEtienne Dechamps <etienne@edechamps.fr>
Sun, 6 Jul 2014 09:55:23 +0000 (10:55 +0100)
committerEtienne Dechamps <etienne@edechamps.fr>
Sun, 6 Jul 2014 09:55:23 +0000 (10:55 +0100)
Setting the Port configuration variable to zero can be used to make tinc
listen on a system-assigned port. Unfortunately, in this scenario myport
will be zero, which means that tinc won't transmit its actual UDP
listening port to other nodes. This breaks UDP hole punching and local
discovery.

src/net_setup.c

index 6d15fcf1d6ad0a3342b46d6b9481dff1e41b88ce..c4f2127ec0dee48bfe9a4f79c8ee48cfb35aef60 100644 (file)
@@ -1037,7 +1037,7 @@ static bool setup_myself(void) {
 
        /* If no Port option was specified, set myport to the port used by the first listening socket. */
 
-       if(!port_specified) {
+       if(!port_specified || atoi(myport) == 0) {
                sockaddr_t sa;
                socklen_t salen = sizeof sa;
                if(!getsockname(listen_socket[0].udp.fd, &sa.sa, &salen)) {