diff options
Diffstat (limited to '')
| -rw-r--r-- | src/engine-gpg.c | 2 | ||||
| -rw-r--r-- | src/engine-gpgsm.c | 40 | 
2 files changed, 26 insertions, 16 deletions
| diff --git a/src/engine-gpg.c b/src/engine-gpg.c index 31d219a3..dc2d9455 100644 --- a/src/engine-gpg.c +++ b/src/engine-gpg.c @@ -2075,6 +2075,8 @@ append_args_from_recipients_string (engine_gpg_t gpg,            file = 0;            flags = orig_flags;          } +      else if (!ignore && n > 2 && !memcmp (string, "--", 2)) +        err = gpg_error (GPG_ERR_UNKNOWN_OPTION);        else if (n) /* Not empty - use it.  */          {            err = add_arg (gpg, file? (hidden? "-F":"-f") : (hidden? "-R":"-r")); diff --git a/src/engine-gpgsm.c b/src/engine-gpgsm.c index d20da655..62920473 100644 --- a/src/engine-gpgsm.c +++ b/src/engine-gpgsm.c @@ -1407,11 +1407,12 @@ set_recipients_from_string (engine_gpgsm_t gpgsm, const char *string)  {    gpg_error_t err = 0;    char *line = NULL; -  int no_pubkey = 0; +  int ignore = 0; +  int any = 0;    const char *s;    int n; -  for (;;) +  do      {        while (*string == ' ' || *string == '\t')          string++; @@ -1426,25 +1427,32 @@ set_recipients_from_string (engine_gpgsm_t gpgsm, const char *string)        while (n && (string[n-1] == ' ' || string[n-1] == '\t'))          n--; -      gpgrt_free (line); -      if (gpgrt_asprintf (&line, "RECIPIENT %.*s", n, string) < 0) +      if (!ignore && n == 2 && !memcmp (string, "--", 2)) +        ignore = 1; +      else if (!ignore && n > 2 && !memcmp (string, "--", 2)) +        err = gpg_error (GPG_ERR_UNKNOWN_OPTION); +      else if (n) /* Not empty - use it.  */          { -          err = gpg_error_from_syserror (); -          break; +          gpgrt_free (line); +          if (gpgrt_asprintf (&line, "RECIPIENT %.*s", n, string) < 0) +            err = gpg_error_from_syserror (); +          else +            { +              err = gpgsm_assuan_simple_command (gpgsm, line, gpgsm->status.fnc, +                                                 gpgsm->status.fnc_value); +              if (!err) +                any = 1; +            }          } -      string += n + !!s; - -      err = gpgsm_assuan_simple_command (gpgsm, line, gpgsm->status.fnc, -					 gpgsm->status.fnc_value); -      /* Fixme: Improve error reporting.  */ -      if (gpg_err_code (err) == GPG_ERR_NO_PUBKEY) -	no_pubkey++; -      else if (err) -        break; +      string += n + !!s;      } +  while (!err); + +  if (!err && !any) +    err = gpg_error (GPG_ERR_MISSING_KEY);    gpgrt_free (line); -  return err? err : no_pubkey? gpg_error (GPG_ERR_NO_PUBKEY) : 0; +  return err;  } | 
