aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2009-11-10 16:32:11 +0000
committerWerner Koch <[email protected]>2009-11-10 16:32:11 +0000
commitd173e6e010c3447c6ebb1a5999d2e128392ed341 (patch)
tree5088234997468f73c7470c6a6dfae6e4d8ae86dc
parentPass fdpassing flag to assuan_socket_connect. (diff)
downloadgpgme-d173e6e010c3447c6ebb1a5999d2e128392ed341.tar.gz
gpgme-d173e6e010c3447c6ebb1a5999d2e128392ed341.zip
Make recipients command work.
-rw-r--r--src/ChangeLog7
-rw-r--r--src/engine-gpgsm.c5
-rw-r--r--src/engine-uiserver.c20
-rw-r--r--src/op-support.c2
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;