gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet] branch master updated: fall back to /etc for default configurat


From: gnunet
Subject: [gnunet] branch master updated: fall back to /etc for default configuration entry point
Date: Thu, 29 Jul 2021 15:02:31 +0200

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new b41bca631 fall back to /etc for default configuration entry point
b41bca631 is described below

commit b41bca63173d3c27fe3ba51612df20da9a795aea
Author: Florian Dold <florian@dold.me>
AuthorDate: Thu Jul 29 14:59:10 2021 +0200

    fall back to /etc for default configuration entry point
---
 src/include/gnunet_configuration_lib.h | 12 ++++++
 src/util/configuration.c               | 67 +++++++++++++++++++++++++++++++++-
 src/util/gnunet-config.c               |  1 -
 src/util/program.c                     | 31 +++++++---------
 4 files changed, 91 insertions(+), 20 deletions(-)

diff --git a/src/include/gnunet_configuration_lib.h 
b/src/include/gnunet_configuration_lib.h
index 7a0dec792..02e656196 100644
--- a/src/include/gnunet_configuration_lib.h
+++ b/src/include/gnunet_configuration_lib.h
@@ -112,6 +112,18 @@ struct GNUNET_CONFIGURATION_Handle *
 GNUNET_CONFIGURATION_default (void);
 
 
+/**
+ * Return the filename of the default configuration filename
+ * that is used when no explicit configuration entry point
+ * has been specified.
+ *
+ * @returns NULL if no default configuration file can be located,
+ *          a newly allocated string otherwise
+ */
+char *
+GNUNET_CONFIGURATION_default_filename (void);
+
+
 /**
  * Parse a configuration file, add all of the options in the
  * file to the configuration environment.
diff --git a/src/util/configuration.c b/src/util/configuration.c
index 875a811b3..776cfc7ea 100644
--- a/src/util/configuration.c
+++ b/src/util/configuration.c
@@ -1155,7 +1155,7 @@ GNUNET_CONFIGURATION_serialize_diagnostics (const struct
   GNUNET_buffer_write_fstr (&buf,
                             "# Entry point: %s\n",
                             cfg->main_filename ? cfg->main_filename :
-                            "<input>");
+                            "<none>");
   GNUNET_buffer_write_fstr (&buf,
                             "#\n# Files Loaded:\n");
 
@@ -2253,6 +2253,58 @@ GNUNET_CONFIGURATION_load_from (struct 
GNUNET_CONFIGURATION_Handle *cfg,
   return fun_ret;
 }
 
+char *
+GNUNET_CONFIGURATION_default_filename (void)
+{
+  char *cfg_fn;
+  const struct GNUNET_OS_ProjectData *pd = GNUNET_OS_project_data_get ();
+  const char *xdg = getenv ("XDG_CONFIG_HOME");
+
+  if (NULL != xdg)
+    GNUNET_asprintf (&cfg_fn,
+                     "%s%s%s",
+                     xdg,
+                     DIR_SEPARATOR_STR,
+                     pd->config_file);
+  else
+    cfg_fn = GNUNET_strdup (pd->user_config_file);
+
+  if (GNUNET_OK == GNUNET_DISK_file_test_read (cfg_fn))
+    return cfg_fn;
+
+  GNUNET_free (cfg_fn);
+
+  /* Fall back to /etc/ for the default configuration.
+     Should be okay to use forward slashes here. */
+
+  GNUNET_asprintf (&cfg_fn,
+                   "/etc/%s",
+                   pd->config_file);
+
+  if (GNUNET_OK == GNUNET_DISK_file_test_read (cfg_fn))
+    return cfg_fn;
+
+  GNUNET_free (cfg_fn);
+
+  GNUNET_asprintf (&cfg_fn,
+                   "/etc/%s",
+                   pd->config_file);
+
+  if (GNUNET_OK == GNUNET_DISK_file_test_read (cfg_fn))
+    return cfg_fn;
+
+  GNUNET_asprintf (&cfg_fn,
+                   "/etc/%s/%s",
+                   pd->project_dirname,
+                   pd->config_file);
+
+  if (GNUNET_OK == GNUNET_DISK_file_test_read (cfg_fn))
+    return cfg_fn;
+
+  GNUNET_free (cfg_fn);
+  return NULL;
+}
+
 
 struct GNUNET_CONFIGURATION_Handle *
 GNUNET_CONFIGURATION_default (void)
@@ -2284,7 +2336,9 @@ GNUNET_CONFIGURATION_default (void)
   if (GNUNET_OK != GNUNET_DISK_file_test (cfgname))
   {
     GNUNET_free (cfgname);
-    GNUNET_asprintf (&cfgname, "/etc/%s/%s", pd->project_dirname,
+    GNUNET_asprintf (&cfgname,
+                     "/etc/%s/%s",
+                     pd->project_dirname,
                      pd->config_file);
   }
   if (GNUNET_OK != GNUNET_DISK_file_test (cfgname))
@@ -2353,7 +2407,10 @@ GNUNET_CONFIGURATION_load (struct 
GNUNET_CONFIGURATION_Handle *cfg,
 
     ipath = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_DATADIR);
     if (NULL == ipath)
+    {
+      GNUNET_break (0);
       return GNUNET_SYSERR;
+    }
     GNUNET_asprintf (&baseconfig, "%s%s", ipath, "config.d");
     GNUNET_free (ipath);
   }
