diff options
author | Ingo Klöcker <[email protected]> | 2023-01-19 09:45:04 +0000 |
---|---|---|
committer | Ingo Klöcker <[email protected]> | 2023-01-19 09:45:04 +0000 |
commit | 0ca45e48b45af1978027e6fe26c7e406fd5ec74b (patch) | |
tree | b5954cd207e33c4fc7cfa90b62503139e344b67e /tests | |
parent | core: Fix --set-filename argument (diff) | |
download | gpgme-0ca45e48b45af1978027e6fe26c7e406fd5ec74b.tar.gz gpgme-0ca45e48b45af1978027e6fe26c7e406fd5ec74b.zip |
core: Support usage of gpgtar for creating a signed archive
* src/gpgme.h.in (GPGME_SIG_MODE_ARCHIVE): New signature mode.
* src/engine-gpg.c (append_args_from_sender,
append_args_from_sig_notations): Use add_gpg_arg_with_value
for gpg-only options with a value.
(gpg_sign): Set use_gpgtar engine flag if GPGME_SIG_MODE_ARCHIVE mode
is set. Check for new enough gpg. Use add_gpg_arg_with_value for
gpg-only options with a value and add_gpg_arg for gpg-only options
without a value. Set extra options for gpgtar and pass input data to
stdin when using gpgtar.
* src/sign.c (sign_start): Add GPGME_SIG_MODE_ARCHIVE as valid mode.
* tests/run-sign.c (show_usage): New options --archive and
--diagnostics.
(main): Parse new options. Sign with gpgtar if --archive is given.
Print stderr of gpg/gpgtar if --diagnostics is given.
--
With this change the gpgme_op_sign* functions get support for
creating a signed archive from files and/or directories passed as
NUL-separated list in the "in" data with gpgtar.
GnuPG-bug-id: 6342
Diffstat (limited to 'tests')
-rw-r--r-- | tests/run-sign.c | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/tests/run-sign.c b/tests/run-sign.c index 37211d72..73a970d0 100644 --- a/tests/run-sign.c +++ b/tests/run-sign.c @@ -87,6 +87,8 @@ show_usage (int ex) " --sender MBOX use MBOX as sender address\n" " --include-key-block use this option with gpg\n" " --clear create a clear text signature\n" + " --archive create a signed archive with the given file or directory\n" + " --diagnostics print diagnostics\n" , stderr); exit (ex); } @@ -106,6 +108,7 @@ main (int argc, char **argv) int print_status = 0; int use_loopback = 0; int include_key_block = 0; + int diagnostics = 0; const char *sender = NULL; const char *s; @@ -178,6 +181,16 @@ main (int argc, char **argv) sigmode = GPGME_SIG_MODE_CLEAR; argc--; argv++; } + else if (!strcmp (*argv, "--archive")) + { + sigmode = GPGME_SIG_MODE_ARCHIVE; + argc--; argv++; + } + else if (!strcmp (*argv, "--diagnostics")) + { + diagnostics = 1; + argc--; argv++; + } else if (!strncmp (*argv, "--", 2)) show_usage (1); @@ -236,12 +249,20 @@ main (int argc, char **argv) } } - err = gpgme_data_new_from_file (&in, *argv, 1); - if (err) + if (sigmode == GPGME_SIG_MODE_ARCHIVE) { - fprintf (stderr, PGM ": error reading `%s': %s\n", - *argv, gpg_strerror (err)); - exit (1); + const char *path = *argv; + err = gpgme_data_new_from_mem (&in, path, strlen (path), 0); + } + else + { + err = gpgme_data_new_from_file (&in, *argv, 1); + if (err) + { + fprintf (stderr, PGM ": error reading `%s': %s\n", + *argv, gpg_strerror (err)); + exit (1); + } } err = gpgme_data_new (&out); @@ -249,6 +270,28 @@ main (int argc, char **argv) err = gpgme_op_sign (ctx, in, out, sigmode); result = gpgme_op_sign_result (ctx); + + if (diagnostics) + { + gpgme_data_t diag; + gpgme_error_t diag_err; + + gpgme_data_new (&diag); + diag_err = gpgme_op_getauditlog (ctx, diag, GPGME_AUDITLOG_DIAG); + if (diag_err) + { + fprintf (stderr, PGM ": getting diagnostics failed: %s\n", + gpgme_strerror (diag_err)); + } + else + { + fputs ("Begin Diagnostics:\n", stdout); + print_data (diag); + fputs ("End Diagnostics.\n", stdout); + } + gpgme_data_release (diag); + } + if (result) print_result (result, sigmode); if (err) |