summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2019-06-22 11:48:40 +0200
committerChristian Grothoff <christian@grothoff.org>2019-06-22 11:48:53 +0200
commit4b3469ce52759581bf8833a3093cfe7ddad8aa9d (patch)
tree5f77501d550e539c346859c2c90ea6150369baa8
parent700b884ba5c93936122458eb7d0b417b2d7a071c (diff)
implement #5771
-rw-r--r--doc/man/gnunet-config.13
-rw-r--r--src/util/gnunet-config.c58
2 files changed, 46 insertions, 15 deletions
diff --git a/doc/man/gnunet-config.1 b/doc/man/gnunet-config.1
index 0e612fe29..95dc98811 100644
--- a/doc/man/gnunet-config.1
+++ b/doc/man/gnunet-config.1
@@ -30,6 +30,7 @@
manipulate GNUnet configuration files
.Sh SYNOPSIS
.Nm
+.Op Fl b Ar BACKEND | Fl \-supported-backend= Ns Ar BACKEND
.Op Fl c Ar FILENAME | Fl \-config= Ns Ar FILENAME
.Op Fl f | \-filename
.Op Fl h | \-help
@@ -44,6 +45,8 @@ manipulate GNUnet configuration files
.Nm
can be used to read or modify GNUnet configuration files.
.Bl -tag -width indent
+.It Fl b Ar BACKEND | Fl \-supported-backend= Ns Ar BACKEND
+Tests whether the specified BACKEND is supported by the current installation. The backend must match the name of a plugin, i.e. "namestore_postgres" for the Postgres database backend of the "NAMESTORE" service. If the BACKEND is supported, gnunet-config will return a status code of 0 (success), otherwise 77 (unsupported). When this option is specified, no other options may be specified. Specifying this option together with other options will cause gnunet-config to return a status code of 1 (error).
.It Fl c Ar FILENAME | Fl \-config= Ns Ar FILENAME
Use the configuration file FILENAME.
.It Fl f | \-filename
diff --git a/src/util/gnunet-config.c b/src/util/gnunet-config.c
index f700428a2..9c292205a 100644
--- a/src/util/gnunet-config.c
+++ b/src/util/gnunet-config.c
@@ -43,6 +43,13 @@ static char *option;
static char *value;
/**
+ * Backend to check if the respective plugin is
+ * loadable. NULL if no check is to be performed.
+ * The value is the "basename" of the plugin to load.
+ */
+static char *backend_check;
+
+/**
* Treat option as a filename.
*/
static int is_filename;
@@ -55,7 +62,7 @@ static int list_sections;
/**
* Return value from 'main'.
*/
-static int ret;
+static int global_ret;
/**
* Should we generate a configuration file that is clean and
@@ -63,6 +70,7 @@ static int ret;
*/
static int rewrite;
+
/**
* Print each option in a given section.
*
@@ -149,6 +157,17 @@ run (void *cls,
(void) cls;
(void) args;
+ if (NULL != backend_check)
+ {
+ char *name;
+
+ GNUNET_asprintf (&name,
+ "libgnunet_plugin_%s",
+ backend_check);
+ global_ret = (GNUNET_OK == GNUNET_PLUGIN_test (name)) ? 0 : 77;
+ GNUNET_free (name);
+ return;
+ }
if (rewrite)
{
struct GNUNET_CONFIGURATION_Handle *def;
@@ -159,7 +178,7 @@ run (void *cls,
{
fprintf (stderr,
_("failed to load configuration defaults"));
- ret = 1;
+ global_ret = 1;
return;
}
diff = GNUNET_CONFIGURATION_get_diff (def,
@@ -174,7 +193,7 @@ run (void *cls,
_("%s or %s argument is required\n"),
"--section",
"--list-sections");
- ret = 1;
+ global_ret = 1;
}
else
{
@@ -208,7 +227,7 @@ run (void *cls,
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
section, option);
- ret = 3;
+ global_ret = 3;
goto cleanup;
}
}
@@ -220,7 +239,7 @@ run (void *cls,
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
section, option);
- ret = 3;
+ global_ret = 3;
goto cleanup;
}
}
@@ -232,7 +251,7 @@ run (void *cls,
if (NULL == option)
{
fprintf (stderr, _("--option argument required to set value\n"));
- ret = 1;
+ global_ret = 1;
goto cleanup;
}
out = GNUNET_CONFIGURATION_dup (cfg);
@@ -260,7 +279,7 @@ run (void *cls,
if (GNUNET_OK !=
GNUNET_CONFIGURATION_write ((NULL == out) ? diff : out,
cfgfile))
- ret = 2;
+ global_ret = 2;
}
GNUNET_free_non_null (cfg_fn);
if (NULL != out)
@@ -287,6 +306,12 @@ main (int argc,
"filename",
gettext_noop ("interpret option value as a filename (with $-expansion)"),
&is_filename),
+ //GNUNET_GETOPT_option_exclusive
+ (GNUNET_GETOPT_option_string ('b',
+ "supported-backend",
+ "BACKEND",
+ gettext_noop ("test if the current installation supports the specified BACKEND"),
+ &backend_check)),
GNUNET_GETOPT_option_string ('s',
"section",
"SECTION",
@@ -312,20 +337,23 @@ main (int argc,
&rewrite),
GNUNET_GETOPT_OPTION_END
};
+ int ret;
+
if (GNUNET_OK !=
GNUNET_STRINGS_get_utf8_args (argc, argv,
&argc, &argv))
return 2;
- ret = (GNUNET_OK ==
- GNUNET_PROGRAM_run (argc,
- argv,
- "gnunet-config [OPTIONS]",
- gettext_noop ("Manipulate GNUnet configuration files"),
- options,
- &run, NULL)) ? 0 : ret;
+ ret = GNUNET_PROGRAM_run (argc,
+ argv,
+ "gnunet-config [OPTIONS]",
+ gettext_noop ("Manipulate GNUnet configuration files"),
+ options,
+ &run, NULL);
GNUNET_free ((void*) argv);
- return ret;
+ if (GNUNET_OK == ret)
+ return global_ret;
+ return 1;
}
/* end of gnunet-config.c */