[git] GnuPG - branch, master, updated. gnupg-2.1.9-177-g556e8c4

by Justus Winter cvs at cvs.gnupg.org
Wed Nov 25 18:49:04 CET 2015


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "The GNU Privacy Guard".

The branch, master has been updated
       via  556e8c44267fe3b829ca06286e9b5637ca1a6a73 (commit)
       via  127aba9a4d6c1aabb4a18a74b16d3bddc6eb5c54 (commit)
       via  89e104eb38c3a6896892ff09db11cb1bae2bb0d3 (commit)
       via  f76fb047c15914ba44dc9423d235484758bcd721 (commit)
      from  40dbee86f3043aff8a8c2055521e270318e33068 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 556e8c44267fe3b829ca06286e9b5637ca1a6a73
Author: Justus Winter <justus at g10code.com>
Date:   Wed Nov 25 18:32:09 2015 +0100

    tests: Add tests for gpgtar and gpg-zip.
    
    * tests/openpgp/Makefile.am (TESTS): Add new file.
    * tests/openpgp/gpgtar.test: New file.
    
    Signed-off-by: Justus Winter <justus at g10code.com>

diff --git a/tests/openpgp/Makefile.am b/tests/openpgp/Makefile.am
index 7263cd8..aa13be9 100644
--- a/tests/openpgp/Makefile.am
+++ b/tests/openpgp/Makefile.am
@@ -46,6 +46,7 @@ TESTS = version.test mds.test \
 	multisig.test verify.test armor.test \
 	import.test ecc.test 4gb-packet.test \
 	$(sqlite3_dependent_tests) \
+	gpgtar.test \
 	finish.test
 
 
@@ -108,7 +109,7 @@ CLEANFILES = prepared.stamp x y yy z out err  $(data_files) \
 	     gnupg-test.stop random_seed gpg-agent.log tofu.db
 
 clean-local:
-	-rm -rf private-keys-v1.d openpgp-revocs.d tofu.d
+	-rm -rf private-keys-v1.d openpgp-revocs.d tofu.d gpgtar.d
 
 
 # We need to depend on a couple of programs so that the tests don't
diff --git a/tests/openpgp/gpgtar.test b/tests/openpgp/gpgtar.test
new file mode 100755
index 0000000..7d55862
--- /dev/null
+++ b/tests/openpgp/gpgtar.test
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+#set -x
+
+# Make sure $srcdir is set.
+if test "x$srcdir" = x
+then
+    echo srcdir environment variable not set!
+    exit 1
+fi
+
+. $srcdir/defs.inc || exit 3
+
+set -e
+
+# Make sure $GNUPGHOME is set.
+if test "x$GNUPGHOME" = x
+then
+    echo "GNUPGHOME not set."
+    exit 1
+fi
+
+TESTFILES="$plain_files $data_files"
+
+TESTDIR=gpgtar.d
+FILELIST="${TESTDIR}/filelist"
+GPG=../../g10/gpg2
+GPGTAR="../../tools/gpgtar"
+GPGZIP="sh ../../tools/gpg-zip --gpg-args --trust-model=always"
+
+for TOOL in "$GPGTAR" "$GPGZIP"
+do
+    rm -rf -- "${TESTDIR}"
+    mkdir "${TESTDIR}"
+
+    $TOOL --gpg "$GPG" --encrypt --recipient "$usrname2" \
+	  --output "${TESTDIR}/test.tar.pgp" $TESTFILES
+
+    $TOOL --gpg "$GPG" --list-archive "${TESTDIR}/test.tar.pgp" >"$FILELIST"
+    for F in $TESTFILES
+    do
+	grep -qe "\\b${F}\\b" "$FILELIST"
+    done
+
+    EXTRACT_FLAGS="--directory=${TESTDIR}"
+    if [ "$TOOL" = "$GPGZIP" ]
+    then
+	EXTRACT_FLAGS="--tar-args $EXTRACT_FLAGS"
+    fi
+    $TOOL --gpg "$GPG" $EXTRACT_FLAGS --decrypt "${TESTDIR}/test.tar.pgp"
+    for F in $TESTFILES
+    do
+	diff -q "$F" "${TESTDIR}/$F"
+    done
+done
+
+# Success!
+
+exit 0

