]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.c
Ensure only valid hostnames end up in the invitation URL.
[meshlink] / src / meshlink.c
index 0826487674f2467d24c8d201968e8e815b1a702b..f0a1b759fe989397c288149600f4fbb2e8316938 100644 (file)
@@ -333,7 +333,7 @@ void remove_duplicate_hostnames(char *host[], char *port[], int n) {
                        break;
                }
 
-               if(found) {
+               if(found || !is_valid_hostname(host[i])) {
                        free(host[i]);
                        free(port[i]);
                        host[i] = NULL;
@@ -417,7 +417,7 @@ static char *get_my_hostname(meshlink_handle_t *mesh, uint32_t flags) {
                        char resolved_port[NI_MAXSERV];
                        err = getnameinfo(ai_in->ai_addr, ai_in->ai_addrlen, resolved_host, sizeof resolved_host, resolved_port, sizeof resolved_port, NI_NUMERICSERV);
 
-                       if(err) {
+                       if(err || !is_valid_hostname(resolved_host)) {
                                freeaddrinfo(ai_in);
                                continue;
                        }
@@ -846,6 +846,7 @@ static struct timeval idle(event_loop_t *loop, void *data) {
 // Get our local address(es) by simulating connecting to an Internet host.
 static void add_local_addresses(meshlink_handle_t *mesh) {
        struct sockaddr_storage sn;
+       sn.ss_family = AF_UNKNOWN;
        socklen_t sl = sizeof(sn);
 
        // IPv4 example.org
@@ -1013,13 +1014,14 @@ meshlink_open_params_t *meshlink_open_params_init(const char *confbase, const ch
 
        if(!name || !*name) {
                logger(NULL, MESHLINK_ERROR, "No name given!\n");
-               //return NULL;
-       } else { //check name only if there is a name != NULL
-               if(!check_id(name)) {
-                       logger(NULL, MESHLINK_ERROR, "Invalid name given!\n");
-                       meshlink_errno = MESHLINK_EINVAL;
-                       return NULL;
-               }
+               meshlink_errno = MESHLINK_EINVAL;
+               return NULL;
+       };
+
+       if(!check_id(name)) {
+               logger(NULL, MESHLINK_ERROR, "Invalid name given!\n");
+               meshlink_errno = MESHLINK_EINVAL;
+               return NULL;
        }
 
        if(devclass < 0 || devclass >= DEV_CLASS_COUNT) {
@@ -2192,10 +2194,10 @@ bool meshlink_set_port(meshlink_handle_t *mesh, int port) {
                meshlink_errno = MESHLINK_ESTORAGE;
                free_node(mesh->self);
                mesh->self = NULL;
+               goto done;
        } else if(!setup_network(mesh)) {
                meshlink_errno = MESHLINK_ENETWORK;
-       } else {
-               rval = true;
+               goto done;
        }
 
        /* Rebuild our own list of recent addresses */
@@ -2205,9 +2207,7 @@ bool meshlink_set_port(meshlink_handle_t *mesh, int port) {
        /* Write meshlink.conf with the updated port number */
        write_main_config_files(mesh);
 
-       if(!config_sync(mesh, "current")) {
-               return false;
-       }
+       rval = config_sync(mesh, "current");
 
 done:
        pthread_mutex_unlock(&(mesh->mesh_mutex));