]> git.meshlink.io Git - meshlink/commitdiff
Check the return value of node_write_config() while handling invitations.
authorGuus Sliepen <guus@meshlink.io>
Thu, 10 Oct 2019 05:58:21 +0000 (07:58 +0200)
committerGuus Sliepen <guus@meshlink.io>
Thu, 10 Oct 2019 17:54:10 +0000 (19:54 +0200)
src/meshlink.c
src/meshlink_internal.h
src/net_setup.c
src/protocol_auth.c

index 4162b36e7c7f569b01be95f675546868ccc16d1c..7a01bd0ffae8f921f7e3b28457e26f6198b7b6b2 100644 (file)
@@ -3535,7 +3535,7 @@ void handle_network_change(meshlink_handle_t *mesh, bool online) {
        retry(mesh);
 }
 
-void call_error_cb(meshlink_handle_t *mesh) {
+void call_error_cb(meshlink_handle_t *mesh, meshlink_errno_t meshlink_errno) {
        // We should only call the callback function if we are in the background thread.
        if(!mesh->error_cb) {
                return;
index ba7f7d155c4893cb28e6d6a5ccdc2a9a286a1333..e7b184e40caccbe6e3abb319e36eff0f980a2e7e 100644 (file)
@@ -258,7 +258,7 @@ extern meshlink_log_level_t global_log_level;
 extern meshlink_log_cb_t global_log_cb;
 extern void handle_duplicate_node(meshlink_handle_t *mesh, struct node_t *n);
 extern void handle_network_change(meshlink_handle_t *mesh, bool online);
-extern void call_error_cb(meshlink_handle_t *mesh);
+extern void call_error_cb(meshlink_handle_t *mesh, meshlink_errno_t meshlink_errno);
 
 /// Per-instance PRNG
 static inline int prng(meshlink_handle_t *mesh, uint64_t max) {
index b4a16c7e17fd782341db34bd256c9754c1c7fd8b..667d15a381723869df9abdf650adbeb3cdfdce23 100644 (file)
@@ -272,7 +272,7 @@ bool node_write_config(meshlink_handle_t *mesh, node_t *n) {
        config_t config = {buf, packmsg_output_size(&out, buf)};
 
        if(!config_write(mesh, "current", n->name, &config, mesh->config_key)) {
-               call_error_cb(mesh);
+               call_error_cb(mesh, MESHLINK_ESTORAGE);
                return false;
        }
 
index 12e81e4c7063c4d32096c22210536dddc6f27075..4026c41f54738e14623769513f61c9a25a032caa 100644 (file)
@@ -164,8 +164,15 @@ static bool finalize_invitation(meshlink_handle_t *mesh, connection_t *c, const
        n->devclass = DEV_CLASS_UNKNOWN;
        n->ecdsa = ecdsa_set_public_key(data);
        n->submesh = c->submesh;
+
+       if(!node_write_config(mesh, n)) {
+               logger(mesh, MESHLINK_ERROR, "Error writing configuration file for invited node %s!\n", c->name);
+               free_node(n);
+               return false;
+
+       }
+
        node_add(mesh, n);
-       node_write_config(mesh, n);
 
        logger(mesh, MESHLINK_INFO, "Key successfully received from %s", c->name);