X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Finvitation.c;h=36dfa41b64b1d2a62a04f66d66006e72c4a987ba;hb=82575bd44dc02bd1febd265c1db0f05b298329af;hp=5175ba92003c07be3c2a6a37833bc9d786db2126;hpb=9699f08afc6420d2bdac1063ea6789b585aaf42e;p=tinc diff --git a/src/invitation.c b/src/invitation.c index 5175ba92..36dfa41b 100644 --- a/src/invitation.c +++ b/src/invitation.c @@ -27,6 +27,7 @@ #include "names.h" #include "netutl.h" #include "rsagen.h" +#include "script.h" #include "sptps.h" #include "tincctl.h" #include "utils.h" @@ -368,7 +369,6 @@ int cmd_invite(int argc, char *argv[]) { free(filename); return 1; } - free(filename); f = fdopen(ifd, "w"); if(!f) abort(); @@ -381,16 +381,45 @@ int cmd_invite(int argc, char *argv[]) { if(netname) fprintf(f, "NetName = %s\n", netname); fprintf(f, "ConnectTo = %s\n", myname); - // TODO: copy Broadcast and Mode + + // Copy Broadcast and Mode + FILE *tc = fopen(tinc_conf, "r"); + if(tc) { + 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]))) + fputs(buf, f); + } + fclose(tc); + } + fprintf(f, "#---------------------------------------------------------------#\n"); fprintf(f, "Name = %s\n", myname); - xasprintf(&filename, "%s" SLASH "hosts" SLASH "%s", confbase, myname); - fcopy(f, filename); + char *filename2; + xasprintf(&filename2, "%s" SLASH "hosts" SLASH "%s", confbase, myname); + fcopy(f, filename2); fclose(f); + free(filename2); // Create an URL from the local address, key hash and cookie - printf("%s/%s%s\n", address, hash, cookie); + char *url; + xasprintf(&url, "%s/%s%s", address, hash, cookie); + + // Call the inviation-created script + char *envp[6] = {}; + xasprintf(&envp[0], "NAME=%s", myname); + xasprintf(&envp[1], "NETNAME=%s", netname); + xasprintf(&envp[2], "NODE=%s", argv[1]); + xasprintf(&envp[3], "INVITATION_FILE=%s", filename); + xasprintf(&envp[4], "INVITATION_URL=%s", url); + execute_script("invitation-created", envp); + for(int i = 0; i < 6 && envp[i]; i++) + free(envp[i]); + + puts(url); + free(url); free(filename); free(address);