X-Git-Url: https://www.tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Ffsck.c;h=e7262727e67e85e5a328a65a65fcf034febe6bf1;hb=373b0c12d9d0e8a3b449fd18be704e28dd6403e1;hp=7b18c19a8ea3e485b4523069eaa2a2cf1d6543ed;hpb=2a37712b0d3d5c441424cf1fac6c95f7c76cc709;p=tinc diff --git a/src/fsck.c b/src/fsck.c index 7b18c19a..e7262727 100644 --- a/src/fsck.c +++ b/src/fsck.c @@ -1,6 +1,6 @@ /* fsck.c -- Check the configuration files for problems - Copyright (C) 2014-2021 Guus Sliepen + Copyright (C) 2014-2022 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -119,19 +119,19 @@ static int strtailcmp(const char *str, const char *tail) { } static void check_conffile(const char *nodename, bool server) { - splay_tree_t *config = NULL; + splay_tree_t config; init_configuration(&config); bool read; if(server) { - read = read_server_config(config); + read = read_server_config(&config); } else { - read = read_host_config(config, nodename, true); + read = read_host_config(&config, nodename, true); } if(!read) { - exit_configuration(&config); + splay_empty_tree(&config); return; } @@ -141,10 +141,11 @@ static void check_conffile(const char *nodename, bool server) { ++total_vars; } - int count[total_vars]; - memset(count, 0, sizeof(count)); + const size_t countlen = total_vars * sizeof(int); + int *count = alloca(countlen); + memset(count, 0, countlen); - for splay_each(config_t, conf, config) { + for splay_each(config_t, conf, &config) { int var_type = 0; for(size_t i = 0; variables[i].name; ++i) { @@ -181,13 +182,13 @@ static void check_conffile(const char *nodename, bool server) { } } - exit_configuration(&config); + splay_empty_tree(&config); } -#ifdef HAVE_MINGW +#ifdef HAVE_WINDOWS typedef int uid_t; -static uid_t getuid() { +static uid_t getuid(void) { return 0; } @@ -218,9 +219,9 @@ static void check_key_file_mode(const char *fname) { } } } -#endif // HAVE_MINGW +#endif // HAVE_WINDOWS -static char *read_node_name() { +static char *read_node_name(void) { if(access(tinc_conf, R_OK) == 0) { return get_my_name(true); } @@ -329,7 +330,7 @@ static bool test_rsa_keypair(rsa_t *rsa_priv, rsa_t *rsa_pub, const char *host_f uint8_t *encrypted = xzalloc(len); uint8_t *decrypted = xzalloc(len); - randomize(plaintext, len); + prng_randomize(plaintext, len); plaintext[0] &= 0x7f; if(rsa_public_encrypt(rsa_pub, plaintext, len, encrypted)) { @@ -438,7 +439,7 @@ static bool check_config_mode(const char *fname) { return true; } -static bool check_script_confdir() { +static bool check_script_confdir(void) { char fname[PATH_MAX]; DIR *dir = opendir(confbase); @@ -616,7 +617,7 @@ static void check_config_variables(const char *host_dir) { } } -static bool check_scripts_and_configs() { +static bool check_scripts_and_configs(void) { // Check whether scripts are executable. if(!check_script_confdir()) { return false; @@ -649,17 +650,17 @@ int fsck(const char *argv0) { // Avoid touching global configuration here. Read the config files into // a temporary configuration tree, then throw it away after fsck is done. - splay_tree_t *config = NULL; + splay_tree_t config; init_configuration(&config); // Read the server configuration file and append host configuration for our node. - bool success = read_server_config(config) && - read_host_config(config, name, true); + bool success = read_server_config(&config) && + read_host_config(&config, name, true); // Check both RSA and EC key pairs. // We need working configuration to run this check. if(success) { - success = check_keypairs(config, name); + success = check_keypairs(&config, name); } // Check that scripts are executable and check the config for invalid variables. @@ -667,7 +668,7 @@ int fsck(const char *argv0) { // This way, we can diagnose more issues on the first run. success = success & check_scripts_and_configs(); - exit_configuration(&config); + splay_empty_tree(&config); free(name); exe_name = NULL;