aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorIngo Klöcker <[email protected]>2023-01-19 09:45:04 +0000
committerIngo Klöcker <[email protected]>2023-01-19 09:45:04 +0000
commit0ca45e48b45af1978027e6fe26c7e406fd5ec74b (patch)
treeb5954cd207e33c4fc7cfa90b62503139e344b67e /tests
parentcore: Fix --set-filename argument (diff)
downloadgpgme-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.c53
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)