From 69a8440f44fa025e33a4cc32d17695c9ac385043 Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Thu, 26 Nov 2015 15:36:52 +0100 Subject: [PATCH] tools/gpgtar: Handle '--gpg-args'. * tools/gpgtar-create.c (gpgtar_create): Use given arguments. * tools/gpgtar-extract.c (gpgtar_extract): Likewise. * tools/gpgtar-list.c (gpgtar_list): Likewise. * tools/gpgtar.c (enum cmd_and_opt_values): New value. (opts): Add 'gpg-args'. (parse_arguments): Handle arguments. * tools/gpgtar.h (opt): Add field 'gpg_arguments'. * tests/openpgp/gpgtar.test: Simplify accordingly. Signed-off-by: Justus Winter --- tests/openpgp/gpgtar.test | 14 ++++++++++---- tools/gpgtar-create.c | 2 +- tools/gpgtar-extract.c | 2 +- tools/gpgtar-list.c | 2 +- tools/gpgtar.c | 16 ++++++++++++++++ tools/gpgtar.h | 1 + 6 files changed, 30 insertions(+), 7 deletions(-) diff --git a/tests/openpgp/gpgtar.test b/tests/openpgp/gpgtar.test index 5cb2353c4..acfaf3fa1 100755 --- a/tests/openpgp/gpgtar.test +++ b/tests/openpgp/gpgtar.test @@ -25,24 +25,30 @@ TESTFILES="$plain_files $data_files" TESTDIR=gpgtar.d FILELIST="${TESTDIR}/filelist" GPG=../../g10/gpg2 +GPGARGS="--trust-model=always" + GPGTAR="../../tools/gpgtar" -GPGZIP="sh ../../tools/gpg-zip --gpg-args --trust-model=always" +GPGZIP="sh ../../tools/gpg-zip" for TOOL in "$GPGTAR" "$GPGZIP" do rm -rf -- "${TESTDIR}" mkdir "${TESTDIR}" - $TOOL --gpg "$GPG" --encrypt --recipient "$usrname2" \ + $TOOL --gpg "$GPG" --gpg-args "$GPGARGS" \ + --encrypt --recipient "$usrname2" \ --output "${TESTDIR}/test.tar.pgp" $TESTFILES - $TOOL --gpg "$GPG" --list-archive "${TESTDIR}/test.tar.pgp" >"$FILELIST" + $TOOL --gpg "$GPG" --gpg-args "$GPGARGS" \ + --list-archive "${TESTDIR}/test.tar.pgp" \ + >"$FILELIST" for F in $TESTFILES do grep -qe "\\b${F}\\b" "$FILELIST" done - $TOOL --gpg "$GPG" --tar-args --directory="${TESTDIR}" \ + $TOOL --gpg "$GPG" --gpg-args "$GPGARGS" \ + --tar-args --directory="${TESTDIR}" \ --decrypt "${TESTDIR}/test.tar.pgp" for F in $TESTFILES do diff --git a/tools/gpgtar-create.c b/tools/gpgtar-create.c index 774fcd37f..cc82889ab 100644 --- a/tools/gpgtar-create.c +++ b/tools/gpgtar-create.c @@ -894,7 +894,7 @@ gpgtar_create (char **inpattern, int encrypt) err = gpg_encrypt_stream (NULL, opt.gpg_program, - NULL, + opt.gpg_arguments, outstream, opt.recipients, cipher_stream); diff --git a/tools/gpgtar-extract.c b/tools/gpgtar-extract.c index 7e7a351ba..3b73c8506 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, opt.gpg_program, NULL, + err = gpg_decrypt_stream (NULL, opt.gpg_program, opt.gpg_arguments, cipher_stream, stream); if (err) goto leave; diff --git a/tools/gpgtar-list.c b/tools/gpgtar-list.c index 1eab7e574..cb2ca5dac 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, opt.gpg_program, NULL, + err = gpg_decrypt_stream (NULL, opt.gpg_program, opt.gpg_arguments, cipher_stream, stream); if (err) goto leave; diff --git a/tools/gpgtar.c b/tools/gpgtar.c index 2968fb5fc..90fee054e 100644 --- a/tools/gpgtar.c +++ b/tools/gpgtar.c @@ -75,6 +75,7 @@ enum cmd_and_opt_values oNull, /* Compatibility with gpg-zip. */ + oGpgArgs, oTarArgs, }; @@ -111,6 +112,7 @@ static ARGPARSE_OPTS opts[] = { N_("|FILE|get names to create from FILE")), ARGPARSE_s_n (oNull, "null", N_("-T reads null-terminated names")), + ARGPARSE_s_s (oGpgArgs, "gpg-args", "@"), ARGPARSE_s_s (oTarArgs, "tar-args", "@"), ARGPARSE_end () @@ -340,6 +342,20 @@ parse_arguments (ARGPARSE_ARGS *pargs, ARGPARSE_OPTS *popts) case oOpenPGP: /* Dummy option for now. */ break; case oCMS: /* Dummy option for now. */ break; + case oGpgArgs:; + strlist_t list; + if (shell_parse_stringlist (pargs->r.ret_str, &list)) + log_error ("failed to parse gpg arguments '%s'\n", + pargs->r.ret_str); + else + { + if (opt.gpg_arguments) + strlist_last (opt.gpg_arguments)->next = list; + else + opt.gpg_arguments = list; + } + break; + case oTarArgs:; int tar_argc; char **tar_argv; diff --git a/tools/gpgtar.h b/tools/gpgtar.h index 66a8ae17a..f130c94ee 100644 --- a/tools/gpgtar.h +++ b/tools/gpgtar.h @@ -30,6 +30,7 @@ struct unsigned int debug_level; int quiet; const char *gpg_program; + strlist_t gpg_arguments; const char *outfile; strlist_t recipients; const char *user;