aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorIngo Klöcker <[email protected]>2023-01-18 10:48:02 +0000
committerIngo Klöcker <[email protected]>2023-01-18 10:48:02 +0000
commit5d8316da1d3dd0ab73743898e76c51932d0f13e2 (patch)
tree7621431247d6fa0bbe548a138aac3d5efe5bcdf1 /tests
parentcore: Defer adding --status-fd and --logger-fd to argument list (diff)
downloadgpgme-5d8316da1d3dd0ab73743898e76c51932d0f13e2.tar.gz
gpgme-5d8316da1d3dd0ab73743898e76c51932d0f13e2.zip
core: Support usage of gpgtar for encryption
* src/gpgme.h.in (GPGME_ENCRYPT_ARCHIVE): New encryption flag. * src/engine-gpg.c (arg_and_data_s): New field gpg_arg. (engine_gpg): New flag use_gpgtar. (_add_arg): Add argument gpg_arg and set it. (add_arg_ext, add_arg_with_locp, add_arg, add_arg_pfx, add_arg_len): Adjust call of _add_arg. (add_arg_with_locp): Add argument front. (add_gpg_arg, add_gpg_arg_with_value): New. (gpg_new): Use add_gpg_arg_with_value for gpg-only options with a value and add_gpg_arg for gpg-only options without. (build_argv): Consider usage of gpgtar when counting arguments to pass to gpg/gpgtar. Prepend "--gpg-args" to all gpg-only arguments if gpgtar is used. (start): Set program to use. Read diagnostics output from stderr when using gpgtar. Do not pass --status-fd to gpgtar for gpg < 2.4.1. Use add_gpg_arg_with_value for --lc-ctype and --lc-messages. (gpg_encrypt): Set use_gpgtar engine flag if GPGME_ENCRYPT_ARCHIVE flag is set. Check for new enough gpg and incompatible flags. 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/engine-gpgsm.c (gpgsm_encrypt): Return error if new flag is set. * src/engine-uiserver.c (uiserver_encrypt): Ditto. * tests/run-encrypt.c (show_usage): New options --archive and --diagnostics. (main): Parse new options. Encrypt with gpgtar if --archive is given. Print stderr of gpg/gpgtar if --diagnostics is given. -- With this change the gpgme_op_encrypt* functions get support for encrypting a list of files and/or directories passed as NUL-separated list in "plain" data with gpgtar. GnuPG-bug-id: 6342
Diffstat (limited to 'tests')
-rw-r--r--tests/run-encrypt.c117
1 files changed, 80 insertions, 37 deletions
diff --git a/tests/run-encrypt.c b/tests/run-encrypt.c
index 7b0e29a7..a38dabcb 100644
--- a/tests/run-encrypt.c
+++ b/tests/run-encrypt.c
@@ -107,6 +107,8 @@ show_usage (int ex)
" --no-symkey-cache disable the use of that cache\n"
" --wrap assume input is valid OpenPGP message\n"
" --symmetric encrypt symmetric (OpenPGP only)\n"
+ " --archive encrypt given file or directory into an archive\n"
+ " --diagnostics print diagnostics\n"
, stderr);
exit (ex);
}
@@ -132,6 +134,7 @@ main (int argc, char **argv)
gpgme_encrypt_flags_t flags = GPGME_ENCRYPT_ALWAYS_TRUST;
gpgme_off_t offset;
int no_symkey_cache = 0;
+ int diagnostics = 0;
if (argc)
{ argc--; argv++; }
@@ -225,6 +228,16 @@ main (int argc, char **argv)
no_symkey_cache = 1;
argc--; argv++;
}
+ else if (!strcmp (*argv, "--archive"))
+ {
+ flags |= GPGME_ENCRYPT_ARCHIVE;
+ argc--; argv++;
+ }
+ else if (!strcmp (*argv, "--diagnostics"))
+ {
+ diagnostics = 1;
+ argc--; argv++;
+ }
else if (!strncmp (*argv, "--", 2))
show_usage (1);
@@ -269,48 +282,56 @@ main (int argc, char **argv)
}
keys[i] = NULL;
- err = gpgme_data_new_from_file (&in, *argv, 1);
- if (err)
+ if (flags & GPGME_ENCRYPT_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);
}
- offset = gpgme_data_seek (in, 0, SEEK_END);
- if (offset == (gpgme_off_t)(-1))
- {
- err = gpg_error_from_syserror ();
- fprintf (stderr, PGM ": error seeking `%s': %s\n",
- *argv, gpg_strerror (err));
- exit (1);
- }
- if (gpgme_data_seek (in, 0, SEEK_SET) == (gpgme_off_t)(-1))
+ else
{
- err = gpg_error_from_syserror ();
- fprintf (stderr, PGM ": error seeking `%s': %s\n",
- *argv, gpg_strerror (err));
- exit (1);
- }
- {
- char numbuf[50];
- char *p;
-
- p = numbuf + sizeof numbuf;
- *--p = 0;
- do
- {
- *--p = '0' + (offset % 10);
- offset /= 10;
- }
- while (offset);
- err = gpgme_data_set_flag (in, "size-hint", p);
- if (err)
+ 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);
+ }
+ offset = gpgme_data_seek (in, 0, SEEK_END);
+ if (offset == (gpgme_off_t)(-1))
+ {
+ err = gpg_error_from_syserror ();
+ fprintf (stderr, PGM ": error seeking `%s': %s\n",
+ *argv, gpg_strerror (err));
+ exit (1);
+ }
+ if (gpgme_data_seek (in, 0, SEEK_SET) == (gpgme_off_t)(-1))
+ {
+ err = gpg_error_from_syserror ();
+ fprintf (stderr, PGM ": error seeking `%s': %s\n",
+ *argv, gpg_strerror (err));
+ exit (1);
+ }
{
- fprintf (stderr, PGM ": error setting size-hint for `%s': %s\n",
- *argv, gpg_strerror (err));
- exit (1);
+ char numbuf[50];
+ char *p;
+
+ p = numbuf + sizeof numbuf;
+ *--p = 0;
+ do
+ {
+ *--p = '0' + (offset % 10);
+ offset /= 10;
+ }
+ while (offset);
+ err = gpgme_data_set_flag (in, "size-hint", p);
+ if (err)
+ {
+ fprintf (stderr, PGM ": error setting size-hint for `%s': %s\n",
+ *argv, gpg_strerror (err));
+ exit (1);
+ }
}
- }
+ }
err = gpgme_data_new (&out);
fail_if_err (err);
@@ -318,6 +339,28 @@ main (int argc, char **argv)
err = gpgme_op_encrypt_ext (ctx, keycount ? keys : NULL, keystring,
flags, in, out);
result = gpgme_op_encrypt_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);
if (err)