aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/tools.texi15
-rw-r--r--tools/gpgconf-comp.c21
-rw-r--r--tools/gpgconf.c14
3 files changed, 41 insertions, 9 deletions
diff --git a/doc/tools.texi b/doc/tools.texi
index f0e6fe70c..bdef6a261 100644
--- a/doc/tools.texi
+++ b/doc/tools.texi
@@ -336,9 +336,10 @@ force an update of that file this command can be used:
@item --reload [@var{component}]
@opindex reload
-Reload all or the given component. This is basically the same as sending
-a SIGHUP to the component. Components which don't support reloading are
-ignored.
+Reload all or the given component. This is basically the same as
+sending a SIGHUP to the component. Components which don't support
+reloading are ignored. Without @var{component} or by using "all" for
+@var{component} all components which are daemons are reloaded.
@item --launch [@var{component}]
@opindex launch
@@ -346,14 +347,16 @@ If the @var{component} is not already running, start it.
@command{component} must be a daemon. This is in general not required
because the system starts these daemons as needed. However, external
software making direct use of @command{gpg-agent} or @command{dirmngr}
-may use this command to ensure that they are started.
+may use this command to ensure that they are started. Using "all" for
+@var{component} launches all components which are daemons.
@item --kill [@var{component}]
@opindex kill
Kill the given component. Components which support killing are
@command{gpg-agent} and @command{scdaemon}. Components which don't
-support reloading are ignored. Note that as of now reload and kill
-have the same effect for @command{scdaemon}.
+support reloading are ignored. Using "all" for @var{component} kills
+all components running as daemons. Note that as of now reload and
+kill have the same effect for @command{scdaemon}.
@item --create-socketdir
@opindex create-socketdir
diff --git a/tools/gpgconf-comp.c b/tools/gpgconf-comp.c
index 2dcf0758e..300f63da6 100644
--- a/tools/gpgconf-comp.c
+++ b/tools/gpgconf-comp.c
@@ -1263,6 +1263,14 @@ gc_component_launch (int component)
int i;
pid_t pid;
+ if (component < 0)
+ {
+ err = gc_component_launch (GC_COMPONENT_GPG_AGENT);
+ if (!err)
+ err = gc_component_launch (GC_COMPONENT_DIRMNGR);
+ return err;
+ }
+
if (!(component == GC_COMPONENT_GPG_AGENT
|| component == GC_COMPONENT_DIRMNGR))
{
@@ -1304,7 +1312,16 @@ gc_component_kill (int component)
for (backend = 0; backend < GC_BACKEND_NR; backend++)
runtime[backend] = 0;
- if (component >= 0)
+ if (component < 0)
+ {
+ for (component = 0; component < GC_COMPONENT_NR; component++)
+ {
+ option = gc_component[component].options;
+ for (; option && option->name; option++)
+ runtime[option->backend] = 1;
+ }
+ }
+ else
{
assert (component < GC_COMPONENT_NR);
option = gc_component[component].options;
@@ -1333,7 +1350,7 @@ gc_component_reload (int component)
for (backend = 0; backend < GC_BACKEND_NR; backend++)
runtime[backend] = 0;
- if (component == -1)
+ if (component < 0)
{
for (component = 0; component < GC_COMPONENT_NR; component++)
{
diff --git a/tools/gpgconf.c b/tools/gpgconf.c
index a1034e663..c69b1c3e2 100644
--- a/tools/gpgconf.c
+++ b/tools/gpgconf.c
@@ -589,6 +589,18 @@ main (int argc, char **argv)
es_putc ('\n', es_stderr);
exit (2);
}
+ else if (!strcmp (fname, "all"))
+ {
+ if (cmd == aLaunch)
+ {
+ if (gc_component_launch (-1))
+ exit (1);
+ }
+ else
+ {
+ gc_component_kill (-1);
+ }
+ }
else
{
/* Launch/Kill a given component. */
@@ -617,7 +629,7 @@ main (int argc, char **argv)
break;
case aReload:
- if (!fname)
+ if (!fname || !strcmp (fname, "all"))
{
/* Reload all. */
gc_component_reload (-1);