@@ -2364,6 +2421,9 @@ GNUNET_CONFIGURATION_load (struct 
GNUNET_CONFIGURATION_Handle *cfg,
   if ((GNUNET_YES == GNUNET_DISK_directory_test (dname, GNUNET_YES))&&
       (GNUNET_SYSERR == GNUNET_CONFIGURATION_load_from (cfg, dname)))
   {
+    LOG (GNUNET_ERROR_TYPE_WARNING,
+         "Failed to load base configuration from '%s'\n",
+         filename);
     GNUNET_free (dname);
     return GNUNET_SYSERR;       /* no configuration at all found */
   }
@@ -2372,6 +2432,9 @@ GNUNET_CONFIGURATION_load (struct 
GNUNET_CONFIGURATION_Handle *cfg,
       (GNUNET_OK != GNUNET_CONFIGURATION_parse (cfg, filename)))
   {
     /* specified configuration not found */
+    LOG (GNUNET_ERROR_TYPE_WARNING,
+         "Failed to load configuration from file '%s'\n",
+         filename);
     return GNUNET_SYSERR;
   }
   if (((GNUNET_YES !=
diff --git a/src/util/gnunet-config.c b/src/util/gnunet-config.c
index 20fd44c65..4f16332db 100644
--- a/src/util/gnunet-config.c
+++ b/src/util/gnunet-config.c
@@ -173,7 +173,6 @@ run (void *cls,
   {
     struct GNUNET_CONFIGURATION_Handle *ncfg;
     /* Re-parse the configuration with diagnostics enabled. */
-    GNUNET_assert (NULL != cfgfile);
     ncfg = GNUNET_CONFIGURATION_create ();
     GNUNET_CONFIGURATION_enable_diagnostics (ncfg);
     GNUNET_CONFIGURATION_load (ncfg, cfgfile);
diff --git a/src/util/program.c b/src/util/program.c
index e34b37370..a79e07d19 100644
--- a/src/util/program.c
+++ b/src/util/program.c
@@ -140,7 +140,6 @@ GNUNET_PROGRAM_run2 (int argc,
   char *loglev;
   char *logfile;
   char *cfg_fn;
-  const char *xdg;
   enum GNUNET_GenericReturnValue ret;
   int iret;
   unsigned int cnt;
@@ -149,12 +148,13 @@ GNUNET_PROGRAM_run2 (int argc,
   long long clock_offset;
   struct GNUNET_CONFIGURATION_Handle *cfg;
   const struct GNUNET_OS_ProjectData *pd = GNUNET_OS_project_data_get ();
-  struct GNUNET_GETOPT_CommandLineOption defoptions[] =
-  { GNUNET_GETOPT_option_cfgfile (&cc.cfgfile),
+  struct GNUNET_GETOPT_CommandLineOption defoptions[] = {
+    GNUNET_GETOPT_option_cfgfile (&cc.cfgfile),
     GNUNET_GETOPT_option_help (binaryHelp),
     GNUNET_GETOPT_option_loglevel (&loglev),
     GNUNET_GETOPT_option_logfile (&logfile),
-    GNUNET_GETOPT_option_version (pd->version) };
+    GNUNET_GETOPT_option_version (pd->version)
+  };
   struct GNUNET_GETOPT_CommandLineOption *allopts;
   const char *gargs;
   char *lpfx;
@@ -219,17 +219,7 @@ GNUNET_PROGRAM_run2 (int argc,
          &cmd_sorter);
   loglev = NULL;
   if ((NULL != pd->config_file) && (NULL != pd->user_config_file))
-  {
-    xdg = getenv ("XDG_CONFIG_HOME");
-    if (NULL != xdg)
-      GNUNET_asprintf (&cfg_fn,
-                       "%s%s%s",
-                       xdg,
-                       DIR_SEPARATOR_STR,
-                       pd->config_file);
-    else
-      cfg_fn = GNUNET_strdup (pd->user_config_file);
-  }
+    cfg_fn = GNUNET_CONFIGURATION_default_filename ();
   else
     cfg_fn = NULL;
   lpfx = GNUNET_strdup (binaryName);
@@ -251,6 +241,9 @@ GNUNET_PROGRAM_run2 (int argc,
   }
   if (NULL != cc.cfgfile)
   {
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Loading configuration from entry point specified as option 
(%s)\n",
+                cc.cfgfile);
     if ((GNUNET_YES != GNUNET_DISK_file_test (cc.cfgfile)) ||
         (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (cfg, cc.cfgfile)))
     {
@@ -266,6 +259,9 @@ GNUNET_PROGRAM_run2 (int argc,
   }
   else
   {
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Loading configuration default entry point (%s)\n",
+                cc.cfgfile);
     if ((NULL != cfg_fn) && (GNUNET_YES == GNUNET_DISK_file_test (cfg_fn)))
     {
       if (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (cfg, cfg_fn))
@@ -283,8 +279,9 @@ GNUNET_PROGRAM_run2 (int argc,
     }
     else if (NULL != cfg_fn)
     {
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                  "Loading configuration without entry point\n");
       GNUNET_free (cfg_fn);
-      cfg_fn = NULL;
       if (GNUNET_OK != GNUNET_CONFIGURATION_load (cfg, NULL))
       {
         GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -349,7 +346,7 @@ GNUNET_PROGRAM_run2 (int argc,
     cc.task (cc.task_cls, cc.args, cc.cfgfile, cc.cfg);
   }
   ret = GNUNET_OK;
-cleanup:
+  cleanup:
   GNUNET_CONFIGURATION_destroy (cfg);
   GNUNET_free (cc.cfgfile);
   GNUNET_free (cfg_fn);

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]