core: Allow for --hidden keyword in OpenPGP recpstrings.
authorWerner Koch <wk@gnupg.org>
Tue, 17 Apr 2018 08:04:20 +0000 (10:04 +0200)
committerWerner Koch <wk@gnupg.org>
Tue, 17 Apr 2018 08:04:20 +0000 (10:04 +0200)
* src/engine-gpg.c (append_args_from_recipients_string): Add special
keywords.
--

GnuPG-bug-id: 3775
Signed-off-by: Werner Koch <wk@gnupg.org>
doc/gpgme.texi
src/engine-gpg.c

index 330b167..3975a97 100644 (file)
@@ -6180,8 +6180,16 @@ This is an extended version of @code{gpgme_op_encrypt} with
 @var{recpstring} is not NULL, the latter is expected to be a linefeed
 delimited string with the set of key specifications.  In contrast to
 @var{recp} the keys are given directly as strings and there is no need
-to first create key objects.  The keys are passed verbatim to the
-backend engine.
+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.
 
 @end deftypefun
 
index 90e3b89..49a1c75 100644 (file)
@@ -1985,6 +1985,8 @@ append_args_from_recipients_string (engine_gpg_t gpg,
 {
   gpg_error_t err = 0;
   int any = 0;
+  int ignore = 0;
+  int hidden = 0;
   const char *s;
   int n;
 
@@ -2005,10 +2007,14 @@ append_args_from_recipients_string (engine_gpg_t gpg,
       while (n && (string[n-1] == ' ' || string[n-1] == '\t'))
         n--;
 
-      /* Add arg if it is not empty.  */
-      if (n)
+      if (!ignore && n == 2 && !memcmp (string, "--", 2))
+        ignore = 1;
+      else if (!ignore && n == 8 && !memcmp (string, "--hidden", 8))
+        hidden = 1;
+      else if (n)
         {
-          err = add_arg (gpg, "-r");
+          /* Add arg if it is not empty.  */
+          err = add_arg (gpg, hidden? "-R":"-r");
           if (!err)
             err = add_arg_recipient_string (gpg, flags, string, n);
           if (!err)