conf: New option --show-socket.
authorWerner Koch <wk@gnupg.org>
Mon, 25 Feb 2019 14:55:13 +0000 (15:55 +0100)
committerWerner Koch <wk@gnupg.org>
Tue, 26 Feb 2019 12:13:08 +0000 (13:13 +0100)
* tools/gpgconf-comp.c (gc_component_t): Move this enum to ...
* tools/gpgconf.h: here.
* tools/gpgconf.c (oShowSocket): New.
(opts): Add new option.
(main): Implement new option.
--

This is a convenience options for software which directly connects to
gpg-agent and thus needs to new the socket.  By using --show-socket
along with --launch that software can also autostart the agent or the
dirmngr.  Without this two calls to gpgconf would be required.

Actually the same behaviour can be achieved by running
gpg-connect-agent to query the running gpg-agent's socket via GETINFO.
The gpg-connect also makes sure that the agent is started.  This is
not anymore suggested because gpgconf shall in future be used for all
such things.

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

index 924f907..2ae79d9 100644 (file)
@@ -1066,34 +1066,6 @@ static gc_option_t gc_options_pinentry[] =
 
 
 \f
-/* Component system.  Each component is a set of options that can be
-   configured at the same time.  If you change this, don't forget to
-   update GC_COMPONENT below.  */
-typedef enum
-  {
-    /* The classic GPG for OpenPGP.  */
-    GC_COMPONENT_GPG,
-
-    /* The GPG Agent.  */
-    GC_COMPONENT_GPG_AGENT,
-
-    /* The Smardcard Daemon.  */
-    GC_COMPONENT_SCDAEMON,
-
-    /* GPG for S/MIME.  */
-    GC_COMPONENT_GPGSM,
-
-    /* The LDAP Directory Manager for CRLs.  */
-    GC_COMPONENT_DIRMNGR,
-
-    /* The external Pinentry.  */
-    GC_COMPONENT_PINENTRY,
-
-    /* The number of components.  */
-    GC_COMPONENT_NR
-  } gc_component_t;
-
-
 /* The information associated with each component.  */
 static const struct
 {
index df3ae8c..b67125b 100644 (file)
@@ -47,6 +47,7 @@ enum cmd_and_opt_values
     oHomedir,
     oBuilddir,
     oStatusFD,
+    oShowSocket,
 
     aListComponents,
     aCheckPrograms,
@@ -108,6 +109,7 @@ static ARGPARSE_OPTS opts[] =
     { oBuilddir, "build-prefix", 2, "@" },
     { oNull, "null", 0, "@" },
     { oNoVerbose, "no-verbose",  0, "@"},
+    ARGPARSE_s_n (oShowSocket, "show-socket", "@"),
 
     ARGPARSE_end(),
   };
@@ -525,6 +527,7 @@ main (int argc, char **argv)
   int no_more_options = 0;
   enum cmd_and_opt_values cmd = 0;
   estream_t outfp = NULL;
+  int show_socket = 0;
 
   early_system_init ();
   gnupg_reopen_std (GPGCONF_NAME);
@@ -558,6 +561,7 @@ main (int argc, char **argv)
         case oStatusFD:
           set_status_fd (translate_sys2libc_fd_int (pargs.r.ret_int, 1));
           break;
+        case oShowSocket: show_socket = 1; break;
 
        case aListDirs:
         case aListComponents:
@@ -682,7 +686,22 @@ main (int argc, char **argv)
             }
           else if (cmd == aLaunch)
             {
-              if (gc_component_launch (idx))
+              err = gc_component_launch (idx);
+              if (show_socket)
+                {
+                  char *names[2];
+
+                  if (idx == GC_COMPONENT_GPG_AGENT)
+                    names[0] = "agent-socket";
+                  else if (idx == GC_COMPONENT_DIRMNGR)
+                    names[0] = "dirmngr-socket";
+                  else
+                    names[0] = NULL;
+                  names[1] = NULL;
+                  get_outfp (&outfp);
+                  list_dirs (outfp, names);
+                }
+              if (err)
                 gpgconf_failure (0);
             }
           else
index 8a061ef..1922597 100644 (file)
@@ -43,6 +43,34 @@ void gpgconf_failure (gpg_error_t err) GPGRT_ATTR_NORETURN;
 
 /*-- gpgconf-comp.c --*/
 
+/* Component system.  Each component is a set of options that can be
+ * configured at the same time.  If you change this, don't forget to
+ * update GC_COMPONENT in gpgconf-comp.c.  */
+typedef enum
+  {
+    /* The classic GPG for OpenPGP.  */
+    GC_COMPONENT_GPG,
+
+    /* The GPG Agent.  */
+    GC_COMPONENT_GPG_AGENT,
+
+    /* The Smardcard Daemon.  */
+    GC_COMPONENT_SCDAEMON,
+
+    /* GPG for S/MIME.  */
+    GC_COMPONENT_GPGSM,
+
+    /* The LDAP Directory Manager for CRLs.  */
+    GC_COMPONENT_DIRMNGR,
+
+    /* The external Pinentry.  */
+    GC_COMPONENT_PINENTRY,
+
+    /* The number of components.  */
+    GC_COMPONENT_NR
+  } gc_component_t;
+
+
 /* Initialize the components.  */
 void gc_components_init (void);