core: New keyword --file for OpenPGP recpstring.
authorWerner Koch <wk@gnupg.org>
Tue, 17 Apr 2018 10:40:30 +0000 (12:40 +0200)
committerWerner Koch <wk@gnupg.org>
Tue, 17 Apr 2018 10:40:30 +0000 (12:40 +0200)
* 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 <wk@gnupg.org>
doc/gpgme.texi
src/engine-gpg.c

index c14780a..f5efec6 100644 (file)
@@ -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
 
index fdb786a..173e940 100644 (file)
@@ -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)