commit 127aba9a4d6c1aabb4a18a74b16d3bddc6eb5c54
Author: Justus Winter <justus at g10code.com>
Date:   Wed Nov 25 18:29:22 2015 +0100

    tools/gpgtar: Handle '--directory' argument.
    
    * tools/gpgtar-extract.c (gpgtar_extract): Only generate a directory
    name if none is given via arguments.
    * tools/gpgtar.c (enum cmd_and_opt_values): New constant.
    (opts): Add argument.
    (main): Parse argument.
    * tools/gpgtar.h (opt): New field 'directory'.
    
    Signed-off-by: Justus Winter <justus at g10code.com>

diff --git a/tools/gpgtar-extract.c b/tools/gpgtar-extract.c
index 92346b0..fa2f362 100644
--- a/tools/gpgtar-extract.c
+++ b/tools/gpgtar-extract.c
@@ -312,31 +312,36 @@ gpgtar_extract (const char *filename, int decrypt)
         goto leave;
     }
 
-  if (filename)
-    {
-      dirprefix = strrchr (filename, '/');
-      if (dirprefix)
-        dirprefix++;
-      else
-        dirprefix = filename;
-    }
-  else if (opt.filename)
+  if (opt.directory)
+    dirname = xtrystrdup (opt.directory);
+  else
     {
-      dirprefix = strrchr (opt.filename, '/');
-      if (dirprefix)
-        dirprefix++;
-      else
-        dirprefix = opt.filename;
-    }
+      if (filename)
+        {
+          dirprefix = strrchr (filename, '/');
+          if (dirprefix)
+            dirprefix++;
+          else
+            dirprefix = filename;
+        }
+      else if (opt.filename)
+        {
+          dirprefix = strrchr (opt.filename, '/');
+          if (dirprefix)
+            dirprefix++;
+          else
+            dirprefix = opt.filename;
+        }
 
-  if (!dirprefix || !*dirprefix)
-    dirprefix = "GPGARCH";
+      if (!dirprefix || !*dirprefix)
+        dirprefix = "GPGARCH";
 
-  dirname = create_directory (dirprefix);
-  if (!dirname)
-    {
-      err = gpg_error (GPG_ERR_GENERAL);
-      goto leave;
+      dirname = create_directory (dirprefix);
+      if (!dirname)
+        {
+          err = gpg_error (GPG_ERR_GENERAL);
+          goto leave;
+        }
     }
 
   if (opt.verbose)
diff --git a/tools/gpgtar.c b/tools/gpgtar.c
index c4bf855..991fbed 100644
--- a/tools/gpgtar.c
+++ b/tools/gpgtar.c
@@ -58,6 +58,7 @@ enum cmd_and_opt_values
     oRecipient	= 'r',
     oUser       = 'u',
     oOutput	= 'o',
+    oDirectory  = 'C',
     oQuiet      = 'q',
     oVerbose	= 'v',
     oFilesFrom  = 'T',
