X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Finvitation.c;h=36dfa41b64b1d2a62a04f66d66006e72c4a987ba;hb=82575bd44dc02bd1febd265c1db0f05b298329af;hp=e6567bae4960b779841ff1d676576d6aed439d4b;hpb=21184674b38ea1da87588de97dab076c9b9e4a81;p=tinc diff --git a/src/invitation.c b/src/invitation.c index e6567bae..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" @@ -380,7 +381,19 @@ 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); @@ -395,17 +408,15 @@ int cmd_invite(int argc, char *argv[]) { xasprintf(&url, "%s/%s%s", address, hash, cookie); // Call the inviation-created script - setenv("NAME", myname, true); - setenv("NETNAME", netname, true); - setenv("NODE", argv[1], true); - setenv("INVITATION_FILE", filename, true); - setenv("INVITATION_URL", url, true); - char *scriptname; - xasprintf(&scriptname, "\"%s" SLASH "invitation-created\"", confbase); - system(scriptname); - free(scriptname); - unsetenv("NODE"); - unsetenv("INVITATION"); + 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);