diff options
Diffstat (limited to '')
| -rw-r--r-- | src/ChangeLog | 7 | ||||
| -rw-r--r-- | src/engine-gpgsm.c | 5 | ||||
| -rw-r--r-- | src/engine-uiserver.c | 20 | ||||
| -rw-r--r-- | src/op-support.c | 2 | 
4 files changed, 21 insertions, 13 deletions
| diff --git a/src/ChangeLog b/src/ChangeLog index 9c9fffaa..31cd1b0f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,7 +1,14 @@  2009-11-10  Werner Koch  <[email protected]> +	* op-support.c (_gpgme_op_reset): Ignore GPG_ERR_NOT_IMPLEMENTED +	while setting the sub protocol. +  	* engine-uiserver.c (uiserver_new): Pass fdpassing flag to  	assuan_socket_connect. +	(set_recipients): Replace fingerprint by user id. + +	* engine-gpgsm.c (set_recipients): Fix non-terminating loop in +	case of a missing key.  2009-11-10  Marcus Brinkmann  <[email protected]> diff --git a/src/engine-gpgsm.c b/src/engine-gpgsm.c index d2670d6f..32294b0b 100644 --- a/src/engine-gpgsm.c +++ b/src/engine-gpgsm.c @@ -1161,14 +1161,14 @@ set_recipients (engine_gpgsm_t gpgsm, gpgme_key_t recp[])    char *line;    int linelen;    int invalid_recipients = 0; -  int i = 0; +  int i;    linelen = 10 + 40 + 1;	/* "RECIPIENT " + guess + '\0'.  */    line = malloc (10 + 40 + 1);    if (!line)      return gpg_error_from_errno (errno);    strcpy (line, "RECIPIENT "); -  while (!err && recp[i]) +  for (i =0; !err && recp[i]; i++)      {        char *fpr;        int newlen; @@ -1205,7 +1205,6 @@ set_recipients (engine_gpgsm_t gpgsm, gpgme_key_t recp[])  	  free (line);  	  return err;  	} -      i++;      }    free (line);    return gpg_error (invalid_recipients diff --git a/src/engine-uiserver.c b/src/engine-uiserver.c index cdcf683e..623dd593 100644 --- a/src/engine-uiserver.c +++ b/src/engine-uiserver.c @@ -1011,26 +1011,26 @@ set_recipients (engine_uiserver_t uiserver, gpgme_key_t recp[])    char *line;    int linelen;    int invalid_recipients = 0; -  int i = 0; +  int i;    linelen = 10 + 40 + 1;	/* "RECIPIENT " + guess + '\0'.  */    line = malloc (10 + 40 + 1);    if (!line)      return gpg_error_from_errno (errno);    strcpy (line, "RECIPIENT "); -  while (!err && recp[i]) +  for (i=0; !err && recp[i]; i++)      { -      char *fpr; +      char *uid;        int newlen; -      if (!recp[i]->subkeys || !recp[i]->subkeys->fpr) +      /* We use only the first user ID of the key.  */ +      if (!recp[i]->uids || !(uid=recp[i]->uids->uid) || !*uid)  	{  	  invalid_recipients++;  	  continue;  	} -      fpr = recp[i]->subkeys->fpr; -      newlen = 11 + strlen (fpr); +      newlen = 11 + strlen (uid);        if (linelen < newlen)  	{  	  char *newline = realloc (line, newlen); @@ -1043,11 +1043,12 @@ set_recipients (engine_uiserver_t uiserver, gpgme_key_t recp[])  	  line = newline;  	  linelen = newlen;  	} -      strcpy (&line[10], fpr); +      /* FIXME: need to do proper escaping  */ +      strcpy (&line[10], uid);        err = uiserver_assuan_simple_command (ctx, line, uiserver->status.fnc, -					 uiserver->status.fnc_value); -      /* FIXME: This requires more work.  */ +                                            uiserver->status.fnc_value); +      /* FIXME: This might requires more work.  */        if (gpg_err_code (err) == GPG_ERR_NO_PUBKEY)  	invalid_recipients++;        else if (err) @@ -1055,7 +1056,6 @@ set_recipients (engine_uiserver_t uiserver, gpgme_key_t recp[])  	  free (line);  	  return err;  	} -      i++;      }    free (line);    return gpg_error (invalid_recipients diff --git a/src/op-support.c b/src/op-support.c index 8dfe15d7..df54fc4d 100644 --- a/src/op-support.c +++ b/src/op-support.c @@ -131,6 +131,8 @@ _gpgme_op_reset (gpgme_ctx_t ctx, int type)      }    err = _gpgme_engine_set_protocol (ctx->engine, ctx->sub_protocol); +  if (gpg_err_code (err) == GPG_ERR_NOT_IMPLEMENTED) +    err = 0;    if (err)      return err; | 
