From 02a1dbee30e990b25dae67fe3406dbac1463f509 Mon Sep 17 00:00:00 2001 From: Marcus Brinkmann Date: Thu, 28 Apr 2005 16:11:34 +0000 Subject: [PATCH] doc/ 2005-04-28 Marcus Brinkmann * gpgme.texi (Included Certificates): Document GPGME_INCLUDE_CERTS_DEFAULT. gpgme/ 2005-04-28 Marcus Brinkmann * gpgme.h (GPGME_INCLUDE_CERTS_DEFAULT): New macro. * engine-gpgsm.c (gpgsm_sign): Send the include-certs option after the reset, just for cleanliness, and do not sent it at all if the default is requested. * gpgme.c (gpgme_set_include_certs): Allow to use GPGME_INCLUDE_CERTS_DEFAULT. --- NEWS | 11 +++++++++++ doc/ChangeLog | 5 +++++ doc/gpgme.texi | 3 +++ gpgme/ChangeLog | 9 +++++++++ gpgme/engine-gpgsm.c | 22 +++++++++++++++------- gpgme/gpgme.c | 8 +++++--- gpgme/gpgme.h | 3 +++ 7 files changed, 51 insertions(+), 10 deletions(-) diff --git a/NEWS b/NEWS index 221ec476..431b1e19 100644 --- a/NEWS +++ b/NEWS @@ -4,10 +4,21 @@ Noteworthy changes in version 1.1.0 (unreleased) * You can now configure the backend engine file name and home directory to be used, as default and per context. + * Previousy, GPGME would use a default "include certs" of 1. This + has been changed. Now GPGME will use the crypto backend engines + default unless you set the value with gpgme_set_include_certs() + explicitely. A new macro GPGME_INCLUDE_CERTS_DEFAULT can be used + as a value to explicitely request the new default behaviour. + + Because the default changes, this is a slight change of the API + semantics. We consider it to be a bug fix. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gpgme_set_engine_info NEW gpgme_ctx_get_engine_info NEW gpgme_ctx_set_engine_info NEW +gpgme_set_include_certs CHANGED DEFAULT +GPGME_INCLUDE_CERTS_DEFAULT NEW ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/ChangeLog b/doc/ChangeLog index d53f017b..5061d3a3 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2005-04-28 Marcus Brinkmann + + * gpgme.texi (Included Certificates): Document + GPGME_INCLUDE_CERTS_DEFAULT. + 2005-01-12 Marcus Brinkmann * gpgme.texi (Engine Configuration): New section. diff --git a/doc/gpgme.texi b/doc/gpgme.texi index f68b41be..9c6b42fb 100644 --- a/doc/gpgme.texi +++ b/doc/gpgme.texi @@ -2028,6 +2028,9 @@ default, only the sender's certificate is included. The possible values of @var{nr_of_certs} are: @table @code +@item GPGME_INCLUDE_CERTS_DEFAULT +Fall back to the default of the crypto backend. This is the default +for GPGME. @item -2 Include all certificates except the root certificate. @item -1 diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog index 0a4a9ae2..275db84b 100644 --- a/gpgme/ChangeLog +++ b/gpgme/ChangeLog @@ -1,3 +1,12 @@ +2005-04-28 Marcus Brinkmann + + * gpgme.h (GPGME_INCLUDE_CERTS_DEFAULT): New macro. + * engine-gpgsm.c (gpgsm_sign): Send the include-certs option after + the reset, just for cleanliness, and do not sent it at all if the + default is requested. + * gpgme.c (gpgme_set_include_certs): Allow to use + GPGME_INCLUDE_CERTS_DEFAULT. + 2005-04-21 Werner Koch * verify.c (calc_sig_summary): Set the key revoked bit. diff --git a/gpgme/engine-gpgsm.c b/gpgme/engine-gpgsm.c index ea6ccc74..c96be888 100644 --- a/gpgme/engine-gpgsm.c +++ b/gpgme/engine-gpgsm.c @@ -1437,19 +1437,27 @@ gpgsm_sign (void *engine, gpgme_data_t in, gpgme_data_t out, if (!gpgsm) return gpg_error (GPG_ERR_INV_VALUE); - if (asprintf (&assuan_cmd, "OPTION include-certs %i", include_certs) < 0) - return gpg_error_from_errno (errno); - err = gpgsm_assuan_simple_command (gpgsm->assuan_ctx, assuan_cmd, NULL,NULL); - free (assuan_cmd); - if (err) - return err; - /* We must send a reset because we need to reset the list of signers. Note that RESET does not reset OPTION commands. */ err = gpgsm_assuan_simple_command (gpgsm->assuan_ctx, "RESET", NULL, NULL); if (err) return err; + if (include_certs != GPGME_INCLUDE_CERTS_DEFAULT) + { + /* FIXME: Make sure that if we run multiple operations, that we + can reset any previously set value in case the default is + requested. */ + + if (asprintf (&assuan_cmd, "OPTION include-certs %i", include_certs) < 0) + return gpg_error_from_errno (errno); + err = gpgsm_assuan_simple_command (gpgsm->assuan_ctx, assuan_cmd, + NULL, NULL); + free (assuan_cmd); + if (err) + return err; + } + for (i = 0; (key = gpgme_signers_enum (ctx, i)); i++) { const char *s = key->subkeys ? key->subkeys->fpr : NULL; diff --git a/gpgme/gpgme.c b/gpgme/gpgme.c index 9e5171c9..5eb40bea 100644 --- a/gpgme/gpgme.c +++ b/gpgme/gpgme.c @@ -222,12 +222,14 @@ gpgme_get_textmode (gpgme_ctx_t ctx) /* Set the number of certifications to include in an S/MIME message. - The default is 1 (only the cert of the sender). -1 means all - certs, and -2 means all certs except the root cert. */ + The default is GPGME_INCLUDE_CERTS_DEFAULT. -1 means all certs, + and -2 means all certs except the root cert. */ void gpgme_set_include_certs (gpgme_ctx_t ctx, int nr_of_certs) { - if (nr_of_certs < -2) + if (nr_of_certs == GPGME_INCLUDE_CERTS_DEFAULT) + ctx->include_certs = GPGME_INCLUDE_CERTS_DEFAULT; + else if (nr_of_certs < -2) ctx->include_certs = -2; else ctx->include_certs = nr_of_certs; diff --git a/gpgme/gpgme.h b/gpgme/gpgme.h index 3db2d972..c3f5123b 100644 --- a/gpgme/gpgme.h +++ b/gpgme/gpgme.h @@ -706,6 +706,9 @@ void gpgme_set_textmode (gpgme_ctx_t ctx, int yes); /* Return non-zero if text mode is set in CTX. */ int gpgme_get_textmode (gpgme_ctx_t ctx); +/* Use whatever the default of the backend crypto engine is. */ +#define GPGME_INCLUDE_CERTS_DEFAULT -256 + /* Include up to NR_OF_CERTS certificates in an S/MIME message. */ void gpgme_set_include_certs (gpgme_ctx_t ctx, int nr_of_certs);