]> git.meshlink.io Git - meshlink/blobdiff - src/tincctl.c
Base64 encoding and decoding functions.
[meshlink] / src / tincctl.c
index 93bb465ce874309061b67f905b4abcd4021bd8b1..98f4a1b9093b2d792b3cbbda8160b9244b80d528 100644 (file)
@@ -38,19 +38,12 @@ static bool show_help = false;
 /* If nonzero, print the version on standard output and exit.  */
 static bool show_version = false;
 
-/* If nonzero, it will attempt to kill a running tincd and exit. */
-static int kill_tincd = 0;
-
-/* If nonzero, generate public/private keypair for this host/net. */
-static int generate_keys = 0;
-
 static char *name = NULL;
 static char *identname = NULL;                         /* program name for syslog */
-static char *controlcookiename = NULL;                 /* cookie file location */
+static char *pidfilename = NULL;                       /* pid file location */
 static char controlcookie[1024];
 char *netname = NULL;
 char *confbase = NULL;
-static char *host = NULL;
 
 #ifdef HAVE_MINGW
 static struct WSAData wsa_state;
@@ -58,11 +51,10 @@ static struct WSAData wsa_state;
 
 static struct option const long_options[] = {
        {"config", required_argument, NULL, 'c'},
-       {"host", required_argument, NULL, 'h'},
        {"net", required_argument, NULL, 'n'},
        {"help", no_argument, NULL, 1},
        {"version", no_argument, NULL, 2},
-       {"controlcookie", required_argument, NULL, 5},
+       {"pidfile", required_argument, NULL, 5},
        {NULL, 0, NULL, 0}
 };
 
@@ -73,11 +65,11 @@ static void usage(bool status) {
        else {
                printf("Usage: %s [options] command\n\n", program_name);
                printf("Valid options are:\n"
-                               "  -c, --config=DIR              Read configuration options from DIR.\n"
-                               "  -n, --net=NETNAME             Connect to net NETNAME.\n"
-                               "      --controlcookie=FILENAME  Read control socket from FILENAME.\n"
-                               "      --help                    Display this help and exit.\n"
-                               "      --version                 Output version information and exit.\n"
+                               "  -c, --config=DIR        Read configuration options from DIR.\n"
+                               "  -n, --net=NETNAME       Connect to net NETNAME.\n"
+                               "      --pidfile=FILENAME  Read control cookie from FILENAME.\n"
+                               "      --help              Display this help and exit.\n"
+                               "      --version           Output version information and exit.\n"
                                "\n"
                                "Valid commands are:\n"
                                "  start                      Start tincd.\n"
@@ -110,7 +102,7 @@ static bool parse_options(int argc, char **argv) {
        int r;
        int option_index = 0;
 
-       while((r = getopt_long(argc, argv, "c:n:h:", long_options, &option_index)) != EOF) {
+       while((r = getopt_long(argc, argv, "c:n:", long_options, &option_index)) != EOF) {
                switch (r) {
                        case 0:                         /* long option */
                                break;
@@ -119,10 +111,6 @@ static bool parse_options(int argc, char **argv) {
                                confbase = xstrdup(optarg);
                                break;
 
-                       case 'h':                               /* alternative host to connect to */
-                               host = xstrdup(optarg);
-                               break;
-
                        case 'n':                               /* net name given */
                                netname = xstrdup(optarg);
                                break;
@@ -136,7 +124,7 @@ static bool parse_options(int argc, char **argv) {
                                break;
 
                        case 5:                                 /* open control socket here */
-                               controlcookiename = xstrdup(optarg);
+                               pidfilename = xstrdup(optarg);
                                break;
 
                        case '?':
@@ -156,7 +144,6 @@ FILE *ask_and_open(const char *filename, const char *what, const char *mode) {
        char *directory;
        char buf[PATH_MAX];
        char buf2[PATH_MAX];
-       size_t len;
 
        /* Check stdin and stdout */
        if(isatty(0) && isatty(1)) {
@@ -171,7 +158,7 @@ FILE *ask_and_open(const char *filename, const char *what, const char *mode) {
                        return NULL;
                }
 
-               len = strlen(buf);
+               size_t len = strlen(buf);
                if(len)
                        buf[--len] = 0;
 
@@ -286,16 +273,16 @@ static void make_names(void) {
                                        xasprintf(&confbase, "%s", installdir);
                        }
                }
-               if(!controlcookiename)
-                       xasprintf(&controlcookiename, "%s/cookie", confbase);
+               if(!pidfilename)
+                       xasprintf(&pidfilename, "%s/pid", confbase);
                RegCloseKey(key);
                if(*installdir)
                        return;
        }
 #endif
 
-       if(!controlcookiename)
-               xasprintf(&controlcookiename, "%s/run/%s.cookie", LOCALSTATEDIR, identname);
+       if(!pidfilename)
+               xasprintf(&pidfilename, "%s/run/%s.pid", LOCALSTATEDIR, identname);
 
        if(netname) {
                if(!confbase)
@@ -436,6 +423,7 @@ void pcap(int fd, FILE *out) {
 int main(int argc, char *argv[], char *envp[]) {
        int fd;
        int result;
+       char host[128];
        char port[128];
        int pid;
 
@@ -489,13 +477,13 @@ int main(int argc, char *argv[], char *envp[]) {
         * ancestors are writable only by trusted users, which we don't verify.
         */
 
-       FILE *f = fopen(controlcookiename, "r");
+       FILE *f = fopen(pidfilename, "r");
        if(!f) {
-               fprintf(stderr, "Could not open control socket cookie file %s: %s\n", controlcookiename, strerror(errno));
+               fprintf(stderr, "Could not open pid file %s: %s\n", pidfilename, strerror(errno));
                return 1;
        }
-       if(fscanf(f, "%1024s %128s %d", controlcookie, port, &pid) != 3) {
-               fprintf(stderr, "Could not parse control socket cookie file %s\n", controlcookiename);
+       if(fscanf(f, "%20d %1024s %128s port %128s", &pid, controlcookie, host, port) != 4) {
+               fprintf(stderr, "Could not parse pid file %s\n", pidfilename);
                return 1;
        }
 
@@ -535,8 +523,7 @@ int main(int argc, char *argv[], char *envp[]) {
 #endif
 
        if(connect(fd, res->ai_addr, res->ai_addrlen) < 0) {
-                       
-               fprintf(stderr, "Cannot connect to %s: %s\n", controlcookiename, sockstrerror(sockerrno));
+               fprintf(stderr, "Cannot connect to %s port %s: %s\n", host ?: "localhost", port, sockstrerror(sockerrno));
                return 1;
        }