X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Ftincd.c;h=560609c1bedaaad7454114fe8de72ca183a4b4b6;hb=1022812ed4b5c70162f2f0a9d9a96c716c936408;hp=d8ab0ac06e40c70ed8ce6ba791389a647b79e536;hpb=7208397398f7e08d741bfa83594a88e5d01b6220;p=tinc diff --git a/src/tincd.c b/src/tincd.c index d8ab0ac0..560609c1 100644 --- a/src/tincd.c +++ b/src/tincd.c @@ -48,14 +48,11 @@ #endif #include "conf.h" -#include "control.h" #include "crypto.h" -#include "device.h" #include "event.h" #include "logger.h" #include "names.h" #include "net.h" -#include "netutl.h" #include "process.h" #include "protocol.h" #include "utils.h" @@ -151,8 +148,6 @@ static bool parse_options(int argc, char **argv) { int option_index = 0; int lineno = 0; - cmdline_conf = list_alloc((list_action_t)free_config); - while((r = getopt_long(argc, argv, "c:DLd::n:so:RU:", long_options, &option_index)) != EOF) { switch(r) { case 0: /* long option */ @@ -206,7 +201,7 @@ static bool parse_options(int argc, char **argv) { goto exit_fail; } - list_insert_tail(cmdline_conf, cfg); + list_insert_tail(&cmdline_conf, cfg); break; #ifdef HAVE_MINGW @@ -297,8 +292,7 @@ static bool parse_options(int argc, char **argv) { exit_fail: free_names(); - list_delete_list(cmdline_conf); - cmdline_conf = NULL; + list_empty_list(&cmdline_conf); return false; } @@ -316,7 +310,9 @@ static bool drop_privs(void) { uid = pw->pw_uid; - if(initgroups(switchuser, pw->pw_gid) != 0 || + // The second parameter to initgroups on macOS requires int, + // but __gid_t is unsigned int. There's not much we can do here. + if(initgroups(switchuser, pw->pw_gid) != 0 || // NOLINT(bugprone-narrowing-conversions) setgid(pw->pw_gid) != 0) { logger(DEBUG_ALWAYS, LOG_ERR, "System call `%s' failed: %s", "initgroups", strerror(errno)); @@ -383,11 +379,8 @@ static BOOL WINAPI console_ctrl_handler(DWORD type) { #endif static void cleanup() { - if(config_tree) { - exit_configuration(&config_tree); - } - - list_delete_list(cmdline_conf); + splay_empty_tree(&config_tree); + list_empty_list(&cmdline_conf); free_names(); } @@ -496,20 +489,20 @@ int main(int argc, char **argv) { unsetenv("LISTEN_PID"); #endif - init_configuration(&config_tree); - /* Slllluuuuuuurrrrp! */ - gettimeofday(&now, NULL); - srand(now.tv_sec + now.tv_usec); crypto_init(); - if(!read_server_config(config_tree)) { + if(!read_server_config(&config_tree)) { return 1; } - if(!debug_level) { - get_config_int(lookup_config(config_tree, "LogLevel"), &debug_level); + if(debug_level == DEBUG_NOTHING) { + int level = 0; + + if(get_config_int(lookup_config(&config_tree, "LogLevel"), &level)) { + debug_level = level; + } } #ifdef HAVE_LZO @@ -551,6 +544,9 @@ int main2(int argc, char **argv) { #endif char *priority = NULL; + gettimeofday(&now, NULL); + srand(now.tv_sec + now.tv_usec); + if(!detach()) { return 1; } @@ -576,7 +572,7 @@ int main2(int argc, char **argv) { /* Change process priority */ - if(get_config_string(lookup_config(config_tree, "ProcessPriority"), &priority)) { + if(get_config_string(lookup_config(&config_tree, "ProcessPriority"), &priority)) { if(!strcasecmp(priority, "Normal")) { if(setpriority(NORMAL_PRIORITY_CLASS) != 0) { logger(DEBUG_ALWAYS, LOG_ERR, "System call `%s' failed: %s", "setpriority", strerror(errno));