Merging bug-fixes from CVS HEAD.

This commit is contained in:
Marcus Brinkmann 2005-05-28 20:10:38 +00:00
parent afc34f239c
commit 3b346c52aa
12 changed files with 130 additions and 30 deletions

19
NEWS
View File

@ -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) Noteworthy changes in version 1.0.2 (2004-12-28)
------------------------------------------------ ------------------------------------------------

1
THANKS
View File

@ -9,6 +9,7 @@ Albrecht Dre
Alfons Hoogervorst alfons@proteus.demon.nl Alfons Hoogervorst alfons@proteus.demon.nl
Enno Cramer uebergeek@web.de Enno Cramer uebergeek@web.de
Frank Heckenbach frank@g-n-u.de Frank Heckenbach frank@g-n-u.de
Igor Belyi gpgme@katehok.ac93.org
Jan-Oliver Wagner jan@intevation.de Jan-Oliver Wagner jan@intevation.de
Johannes Poehlmann jhp@caldera.de Johannes Poehlmann jhp@caldera.de
Jose C. García Sogo jose@jaimedelamo.eu.org Jose C. García Sogo jose@jaimedelamo.eu.org

11
TODO
View File

@ -1,7 +1,6 @@
Hey Emacs, this is -*- outline -*- mode! Hey Emacs, this is -*- outline -*- mode!
* Before release: * Before release:
** Switch to LGPL?
** Some gpg tests fail with gpg 1.3.4-cvs (gpg/t-keylist-sig) ** 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. The test is currently disabled there and in gpg/t-import.
** Add notation data to key signatures. ** Add notation data to key signatures.
@ -9,7 +8,8 @@ Hey Emacs, this is -*- outline -*- mode!
* ABI's to break: * ABI's to break:
** I/O and User Data could be made extensible. But this can be done ** I/O and User Data could be made extensible. But this can be done
without breaking the ABI hopefully. 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: ** Compatibility interfaces that can be removed in future versions:
*** ath compatibility modules. *** ath compatibility modules.
*** gpgme_data_new_from_filepart *** gpgme_data_new_from_filepart
@ -28,6 +28,7 @@ Hey Emacs, this is -*- outline -*- mode!
*** gpgme_attr_t *** gpgme_attr_t
*** All Gpgme* typedefs. *** All Gpgme* typedefs.
* Thread support: * Thread support:
** When GNU Pth supports sendmsg/recvmsg, wrap them properly. ** When GNU Pth supports sendmsg/recvmsg, wrap them properly.
** Without timegm (3) support our ISO time parser is not thread safe. ** 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 This allows us to handle years later than 2037 properly. With the
time_t interface they are all mapped to 2037-12-31 time_t interface they are all mapped to 2037-12-31
* Support
** gpgme.m4 should check --api-version of gpgme-config.
* Documentation * Documentation
** Document validity and trust issues. ** Document validity and trust issues.
@ -143,10 +141,9 @@ Hey Emacs, this is -*- outline -*- mode!
* Build suite * Build suite
** Make sure everything is cleaned correctly (esp. test area). ** 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. ** Enable AC_CONFIG_MACRO_DIR and bump up autoconf version requirement.
(To fix "./autogen.sh; ./configure --enable-maintainer-mode; touch (To fix "./autogen.sh; ./configure --enable-maintainer-mode; touch
configure.ac; make"). configure.ac; make"). Currently worked around with ACLOCAL_AMFLAGS???
* Error checking * Error checking
** engine-gpgsm, with-validation ** engine-gpgsm, with-validation

View File

