]> git.meshlink.io Git - meshlink/commitdiff
Remove references to port 655 from MeshLink.
authorGuus Sliepen <guus@meshlink.io>
Thu, 7 Aug 2014 16:33:08 +0000 (18:33 +0200)
committerGuus Sliepen <guus@meshlink.io>
Thu, 7 Aug 2014 16:33:08 +0000 (18:33 +0200)
First of all, port 655 is officially registered as the port for tinc,
not for any other application. Second, applications built on top of
MeshLink will probably run as non-root, and so cannot bind to ports
lower than 1024 anyway.

- Never try binding to port 655 when setting up a new node.
- Always require a valid port number when making connections.

src/meshlink.c
src/net_setup.c
src/net_socket.c

index 0da4cbbed0e4fe38d1d5cd6d8ce4666b5284fb8c..4fa3a58000135bb71713659de90599dac492458e 100644 (file)
@@ -347,12 +347,7 @@ static bool try_bind(int port) {
 }
 
 static int check_port(meshlink_handle_t *mesh) {
-       if(try_bind(655))
-               return 655;
-
-       fprintf(stderr, "Warning: could not bind to port 655.\n");
-
-       for(int i = 0; i < 100; i++) {
+       for(int i = 0; i < 1000; i++) {
                int port = 0x1000 + (rand() & 0x7fff);
                if(try_bind(port)) {
                        char filename[PATH_MAX];
@@ -365,7 +360,6 @@ static int check_port(meshlink_handle_t *mesh) {
 
                        fprintf(f, "Port = %d\n", port);
                        fclose(f);
-                       fprintf(stderr, "MeshLink will instead listen on port %d.\n", port);
                        return port;
                }
        }
@@ -1398,7 +1392,7 @@ bool meshlink_join(meshlink_handle_t *mesh, const char *invitation) {
        }
 
        if(!port)
-               port = "655";
+               goto invalid;
 
        if(!b64decode(slash, mesh->hash, 18) || !b64decode(slash + 24, mesh->cookie, 18))
                goto invalid;
index ce9a59ad230b0723e5bafeed12f312fed629b4a5..1c468b78d7f8d19316bfb918194c1181bb3a2ba4 100644 (file)
@@ -279,8 +279,10 @@ bool setup_myself(meshlink_handle_t *mesh) {
        mesh->self->connection->name = xstrdup(name);
        read_host_config(mesh, mesh->config, name);
 
-       if(!get_config_string(lookup_config(mesh->config, "Port"), &mesh->myport))
-               mesh->myport = xstrdup("655");
+       if(!get_config_string(lookup_config(mesh->config, "Port"), &mesh->myport)) {
+               logger(DEBUG_ALWAYS, LOG_ERR, "Port for MeshLink instance required!");
+               return false;
+       }
 
        mesh->self->connection->options = 0;
        mesh->self->connection->protocol_major = PROT_MAJOR;
@@ -339,11 +341,6 @@ bool setup_myself(meshlink_handle_t *mesh) {
                return false;
        }
 
-       // TODO: require Port to be set? Or use "0" and use getsockname()?
-
-       if(!mesh->myport)
-               mesh->myport = xstrdup("655");
-
        xasprintf(&mesh->self->hostname, "MYSELF port %s", mesh->myport);
        mesh->self->connection->hostname = xstrdup(mesh->self->hostname);
 
index 85f51648dc81955f87b8c946f40e3bd6f059f2bc..34eccc9620417532c47cf086b30e16004fa604c7 100644 (file)
@@ -372,8 +372,11 @@ begin:
                        *space = 0;
                } else {
                        // TODO: Only allow Address statements?
-                       if(!get_config_string(lookup_config(outgoing->config_tree, "Port"), &port))
-                               port = xstrdup("655");
+                       if(!get_config_string(lookup_config(outgoing->config_tree, "Port"), &port)) {
+                               logger(DEBUG_CONNECTIONS, LOG_ERR, "No Port known for %s", outgoing->name);
+                               retry_outgoing(mesh, outgoing);
+                               return false;
+                       }
                }
 
                outgoing->ai = str2addrinfo(address, port, SOCK_STREAM);