gpgconf: Allow "all" for --launch, --kill, and --reload.
authorWerner Koch <wk@gnupg.org>
Wed, 18 Jan 2017 09:01:55 +0000 (10:01 +0100)
committerWerner Koch <wk@gnupg.org>
Wed, 18 Jan 2017 09:07:53 +0000 (10:07 +0100)
* tools/gpgconf-comp.c (gc_component_launch): Allow -1 for COMPONENT.
(gc_component_kill): Ditto.
(gc_component_reload): For robustness change the condition to < 0.
* tools/gpgconf.c (main) <aLaunch, aKill, aReload>: Support argument
"all".

Signed-off-by: Werner Koch <wk@gnupg.org>
doc/tools.texi
tools/gpgconf-comp.c
tools/gpgconf.c

index f0e6fe7..bdef6a2 100644 (file)
@@ -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
index 2dcf075..300f63d 100644 (file)
@@ -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++)
         {
index a1034e6..c69b1c3 100644 (file)
@@ -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);