@ -1,3 +1,14 @@
2005-05-28 Marcus Brinkmann <marcus@g10code.de>
* gpgme.texi (Key Listing Mode): Fix return type of
gpgme_set_keylist_mode.
Reported by "Sergio" <ml_sergico@virgilio.it>.
2005-04-28 Marcus Brinkmann <marcus@g10code.de>
* gpgme.texi (Included Certificates): Document
GPGME_INCLUDE_CERTS_DEFAULT.
2004-12-07 Marcus Brinkmann <marcus@g10code.de> 2004-12-07 Marcus Brinkmann <marcus@g10code.de>
* lesser.texi (Library Copying): Change from @appendixsec to * lesser.texi (Library Copying): Change from @appendixsec to

View File

@ -1944,6 +1944,9 @@ default, only the sender's certificate is included. The possible
values of @var{nr_of_certs} are: values of @var{nr_of_certs} are:
@table @code @table @code
@item GPGME_INCLUDE_CERTS_DEFAULT
Fall back to the default of the crypto backend. This is the default
for GPGME.
@item -2 @item -2
Include all certificates except the root certificate. Include all certificates except the root certificate.
@item -1 @item -1
@ -1974,7 +1977,7 @@ certificates to include into an S/MIME signed message.
@cindex key listing mode @cindex key listing mode
@cindex key listing, mode of @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 The function @code{gpgme_set_keylist_mode} changes the default
behaviour of the key listing functions. The value in @var{mode} is a 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: bitwise-or combination of one or multiple of the following bit values:

View File

@ -1,7 +1,46 @@
2005-05-28 Marcus Brinkmann <marcus@g10code.de>
* data-user.c: Include <errno.h>.
2005-05-17 Marcus Brinkmann <marcus@g10code.de>
* gpgme.c (gpgme_new): Set the CTX->include_certs default to the
default.
2005-05-11 Marcus Brinkmann <marcus@g10code.de>
* w32-io.c (_gpgme_io_select): Fix loop increment.
2005-05-05 Marcus Brinkmann <marcus@g10code.de>
* 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 <marcus@g10code.de>
* 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 <wk@g10code.com> 2005-04-21 Werner Koch <wk@g10code.com>
* verify.c (calc_sig_summary): Set the key revoked bit. * verify.c (calc_sig_summary): Set the key revoked bit.
2005-04-14 Marcus Brinkmann <marcus@g10code.de>
* wait-global.c (gpgme_wait): Use LI->ctx when checking a context
in the list, not the user-provided CTX.
Reported by Igor Belyi <gpgme@katehok.ac93.org>.
* 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 <gpgme@katehok.ac93.org>.
2004-12-11 Marcus Brinkmann <marcus@g10code.de> 2004-12-11 Marcus Brinkmann <marcus@g10code.de>
* util.h [HAVE_CONFIG_H && HAVE_TTYNAME_R] (ttyname_r): Define * 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. * 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 This file is free software; as a special exception the author gives
unlimited permission to copy and/or distribute it, with or without unlimited permission to copy and/or distribute it, with or without

View File

@ -23,6 +23,7 @@
#endif #endif
#include <sys/types.h> #include <sys/types.h>
#include <errno.h>
#include "data.h" #include "data.h"
@ -30,6 +31,9 @@
static ssize_t static ssize_t
user_read (gpgme_data_t dh, void *buffer, size_t size) 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); 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 static ssize_t
user_write (gpgme_data_t dh, const void *buffer, size_t size) 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); 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 static off_t
user_seek (gpgme_data_t dh, off_t offset, int whence) 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); return (*dh->data.user.cbs->seek) (dh->data.user.handle, offset, whence);
} }
@ -51,6 +61,7 @@ user_seek (gpgme_data_t dh, off_t offset, int whence)
static void static void
user_release (gpgme_data_t dh) user_release (gpgme_data_t dh)
{ {
if (dh->data.user.cbs->release)
(*dh->data.user.cbs->release) (dh->data.user.handle); (*dh->data.user.cbs->release) (dh->data.user.handle);
} }

View File

