]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.c
Immediately try connecting to the mesh after a succesful join.
[meshlink] / src / meshlink.c
index 56a1ae7ad6016a8f48569d60f0fb9ffb66090e47..4aadaaa9b0ef9c557ab4cb17a3bce030be82fdce 100644 (file)
@@ -341,18 +341,6 @@ static char *get_value(const char *data, const char *var) {
                return NULL;
        return val;
 }
-static FILE *fopenmask(const char *filename, const char *mode, mode_t perms) {
-       mode_t mask = umask(0);
-       perms &= ~mask;
-       umask(~perms);
-       FILE *f = fopen(filename, mode);
-#ifdef HAVE_FCHMOD
-       if((perms & 0444) && f)
-               fchmod(fileno(f), perms);
-#endif
-       umask(mask);
-       return f;
-}
 
 static bool try_bind(int port) {
        struct addrinfo *ai = NULL;
@@ -536,27 +524,10 @@ static bool finalize_join(meshlink_handle_t *mesh) {
                fclose(f);
        }
 
-       // Generate our key and send a copy to the server
-       ecdsa_t *key = ecdsa_generate();
-       if(!key)
-               return false;
-
-       char *b64key = ecdsa_get_base64_public_key(key);
+       char *b64key = ecdsa_get_base64_public_key(mesh->self->connection->ecdsa);
        if(!b64key)
                return false;
 
-       snprintf(filename, sizeof filename, "%s" SLASH "ecdsa_key.priv", mesh->confbase);
-       f = fopenmask(filename, "w", 0600);
-
-       if(!ecdsa_write_pem_private_key(key, f)) {
-               fprintf(stderr, "Error writing private key!\n");
-               ecdsa_free(key);
-               fclose(f);
-               return false;
-       }
-
-       fclose(f);
-
        fprintf(fh, "ECDSAPublicKey = %s\n", b64key);
        fprintf(fh, "Port = %s\n", mesh->myport);
 
@@ -565,10 +536,15 @@ static bool finalize_join(meshlink_handle_t *mesh) {
        sptps_send_record(&(mesh->sptps), 1, b64key, strlen(b64key));
        free(b64key);
 
-       ecdsa_free(key);
+       free(mesh->self->name);
+       free(mesh->self->connection->name);
+       mesh->self->name = xstrdup(name);
+       mesh->self->connection->name = xstrdup(name);
 
        fprintf(stderr, "Configuration stored in: %s\n", mesh->confbase);
 
+       load_all_nodes(mesh);
+
        return true;
 }