tools/gpgtar: Use the new exectool helper.
authorJustus Winter <justus@g10code.com>
Mon, 30 Nov 2015 15:21:22 +0000 (16:21 +0100)
committerJustus Winter <justus@g10code.com>
Fri, 4 Dec 2015 11:52:40 +0000 (12:52 +0100)
* tools/Makefile.am: gpgtar now requires neither npth nor libassuan.
* tools/gpgtar-create.c (gpgtar_create): Use the new 'sh-exectool'
helper.
* tools/gpgtar-extract.c (gpgtar_extract): Likewise.
* tools/gpgtar-list.c (gpgtar_list): Likewise.
* tools/gpgtar.c (main): Set default gpg program.  Drop the
initialization of npth and libassuan.

Signed-off-by: Justus Winter <justus@g10code.com>
tools/Makefile.am
tools/gpgtar-create.c
tools/gpgtar-extract.c
tools/gpgtar-list.c
tools/gpgtar.c

index a793cca..a268811 100644 (file)
@@ -142,9 +142,8 @@ gpgtar_SOURCES = \
        gpgtar-extract.c \
        gpgtar-list.c \
        no-libgcrypt.c
-gpgtar_CFLAGS = $(GPG_ERROR_CFLAGS) $(NPTH_CFLAGS) $(LIBASSUAN_CFLAGS)
-gpgtar_LDADD = $(libcommonpth) $(GPG_ERROR_LIBS) \
-               $(NPTH_LIBS) $(LIBASSUAN_LIBS) \
+gpgtar_CFLAGS = $(GPG_ERROR_CFLAGS)
+gpgtar_LDADD = $(libcommon) $(GPG_ERROR_LIBS) \
                $(LIBINTL) $(NETLIBS) $(LIBICONV) $(W32SOCKLIBS)
 
 
index cc82889..8975fc6 100644 (file)
@@ -36,7 +36,7 @@
 #include <assert.h>
 
 #include "i18n.h"
-#include "../common/call-gpg.h"
+#include "../common/sh-exectool.h"
 #include "../common/sysutils.h"
 #include "gpgtar.h"
 
@@ -888,16 +888,40 @@ gpgtar_create (char **inpattern, int encrypt)
 
   if (encrypt)
     {
+      int i;
+      strlist_t arg;
+      const char **argv;
+
       err = es_fseek (outstream, 0, SEEK_SET);
       if (err)
         goto leave;
 
-      err = gpg_encrypt_stream (NULL,
-                                opt.gpg_program,
-                                opt.gpg_arguments,
-                                outstream,
-                                opt.recipients,
-                                cipher_stream);
+      argv = xtrycalloc (strlist_length (opt.gpg_arguments)
+                         + 2 * strlist_length (opt.recipients)
+                         + 2,
+                         sizeof *argv);
+      if (argv == NULL)
+        {
+          err = gpg_error_from_syserror ();
+          goto leave;
+        }
+      i = 0;
+      argv[i++] = "--encrypt";
+      for (arg = opt.recipients; arg; arg = arg->next)
+        {
+          argv[i++] = "--recipient";
+          argv[i++] = arg->d;
+        }
+      for (arg = opt.gpg_arguments; arg; arg = arg->next)
+        argv[i++] = arg->d;
+      argv[i++] = NULL;
+      assert (i == strlist_length (opt.gpg_arguments)
+              + 2 * strlist_length (opt.recipients)
+              + 2);
+
+      err = sh_exec_tool_stream (opt.gpg_program, argv,
+                                 outstream, cipher_stream);
+      xfree (argv);
       if (err)
         goto leave;
     }
index 728737d..cb8074c 100644 (file)
@@ -28,7 +28,7 @@
 #include <assert.h>
 
 #include "i18n.h"
-#include "../common/call-gpg.h"
+#include "../common/sh-exectool.h"
 #include "../common/sysutils.h"
 #include "gpgtar.h"
 
@@ -299,6 +299,10 @@ gpgtar_extract (const char *filename, int decrypt)
 
   if (decrypt)
     {
+      int i;
+      strlist_t arg;
+      const char **argv;
+
       cipher_stream = stream;
       stream = es_fopenmem (0, "rwb");
       if (! stream)
@@ -306,8 +310,24 @@ gpgtar_extract (const char *filename, int decrypt)
           err = gpg_error_from_syserror ();
           goto leave;
         }