@ -1,6 +1,6 @@
/* engine-gpgsm.c - GpgSM engine. /* engine-gpgsm.c - GpgSM engine.
Copyright (C) 2000 Werner Koch (dd9jn) 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. This file is part of GPGME.
@ -1433,19 +1433,27 @@ gpgsm_sign (void *engine, gpgme_data_t in, gpgme_data_t out,
if (!gpgsm) if (!gpgsm)
return gpg_error (GPG_ERR_INV_VALUE); 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 /* We must send a reset because we need to reset the list of
signers. Note that RESET does not reset OPTION commands. */ signers. Note that RESET does not reset OPTION commands. */
err = gpgsm_assuan_simple_command (gpgsm->assuan_ctx, "RESET", NULL, NULL); err = gpgsm_assuan_simple_command (gpgsm->assuan_ctx, "RESET", NULL, NULL);
if (err) if (err)
return 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++) for (i = 0; (key = gpgme_signers_enum (ctx, i)); i++)
{ {
const char *s = key->subkeys ? key->subkeys->fpr : NULL; const char *s = key->subkeys ? key->subkeys->fpr : NULL;

View File

@ -52,7 +52,7 @@ gpgme_new (gpgme_ctx_t *r_ctx)
if (!ctx) if (!ctx)
return gpg_error_from_errno (errno); return gpg_error_from_errno (errno);
ctx->keylist_mode = GPGME_KEYLIST_MODE_LOCAL; ctx->keylist_mode = GPGME_KEYLIST_MODE_LOCAL;
ctx->include_certs = 1; ctx->include_certs = GPGME_INCLUDE_CERTS_DEFAULT;
ctx->protocol = GPGME_PROTOCOL_OpenPGP; ctx->protocol = GPGME_PROTOCOL_OpenPGP;
_gpgme_fd_table_init (&ctx->fdt); _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. /* 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 The default is GPGME_INCLUDE_CERTS_DEFAULT. -1 means all certs,
certs, and -2 means all certs except the root cert. */ and -2 means all certs except the root cert. */
void void
gpgme_set_include_certs (gpgme_ctx_t ctx, int nr_of_certs) 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; ctx->include_certs = -2;
else else
ctx->include_certs = nr_of_certs; ctx->include_certs = nr_of_certs;

View File

@ -705,6 +705,9 @@ void gpgme_set_textmode (gpgme_ctx_t ctx, int yes);
/* Return non-zero if text mode is set in CTX. */ /* Return non-zero if text mode is set in CTX. */
int gpgme_get_textmode (gpgme_ctx_t 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. */ /* 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); void gpgme_set_include_certs (gpgme_ctx_t ctx, int nr_of_certs);

View File

@ -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]); int k, j = handle_to_fd (waitbuf[i]);
DEBUG1 ("WFMO invalid handle %d removed\n", j); 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 ) { if ( fds[k].fd == j ) {
fds[k].for_read = fds[k].for_write = 0; fds[k].for_read = fds[k].for_write = 0;
goto restart; goto restart;

View File

@ -1,6 +1,6 @@
/* wait-global.c /* wait-global.c
Copyright (C) 2000 Werner Koch (dd9jn) 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. 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); LOCK (ctx_list_lock);
for (li = ctx_active_list; li; li = li->next) for (li = ctx_active_list; li; li = li->next)
{ {
for (i = 0; i < ctx->fdt.size; i++) gpgme_ctx_t actx = li->ctx;
if (ctx->fdt.fds[i].fd != -1)
for (i = 0; i < actx->fdt.size; i++)
if (actx->fdt.fds[i].fd != -1)
break; break;
if (i == ctx->fdt.size) if (i == actx->fdt.size)
{ {
gpgme_error_t err = 0; 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); UNLOCK (ctx_list_lock);
@ -350,6 +352,12 @@ gpgme_wait (gpgme_ctx_t ctx, gpgme_error_t *status, int hang)
ctx = dctx; ctx = dctx;
hang = 0; hang = 0;
} }
else if (!hang)
{
ctx = NULL;
if (status)
*status = 0;
}
} }
} }
while (hang); while (hang);