From 74b3031134730a7a031df3534549ee5988b456c0 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Thu, 7 Aug 2014 18:33:08 +0200 Subject: [PATCH 1/1] Remove references to port 655 from MeshLink. 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 | 10 ++-------- src/net_setup.c | 11 ++++------- src/net_socket.c | 7 +++++-- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/meshlink.c b/src/meshlink.c index 0da4cbbe..4fa3a580 100644 --- a/src/meshlink.c +++ b/src/meshlink.c @@ -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; diff --git a/src/net_setup.c b/src/net_setup.c index ce9a59ad..1c468b78 100644 --- a/src/net_setup.c +++ b/src/net_setup.c @@ -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); diff --git a/src/net_socket.c b/src/net_socket.c index 85f51648..34eccc96 100644 --- a/src/net_socket.c +++ b/src/net_socket.c @@ -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); -- 2.39.5