From 2cdd91d55b1ac965d4f4075cf3c094ee5ac53818 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 28 Jul 2021 15:47:39 +0200 Subject: fall back to /etc if user config can't be found --- src/util/configuration.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src') diff --git a/src/util/configuration.c b/src/util/configuration.c index 3bb08e6c0..f091c4674 100644 --- a/src/util/configuration.c +++ b/src/util/configuration.c @@ -1918,12 +1918,45 @@ GNUNET_CONFIGURATION_default (void) char *cfgname = NULL; struct GNUNET_CONFIGURATION_Handle *cfg; + /* FIXME: Why are we doing this? Needs some commentary! */ GNUNET_OS_init (dpd); + cfg = GNUNET_CONFIGURATION_create (); + + /* First, try user configuration. */ if (NULL != xdg) GNUNET_asprintf (&cfgname, "%s/%s", xdg, pd->config_file); else cfgname = GNUNET_strdup (pd->user_config_file); + + /* If user config doesn't exist, try in + /etc// and /etc/ */ + if (GNUNET_OK != GNUNET_DISK_file_test (cfgname)) + { + GNUNET_free (cfgname); + GNUNET_asprintf (&cfgname, "/etc/%s", pd->config_file); + } + if (GNUNET_OK != GNUNET_DISK_file_test (cfgname)) + { + GNUNET_free (cfgname); + GNUNET_asprintf (&cfgname, "/etc/%s/%s", pd->project_dirname, + pd->config_file); + } + if (GNUNET_OK != GNUNET_DISK_file_test (cfgname)) + { + LOG (GNUNET_ERROR_TYPE_ERROR, + "Unable to top-level configuration file.\n"); + GNUNET_OS_init (pd); + GNUNET_CONFIGURATION_destroy (cfg); + GNUNET_free (cfgname); + return NULL; + } + + /* We found a configuration file that looks good, try to load it. */ + + LOG (GNUNET_ERROR_TYPE_DEBUG, + "Loading top-level configuration from '%s'\n", + cfgname); if (GNUNET_OK != GNUNET_CONFIGURATION_load (cfg, cfgname)) { -- cgit v1.2.3