X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Ftincd.c;h=7970bcc9f2b67d1854df8fd0dece1ec2277ae774;hb=3fba80174dbe29bcfe0d121a2a1d2e61be5ee57b;hp=17d50085eefa0b11abe808ee1904ee0e8fa81906;hpb=f4010694b3b16453e5e6298c208910264e326978;p=meshlink diff --git a/src/tincd.c b/src/tincd.c index 17d50085..7970bcc9 100644 --- a/src/tincd.c +++ b/src/tincd.c @@ -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;