aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2005-05-28 20:10:38 +0000
committerMarcus Brinkmann <[email protected]>2005-05-28 20:10:38 +0000
commit3b346c52aabe5e0c19336a1c774e383e82a3d0ac (patch)
treefa9ed8c353f45f02993ae3de6c16e9b35f86eb81
parent(calc_sig_summary): Set the key revoked bit. (diff)
downloadgpgme-3b346c52aabe5e0c19336a1c774e383e82a3d0ac.tar.gz
gpgme-3b346c52aabe5e0c19336a1c774e383e82a3d0ac.zip
Merging bug-fixes from CVS HEAD.
-rw-r--r--NEWS19
-rw-r--r--THANKS1
-rw-r--r--TODO13
-rw-r--r--doc/ChangeLog11
-rw-r--r--doc/gpgme.texi5
-rw-r--r--gpgme/ChangeLog41
-rw-r--r--gpgme/data-user.c13
-rw-r--r--gpgme/engine-gpgsm.c24
-rw-r--r--gpgme/gpgme.c10
-rw-r--r--gpgme/gpgme.h3
-rw-r--r--gpgme/w32-io.c2
-rw-r--r--gpgme/wait-global.c18
12 files changed, 130 insertions, 30 deletions
diff --git a/NEWS b/NEWS
index c4541750..b8945ba3 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,23 @@
-Noteworthy changes in version 1.0.3
+Noteworthy changes in version 1.0.3 (unreleased)
------------------------------------------------
+ * 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
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
Noteworthy changes in version 1.0.2 (2004-12-28)
------------------------------------------------
diff --git a/THANKS b/THANKS
index 506c0e9c..4fda3d57 100644
--- a/THANKS
+++ b/THANKS
@@ -9,6 +9,7 @@ Albrecht Dre� [email protected]
Alfons Hoogervorst [email protected]
Enno Cramer [email protected]
Frank Heckenbach [email protected]
+Igor Belyi [email protected]
Jan-Oliver Wagner [email protected]
Johannes Poehlmann [email protected]
Jose C. Garc�a Sogo [email protected]
diff --git a/TODO b/TODO
index 673d18e4..04bec543 100644
--- a/TODO
+++ b/TODO
@@ -1,7 +1,6 @@
Hey Emacs, this is -*- outline -*- mode!
* Before release:
-** Switch to LGPL?
** Some gpg tests fail with gpg 1.3.4-cvs (gpg/t-keylist-sig)
The test is currently disabled there and in gpg/t-import.
** Add notation data to key signatures.
@@ -9,7 +8,8 @@ Hey Emacs, this is -*- outline -*- mode!
* ABI's to break:
** I/O and User Data could be made extensible. But this can be done
without breaking the ABI hopefully.
-* All enums that should be enums need to have a maximum value to ensure a certain minimum width for extensibility.
+* All enums that should be enums need to have a maximum value to ensure
+ a certain minimum width for extensibility.
** Compatibility interfaces that can be removed in future versions:
*** ath compatibility modules.
*** gpgme_data_new_from_filepart
@@ -28,6 +28,7 @@ Hey Emacs, this is -*- outline -*- mode!
*** gpgme_attr_t
*** All Gpgme* typedefs.
+
* Thread support:
** When GNU Pth supports sendmsg/recvmsg, wrap them properly.
** Without timegm (3) support our ISO time parser is not thread safe.
@@ -60,9 +61,6 @@ Hey Emacs, this is -*- outline -*- mode!
This allows us to handle years later than 2037 properly. With the
time_t interface they are all mapped to 2037-12-31
-* Support
-** gpgme.m4 should check --api-version of gpgme-config.
-
* Documentation
** Document validity and trust issues.
@@ -143,14 +141,13 @@ Hey Emacs, this is -*- outline -*- mode!
* Build suite
** Make sure everything is cleaned correctly (esp. test area).
-** Configure test for gpg and gpgsm version (as a warning).
** Enable AC_CONFIG_MACRO_DIR and bump up autoconf version requirement.
(To fix "./autogen.sh; ./configure --enable-maintainer-mode; touch
- configure.ac; make").
+ configure.ac; make"). Currently worked around with ACLOCAL_AMFLAGS???
* Error checking
** engine-gpgsm, with-validation
- Add error checking some time after releasing a new gpgsm.
+ Add error checking some time after releasing a new gpgsm.
Copyright 2004 g10 Code GmbH
diff --git a/doc/ChangeLog b/doc/ChangeLog
index b4217dcb..37d6f8ff 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,14 @@
+2005-05-28 Marcus Brinkmann <[email protected]>
+
+ * gpgme.texi (Key Listing Mode): Fix return type of
+ gpgme_set_keylist_mode.
+ Reported by "Sergio" <[email protected]>.
+
+2005-04-28 Marcus Brinkmann <[email protected]>
+
+ * gpgme.texi (Included Certificates): Document
+ GPGME_INCLUDE_CERTS_DEFAULT.
+
2004-12-07 Marcus Brinkmann <[email protected]>
* lesser.texi (Library Copying): Change from @appendixsec to
diff --git a/doc/gpgme.texi b/doc/gpgme.texi
index 957df64f..24a4c20f 100644
--- a/doc/gpgme.texi
+++ b/doc/gpgme.texi
@@ -1944,6 +1944,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
@@ -1974,7 +1977,7 @@ certificates to include into an S/MIME signed message.
@cindex key listing mode
@cindex key listing, mode of
-@deftypefun void gpgme_set_keylist_mode (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_keylist_mode_t @var{mode}})
+@deftypefun gpgme_error_t gpgme_set_keylist_mode (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_keylist_mode_t @var{mode}})
The function @code{gpgme_set_keylist_mode} changes the default
behaviour of the key listing functions. The value in @var{mode} is a
bitwise-or combination of one or multiple of the following bit values:
diff --git a/gpgme/ChangeLog b/gpgme/ChangeLog
index ac759a05..19d23a9b 100644
--- a/gpgme/ChangeLog
+++ b/gpgme/ChangeLog
@@ -1,7 +1,46 @@
+2005-05-28 Marcus Brinkmann <[email protected]>
+
+ * data-user.c: Include <errno.h>.
+
+2005-05-17 Marcus Brinkmann <[email protected]>
+
+ * gpgme.c (gpgme_new): Set the CTX->include_certs default to the
+ default.
+
+2005-05-11 Marcus Brinkmann <[email protected]>
+
+ * w32-io.c (_gpgme_io_select): Fix loop increment.
+
+2005-05-05 Marcus Brinkmann <[email protected]>
+
+ * data-user.c (user_release): Only call user hook if provided.
+ (user_seek): Return EBADF if no user hook is provided.
+ (user_read): Likewise.
+ (user_write): Likewise.
+
+2005-04-28 Marcus Brinkmann <[email protected]>
+
+ * 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 <[email protected]>
* verify.c (calc_sig_summary): Set the key revoked bit.
+2005-04-14 Marcus Brinkmann <[email protected]>
+
+ * wait-global.c (gpgme_wait): Use LI->ctx when checking a context
+ in the list, not the user-provided CTX.
+ Reported by Igor Belyi <[email protected]>.
+
+ * wait-global.c (gpgme_wait): If no context is found, and we
+ should not hang, set *status to 0 and return NULL.
+ Reported by Igor Belyi <[email protected]>.
+
2004-12-11 Marcus Brinkmann <[email protected]>
* util.h [HAVE_CONFIG_H && HAVE_TTYNAME_R] (ttyname_r): Define
@@ -4570,7 +4609,7 @@
* data.c (gpgme_data_rewind): Allow to rewind data_type_none.
- Copyright 2001, 2002, 2003, 2004 g10 Code GmbH
+ Copyright 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
This file is free software; as a special exception the author gives
unlimited permission to copy and/or distribute it, with or without
diff --git a/gpgme/data-user.c b/gpgme/data-user.c
index 8a71b885..f3deb32f 100644
--- a/gpgme/data-user.c
+++ b/gpgme/data-user.c
@@ -23,6 +23,7 @@
#endif
#include <sys/types.h>
+#include <errno.h>
#include "data.h"
@@ -30,6 +31,9 @@
static ssize_t
user_read (gpgme_data_t dh, void *buffer, size_t size)
{
+ if (!dh->data.user.cbs->read)
+ return EBADF;
+
return (*dh->data.user.cbs->read) (dh->data.user.handle, buffer, size);
}
@@ -37,6 +41,9 @@ user_read (gpgme_data_t dh, void *buffer, size_t size)
static ssize_t
user_write (gpgme_data_t dh, const void *buffer, size_t size)
{
+ if (!dh->data.user.cbs->write)
+ return EBADF;
+
return (*dh->data.user.cbs->write) (dh->data.user.handle, buffer, size);
}
@@ -44,6 +51,9 @@ user_write (gpgme_data_t dh, const void *buffer, size_t size)
static off_t
user_seek (gpgme_data_t dh, off_t offset, int whence)
{
+ if (!dh->data.user.cbs->seek)
+ return EBADF;
+
return (*dh->data.user.cbs->seek) (dh->data.user.handle, offset, whence);
}
@@ -51,7 +61,8 @@ user_seek (gpgme_data_t dh, off_t offset, int whence)
static void
user_release (gpgme_data_t dh)
{
- (*dh->data.user.cbs->release) (dh->data.user.handle);
+ if (dh->data.user.cbs->release)
+ (*dh->data.user.cbs->release) (dh->data.user.handle);
}
diff --git a/gpgme/engine-gpgsm.c b/gpgme/engine-gpgsm.c
index 7a71b5ab..804d8fc1 100644
--- a/gpgme/engine-gpgsm.c
+++ b/gpgme/engine-gpgsm.c
@@ -1,6 +1,6 @@
/* engine-gpgsm.c - GpgSM engine.
Copyright (C) 2000 Werner Koch (dd9jn)
- Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
+ Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
This file is part of GPGME.
@@ -1433,19 +1433,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 568194d2..d3eac1ff 100644
--- a/gpgme/gpgme.c
+++ b/gpgme/gpgme.c
@@ -52,7 +52,7 @@ gpgme_new (gpgme_ctx_t *r_ctx)
if (!ctx)
return gpg_error_from_errno (errno);
ctx->keylist_mode = GPGME_KEYLIST_MODE_LOCAL;
- ctx->include_certs = 1;
+ ctx->include_certs = GPGME_INCLUDE_CERTS_DEFAULT;
ctx->protocol = GPGME_PROTOCOL_OpenPGP;
_gpgme_fd_table_init (&ctx->fdt);
@@ -211,12 +211,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 88d7603a..b7ccedce 100644
--- a/gpgme/gpgme.h
+++ b/gpgme/gpgme.h
@@ -705,6 +705,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);
diff --git a/gpgme/w32-io.c b/gpgme/w32-io.c
index 5b64120b..5919343e 100644
--- a/gpgme/w32-io.c
+++ b/gpgme/w32-io.c
@@ -1085,7 +1085,7 @@ _gpgme_io_select ( struct io_select_fd_s *fds, size_t nfds, int nonblock )
int k, j = handle_to_fd (waitbuf[i]);
DEBUG1 ("WFMO invalid handle %d removed\n", j);
- for (k=0 ; k < nfds; i++ ) {
+ for (k=0 ; k < nfds; k++ ) {
if ( fds[k].fd == j ) {
fds[k].for_read = fds[k].for_write = 0;
goto restart;
diff --git a/gpgme/wait-global.c b/gpgme/wait-global.c
index 6d75d3d1..f3a5b430 100644
--- a/gpgme/wait-global.c
+++ b/gpgme/wait-global.c
@@ -1,6 +1,6 @@
/* wait-global.c
Copyright (C) 2000 Werner Koch (dd9jn)
- Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
+ Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
This file is part of GPGME.
@@ -331,13 +331,15 @@ gpgme_wait (gpgme_ctx_t ctx, gpgme_error_t *status, int hang)
LOCK (ctx_list_lock);
for (li = ctx_active_list; li; li = li->next)
{
- for (i = 0; i < ctx->fdt.size; i++)
- if (ctx->fdt.fds[i].fd != -1)
+ gpgme_ctx_t actx = li->ctx;
+
+ for (i = 0; i < actx->fdt.size; i++)
+ if (actx->fdt.fds[i].fd != -1)
break;
- if (i == ctx->fdt.size)
+ if (i == actx->fdt.size)
{
gpgme_error_t err = 0;
- _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_DONE, &err);
+ _gpgme_engine_io_event (actx->engine, GPGME_EVENT_DONE, &err);
}
}
UNLOCK (ctx_list_lock);
@@ -350,6 +352,12 @@ gpgme_wait (gpgme_ctx_t ctx, gpgme_error_t *status, int hang)
ctx = dctx;
hang = 0;
}
+ else if (!hang)
+ {
+ ctx = NULL;
+ if (status)
+ *status = 0;
+ }
}
}
while (hang);