Document the command line flag -o and provide --option as well.
[oweals/tinc.git] / src / tincd.c
index 40ac0383ee387694d2410f67e574f4d36942fc21..a1be971acf493406fb5fe60c5c0786a5a76ebf27 100644 (file)
@@ -114,6 +114,7 @@ static struct option const long_options[] = {
        {"user", required_argument, NULL, 'U'},
        {"logfile", optional_argument, NULL, 4},
        {"pidfile", required_argument, NULL, 5},
+       {"option", required_argument, NULL, 'o'},
        {NULL, 0, NULL, 0}
 };
 
@@ -129,20 +130,20 @@ static void usage(bool status) {
                                program_name);
        else {
                printf("Usage: %s [option]...\n\n", program_name);
-               printf("  -c, --config=DIR           Read configuration options from DIR.\n"
-                               "  -D, --no-detach            Don't fork and detach.\n"
-                               "  -d, --debug[=LEVEL]        Increase debug level or set it to LEVEL.\n"
-                               "  -k, --kill[=SIGNAL]        Attempt to kill a running tincd and exit.\n"
-                               "  -n, --net=NETNAME          Connect to net NETNAME.\n"
-                               "  -K, --generate-keys[=BITS] Generate public/private RSA keypair.\n"
-                               "  -L, --mlock                Lock tinc into main memory.\n"
-                               "      --logfile[=FILENAME]   Write log entries to a logfile.\n"
-                               "      --pidfile=FILENAME     Write PID to FILENAME.\n"
-                               "  -o [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");
+               printf("  -c, --config=DIR               Read configuration options from DIR.\n"
+                               "  -D, --no-detach                Don't fork and detach.\n"
+                               "  -d, --debug[=LEVEL]            Increase debug level or set it to LEVEL.\n"
+                               "  -k, --kill[=SIGNAL]            Attempt to kill a running tincd and exit.\n"
+                               "  -n, --net=NETNAME              Connect to net NETNAME.\n"
+                               "  -K, --generate-keys[=BITS]     Generate public/private RSA keypair.\n"
+                               "  -L, --mlock                    Lock tinc into main memory.\n"
+                               "      --logfile[=FILENAME]       Write log entries to a logfile.\n"
+                               "      --pidfile=FILENAME         Write PID to FILENAME.\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");
                printf("Report bugs to tinc@tinc-vpn.org.\n");
        }
 }
@@ -504,7 +505,7 @@ static bool drop_privs() {
 }
 
 #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
@@ -586,6 +587,7 @@ int main2(int argc, char **argv) {
        InitializeCriticalSection(&mutex);
        EnterCriticalSection(&mutex);
 #endif
+        char *priority = NULL;
 
        if(!detach())
                return 1;
@@ -612,8 +614,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) {
@@ -650,7 +650,7 @@ int main2(int argc, char **argv) {
        /* Shutdown properly. */
 
        ifdebug(CONNECTIONS)
-               dump_device_stats();
+               devops.dump_stats();
 
        close_network_connections();
 
@@ -661,6 +661,8 @@ end:
        remove_pid(pidfilename);
 #endif
 
+       free(priority);
+
        EVP_cleanup();
        ENGINE_cleanup();
        CRYPTO_cleanup_all_ex_data();
@@ -668,6 +670,7 @@ end:
        ERR_free_strings();
 
        exit_configuration(&config_tree);
+       list_free(cmdline_conf);
        free_names();
 
        return status;