]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.c
Correctly update our own host config file after meshlink_set_port().
[meshlink] / src / meshlink.c
index ebe585d2960eed6c0271e03716507a85972c7c7b..a9e1b551df18362848fc68a7b5e1f7a0f1192850 100644 (file)
@@ -661,6 +661,11 @@ static bool finalize_join(meshlink_handle_t *mesh, const void *buf, uint16_t len
                }
        }
 
+       /* Ensure the configuration directory metadata is on disk */
+       if(!config_sync(mesh, "current")) {
+               return false;
+       }
+
        sptps_send_record(&(mesh->sptps), 1, ecdsa_get_public_key(mesh->private_key), 32);
 
        logger(mesh, MESHLINK_DEBUG, "Configuration stored in: %s\n", mesh->confbase);
@@ -890,6 +895,11 @@ static bool meshlink_setup(meshlink_handle_t *mesh) {
                return false;
        }
 
+       /* Ensure the configuration directory metadata is on disk */
+       if(!config_sync(mesh, "current")) {
+               return false;
+       }
+
        if(!main_config_lock(mesh)) {
                logger(NULL, MESHLINK_ERROR, "Cannot lock main config file\n");
                meshlink_errno = MESHLINK_ESTORAGE;
@@ -2149,9 +2159,6 @@ bool meshlink_set_port(meshlink_handle_t *mesh, int port) {
        free(mesh->myport);
        xasprintf(&mesh->myport, "%d", port);
 
-       /* Write meshlink.conf with the updated port number */
-       write_main_config_files(mesh);
-
        /* Close down the network. This also deletes mesh->self. */
        close_network_connections(mesh);
 
@@ -2172,6 +2179,17 @@ bool meshlink_set_port(meshlink_handle_t *mesh, int port) {
                rval = true;
        }
 
+       /* Rebuild our own list of recent addresses */
+       memset(mesh->self->recent, 0, sizeof(mesh->self->recent));
+       add_local_addresses(mesh);
+
+       /* Write meshlink.conf with the updated port number */
+       write_main_config_files(mesh);
+
+       if(!config_sync(mesh, "current")) {
+               return false;
+       }
+
 done:
        pthread_mutex_unlock(&(mesh->mesh_mutex));
 
@@ -2711,6 +2729,10 @@ bool meshlink_import(meshlink_handle_t *mesh, const char *data) {
                return false;
        }
 
+       if(!config_sync(mesh, "current")) {
+               return false;
+       }
+
        return true;
 }
 
@@ -2740,6 +2762,8 @@ void meshlink_blacklist(meshlink_handle_t *mesh, meshlink_node_t *node) {
 
        n->status.blacklisted = true;
        node_write_config(mesh, n);
+       config_sync(mesh, "current");
+
        logger(mesh, MESHLINK_DEBUG, "Blacklisted %s.\n", node->name);
 
        //Immediately terminate any connections we have with the blacklisted node
@@ -2783,6 +2807,7 @@ void meshlink_whitelist(meshlink_handle_t *mesh, meshlink_node_t *node) {
 
        n->status.blacklisted = false;
        node_write_config(mesh, n);
+       config_sync(mesh, "current");
 
        pthread_mutex_unlock(&(mesh->mesh_mutex));
        return;