@@ -89,6 +90,8 @@ static ARGPARSE_OPTS opts[] = {
   ARGPARSE_s_s (oUser, "local-user",
                 N_("|USER-ID|use USER-ID to sign or decrypt")),
   ARGPARSE_s_s (oOutput, "output", N_("|FILE|write output to FILE")),
+  ARGPARSE_s_s (oDirectory, "directory",
+                N_("|DIRECTORY|extract files into DIRECTORY")),
   ARGPARSE_s_n (oVerbose, "verbose", N_("verbose")),
   ARGPARSE_s_n (oQuiet,	"quiet",  N_("be somewhat more quiet")),
   ARGPARSE_s_s (oGpgProgram, "gpg", "@"),
@@ -194,6 +197,7 @@ main (int argc, char **argv)
       switch (pargs.r_opt)
         {
         case oOutput:    opt.outfile = pargs.r.ret_str; break;
+        case oDirectory: opt.directory = pargs.r.ret_str; break;
         case oSetFilename: opt.filename = pargs.r.ret_str; break;
 	case oQuiet:     opt.quiet = 1; break;
         case oVerbose:   opt.verbose++; break;
diff --git a/tools/gpgtar.h b/tools/gpgtar.h
index 98fd51c..66a8ae1 100644
--- a/tools/gpgtar.h
+++ b/tools/gpgtar.h
@@ -35,6 +35,7 @@ struct
   const char *user;
   int symmetric;
   const char *filename;
+  const char *directory;
 } opt;
 
 

commit 89e104eb38c3a6896892ff09db11cb1bae2bb0d3
Author: Justus Winter <justus at g10code.com>
Date:   Wed Nov 25 14:57:14 2015 +0100

    tools/gpgtar: Handle '--gpg' argument.
    
    * tools/gpgtar-create.c (gpgtar_create): Use given gpg program.
    * tools/gpgtar-extract.c (gpgtar_extract): Likewise.
    * tools/gpgtar-list.c (gpgtar_list): Likewise.
    * tools/gpgtar.c (enum cmd_and_opt_values): New constant.
    (opts): Add argument.
    (main): Handle argument.
    * tools/gpgtar.h (opt): Add field 'gpg_program'.
    
    Signed-off-by: Justus Winter <justus at g10code.com>

diff --git a/tools/gpgtar-create.c b/tools/gpgtar-create.c
index 69ba440..92c1fb8 100644
--- a/tools/gpgtar-create.c
+++ b/tools/gpgtar-create.c
@@ -892,7 +892,8 @@ gpgtar_create (char **inpattern, int encrypt)
       if (err)
         goto leave;
 
-      err = gpg_encrypt_stream (NULL, NULL,
+      err = gpg_encrypt_stream (NULL,
+                                opt.gpg_program,
                                 outstream,
                                 opt.recipients,
                                 cipher_stream);
diff --git a/tools/gpgtar-extract.c b/tools/gpgtar-extract.c
index 594f257..92346b0 100644
--- a/tools/gpgtar-extract.c
+++ b/tools/gpgtar-extract.c
@@ -303,7 +303,7 @@ gpgtar_extract (const char *filename, int decrypt)
           err = gpg_error_from_syserror ();
           goto leave;
         }
-      err = gpg_decrypt_stream (NULL, NULL, cipher_stream, stream);
+      err = gpg_decrypt_stream (NULL, opt.gpg_program, cipher_stream, stream);
       if (err)
         goto leave;
 
diff --git a/tools/gpgtar-list.c b/tools/gpgtar-list.c
index 1f917ad..cdc7fc4 100644
--- a/tools/gpgtar-list.c
+++ b/tools/gpgtar-list.c
@@ -306,7 +306,7 @@ gpgtar_list (const char *filename, int decrypt)
           err = gpg_error_from_syserror ();
           goto leave;
         }
-      err = gpg_decrypt_stream (NULL, NULL, cipher_stream, stream);
+      err = gpg_decrypt_stream (NULL, opt.gpg_program, cipher_stream, stream);
       if (err)
         goto leave;
 
diff --git a/tools/gpgtar.c b/tools/gpgtar.c
index 714b216..c4bf855 100644
--- a/tools/gpgtar.c
+++ b/tools/gpgtar.c
@@ -64,6 +64,7 @@ enum cmd_and_opt_values
     oNoVerbose	= 500,
 
     aSignEncrypt,
+    oGpgProgram,
     oSkipCrypto,
     oOpenPGP,
     oCMS,
