]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.c
Call fsync() on the configuration directories where appropriate.
[meshlink] / src / meshlink.c
index e65b7b199c76205d82c9fb76e3ea55ada5c08322..164c993784b54e5401f19ba364732d304297c002 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;
@@ -1269,6 +1279,8 @@ meshlink_handle_t *meshlink_open_ex(const meshlink_open_params_t *params) {
        mesh->invitation_timeout = 604800; // 1 week
        mesh->netns = params->netns;
        mesh->submeshes = NULL;
+       mesh->log_cb = global_log_cb;
+       mesh->log_level = global_log_level;
 
        memcpy(mesh->dev_class_traits, default_class_traits, sizeof(default_class_traits));
 
@@ -2709,6 +2721,10 @@ bool meshlink_import(meshlink_handle_t *mesh, const char *data) {
                return false;
        }
 
+       if(!config_sync(mesh, "current")) {
+               return false;
+       }
+
        return true;
 }
 
@@ -2738,6 +2754,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
@@ -2781,6 +2799,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;