Make pid files backwards compatible and add address of listening socket.
[tinc] / src / tincctl.c
index 4357d4a..98f4a1b 100644 (file)
@@ -40,11 +40,10 @@ static bool show_version = false;
 
 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;
@@ -52,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}
 };
 
@@ -67,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"
@@ -104,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;
@@ -113,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;
@@ -130,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 '?':
@@ -279,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)
@@ -429,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;
 
@@ -482,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 %20d", 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;
        }