@@ -90,6 +91,7 @@ static ARGPARSE_OPTS opts[] = {
   ARGPARSE_s_s (oOutput, "output", N_("|FILE|write output to FILE")),
   ARGPARSE_s_n (oVerbose, "verbose", N_("verbose")),
   ARGPARSE_s_n (oQuiet,	"quiet",  N_("be somewhat more quiet")),
+  ARGPARSE_s_s (oGpgProgram, "gpg", "@"),
   ARGPARSE_s_n (oSkipCrypto, "skip-crypto", N_("skip the crypto processing")),
   ARGPARSE_s_s (oSetFilename, "set-filename", "@"),
   ARGPARSE_s_s (oFilesFrom, "files-from",
@@ -221,6 +223,10 @@ main (int argc, char **argv)
           opt.symmetric = 1;
           break;
 
+        case oGpgProgram:
+          opt.gpg_program = pargs.r.ret_str;
+          break;
+
         case oSkipCrypto:
           skip_crypto = 1;
           break;
diff --git a/tools/gpgtar.h b/tools/gpgtar.h
index ab2ccec..98fd51c 100644
--- a/tools/gpgtar.h
+++ b/tools/gpgtar.h
@@ -29,6 +29,7 @@ struct
   int verbose;
   unsigned int debug_level;
   int quiet;
+  const char *gpg_program;
   const char *outfile;
   strlist_t recipients;
   const char *user;

commit f76fb047c15914ba44dc9423d235484758bcd721
Author: Justus Winter <justus at g10code.com>
Date:   Wed Nov 25 13:39:50 2015 +0100

    tools/gpgtar: Improve error handling.
    
    * tools/gpgtar-create.c (gpgtar_create): Return an error code, fix
    error handling.
    * tools/gpgtar-extract.c (gpgtar_extract): Likewise.
    * tools/gpgtar-list.c (read_header): Return an error code.
    (gpgtar_list): Return an error code, fix error handling.
    (gpgtar_read_header): Return an error code.
    * tools/gpgtar.c: Add missing include.
    (main): Print an generic error message if a command failed and no
    error has been printed yet.
    * tools/gpgtar.h (gpgtar_{create,extract,list,read_header}): Fix the
    prototypes accordingly.
    
    Signed-off-by: Justus Winter <justus at g10code.com>

diff --git a/tools/gpgtar-create.c b/tools/gpgtar-create.c
index 59b88bf..69ba440 100644
--- a/tools/gpgtar-create.c
+++ b/tools/gpgtar-create.c
@@ -740,7 +740,7 @@ write_eof_mark (estream_t stream)
 /* Create a new tarball using the names in the array INPATTERN.  If
    INPATTERN is NULL take the pattern as null terminated strings from
    stdin.  */
-void
+gpg_error_t
 gpgtar_create (char **inpattern, int encrypt)
 {
   gpg_error_t err = 0;
@@ -903,16 +903,19 @@ gpgtar_create (char **inpattern, int encrypt)
  leave:
   if (!err)
     {
+      gpg_error_t first_err;
       if (outstream != es_stdout)
-        err = es_fclose (outstream);
+        first_err = es_fclose (outstream);
       else
-        err = es_fflush (outstream);
+        first_err = es_fflush (outstream);
       outstream = NULL;
       if (cipher_stream != es_stdout)
         err = es_fclose (cipher_stream);
       else
         err = es_fflush (cipher_stream);
       cipher_stream = NULL;
+      if (! err)
+        err = first_err;
     }
   if (err)
     {
@@ -931,4 +934,5 @@ gpgtar_create (char **inpattern, int encrypt)
       scanctrl->flist = hdr->next;
       xfree (hdr);
     }
+  return err;
 }
diff --git a/tools/gpgtar-extract.c b/tools/gpgtar-extract.c
index 19db0eb..594f257 100644
--- a/tools/gpgtar-extract.c
+++ b/tools/gpgtar-extract.c
@@ -265,7 +265,7 @@ create_directory (const char *dirprefix)
 
 
 

-void
+gpg_error_t
 gpgtar_extract (const char *filename, int decrypt)
 {
   gpg_error_t err;
@@ -285,7 +285,7 @@ gpgtar_extract (const char *filename, int decrypt)
         {
           err = gpg_error_from_syserror ();
           log_error ("error opening '%s': %s\n", filename, gpg_strerror (err));
-          return;
+          return err;
         }
     }
   else
@@ -344,11 +344,12 @@ gpgtar_extract (const char *filename, int decrypt)
 
   for (;;)
     {
-      header = gpgtar_read_header (stream);
-      if (!header)
+      err = gpgtar_read_header (stream, &header);
+      if (err || header == NULL)
         goto leave;
 
-      if (extract (stream, dirname, header))
+      err = extract (stream, dirname, header);
+      if (err)
         goto leave;
       xfree (header);
       header = NULL;
@@ -362,5 +363,5 @@ gpgtar_extract (const char *filename, int decrypt)
     es_fclose (stream);
   if (stream != cipher_stream)
     es_fclose (cipher_stream);
-  return;
+  return err;
 }
diff --git a/tools/gpgtar-list.c b/tools/gpgtar-list.c
index 41e08db..1f917ad 100644
--- a/tools/gpgtar-list.c
+++ b/tools/gpgtar-list.c
@@ -169,10 +169,11 @@ parse_header (const void *record, const char *filename)
 
 

 /* Read the next block, assming it is a tar header.  Returns a header
-   object on success or NULL one error.  In case of an error an error
+   object on success in R_HEADER, or an error.  If the stream is
+   consumed, R_HEADER is set to NULL.  In case of an error an error
    message has been printed.  */
-static tar_header_t
-read_header (estream_t stream)
+static gpg_error_t
+read_header (estream_t stream, tar_header_t *r_header)
 {
   gpg_error_t err;
   char record[RECORDSIZE];
@@ -180,7 +181,7 @@ read_header (estream_t stream)
 
   err = read_record (stream, record);
   if (err)
-    return NULL;
+    return err;
 
   for (i=0; i < RECORDSIZE && !record[i]; i++)
     ;
@@ -190,8 +191,8 @@ read_header (estream_t stream)
          end of archive mark.  */
       err = read_record (stream, record);
       if (err)
-        return NULL;
-      
+        return err;
+
       for (i=0; i < RECORDSIZE && !record[i]; i++)
         ;
       if (i != RECORDSIZE)
@@ -200,11 +201,13 @@ read_header (estream_t stream)
       else
         {
           /* End of archive - FIXME: we might want to check for garbage.  */
-          return NULL;
+          *r_header = NULL;
+          return 0;
         }
     }
 
-  return parse_header (record, es_fname_get (stream));
+  *r_header = parse_header (record, es_fname_get (stream));
+  return *r_header ? 0 : gpg_error_from_syserror ();
 }
 
 
@@ -267,13 +270,13 @@ print_header (tar_header_t header, estream_t out)
 

 /* List the tarball FILENAME or, if FILENAME is NULL, the tarball read
    from stdin.  */
-void
+gpg_error_t
 gpgtar_list (const char *filename, int decrypt)
 {
   gpg_error_t err;
   estream_t stream;
   estream_t cipher_stream = NULL;
-  tar_header_t header;
+  tar_header_t header = NULL;
 
   if (filename)
     {
@@ -285,7 +288,7 @@ gpgtar_list (const char *filename, int decrypt)
         {
           err = gpg_error_from_syserror ();
           log_error ("error opening '%s': %s\n", filename, gpg_strerror (err));
-          return;
+          return err;
         }
     }
   else
@@ -314,12 +317,12 @@ gpgtar_list (const char *filename, int decrypt)
 
   for (;;)
     {
-      header = read_header (stream);
-      if (!header)
+      err = read_header (stream, &header);
+      if (err || header == NULL)
         goto leave;
-      
+
       print_header (header, es_stdout);
-      
+
       if (skip_data (stream, header))
         goto leave;
       xfree (header);
@@ -333,14 +336,13 @@ gpgtar_list (const char *filename, int decrypt)
     es_fclose (stream);
   if (stream != cipher_stream)
     es_fclose (cipher_stream);
-  return;
+  return err;
 }
 
-tar_header_t
-gpgtar_read_header (estream_t stream)
+gpg_error_t
+gpgtar_read_header (estream_t stream, tar_header_t *r_header)
 {
-  /*FIXME: Change to return an error code.  */
-  return read_header (stream);
+  return read_header (stream, r_header);
 }
 
 void
diff --git a/tools/gpgtar.c b/tools/gpgtar.c
index a86aafe..714b216 100644
--- a/tools/gpgtar.c
+++ b/tools/gpgtar.c
@@ -38,6 +38,7 @@
 #include "util.h"
 #include "i18n.h"
 #include "sysutils.h"
+#include "../common/asshelp.h"
 #include "../common/openpgpdefs.h"
 #include "../common/init.h"
 
@@ -158,6 +159,7 @@ ASSUAN_SYSTEM_NPTH_IMPL;
 int
 main (int argc, char **argv)
 {
+  gpg_error_t err;
   ARGPARSE_ARGS pargs;
   const char *fname;
   int no_more_options = 0;
@@ -262,7 +264,9 @@ main (int argc, char **argv)
         log_info ("note: ignoring option --set-filename\n");
       if (files_from)
         log_info ("note: ignoring option --files-from\n");
-      gpgtar_list (fname, !skip_crypto);
+      err = gpgtar_list (fname, !skip_crypto);
+      if (err && log_get_errorcount (0) == 0)
+        log_error ("listing archive failed: %s\n", gpg_strerror (err));
       break;
 
     case aEncrypt:
@@ -271,7 +275,9 @@ main (int argc, char **argv)
         usage (1);
       if (opt.filename)
         log_info ("note: ignoring option --set-filename\n");
-      gpgtar_create (null_names? NULL :argv, !skip_crypto);
+      err = gpgtar_create (null_names? NULL :argv, !skip_crypto);
+      if (err && log_get_errorcount (0) == 0)
+        log_error ("creating archive failed: %s\n", gpg_strerror (err));
       break;
 
     case aDecrypt:
@@ -282,7 +288,9 @@ main (int argc, char **argv)
       if (files_from)
         log_info ("note: ignoring option --files-from\n");
       fname = argc ? *argv : NULL;
-      gpgtar_extract (fname, !skip_crypto);
+      err = gpgtar_extract (fname, !skip_crypto);
+      if (err && log_get_errorcount (0) == 0)
+        log_error ("extracting archive failed: %s\n", gpg_strerror (err));
       break;
 
     default:
diff --git a/tools/gpgtar.h b/tools/gpgtar.h
index a96ee09..ab2ccec 100644
--- a/tools/gpgtar.h
+++ b/tools/gpgtar.h
@@ -115,14 +115,14 @@ gpg_error_t read_record (estream_t stream, void *record);
 gpg_error_t write_record (estream_t stream, const void *record);
 
 /*-- gpgtar-create.c --*/
-void gpgtar_create (char **inpattern, int encrypt);
+gpg_error_t gpgtar_create (char **inpattern, int encrypt);
 
 /*-- gpgtar-extract.c --*/
-void gpgtar_extract (const char *filename, int decrypt);
+gpg_error_t gpgtar_extract (const char *filename, int decrypt);
 
 /*-- gpgtar-list.c --*/
-void gpgtar_list (const char *filename, int decrypt);
-tar_header_t gpgtar_read_header (estream_t stream);
+gpg_error_t gpgtar_list (const char *filename, int decrypt);
+gpg_error_t gpgtar_read_header (estream_t stream, tar_header_t *r_header);
 void gpgtar_print_header (tar_header_t header, estream_t out);
 
 

-----------------------------------------------------------------------

Summary of changes:
 tests/openpgp/Makefile.am |  3 ++-
 tests/openpgp/gpgtar.test | 59 +++++++++++++++++++++++++++++++++++++++++++
 tools/gpgtar-create.c     | 13 +++++++---
 tools/gpgtar-extract.c    | 64 ++++++++++++++++++++++++++---------------------
 tools/gpgtar-list.c       | 44 ++++++++++++++++----------------
 tools/gpgtar.c            | 24 +++++++++++++++---
 tools/gpgtar.h            | 10 +++++---
 7 files changed, 155 insertions(+), 62 deletions(-)
 create mode 100755 tests/openpgp/gpgtar.test


hooks/post-receive
-- 
The GNU Privacy Guard
http://git.gnupg.org




More information about the Gnupg-commits mailing list