Add missing newlines when copying variables from tinc.conf to an invitation file.
[tinc] / src / invitation.c
index 3f7f976..a94460e 100644 (file)
@@ -340,12 +340,17 @@ int cmd_invite(int argc, char *argv[]) {
                }
                chmod(filename, 0600);
                ecdsa_write_pem_private_key(key, f);
+               fclose(f);
+
+               if(connect_tincd(false))
+                       sendline(fd, "%d %d", CONTROL, REQ_RELOAD);
        } else {
                key = ecdsa_read_pem_private_key(f);
+               fclose(f);
                if(!key)
                        fprintf(stderr, "Could not read private key from %s\n", filename);
        }
-       fclose(f);
+
        free(filename);
        if(!key)
                return 1;
@@ -399,8 +404,12 @@ int cmd_invite(int argc, char *argv[]) {
                char buf[1024];
                while(fgets(buf, sizeof buf, tc)) {
                        if((!strncasecmp(buf, "Mode", 4) && strchr(" \t=", buf[4]))
-                                       || (!strncasecmp(buf, "Broadcast", 9) && strchr(" \t=", buf[9])))
+                                       || (!strncasecmp(buf, "Broadcast", 9) && strchr(" \t=", buf[9]))) {
                                fputs(buf, f);
+                               // Make sure there is a newline character.
+                               if(!strchr(buf, '\n'))
+                                       fputc('\n', f);
+                       }
                }
                fclose(tc);
        }
@@ -818,7 +827,7 @@ int cmd_join(int argc, char *argv[]) {
        }
 
        // Make sure confbase exists and is accessible.
-       if(strcmp(confdir, confbase) && mkdir(confdir, 0755) && errno != EEXIST) {
+       if(!confbase_given && mkdir(confdir, 0755) && errno != EEXIST) {
                fprintf(stderr, "Could not create directory %s: %s\n", confdir, strerror(errno));
                return 1;
        }