aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2018-04-17 10:40:30 +0000
committerWerner Koch <[email protected]>2018-04-17 10:40:30 +0000
commit3589da0500f1c80717e658d103a0cb2751d27b49 (patch)
treea9edb547dd0c6e5d7ac374514f9cc16870c7034e
parentcore: For OpenPGP let offline mode disable dirmngr. (diff)
downloadgpgme-3589da0500f1c80717e658d103a0cb2751d27b49.tar.gz
gpgme-3589da0500f1c80717e658d103a0cb2751d27b49.zip
core: New keyword --file for OpenPGP recpstring.
* src/engine-gpg.c (append_args_from_recipients_string): Add new flags. -- Now you can use gpgme to encrypt without first importing a key. Signed-off-by: Werner Koch <[email protected]>
-rw-r--r--doc/gpgme.texi32
-rw-r--r--src/engine-gpg.c20
2 files changed, 43 insertions, 9 deletions
diff --git a/doc/gpgme.texi b/doc/gpgme.texi
index c14780a9..f5efec67 100644
--- a/doc/gpgme.texi
+++ b/doc/gpgme.texi
@@ -6188,12 +6188,32 @@ to first create key objects. Leading and trailing white space is
remove from each line in @var{recpstring}. The keys are then passed
verbatim to the backend engine.
-For the OpenPGP backend two special keywords are supported to modify
-the operation: If the keyword "--hidden" is given as a recipient, it
-is skipped but will trun all following key specifications to be hidden
-recipients. If the keyword "--" is given as a recipient, it will be
-skipped but no keywords will be detected in all following key
-specifications.
+For the OpenPGP backend several special keywords are supported to
+modify the operation. These keywords are given instead of a key
+specification. The currently supported keywords are:
+
+@table @code
+@item --hidden
+@itemx --no-hidden
+These keywords toggle between normal and hidden recipients for all
+following key specifications. When a hidden recipient is requested
+the gpg option @option{-R} (or @option{-F} in file mode) is used
+instead of @option{-r} (@option{-f} in file mode).
+
+@item --file
+@itemx --no-file
+These keywords toggle between regular and file mode for all following
+key specification. In file mode the option @option{-f} or @option{-F}
+is passed to gpg. At least GnuPG version 2.1.14 is required to handle
+these options. The @code{GPGME_ENCRYPT_WANT_ADDRESS} flag is ignored
+in file mode.
+
+@item --
+This keyword disables all keyword detection up to the end of the
+string. All keywords are treated as verbatim arguments.
+
+@end table
+
@end deftypefun
diff --git a/src/engine-gpg.c b/src/engine-gpg.c
index fdb786a9..173e940c 100644
--- a/src/engine-gpg.c
+++ b/src/engine-gpg.c
@@ -2001,9 +2001,11 @@ append_args_from_recipients_string (engine_gpg_t gpg,
const char *string)
{
gpg_error_t err = 0;
+ gpgme_encrypt_flags_t orig_flags = flags;
int any = 0;
int ignore = 0;
int hidden = 0;
+ int file = 0;
const char *s;
int n;
@@ -2028,10 +2030,22 @@ append_args_from_recipients_string (engine_gpg_t gpg,
ignore = 1;
else if (!ignore && n == 8 && !memcmp (string, "--hidden", 8))
hidden = 1;
- else if (n)
+ else if (!ignore && n == 11 && !memcmp (string, "--no-hidden", 11))
+ hidden = 0;
+ else if (!ignore && n == 6 && !memcmp (string, "--file", 6))
{
- /* Add arg if it is not empty. */
- err = add_arg (gpg, hidden? "-R":"-r");
+ file = 1;
+ /* Because the key is used as is we need to ignore this flag: */
+ flags &= ~GPGME_ENCRYPT_WANT_ADDRESS;
+ }
+ else if (!ignore && n == 9 && !memcmp (string, "--no-file", 9))
+ {
+ file = 0;
+ flags = orig_flags;
+ }
+ else if (n) /* Not empty - use it. */
+ {
+ err = add_arg (gpg, file? (hidden? "-F":"-f") : (hidden? "-R":"-r"));
if (!err)
err = add_arg_recipient_string (gpg, flags, string, n);
if (!err)