-      err = gpg_decrypt_stream (NULL, opt.gpg_program, opt.gpg_arguments,
-                                cipher_stream, stream);
+
+      argv = xtrycalloc (strlist_length (opt.gpg_arguments) + 2,
+                         sizeof *argv);
+      if (argv == NULL)
+        {
+          err = gpg_error_from_syserror ();
+          goto leave;
+        }
+      i = 0;
+      argv[i++] = "--decrypt";
+      for (arg = opt.gpg_arguments; arg; arg = arg->next)
+        argv[i++] = arg->d;
+      argv[i++] = NULL;
+      assert (i == strlist_length (opt.gpg_arguments) + 2);
+
+      err = sh_exec_tool_stream (opt.gpg_program, argv,
+                                 cipher_stream, stream);
+      xfree (argv);
       if (err)
         goto leave;
 
index cb2ca5d..7bf4d49 100644 (file)
@@ -26,7 +26,7 @@
 
 #include "i18n.h"
 #include "gpgtar.h"
-#include "../common/call-gpg.h"
+#include "../common/sh-exectool.h"
 
 
 \f
@@ -299,6 +299,10 @@ gpgtar_list (const char *filename, int decrypt)
 
   if (decrypt)
     {
+      int i;
+      strlist_t arg;
+      const char **argv;
+
       cipher_stream = stream;
       stream = es_fopenmem (0, "rwb");
       if (! stream)
@@ -306,8 +310,24 @@ gpgtar_list (const char *filename, int decrypt)
           err = gpg_error_from_syserror ();
           goto leave;
         }
-      err = gpg_decrypt_stream (NULL, opt.gpg_program, opt.gpg_arguments,
-                                cipher_stream, stream);
+
+      argv = xtrycalloc (strlist_length (opt.gpg_arguments) + 2,
+                         sizeof *argv);
+      if (argv == NULL)
+        {
+          err = gpg_error_from_syserror ();
+          goto leave;
+        }
+      i = 0;
+      argv[i++] = "--decrypt";
+      for (arg = opt.gpg_arguments; arg; arg = arg->next)
+        argv[i++] = arg->d;
+      argv[i++] = NULL;
+      assert (i == strlist_length (opt.gpg_arguments) + 2);
+
+      err = sh_exec_tool_stream (opt.gpg_program, argv,
+                                 cipher_stream, stream);
+      xfree (argv);
       if (err)
         goto leave;
 
index a09d2f0..100fb16 100644 (file)
@@ -27,7 +27,6 @@
    gpg.  So here we go.  */
 
 #include <config.h>
-#include <assuan.h>
 #include <ctype.h>
 #include <errno.h>
 #include <npth.h>
@@ -39,7 +38,6 @@
 #include "util.h"
 #include "i18n.h"
 #include "sysutils.h"
-#include "../common/asshelp.h"
 #include "../common/openpgpdefs.h"
 #include "../common/init.h"
 #include "../common/strlist.h"
@@ -282,11 +280,6 @@ shell_parse_argv (const char *s, int *r_argc, char ***r_argv)
   return 0;
 }
 \f
-/* Define Assuan hooks for NPTH.  */
-
-ASSUAN_SYSTEM_NPTH_IMPL;
-
-\f
 /* Global flags.  */
 enum cmd_and_opt_values cmd = 0;
 int skip_crypto = 0;
@@ -412,11 +405,6 @@ main (int argc, char **argv)
   /* Make sure that our subsystems are ready.  */
   i18n_init();
   init_common_subsystems (&argc, &argv);
-  npth_init ();
-  assuan_set_assuan_log_prefix (log_get_prefix (NULL));
-  assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT);
-  assuan_set_system_hooks (ASSUAN_SYSTEM_NPTH);
-  assuan_sock_init ();
 
   /* Parse the command line. */
   pargs.argc  = &argc;
@@ -442,9 +430,11 @@ main (int argc, char **argv)
           log_info (_("NOTE: '%s' is not considered an option\n"), argv[i]);
     }
 
+  if (! opt.gpg_program)
+    opt.gpg_program = gnupg_module_name (GNUPG_MODULE_NAME_GPG);
+
   if (opt.verbose > 1)
     opt.debug_level = 1024;
-  setup_libassuan_logging (&opt.debug_level);
 
   switch (cmd)
     {