]> git.meshlink.io Git - meshlink/commitdiff
run tincd from the same directory as tincctl and pass all options to it
authorMichael Tokarev <mjt@tls.msk.ru>
Sun, 7 Aug 2011 08:05:07 +0000 (12:05 +0400)
committerGuus Sliepen <guus@tinc-vpn.org>
Sun, 7 Aug 2011 08:12:43 +0000 (10:12 +0200)
For tincctl start, run tincd from dirname($0) not SBINDIR -
this allows painless alternative directory installation and
running from build directory too.

Also while at it, pass the rest of command line to tincd, not
only options before "start" argument.  This way it's possible
to pass options to tincd like this:
  tincctl -n net start -- -d 1 -R -U tincuser ...

And also add missing newline at the end of error message there.

Signed-Off-By: Michael Tokarev <mjt@tls.msk.ru>
src/tincctl.c

index a7f6185f0716b93164763854b43f8c5c774cffae..b2e6e82172e2a08c49f270699ff5980d0361a100 100644 (file)
@@ -568,9 +568,26 @@ int main(int argc, char *argv[], char *envp[]) {
        }
 
        if(!strcasecmp(argv[optind], "start")) {
-               argv[optind] = NULL;
-               execve(SBINDIR "/tincd", argv, envp);
-               fprintf(stderr, "Could not start tincd: %s", strerror(errno));
+               int i, j;
+               char *c;
+               char *slash = strrchr(argv[0], '/');
+#ifdef HAVE_MINGW
+               if ((c = strrchr(argv[0], '\\')) > slash)
+                       slash = c;
+#endif
+               if (slash++) {
+                       c = xmalloc((slash - argv[0]) + sizeof("tincd"));
+                       sprintf(c, "%.*stincd", slash - argv[0], argv[0]);
+               }
+               else
+                       c = "tincd";
+               argv[0] = c;
+               for(i = j = 1; argv[i]; ++i)
+                       if (i != optind && strcmp(argv[i], "--") != 0)
+                               argv[j++] = argv[i];
+               argv[j] = NULL;
+               execve(c, argv, envp);
+               fprintf(stderr, "Could not start %s: %s\n", c, strerror(errno));
                return 1;
        }