X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;ds=inline;f=src%2Fmeshlink.c;h=1b33e88d47d3e3a9801c907f44be42d1a617f306;hb=68277cdaacfd8dbaa1e83bc803896c4f786a59dd;hp=ebe585d2960eed6c0271e03716507a85972c7c7b;hpb=9e46fee1c71faad5e6f0b69ff9a92d01d0dad899;p=meshlink diff --git a/src/meshlink.c b/src/meshlink.c index ebe585d2..1b33e88d 100644 --- a/src/meshlink.c +++ b/src/meshlink.c @@ -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; @@ -1186,7 +1196,8 @@ meshlink_handle_t *meshlink_open_encrypted(const char *confbase, const char *nam } /* Create a temporary struct on the stack, to avoid allocating and freeing one. */ - meshlink_open_params_t params = {NULL}; + meshlink_open_params_t params; + memset(¶ms, 0, sizeof(params)); params.confbase = (char *)confbase; params.name = (char *)name; @@ -1203,7 +1214,8 @@ meshlink_handle_t *meshlink_open_encrypted(const char *confbase, const char *nam meshlink_handle_t *meshlink_open_ephemeral(const char *name, const char *appname, dev_class_t devclass) { /* Create a temporary struct on the stack, to avoid allocating and freeing one. */ - meshlink_open_params_t params = {NULL}; + meshlink_open_params_t params; + memset(¶ms, 0, sizeof(params)); params.name = (char *)name; params.appname = (char *)appname; @@ -2149,9 +2161,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 +2181,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)); @@ -2280,7 +2300,8 @@ char *meshlink_invite_ex(meshlink_handle_t *mesh, meshlink_submesh_t *submesh, c * Note: make sure we only add config files of nodes that are in the core mesh or the same submesh, * and are not blacklisted. */ - config_t configs[5] = {NULL}; + config_t configs[5]; + memset(configs, 0, sizeof(configs)); int count = 0; if(config_read(mesh, "current", mesh->self->name, &configs[count], mesh->config_key)) { @@ -2711,6 +2732,10 @@ bool meshlink_import(meshlink_handle_t *mesh, const char *data) { return false; } + if(!config_sync(mesh, "current")) { + return false; + } + return true; } @@ -2740,6 +2765,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 +2810,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;