From d173e6e010c3447c6ebb1a5999d2e128392ed341 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Tue, 10 Nov 2009 16:32:11 +0000 Subject: [PATCH] Make recipients command work. --- src/ChangeLog | 7 +++++++ src/engine-gpgsm.c | 5 ++--- src/engine-uiserver.c | 20 ++++++++++---------- src/op-support.c | 2 ++ 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 9c9fffa..31cd1b0 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,7 +1,14 @@ 2009-11-10 Werner Koch + * 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 diff --git a/src/engine-gpgsm.c b/src/engine-gpgsm.c index d2670d6..32294b0 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 cdcf683..623dd59 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 8dfe15d..df54fc4 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; -- 2.26.2