]> git.meshlink.io Git - meshlink/blobdiff - src/tincd.c
Merge branch 'master' of git://tinc-vpn.org/tinc into 1.1
[meshlink] / src / tincd.c
index 17d50085eefa0b11abe808ee1904ee0e8fa81906..7970bcc9f2b67d1854df8fd0dece1ec2277ae774 100644 (file)
@@ -64,7 +64,7 @@
 #include "xalloc.h"
 
 /* The name this program was run with. */
-static char *program_name = NULL;
+char *program_name = NULL;
 
 /* If nonzero, display usage information and exit. */
 static bool show_help = false;
@@ -89,10 +89,10 @@ bool use_logfile = false;
 
 char *identname = NULL;                                /* program name for syslog */
 char *logfilename = NULL;                      /* log file location */
-char *controlcookiename = NULL;
+char *pidfilename = NULL;
 char **g_argv;                                 /* a copy of the cmdline arguments */
 
-static int status;
+static int status = 1;
 
 static struct option const long_options[] = {
        {"config", required_argument, NULL, 'c'},
@@ -106,7 +106,8 @@ static struct option const long_options[] = {
        {"chroot", no_argument, NULL, 'R'},
        {"user", required_argument, NULL, 'U'},
        {"logfile", optional_argument, NULL, 4},
-       {"controlcookie", required_argument, NULL, 5},
+       {"pidfile", required_argument, NULL, 5},
+       {"option", required_argument, NULL, 'o'},
        {NULL, 0, NULL, 0}
 };
 
@@ -128,9 +129,9 @@ static void usage(bool status) {
                                "  -n, --net=NETNAME             Connect to net NETNAME.\n"
                                "  -L, --mlock                   Lock tinc into main memory.\n"
                                "      --logfile[=FILENAME]      Write log entries to a logfile.\n"
-                               "      --controlcookie=FILENAME  Write control socket cookie to FILENAME.\n"
+                               "      --pidfile=FILENAME        Write PID and control socket cookie to FILENAME.\n"
                                "      --bypass-security         Disables meta protocol security, for debugging.\n"
-                               "  -o [HOST.]KEY=VALUE           Set global/host configuration value.\n"
+                               "  -o, --option[HOST.]KEY=VALUE  Set global/host configuration value.\n"
                                "  -R, --chroot                  chroot to NET dir at startup.\n"
                                "  -U, --user=USER               setuid to given USER at startup.\n"                            "      --help                    Display this help and exit.\n"
                                "      --version                 Output version information and exit.\n\n");
@@ -215,7 +216,7 @@ static bool parse_options(int argc, char **argv) {
                                break;
 
                        case 5:                                 /* open control socket here */
-                               controlcookiename = xstrdup(optarg);
+                               pidfilename = xstrdup(optarg);
                                break;
 
                        case '?':
@@ -256,8 +257,8 @@ static void make_names(void) {
                                else
                                        xasprintf(&confbase, "%s", installdir);
                        }
-                       if(!controlcookiename)
-                               xasprintf(&controlcookiename, "%s/cookie", confbase);
+                       if(!pidfilename)
+                               xasprintf(&pidfilename, "%s/pid", confbase);
                }
                RegCloseKey(key);
                if(*installdir)
@@ -268,8 +269,8 @@ static void make_names(void) {
        if(!logfilename)
                xasprintf(&logfilename, LOCALSTATEDIR "/log/%s.log", identname);
 
-       if(!controlcookiename)
-               xasprintf(&controlcookiename, LOCALSTATEDIR "/run/%s.cookie", identname);
+       if(!pidfilename)
+               xasprintf(&pidfilename, LOCALSTATEDIR "/run/%s.pid", identname);
 
        if(netname) {
                if(!confbase)
@@ -285,7 +286,7 @@ static void make_names(void) {
 static void free_names(void) {
        if (identname) free(identname);
        if (netname) free(netname);
-       if (controlcookiename) free(controlcookiename);
+       if (pidfilename) free(pidfilename);
        if (logfilename) free(logfilename);
        if (confbase) free(confbase);
 }
@@ -339,7 +340,7 @@ static bool drop_privs(void) {
 }
 
 #ifdef HAVE_MINGW
-# define setpriority(level) SetPriorityClass(GetCurrentProcess(), (level))
+# define setpriority(level) !SetPriorityClass(GetCurrentProcess(), (level))
 #else
 # define NORMAL_PRIORITY_CLASS 0
 # define BELOW_NORMAL_PRIORITY_CLASS 10
@@ -356,8 +357,8 @@ int main(int argc, char **argv) {
        make_names();
 
        if(show_version) {
-               printf("%s version %s (built %s %s, protocol %d)\n", PACKAGE,
-                          VERSION, __DATE__, __TIME__, PROT_CURRENT);
+               printf("%s version %s (built %s %s, protocol %d.%d)\n", PACKAGE,
+                          VERSION, __DATE__, __TIME__, PROT_MAJOR, PROT_MINOR);
                printf("Copyright (C) 1998-2011 Ivo Timmermans, Guus Sliepen and others.\n"
                                "See the AUTHORS file for a complete list.\n\n"
                                "tinc comes with ABSOLUTELY NO WARRANTY.  This is free software,\n"
@@ -416,6 +417,7 @@ int main2(int argc, char **argv) {
        InitializeCriticalSection(&mutex);
        EnterCriticalSection(&mutex);
 #endif
+        char *priority = NULL;
 
        if(!detach())
                return 1;
@@ -434,10 +436,10 @@ int main2(int argc, char **argv) {
        /* Setup sockets and open device. */
 
        if(!setup_network())
-               goto end;
+               goto end_nonet;
 
        if(!init_control())
-               return 1;
+               goto end_nonet;
 
        /* Initiate all outgoing connections. */
 
@@ -445,8 +447,6 @@ int main2(int argc, char **argv) {
 
        /* Change process priority */
 
-        char *priority = 0;
-
         if(get_config_string(lookup_config(config_tree, "ProcessPriority"), &priority)) {
                 if(!strcasecmp(priority, "Normal")) {
                         if (setpriority(NORMAL_PRIORITY_CLASS) != 0) {
@@ -483,18 +483,22 @@ int main2(int argc, char **argv) {
        /* Shutdown properly. */
 
        ifdebug(CONNECTIONS)
-               dump_device_stats();
+               devops.dump_stats();
 
        close_network_connections();
 
 end:
+       exit_control();
+
+end_nonet:
        logger(LOG_NOTICE, "Terminating");
 
-       exit_control();
+       free(priority);
 
        crypto_exit();
 
        exit_configuration(&config_tree);
+       free(cmdline_conf);
        free_names();
 
        return status;