-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 NotDashEscaped: You need GnuPG to verify this message This is a patch file to create version 1.1.1 from 1.1.0. Please check the signature of this patch file: zcat somepath/gpgme-1.1.0-1.1.1.diff.gz | gpg --verify Change to directory gpgme-1.1.0 (or however you renamed it) and give this command: zcat somepath/gpgme-1.1.0-1.1.1.diff.gz | patch -p1 It is a good idea to rename your current directory to gpgme-1.1.1 now. diff -urpNP gpgme-1.1.0/VERSION gpgme-1.1.1/VERSION --- gpgme-1.1.0/VERSION 2005-10-01 21:15:18.000000000 +0000 +++ gpgme-1.1.1/VERSION 2006-02-23 16:35:52.000000000 +0000 @@ -1 +1 @@ -1.1.0 +1.1.1 diff -urpNP gpgme-1.1.0/ChangeLog gpgme-1.1.1/ChangeLog --- gpgme-1.1.0/ChangeLog 2005-10-01 21:13:02.000000000 +0000 +++ gpgme-1.1.1/ChangeLog 2006-02-22 11:39:48.000000000 +0000 @@ -1,3 +1,49 @@ +2006-02-22 Marcus Brinkmann + + Released 1.1.1. + + * configure.ac (LIBGPGME_LT_CURRENT, LIBGPGME_LT_AGE): Bump for + release. + (LIBGPGME_LT_REVISION): Reset to 0 for release. + +2006-01-05 Werner Koch + + * configure.ac: Test for inline feature. + (AH_BOTTOM): New to define the pure attribute. + +2006-01-03 Werner Koch + + * configure.ac: Append SVN revision to the version. + +2005-11-18 Werner Koch + + * configure.ac (BUILD_REVISION): New. + +2005-11-17 Marcus Brinkmann + + * configure.ac: Add support for --enable-w32-glib (disabled by + default). Invoke AM_PATH_GLIB_2_0. + +2005-11-16 Werner Koch + + * configure.ac (CFLAGS) [W32]: Make sure that -mms-bitfields are used. + +2005-11-15 Werner Koch + + * configure.ac: Create BUILD_FILEVERSION from SVN Revision. + + * autogen.sh [W32]: Build shared and static versions of the library. + +2005-10-20 Marcus Brinkmann + + * w32-dll/ChangeLog, w32-dll/build-dll, w32-dll/gpgme.def: Remove + files. + + * configure.ac: Instead checking for windres and dlltool, invoke + AC_LIBTOOL_WIN32_DLL and AC_LIBTOOL_RC. + * src/Makefile.am [HAVE_W32_SYSTEM]: Use libtool, which simplifies + the rules. + 2005-10-01 Marcus Brinkmann Released 1.1.0. diff -urpNP gpgme-1.1.0/Makefile.in gpgme-1.1.1/Makefile.in --- gpgme-1.1.0/Makefile.in 2005-10-01 21:13:48.000000000 +0000 +++ gpgme-1.1.1/Makefile.in 2006-02-23 16:09:50.000000000 +0000 @@ -62,10 +62,10 @@ DIST_COMMON = README $(am__configure_dep config.sub depcomp install-sh ltmain.sh missing mkinstalldirs subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/glibc21.m4 \ - $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/pth.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/glib-2.0.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gpg-error.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/pth.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ @@ -100,6 +100,7 @@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -109,7 +110,10 @@ BUILD_ASSUAN_TRUE = @BUILD_ASSUAN_TRUE@ BUILD_COMPLUS_FALSE = @BUILD_COMPLUS_FALSE@ BUILD_COMPLUS_TRUE = @BUILD_COMPLUS_TRUE@ BUILD_FILEVERSION = @BUILD_FILEVERSION@ +BUILD_REVISION = @BUILD_REVISION@ BUILD_TIMESTAMP = @BUILD_TIMESTAMP@ +BUILD_W32_GLIB_FALSE = @BUILD_W32_GLIB_FALSE@ +BUILD_W32_GLIB_TRUE = @BUILD_W32_GLIB_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -132,6 +136,11 @@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ GPG = @GPG@ GPGME_CONFIG_API_VERSION = @GPGME_CONFIG_API_VERSION@ GPGME_CONFIG_CFLAGS = @GPGME_CONFIG_CFLAGS@ @@ -170,6 +179,7 @@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -178,11 +188,13 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ PTH_CFLAGS = @PTH_CFLAGS@ PTH_CPPFLAGS = @PTH_CPPFLAGS@ PTH_LDFLAGS = @PTH_LDFLAGS@ PTH_LIBS = @PTH_LIBS@ RANLIB = @RANLIB@ +RC = @RC@ RUN_GPGSM_TESTS_FALSE = @RUN_GPGSM_TESTS_FALSE@ RUN_GPGSM_TESTS_TRUE = @RUN_GPGSM_TESTS_TRUE@ RUN_GPG_TESTS_FALSE = @RUN_GPG_TESTS_FALSE@ @@ -191,15 +203,16 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ -WINDRES = @WINDRES@ ac_ct_AR = @ac_ct_AR@ +ac_ct_AS = @ac_ct_AS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DLLTOOL = @ac_ct_DLLTOOL@ ac_ct_F77 = @ac_ct_F77@ +ac_ct_OBJDUMP = @ac_ct_OBJDUMP@ ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_RC = @ac_ct_RC@ ac_ct_STRIP = @ac_ct_STRIP@ -ac_ct_WINDRES = @ac_ct_WINDRES@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ diff -urpNP gpgme-1.1.0/NEWS gpgme-1.1.1/NEWS --- gpgme-1.1.0/NEWS 2005-10-01 21:13:02.000000000 +0000 +++ gpgme-1.1.1/NEWS 2006-02-23 16:05:37.000000000 +0000 @@ -1,3 +1,40 @@ +Noteworthy changes in version 1.1.1 (2006-02-23) +------------------------------------------------ + + * Fixed a bug in that the fingerprints of subkeys are not available. + + * Clarified usage of the SECRET flag in key listings. It is now + reset for stub keys. + + * Reading signature notations and policy URLs on key signatures is + supported. They can be found in the new field notations of the + gpgme_key_sig_t structure. This has to be enabled with the keylist + mode flag GPGME_KEYLIST_MODE_SIG_NOTATIONS. + + * A new gpgme_free() function solves the problem of using different + allocators in a single program. This function should now be used + instead calling free() to release the buffer returned by + gpgme_data_release_and_get_mem. It is recommended that you always + do this, but it is only necessary on certain platforms, so backwards + compatibility is provided. In other words: If free() worked for + you before, it will keep working. + + * New status codes GPGME_PKA_TRUST_GOOD and GPGME_PKA_TRUST_BAD. + They are analyzed by the verify handlers and made available in the + new PKA_TRUST and PKA_ADDRESS fields of the signature result structure. + + * Interface changes relative to the 1.1.0 release: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +gpgme_key_sig_t EXTENDED: New field notations. +GPGME_KEYLIST_MODE_SIG_NOTATIONS NEW +gpgme_free NEW +GPGME_STATUS_PKA_TRUST_BAD NEW +GPGME_STATUS_PKA_TRUST_GOOD NEW +gpgme_signature_t EXTENDED: New field pka_trust. +gpgme_signature_t EXTENDED: New field pka_address. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Noteworthy changes in version 1.1.0 (2005-10-01) ------------------------------------------------ diff -urpNP gpgme-1.1.0/TODO gpgme-1.1.1/TODO --- gpgme-1.1.0/TODO 2005-10-01 20:33:52.000000000 +0000 +++ gpgme-1.1.1/TODO 2006-02-22 11:27:27.000000000 +0000 @@ -3,7 +3,8 @@ Hey Emacs, this is -*- outline -*- mode! * Before release: ** 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. +** When gpg supports it, write binary subpackets directly, + and parse SUBPACKET status lines. * ABI's to break: ** gpgme_edit_cb_t: Add "processed" return argument @@ -68,6 +69,7 @@ Hey Emacs, this is -*- outline -*- mode! * Documentation ** Document validity and trust issues. +** In gpgme.texi: Register callbacks under the right letter in the index. * Engines ** Do not create/destroy engines, but create engine and then reset it. @@ -76,7 +78,7 @@ Hey Emacs, this is -*- outline -*- mode! release everything properly at a reset and at an error. Think hard about where to guarantee what (ie, what happens if start fails, are the fds unregistered immediately - i think so?) -** Optimize the case where a data object has an underlying fd we can pass +** Optimize the case where a data object has 0an underlying fd we can pass directly to the engine. This will be automatic with socket I/O and descriptor passing. ** Move code common to all engines up from gpg to engine. @@ -125,7 +127,7 @@ Hey Emacs, this is -*- outline -*- mode! *** Test gpgme_data_seek for invalid types. ** t-keylist Write a test for ext_keylist. - +** Test reading key signatures. * Debug ** Handle malloc and vasprintf errors. But decide first if they should be diff -urpNP gpgme-1.1.0/aclocal.m4 gpgme-1.1.1/aclocal.m4 diff -urpNP gpgme-1.1.0/aclocal.m4 gpgme-1.1.1/aclocal.m4 --- gpgme-1.1.0/aclocal.m4 2005-10-01 21:13:38.000000000 +0000 +++ gpgme-1.1.1/aclocal.m4 2006-02-23 16:09:43.000000000 +0000 @@ -889,6 +889,7 @@ AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +m4_include([m4/glib-2.0.m4]) m4_include([m4/glibc21.m4]) m4_include([m4/gpg-error.m4]) m4_include([m4/libtool.m4]) diff -urpNP gpgme-1.1.0/assuan/Makefile.in gpgme-1.1.1/assuan/Makefile.in --- gpgme-1.1.0/assuan/Makefile.in 2005-10-01 21:13:44.000000000 +0000 +++ gpgme-1.1.1/assuan/Makefile.in 2006-02-23 16:09:48.000000000 +0000 @@ -58,10 +58,10 @@ host_triplet = @host@ subdir = assuan DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/glibc21.m4 \ - $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/pth.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/glib-2.0.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gpg-error.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/pth.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -99,6 +99,7 @@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -108,7 +109,10 @@ BUILD_ASSUAN_TRUE = @BUILD_ASSUAN_TRUE@ BUILD_COMPLUS_FALSE = @BUILD_COMPLUS_FALSE@ BUILD_COMPLUS_TRUE = @BUILD_COMPLUS_TRUE@ BUILD_FILEVERSION = @BUILD_FILEVERSION@ +BUILD_REVISION = @BUILD_REVISION@ BUILD_TIMESTAMP = @BUILD_TIMESTAMP@ +BUILD_W32_GLIB_FALSE = @BUILD_W32_GLIB_FALSE@ +BUILD_W32_GLIB_TRUE = @BUILD_W32_GLIB_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -131,6 +135,11 @@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ GPG = @GPG@ GPGME_CONFIG_API_VERSION = @GPGME_CONFIG_API_VERSION@ GPGME_CONFIG_CFLAGS = @GPGME_CONFIG_CFLAGS@ @@ -169,6 +178,7 @@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -177,11 +187,13 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ PTH_CFLAGS = @PTH_CFLAGS@ PTH_CPPFLAGS = @PTH_CPPFLAGS@ PTH_LDFLAGS = @PTH_LDFLAGS@ PTH_LIBS = @PTH_LIBS@ RANLIB = @RANLIB@ +RC = @RC@ RUN_GPGSM_TESTS_FALSE = @RUN_GPGSM_TESTS_FALSE@ RUN_GPGSM_TESTS_TRUE = @RUN_GPGSM_TESTS_TRUE@ RUN_GPG_TESTS_FALSE = @RUN_GPG_TESTS_FALSE@ @@ -190,15 +202,16 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ -WINDRES = @WINDRES@ ac_ct_AR = @ac_ct_AR@ +ac_ct_AS = @ac_ct_AS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DLLTOOL = @ac_ct_DLLTOOL@ ac_ct_F77 = @ac_ct_F77@ +ac_ct_OBJDUMP = @ac_ct_OBJDUMP@ ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_RC = @ac_ct_RC@ ac_ct_STRIP = @ac_ct_STRIP@ -ac_ct_WINDRES = @ac_ct_WINDRES@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ diff -urpNP gpgme-1.1.0/autogen.sh gpgme-1.1.1/autogen.sh --- gpgme-1.1.0/autogen.sh 2005-09-08 14:42:33.000000000 +0000 +++ gpgme-1.1.1/autogen.sh 2005-11-18 23:03:28.000000000 +0000 @@ -75,8 +75,9 @@ if test "$1" = "--build-w32"; then ./configure --enable-maintainer-mode --prefix=${w32root} \ --host=i586-mingw32msvc --build=${build} \ - --with-gpg-error-prefix=${w32root} \ - --disable-shared --without-gpgsm + --with-gpg-error-prefix=${w32root} --without-gpgsm \ + --enable-shared --enable-static --enable-w32-glib \ + PKG_CONFIG_LIBDIR="$w32root/lib/pkgconfig" exit $? fi diff -urpNP gpgme-1.1.0/complus/Makefile.in gpgme-1.1.1/complus/Makefile.in --- gpgme-1.1.0/complus/Makefile.in 2005-10-01 21:13:45.000000000 +0000 +++ gpgme-1.1.1/complus/Makefile.in 2006-02-23 16:09:49.000000000 +0000 @@ -60,10 +60,10 @@ subdir = complus DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ ChangeLog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/glibc21.m4 \ - $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/pth.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/glib-2.0.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gpg-error.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/pth.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -100,6 +100,7 @@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -109,7 +110,10 @@ BUILD_ASSUAN_TRUE = @BUILD_ASSUAN_TRUE@ BUILD_COMPLUS_FALSE = @BUILD_COMPLUS_FALSE@ BUILD_COMPLUS_TRUE = @BUILD_COMPLUS_TRUE@ BUILD_FILEVERSION = @BUILD_FILEVERSION@ +BUILD_REVISION = @BUILD_REVISION@ BUILD_TIMESTAMP = @BUILD_TIMESTAMP@ +BUILD_W32_GLIB_FALSE = @BUILD_W32_GLIB_FALSE@ +BUILD_W32_GLIB_TRUE = @BUILD_W32_GLIB_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -132,6 +136,11 @@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ GPG = @GPG@ GPGME_CONFIG_API_VERSION = @GPGME_CONFIG_API_VERSION@ GPGME_CONFIG_CFLAGS = @GPGME_CONFIG_CFLAGS@ @@ -170,6 +179,7 @@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -178,11 +188,13 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ PTH_CFLAGS = @PTH_CFLAGS@ PTH_CPPFLAGS = @PTH_CPPFLAGS@ PTH_LDFLAGS = @PTH_LDFLAGS@ PTH_LIBS = @PTH_LIBS@ RANLIB = @RANLIB@ +RC = @RC@ RUN_GPGSM_TESTS_FALSE = @RUN_GPGSM_TESTS_FALSE@ RUN_GPGSM_TESTS_TRUE = @RUN_GPGSM_TESTS_TRUE@ RUN_GPG_TESTS_FALSE = @RUN_GPG_TESTS_FALSE@ @@ -191,15 +203,16 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ -WINDRES = @WINDRES@ ac_ct_AR = @ac_ct_AR@ +ac_ct_AS = @ac_ct_AS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DLLTOOL = @ac_ct_DLLTOOL@ ac_ct_F77 = @ac_ct_F77@ +ac_ct_OBJDUMP = @ac_ct_OBJDUMP@ ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_RC = @ac_ct_RC@ ac_ct_STRIP = @ac_ct_STRIP@ -ac_ct_WINDRES = @ac_ct_WINDRES@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ diff -urpNP gpgme-1.1.0/config.h.in gpgme-1.1.1/config.h.in --- gpgme-1.1.0/config.h.in 2005-10-01 21:13:41.000000000 +0000 +++ gpgme-1.1.1/config.h.in 2006-02-23 16:09:45.000000000 +0000 @@ -176,5 +176,20 @@ # define _REENTRANT 1 #endif +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + /* Define to `long' if does not define. */ #undef off_t + + +/* Definition of GCC specific attributes. */ +#if __GNUC__ > 2 +# define GPGME_GCC_A_PURE __attribute__ ((__pure__)) +#else +# define GPGME_GCC_A_PURE +#endif + diff -urpNP gpgme-1.1.0/configure gpgme-1.1.1/configure --- gpgme-1.1.0/configure 2005-10-01 21:13:49.000000000 +0000 +++ gpgme-1.1.1/configure 2006-02-23 16:09:51.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for gpgme 1.1.0. +# Generated by GNU Autoconf 2.59 for gpgme 1.1.1. # # Report bugs to . # @@ -243,6 +243,8 @@ IFS=" $as_nl" $as_unset CDPATH +tagnames=${tagnames+${tagnames},}RC + # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} @@ -423,8 +425,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='gpgme' PACKAGE_TARNAME='gpgme' -PACKAGE_VERSION='1.1.0' -PACKAGE_STRING='gpgme 1.1.0' +PACKAGE_VERSION='1.1.1' +PACKAGE_STRING='gpgme 1.1.1' PACKAGE_BUGREPORT='bug-gpgme@gnupg.org' ac_unique_file="gpgme/gpgme.h" @@ -465,7 +467,7 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE DLLTOOL ac_ct_DLLTOOL WINDRES ac_ct_WINDRES LIBGPGME_LT_CURRENT LIBGPGME_LT_AGE LIBGPGME_LT_REVISION EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL HAVE_LD_VERSION_SCRIPT_TRUE HAVE_LD_VERSION_SCRIPT_FALSE PTH_CPPFLAGS PTH_CFLAGS PTH_LDFLAGS PTH_LIBS HAVE_DOSISH_SYSTEM_TRUE HAVE_DOSISH_SYSTEM_FALSE HAVE_W32_SYSTEM_TRUE HAVE_W32_SYSTEM_FALSE HAVE_PTH_TRUE HAVE_PTH_FALSE HAVE_PTHREAD_TRUE HAVE_PTHREAD_FALSE LIBOBJS GLIBC21 GPG_ERROR_CONFIG GPG_ERROR_CFLAGS GPG_ERROR_LIBS GPG RUN_GPG_TESTS_TRUE RUN_GPG_TESTS_FALSE GPG_PATH GPGSM HAVE_GPGSM_TRUE HAVE_GPGSM_FALSE RUN_GPGSM_TESTS_TRUE RUN_GPGSM_TESTS_FALSE BUILD_ASSUAN_TRUE BUILD_ASSUAN_FALSE BUILD_COMPLUS_TRUE BUILD_COMPLUS_FALSE BUILD_TIMESTAMP BUILD_FILEVERSION GPGME_CONFIG_API_VERSION GPGME_CONFIG_LIBS GPGME_CONFIG_CFLAGS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE LIBGPGME_LT_CURRENT LIBGPGME_LT_AGE LIBGPGME_LT_REVISION RC ac_ct_RC EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB DLLTOOL ac_ct_DLLTOOL AS ac_ct_AS OBJDUMP ac_ct_OBJDUMP CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL HAVE_LD_VERSION_SCRIPT_TRUE HAVE_LD_VERSION_SCRIPT_FALSE PTH_CPPFLAGS PTH_CFLAGS PTH_LDFLAGS PTH_LIBS HAVE_DOSISH_SYSTEM_TRUE HAVE_DOSISH_SYSTEM_FALSE HAVE_W32_SYSTEM_TRUE HAVE_W32_SYSTEM_FALSE PKG_CONFIG GLIB_CFLAGS GLIB_LIBS GLIB_GENMARSHAL GOBJECT_QUERY GLIB_MKENUMS BUILD_W32_GLIB_TRUE BUILD_W32_GLIB_FALSE HAVE_PTH_TRUE HAVE_PTH_FALSE HAVE_PTHREAD_TRUE HAVE_PTHREAD_FALSE LIBOBJS GLIBC21 GPG_ERROR_CONFIG GPG_ERROR_CFLAGS GPG_ERROR_LIBS GPG RUN_GPG_TESTS_TRUE RUN_GPG_TESTS_FALSE GPG_PATH GPGSM HAVE_GPGSM_TRUE HAVE_GPGSM_FALSE RUN_GPGSM_TESTS_TRUE RUN_GPGSM_TESTS_FALSE BUILD_ASSUAN_TRUE BUILD_ASSUAN_FALSE BUILD_COMPLUS_TRUE BUILD_COMPLUS_FALSE BUILD_REVISION BUILD_TIMESTAMP BUILD_FILEVERSION GPGME_CONFIG_API_VERSION GPGME_CONFIG_LIBS GPGME_CONFIG_CFLAGS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -954,7 +956,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures gpgme 1.1.0 to adapt to many kinds of systems. +\`configure' configures gpgme 1.1.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1020,7 +1022,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of gpgme 1.1.0:";; + short | recursive ) echo "Configuration of gpgme 1.1.1:";; esac cat <<\_ACEOF @@ -1038,6 +1040,8 @@ Optional Features: --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) + --disable-glibtest do not try to compile and run a test GLIB program + --enable-w32-glib build GPGME Glib for W32 --disable-largefile omit support for large files Optional Packages: @@ -1168,7 +1172,7 @@ fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -gpgme configure 1.1.0 +gpgme configure 1.1.1 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. @@ -1182,7 +1186,7 @@ cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by gpgme $as_me 1.1.0, which was +It was created by gpgme $as_me 1.1.1, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -1518,16 +1522,17 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + # LT Version numbers, remember to change them just *before* a release. # (Code changed: REVISION++) # (Interfaces added/removed/changed: CURRENT++, REVISION=0) # (Interfaces added: AGE++) # (Interfaces removed/changed: AGE=0) # -LIBGPGME_LT_CURRENT=16 +LIBGPGME_LT_CURRENT=17 # Subtract 2 from this value if you want to make the LFS transition an # ABI break. [Note to self: Remove this comment with the next regular break.] -LIBGPGME_LT_AGE=5 +LIBGPGME_LT_AGE=6 LIBGPGME_LT_REVISION=0 # If the API is changed in an incompatible way: increment the next counter. @@ -3169,96 +3174,72 @@ else fi -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_DLLTOOL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - echo "$as_me:$LINENO: result: $DLLTOOL" >&5 -echo "${ECHO_T}$DLLTOOL" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - test -z "$ac_cv_prog_ac_ct_DLLTOOL" && ac_cv_prog_ac_ct_DLLTOOL=":" -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5 -echo "${ECHO_T}$ac_ct_DLLTOOL" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - DLLTOOL=$ac_ct_DLLTOOL + +cat >>confdefs.h <<_ACEOF +#define NEED_GPG_VERSION "$NEED_GPG_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define NEED_GPGSM_VERSION "$NEED_GPGSM_VERSION" +_ACEOF + + + + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + + +# Don't default to build static libs. +# Check whether --enable-static or --disable-static was given. +if test "${enable_static+set}" = set; then + enableval="$enable_static" + p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi + enable_static=no +fi; + + + if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_WINDRES+set}" = set; then +if test "${ac_cv_prog_RC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - if test -n "$WINDRES"; then - ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. + if test -n "$RC"; then + ac_cv_prog_RC="$RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -3267,7 +3248,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_WINDRES="${ac_tool_prefix}windres" + ac_cv_prog_RC="${ac_tool_prefix}windres" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -3276,27 +3257,27 @@ done fi fi -WINDRES=$ac_cv_prog_WINDRES -if test -n "$WINDRES"; then - echo "$as_me:$LINENO: result: $WINDRES" >&5 -echo "${ECHO_T}$WINDRES" >&6 +RC=$ac_cv_prog_RC +if test -n "$RC"; then + echo "$as_me:$LINENO: result: $RC" >&5 +echo "${ECHO_T}$RC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi -if test -z "$ac_cv_prog_WINDRES"; then - ac_ct_WINDRES=$WINDRES +if test -z "$ac_cv_prog_RC"; then + ac_ct_RC=$RC # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_WINDRES+set}" = set; then +if test "${ac_cv_prog_ac_ct_RC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - if test -n "$ac_ct_WINDRES"; then - ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. + if test -n "$ac_ct_RC"; then + ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -3305,28 +3286,28 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_WINDRES="windres" + ac_cv_prog_ac_ct_RC="windres" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done - test -z "$ac_cv_prog_ac_ct_WINDRES" && ac_cv_prog_ac_ct_WINDRES=":" + test -z "$ac_cv_prog_ac_ct_RC" && ac_cv_prog_ac_ct_RC="no" fi fi -ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES -if test -n "$ac_ct_WINDRES"; then - echo "$as_me:$LINENO: result: $ac_ct_WINDRES" >&5 -echo "${ECHO_T}$ac_ct_WINDRES" >&6 +ac_ct_RC=$ac_cv_prog_ac_ct_RC +if test -n "$ac_ct_RC"; then + echo "$as_me:$LINENO: result: $ac_ct_RC" >&5 +echo "${ECHO_T}$ac_ct_RC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi - WINDRES=$ac_ct_WINDRES + RC=$ac_ct_RC else - WINDRES="$ac_cv_prog_WINDRES" + RC="$ac_cv_prog_RC" fi @@ -3334,56 +3315,6 @@ fi - -cat >>confdefs.h <<_ACEOF -#define NEED_GPG_VERSION "$NEED_GPG_VERSION" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define NEED_GPGSM_VERSION "$NEED_GPGSM_VERSION" -_ACEOF - - - - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - - -# Don't default to build static libs. -# Check whether --enable-static or --disable-static was given. -if test "${enable_static+set}" = set; then - enableval="$enable_static" - p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=no -fi; - - # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" @@ -3905,7 +3836,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 3908 "configure"' > conftest.$ac_ext + echo '#line 3839 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -4053,12 +3984,254 @@ ac_link='$CC -o conftest$ac_exeext $CFLA ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 -echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi +echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*-cygwin* | *-*-mingw* | *-*-pw32*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_DLLTOOL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + echo "$as_me:$LINENO: result: $DLLTOOL" >&5 +echo "${ECHO_T}$DLLTOOL" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_DLLTOOL" && ac_cv_prog_ac_ct_DLLTOOL="false" +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5 +echo "${ECHO_T}$ac_ct_DLLTOOL" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + DLLTOOL=$ac_ct_DLLTOOL +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AS+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AS="${ac_tool_prefix}as" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + echo "$as_me:$LINENO: result: $AS" >&5 +echo "${ECHO_T}$AS" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_AS+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AS="as" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_AS" && ac_cv_prog_ac_ct_AS="false" +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + echo "$as_me:$LINENO: result: $ac_ct_AS" >&5 +echo "${ECHO_T}$ac_ct_AS" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + AS=$ac_ct_AS +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_OBJDUMP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + echo "$as_me:$LINENO: result: $OBJDUMP" >&5 +echo "${ECHO_T}$OBJDUMP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_OBJDUMP" && ac_cv_prog_ac_ct_OBJDUMP="false" +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 +echo "${ECHO_T}$ac_ct_OBJDUMP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + OBJDUMP=$ac_ct_OBJDUMP +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + ;; esac @@ -5469,7 +5642,7 @@ fi # Provide some information about the compiler. -echo "$as_me:5472:" \ +echo "$as_me:5645:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 @@ -6366,7 +6539,7 @@ fi esac enable_dlopen=no -enable_win32_dll=no +enable_win32_dll=yes # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then @@ -6505,11 +6678,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6508: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6681: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6512: \$? = $ac_status" >&5 + echo "$as_me:6685: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -6738,11 +6911,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6741: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6914: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6745: \$? = $ac_status" >&5 + echo "$as_me:6918: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -6798,11 +6971,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6801: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6974: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:6805: \$? = $ac_status" >&5 + echo "$as_me:6978: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -8974,7 +9147,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:11429: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:11260: \$? = $ac_status" >&5 + echo "$as_me:11433: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -11313,11 +11486,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11316: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11489: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:11320: \$? = $ac_status" >&5 + echo "$as_me:11493: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -12670,7 +12843,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:13771: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:13602: \$? = $ac_status" >&5 + echo "$as_me:13775: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -13655,11 +13828,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13658: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13831: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:13662: \$? = $ac_status" >&5 + echo "$as_me:13835: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -15692,11 +15865,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15695: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15868: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15699: \$? = $ac_status" >&5 + echo "$as_me:15872: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -15925,11 +16098,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15928: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16101: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15932: \$? = $ac_status" >&5 + echo "$as_me:16105: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings @@ -15985,11 +16158,11 @@ else -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15988: $lt_compile\"" >&5) + (eval echo "\"\$as_me:16161: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:15992: \$? = $ac_status" >&5 + echo "$as_me:16165: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -18161,7 +18334,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <>conftest.$ac_ext <<_ACEOF int main () { - int main(int argc, char *argv) - { FILE *fp; if (!(fp = fopen("conftestval", "w"))) exit(1); @@ -19657,7 +19828,6 @@ main () fprintf(fp, "yes"); fclose(fp); exit(0); - } ; return 0; @@ -19724,10 +19894,17 @@ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include #include - int main(int argc, char *argv) - { + +int +main () +{ FILE *fp; if (!(fp = fopen("conftestval", "w"))) exit(1); @@ -19740,8 +19917,10 @@ cat >>conftest.$ac_ext <<_ACEOF fprintf(fp, "yes"); fclose(fp); exit(0); - } + ; + return 0; +} _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 @@ -19994,6 +20173,343 @@ else fi +build_w32_glib=no +# Check whether --enable-glibtest or --disable-glibtest was given. +if test "${enable_glibtest+set}" = set; then + enableval="$enable_glibtest" + +else + enable_glibtest=yes +fi; + + pkg_config_args=glib-2.0 + for module in . + do + case "$module" in + gmodule) + pkg_config_args="$pkg_config_args gmodule-2.0" + ;; + gmodule-no-export) + pkg_config_args="$pkg_config_args gmodule-no-export-2.0" + ;; + gobject) + pkg_config_args="$pkg_config_args gobject-2.0" + ;; + gthread) + pkg_config_args="$pkg_config_args gthread-2.0" + ;; + esac + done + + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG + +if test -n "$PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + + no_glib="" + + if test x$PKG_CONFIG != xno ; then + if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then + : + else + echo *** pkg-config too old; version 0.7 or better required. + no_glib=yes + PKG_CONFIG=no + fi + else + no_glib=yes + fi + + min_glib_version=2.0.0 + echo "$as_me:$LINENO: checking for GLIB - version >= $min_glib_version" >&5 +echo $ECHO_N "checking for GLIB - version >= $min_glib_version... $ECHO_C" >&6 + + if test x$PKG_CONFIG != xno ; then + ## don't try to run the test against uninstalled libtool libs + if $PKG_CONFIG --uninstalled $pkg_config_args; then + echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH" + enable_glibtest=no + fi + + if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then + : + else + no_glib=yes + fi + fi + + if test x"$no_glib" = x ; then + GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0` + GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0` + GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0` + + GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args` + GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args` + glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + if test "x$enable_glibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$GLIB_LIBS $LIBS" + rm -f conf.glibtest + if test "$cross_compiling" = yes; then + echo $ac_n "cross compiling; assumed OK... $ac_c" +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include + +int +main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.glibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_glib_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_glib_version"); + exit(1); + } + + if ((glib_major_version != $glib_config_major_version) || + (glib_minor_version != $glib_config_minor_version) || + (glib_micro_version != $glib_config_micro_version)) + { + printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", + $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, + glib_major_version, glib_minor_version, glib_micro_version); + printf ("*** was found! If pkg-config was correct, then it is best\n"); + printf ("*** to remove the old version of GLib. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); + printf("*** to point to the correct configuration files\n"); + } + else if ((glib_major_version != GLIB_MAJOR_VERSION) || + (glib_minor_version != GLIB_MINOR_VERSION) || + (glib_micro_version != GLIB_MICRO_VERSION)) + { + printf("*** GLIB header files (version %d.%d.%d) do not match\n", + GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); + printf("*** library (version %d.%d.%d)\n", + glib_major_version, glib_minor_version, glib_micro_version); + } + else + { + if ((glib_major_version > major) || + ((glib_major_version == major) && (glib_minor_version > minor)) || + ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n", + glib_major_version, glib_minor_version, glib_micro_version); + printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n", + major, minor, micro); + printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n"); + printf("*** correct copy of pkg-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} + +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +no_glib=yes +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_glib" = x ; then + echo "$as_me:$LINENO: result: yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&5 +echo "${ECHO_T}yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&6 + : + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + if test "$PKG_CONFIG" = "no" ; then + echo "*** A new enough version of pkg-config was not found." + echo "*** See http://www.freedesktop.org/software/pkgconfig/" + else + if test -f conf.glibtest ; then + : + else + echo "*** Could not run GLIB test program, checking why..." + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$LIBS $GLIB_LIBS" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include + +int +main () +{ + return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GLIB or finding the wrong" + echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GLIB is incorrectly installed." +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GLIB_CFLAGS="" + GLIB_LIBS="" + GLIB_GENMARSHAL="" + GOBJECT_QUERY="" + GLIB_MKENUMS="" + : + fi + + + + + + rm -f conf.glibtest + +# Check whether --enable-w32-glib or --disable-w32-glib was given. +if test "${enable_w32_glib+set}" = set; then + enableval="$enable_w32_glib" + build_w32_glib=$withval +fi; + + +if test "$build_w32_glib" = yes; then + BUILD_W32_GLIB_TRUE= + BUILD_W32_GLIB_FALSE='#' +else + BUILD_W32_GLIB_TRUE='#' + BUILD_W32_GLIB_FALSE= +fi + @@ -20170,6 +20686,76 @@ done # Type checks. +echo "$as_me:$LINENO: checking for inline" >&5 +echo $ECHO_N "checking for inline... $ECHO_C" >&6 +if test "${ac_cv_c_inline+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_inline=$ac_kw; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 +echo "${ECHO_T}$ac_cv_c_inline" >&6 + + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + echo "$as_me:$LINENO: checking for unsigned int" >&5 echo $ECHO_N "checking for unsigned int... $ECHO_C" >&6 if test "${ac_cv_type_unsigned_int+set}" = set; then @@ -21003,6 +21589,9 @@ fi # Checks for compiler features. if test "$GCC" = yes; then CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes" + if test "$have_w32_system" = yes; then + CFLAGS="$CFLAGS -mms-bitfields" + fi fi @@ -23089,23 +23678,25 @@ echo "$as_me: WARNING: fixed the GPGME_V # Generate values for the DLL version info +BUILD_REVISION="`echo '$Revision: 1159 $' | sed 's/[^0-9]//g'`" +test -z "$BUILD_REVISION" && BUILD_REVISION="0" if test "$have_w32_system" = yes; then BUILD_TIMESTAMP=`date --iso-8601=minutes` BUILD_FILEVERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./;s/\./,/g'` - case "$VERSION" in - *-cvs) BUILD_FILEVERSION="${BUILD_FILEVERSION}0" ;; - *-rc*) BUILD_FILEVERSION="${BUILD_FILEVERSION}1" ;; - *) BUILD_FILEVERSION="${BUILD_FILEVERSION}2" ;; - esac + BUILD_FILEVERSION="${BUILD_FILEVERSION}${BUILD_REVISION}" fi + # Add a few constants to help porting to W32 + + + # Substitution used for gpgme-config GPGME_CONFIG_LIBS="-lgpgme" GPGME_CONFIG_CFLAGS="" @@ -23265,6 +23856,13 @@ echo "$as_me: error: conditional \"HAVE_ Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi +if test -z "${BUILD_W32_GLIB_TRUE}" && test -z "${BUILD_W32_GLIB_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"BUILD_W32_GLIB\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"BUILD_W32_GLIB\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi if test -z "${HAVE_PTH_TRUE}" && test -z "${HAVE_PTH_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"HAVE_PTH\" was never defined. Usually this means the macro was only invoked conditionally." >&5 @@ -23585,7 +24183,7 @@ _ASBOX } >&5 cat >&5 <<_CSEOF -This file was extended by gpgme $as_me 1.1.0, which was +This file was extended by gpgme $as_me 1.1.1, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -23648,7 +24246,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -gpgme config.status 1.1.0 +gpgme config.status 1.1.1 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" @@ -23904,13 +24502,11 @@ s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t -s,@DLLTOOL@,$DLLTOOL,;t t -s,@ac_ct_DLLTOOL@,$ac_ct_DLLTOOL,;t t -s,@WINDRES@,$WINDRES,;t t -s,@ac_ct_WINDRES@,$ac_ct_WINDRES,;t t s,@LIBGPGME_LT_CURRENT@,$LIBGPGME_LT_CURRENT,;t t s,@LIBGPGME_LT_AGE@,$LIBGPGME_LT_AGE,;t t s,@LIBGPGME_LT_REVISION@,$LIBGPGME_LT_REVISION,;t t +s,@RC@,$RC,;t t +s,@ac_ct_RC@,$ac_ct_RC,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@ECHO@,$ECHO,;t t @@ -23918,6 +24514,12 @@ s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +s,@DLLTOOL@,$DLLTOOL,;t t +s,@ac_ct_DLLTOOL@,$ac_ct_DLLTOOL,;t t +s,@AS@,$AS,;t t +s,@ac_ct_AS@,$ac_ct_AS,;t t +s,@OBJDUMP@,$OBJDUMP,;t t +s,@ac_ct_OBJDUMP@,$ac_ct_OBJDUMP,;t t s,@CPP@,$CPP,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t @@ -23940,6 +24542,14 @@ s,@HAVE_DOSISH_SYSTEM_TRUE@,$HAVE_DOSISH s,@HAVE_DOSISH_SYSTEM_FALSE@,$HAVE_DOSISH_SYSTEM_FALSE,;t t s,@HAVE_W32_SYSTEM_TRUE@,$HAVE_W32_SYSTEM_TRUE,;t t s,@HAVE_W32_SYSTEM_FALSE@,$HAVE_W32_SYSTEM_FALSE,;t t +s,@PKG_CONFIG@,$PKG_CONFIG,;t t +s,@GLIB_CFLAGS@,$GLIB_CFLAGS,;t t +s,@GLIB_LIBS@,$GLIB_LIBS,;t t +s,@GLIB_GENMARSHAL@,$GLIB_GENMARSHAL,;t t +s,@GOBJECT_QUERY@,$GOBJECT_QUERY,;t t +s,@GLIB_MKENUMS@,$GLIB_MKENUMS,;t t +s,@BUILD_W32_GLIB_TRUE@,$BUILD_W32_GLIB_TRUE,;t t +s,@BUILD_W32_GLIB_FALSE@,$BUILD_W32_GLIB_FALSE,;t t s,@HAVE_PTH_TRUE@,$HAVE_PTH_TRUE,;t t s,@HAVE_PTH_FALSE@,$HAVE_PTH_FALSE,;t t s,@HAVE_PTHREAD_TRUE@,$HAVE_PTHREAD_TRUE,;t t @@ -23962,6 +24572,7 @@ s,@BUILD_ASSUAN_TRUE@,$BUILD_ASSUAN_TRUE s,@BUILD_ASSUAN_FALSE@,$BUILD_ASSUAN_FALSE,;t t s,@BUILD_COMPLUS_TRUE@,$BUILD_COMPLUS_TRUE,;t t s,@BUILD_COMPLUS_FALSE@,$BUILD_COMPLUS_FALSE,;t t +s,@BUILD_REVISION@,$BUILD_REVISION,;t t s,@BUILD_TIMESTAMP@,$BUILD_TIMESTAMP,;t t s,@BUILD_FILEVERSION@,$BUILD_FILEVERSION,;t t s,@GPGME_CONFIG_API_VERSION@,$GPGME_CONFIG_API_VERSION,;t t diff -urpNP gpgme-1.1.0/configure.ac gpgme-1.1.1/configure.ac --- gpgme-1.1.0/configure.ac 2005-10-01 21:13:02.000000000 +0000 +++ gpgme-1.1.1/configure.ac 2006-02-23 16:08:20.000000000 +0000 @@ -1,6 +1,6 @@ # configure.ac for GPGME # Copyright (C) 2000 Werner Koch (dd9jn) -# Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH +# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 g10 Code GmbH # # This file is part of GPGME. # @@ -19,22 +19,39 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA # (Process this file with autoconf to produce a configure script.) - AC_PREREQ(2.59) min_automake_version="1.9.3" # Version number: Remember to change it immediately *after* a release. -AC_INIT(gpgme, 1.1.0, [bug-gpgme@gnupg.org]) +# Make sure to run "svn up" before a "make dist". +# See below for the LT versions. +# +# The CVS version is usually the next intended release version with +# the string "-cvs" appended. The reason for this is that tests for a +# specific feature can already be done under the assumption that the +# CVS version is the most recent one in a branch. To disable the CVS +# version for the real release, just comment out the my_iscvs macro. +# Note, that we are now using Subversion instead of CVS and append the +# SVN revision number to the "cvs" suffix. To make this most useful +# for snapshot releases please do an "svn up" right before recreating +# the configure script, so that a proper revision number for all files +# is available when running a "make distcheck". +m4_define(my_version, [1.1.1]) +#m4_define(my_iscvs, yes) +AC_INIT([gpgme], my_version[]m4_ifdef([my_iscvs], [-cvs[]m4_translit( + [$Revision: 1159 $],[Ra-z $:])]), + [bug-gpgme@gnupg.org]) + # LT Version numbers, remember to change them just *before* a release. # (Code changed: REVISION++) # (Interfaces added/removed/changed: CURRENT++, REVISION=0) # (Interfaces added: AGE++) # (Interfaces removed/changed: AGE=0) # -LIBGPGME_LT_CURRENT=16 +LIBGPGME_LT_CURRENT=17 # Subtract 2 from this value if you want to make the LFS transition an # ABI break. [Note to self: Remove this comment with the next regular break.] -LIBGPGME_LT_AGE=5 +LIBGPGME_LT_AGE=6 LIBGPGME_LT_REVISION=0 # If the API is changed in an incompatible way: increment the next counter. @@ -69,9 +86,6 @@ AH_VERBATIM([_REENTRANT], #endif]) AC_PROG_CC -AC_CHECK_TOOL(DLLTOOL, dlltool, :) -AC_CHECK_TOOL(WINDRES, windres, :) - AC_SUBST(LIBGPGME_LT_CURRENT) AC_SUBST(LIBGPGME_LT_AGE) @@ -88,6 +102,8 @@ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", # Don't default to build static libs. AC_DISABLE_STATIC +AC_LIBTOOL_WIN32_DLL +AC_LIBTOOL_RC AC_PROG_LIBTOOL # For now we hardcode the use of version scripts. It would be better @@ -147,6 +163,12 @@ if test "$have_w32_system" = yes; then fi AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes) +build_w32_glib=no +AM_PATH_GLIB_2_0 +AC_ARG_ENABLE(w32-glib, + AC_HELP_STRING([--enable-w32-glib], [build GPGME Glib for W32]), + build_w32_glib=$withval) +AM_CONDITIONAL(BUILD_W32_GLIB, test "$build_w32_glib" = yes) AM_CONDITIONAL(HAVE_PTH, test "$have_pth" = "yes") AM_CONDITIONAL(HAVE_PTHREAD, test "$have_pthread" = "yes") @@ -157,6 +179,7 @@ AC_CHECK_HEADERS(sys/select.h) # Type checks. +AC_C_INLINE AC_CHECK_SIZEOF(unsigned int) AC_SYS_LARGEFILE AC_TYPE_OFF_T @@ -164,6 +187,9 @@ AC_TYPE_OFF_T # Checks for compiler features. if test "$GCC" = yes; then CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes" + if test "$have_w32_system" = yes; then + CFLAGS="$CFLAGS -mms-bitfields" + fi fi @@ -443,17 +469,18 @@ AM_CONDITIONAL(BUILD_COMPLUS, test "$com GNUPG_FIX_HDR_VERSION(gpgme/gpgme.h, GPGME_VERSION) # Generate values for the DLL version info +changequote(,)dnl +BUILD_REVISION="`echo '$Revision: 1159 $' | sed 's/[^0-9]//g'`" +changequote([,])dnl +test -z "$BUILD_REVISION" && BUILD_REVISION="0" if test "$have_w32_system" = yes; then BUILD_TIMESTAMP=`date --iso-8601=minutes` changequote(,)dnl BUILD_FILEVERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./;s/\./,/g'` changequote([,])dnl - case "$VERSION" in - *-cvs) BUILD_FILEVERSION="${BUILD_FILEVERSION}0" ;; - *-rc*) BUILD_FILEVERSION="${BUILD_FILEVERSION}1" ;; - *) BUILD_FILEVERSION="${BUILD_FILEVERSION}2" ;; - esac + BUILD_FILEVERSION="${BUILD_FILEVERSION}${BUILD_REVISION}" fi +AC_SUBST(BUILD_REVISION) AC_SUBST(BUILD_TIMESTAMP) AC_SUBST(BUILD_FILEVERSION) @@ -480,6 +507,15 @@ AH_VERBATIM([SEPCONSTANTS], #endif ]) +AH_BOTTOM([ +/* Definition of GCC specific attributes. */ +#if __GNUC__ > 2 +# define GPGME_GCC_A_PURE __attribute__ ((__pure__)) +#else +# define GPGME_GCC_A_PURE +#endif +]) + # Substitution used for gpgme-config GPGME_CONFIG_LIBS="-lgpgme" diff -urpNP gpgme-1.1.0/doc/ChangeLog gpgme-1.1.1/doc/ChangeLog --- gpgme-1.1.0/doc/ChangeLog 2005-10-01 02:06:08.000000000 +0000 +++ gpgme-1.1.1/doc/ChangeLog 2006-02-09 19:56:31.000000000 +0000 @@ -1,5 +1,27 @@ +2005-12-20 Werner Koch + + * gpgme.texi (Verify): Document pka_trust. + +2005-12-06 Werner Koch + + * gpgme.texi (Key Management): Updated to match the fixes for + subkey fingerprints and theg secret flag. + +2005-10-06 Marcus Brinkmann + + * gpgme.texi (Destroying Data Buffers): Document gpgme_free. + +2005-10-02 Marcus Brinkmann + + * gpgme.texi (Key Management): Add the new member notations of + gpgme_sig_key_t. + (Key Listing Mode): Document GPGME_KEYLIST_MODE_SIG_NOTATIONS. + 2005-10-01 Marcus Brinkmann + * gpgme.texi: Enclose all return parameters of deftypefuns in + curly brackets. + * gpgme.texi (Signature Notation Data): New section. (Verify): Added more about the notation data structure. diff -urpNP gpgme-1.1.0/doc/Makefile.in gpgme-1.1.1/doc/Makefile.in --- gpgme-1.1.0/doc/Makefile.in 2005-10-01 21:13:45.000000000 +0000 +++ gpgme-1.1.1/doc/Makefile.in 2006-02-23 16:09:49.000000000 +0000 @@ -59,10 +59,10 @@ DIST_COMMON = $(gpgme_TEXINFOS) $(srcdir $(srcdir)/Makefile.in $(srcdir)/stamp-vti \ $(srcdir)/version.texi ChangeLog mdate-sh texinfo.tex ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/glibc21.m4 \ - $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/pth.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/glib-2.0.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gpg-error.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/pth.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -89,6 +89,7 @@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -98,7 +99,10 @@ BUILD_ASSUAN_TRUE = @BUILD_ASSUAN_TRUE@ BUILD_COMPLUS_FALSE = @BUILD_COMPLUS_FALSE@ BUILD_COMPLUS_TRUE = @BUILD_COMPLUS_TRUE@ BUILD_FILEVERSION = @BUILD_FILEVERSION@ +BUILD_REVISION = @BUILD_REVISION@ BUILD_TIMESTAMP = @BUILD_TIMESTAMP@ +BUILD_W32_GLIB_FALSE = @BUILD_W32_GLIB_FALSE@ +BUILD_W32_GLIB_TRUE = @BUILD_W32_GLIB_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -121,6 +125,11 @@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ GPG = @GPG@ GPGME_CONFIG_API_VERSION = @GPGME_CONFIG_API_VERSION@ GPGME_CONFIG_CFLAGS = @GPGME_CONFIG_CFLAGS@ @@ -159,6 +168,7 @@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -167,11 +177,13 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ PTH_CFLAGS = @PTH_CFLAGS@ PTH_CPPFLAGS = @PTH_CPPFLAGS@ PTH_LDFLAGS = @PTH_LDFLAGS@ PTH_LIBS = @PTH_LIBS@ RANLIB = @RANLIB@ +RC = @RC@ RUN_GPGSM_TESTS_FALSE = @RUN_GPGSM_TESTS_FALSE@ RUN_GPGSM_TESTS_TRUE = @RUN_GPGSM_TESTS_TRUE@ RUN_GPG_TESTS_FALSE = @RUN_GPG_TESTS_FALSE@ @@ -180,15 +192,16 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ -WINDRES = @WINDRES@ ac_ct_AR = @ac_ct_AR@ +ac_ct_AS = @ac_ct_AS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DLLTOOL = @ac_ct_DLLTOOL@ ac_ct_F77 = @ac_ct_F77@ +ac_ct_OBJDUMP = @ac_ct_OBJDUMP@ ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_RC = @ac_ct_RC@ ac_ct_STRIP = @ac_ct_STRIP@ -ac_ct_WINDRES = @ac_ct_WINDRES@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ diff -urpNP gpgme-1.1.0/doc/gpgme.texi gpgme-1.1.1/doc/gpgme.texi --- gpgme-1.1.0/doc/gpgme.texi 2005-10-01 02:06:08.000000000 +0000 +++ gpgme-1.1.1/doc/gpgme.texi 2006-02-09 19:56:31.000000000 +0000 @@ -21,7 +21,7 @@ This is Edition @value{EDITION}, last up @value{VERSION}. @c NOTE: Don't forget to update the year for the TeX version, too. -Copyright @copyright{} 2002, 2003, 2004 g10 Code GmbH. +Copyright @copyright{} 2002, 2003, 2004, 2005 g10 Code GmbH. The GPGME reference manual is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -54,7 +54,7 @@ Foundation, Inc., 59 Temple Place - Suit @center for version @value{VERSION} @page @vskip 0pt plus 1filll -Copyright @copyright{} 2002, 2003, 2004 g10 Code GmbH. +Copyright @copyright{} 2002, 2003, 2004, 2005 g10 Code GmbH. The GPGME reference manual is free software; you can redistribute it @@ -744,7 +744,7 @@ This specifies the Cryptographic Message @end deftp -@deftypefun const char *gpgme_get_protocol_name (@w{gpgme_protocol_t @var{protocol}}) +@deftypefun {const char *} gpgme_get_protocol_name (@w{gpgme_protocol_t @var{protocol}}) The function @code{gpgme_get_protocol_name} returns a statically allocated string describing the protocol @var{protocol}, or @code{NULL} if the protocol number is not valid. @@ -1711,15 +1711,23 @@ The function @code{gpgme_data_release_an @code{gpgme_data_release}, except that it returns the data buffer and its length that was provided by the object. -The user has to release the buffer with @code{free}. In case the user -provided the data buffer in non-copy mode, a copy will be made for -this purpose. +The user has to release the buffer with @code{gpgme_free}. In case +the user provided the data buffer in non-copy mode, a copy will be +made for this purpose. In case an error returns, or there is no suitable data buffer that can be returned to the user, the function will return @code{NULL}. @end deftypefun +@deftypefun void gpgme_free (@w{void *@var{buffer}}) +The function @code{gpgme_free} releases the memory returned by +@code{gpgme_data_release_and_get_mem}. It should be used instead of +the system libraries @code{free} function in case different allocators +are used in a single program. +@end deftypefun + + @node Manipulating Data Buffers @section Manipulating Data Buffers @cindex data buffer, manipulation @@ -1815,7 +1823,7 @@ The function @code{gpgme_data_rewind} is @cindex data buffer, file name @cindex data buffer, encoding -@deftypefun char *gpgme_data_get_file_name (@w{gpgme_data_t @var{dh}}) +@deftypefun {char *} gpgme_data_get_file_name (@w{gpgme_data_t @var{dh}}) The function @code{gpgme_data_get_file_name} returns a pointer to a string containing the file name associated with the data object. The file name will be stored in the output when encrypting or signing the @@ -2136,11 +2144,17 @@ certificate server. The @code{GPGME_KEYLIST_MODE_SIGS} symbol specifies that the key signatures should be included in the listed keys. +@item GPGME_KEYLIST_MODE_SIG_NOTATIONS +The @code{GPGME_KEYLIST_MODE_SIG_NOTATIONS} symbol specifies that the +signature notations on key signatures should be included in the listed +keys. This only works if @code{GPGME_KEYLIST_MODE_SIGS} is also +enabled. + @item GPGME_KEYLIST_MODE_VALIDATE The @code{GPGME_KEYLIST_MODE_VALIDATE} symbol specifies that the backend should do key or certificate validation and not just get the validity information from an internal cache. This might be an -expensive operation and is in general not usefule. Currently only +expensive operation and is in general not useful. Currently only implemented for the S/MIME backend and ignored for other backends. @end table @@ -2371,7 +2385,9 @@ This is true if the subkey can be used f according to local government regulations. @item unsigned int secret : 1 -This is true if the subkey is a secret key. +This is true if the subkey is a secret key. Note that it will be false +if the key is actually a stub key; i.e. a secret key operation is +currently not possible (offline-key). @item gpgme_pubkey_algo_t pubkey_algo This is the public key algorithm supported by this subkey. @@ -2384,7 +2400,7 @@ This is the key ID of the subkey in hexa @item char *fpr This is the fingerprint of the subkey in hexadecimal digits, if -available. This is usually only available for the primary key. +available. @item long int timestamp This is the creation timestamp of the subkey. This is -1 if the @@ -2403,7 +2419,13 @@ validate user IDs on the key. The signatures on a key are only available if the key was retrieved via a listing operation with the @code{GPGME_KEYLIST_MODE_SIGS} mode -enabled, because it is expensive to retrieve all signatures of a key. +enabled, because it can be expensive to retrieve all signatures of a +key. + +The signature notations on a key signature are only available if the +key was retrieved via a listing operation with the +@code{GPGME_KEYLIST_MODE_SIG_NOTATIONS} mode enabled, because it can +be expensive to retrieve all signature notations. The key signature structure has the following members: @@ -2458,6 +2480,9 @@ This is the comment component of @code{u @item char *email This is the email component of @code{uid}, if available. + +@item gpgme_sig_notation_t notations +This is a linked list with the notation data and policy URLs. @end table @end deftp @@ -2543,7 +2568,9 @@ This is true if the key can be used for to local government regulations. @item unsigned int secret : 1 -This is true if the key is a secret key. +This is true if the key is a secret key. Note, that this will always be +true even if the corresponding subkey flag may be false (offline/stub +keys). @item gpgme_protocol_t protocol This is the protocol supported by this key. @@ -3958,6 +3985,22 @@ not expire. @item unsigned int wrong_key_usage : 1 This is true if the key was not used according to its policy. +@item unsigned int pka_trust : 2 +This is set to the trust information gained by means of the PKA system. +Values are: + @table @code + @item 0 + No PKA information available or verification not possible. + @item 1 + PKA verification failed. + @item 2 + PKA verification succeeded. + @item 3 + Reserved for future use. + @end table +Depending on the configuration of the engine, this metric may also be +reflected by the validity of the signature. + @item gpgme_validity_t validity The validity of the signature. @@ -4715,7 +4758,7 @@ decide when to check the file descriptor callback functions. Usually this is done in an event loop, that also checks for events in other parts of the program. If the callback functions are only called when the file descriptors are ready, -@acronym{GPGME} will never block. This gives the user mroe control +@acronym{GPGME} will never block. This gives the user more control over the program flow, and allows to perform other tasks when @acronym{GPGME} would block otherwise. @@ -4754,7 +4797,7 @@ the return value to be reserved for late @deftp {Data type} {gpgme_error_t (*gpgme_register_io_cb_t) (@w{void *@var{data}}, @w{int @var{fd}}, @w{int @var{dir}}, @w{gpgme_io_cb_t @var{fnc}}, @w{void *@var{fnc_data}}, @w{void **@var{tag}})} @tindex gpgme_register_io_cb_t The @code{gpgme_register_io_cb_t} type is the type of functions which can -be called by @acronym{GPGME} to register an I/O callback funtion +be called by @acronym{GPGME} to register an I/O callback function @var{fnc} for the file descriptor @var{fd} with the user. @var{fnc_data} should be passed as the first argument to @var{fnc} when the handler is invoked (the second argument should be @var{fd}). diff -urpNP gpgme-1.1.0/doc/stamp-vti gpgme-1.1.1/doc/stamp-vti --- gpgme-1.1.0/doc/stamp-vti 2005-10-01 21:15:18.000000000 +0000 +++ gpgme-1.1.1/doc/stamp-vti 2006-02-23 16:35:52.000000000 +0000 @@ -1,4 +1,4 @@ -@set UPDATED 1 October 2005 -@set UPDATED-MONTH October 2005 -@set EDITION 1.1.0 -@set VERSION 1.1.0 +@set UPDATED 9 February 2006 +@set UPDATED-MONTH February 2006 +@set EDITION 1.1.1 +@set VERSION 1.1.1 diff -urpNP gpgme-1.1.0/doc/version.texi gpgme-1.1.1/doc/version.texi --- gpgme-1.1.0/doc/version.texi 2005-10-01 21:15:18.000000000 +0000 +++ gpgme-1.1.1/doc/version.texi 2006-02-23 16:35:52.000000000 +0000 @@ -1,4 +1,4 @@ -@set UPDATED 1 October 2005 -@set UPDATED-MONTH October 2005 -@set EDITION 1.1.0 -@set VERSION 1.1.0 +@set UPDATED 9 February 2006 +@set UPDATED-MONTH February 2006 +@set EDITION 1.1.1 +@set VERSION 1.1.1 diff -urpNP gpgme-1.1.0/gpgme/ChangeLog gpgme-1.1.1/gpgme/ChangeLog --- gpgme-1.1.0/gpgme/ChangeLog 2005-10-01 20:14:48.000000000 +0000 +++ gpgme-1.1.1/gpgme/ChangeLog 2006-02-22 11:27:43.000000000 +0000 @@ -1,3 +1,175 @@ +2006-02-22 Marcus Brinkmann + + * engine.c (gpgme_engine_check_version): Reimplemented to allow + checking the version correctly even after changing the engine + information. Bug reported by Stéphane Corthésy. + + * rungpg.c (read_colon_line): Invoke colon preprocess handler if + it is set. + (colon_preprocessor_t): New type. + (struct engine_gpg): New member colon.preprocess_fnc. + (gpg_keylist_preprocess): New function. + * keylist.c (keylist_colon_handler): Allow short key IDs. + +2006-02-15 Marcus Brinkmann + + * w32-io.c (create_writer): Make C->have_data a manually resetted + event. + (writer): Move code from end of if block to beginning, so it + is also run the first time. + (_gpgme_io_write): Move assert check after error check. Reset + the is_empty event, and also do it eagerly. + (_gpgme_io_select): Unconditionally wait for the is_empty event. + +2006-01-26 Werner Koch + + * w32-util.c (_gpgme_get_conf_int): New. + * posix-util.c (_gpgme_get_conf_int): New. + * w32-io.c (get_desired_thread_priority): New. + (create_reader, create_writer): Use it here. + +2006-01-04 Werner Koch + + * debug.h (_gpgme_debug_srcname): New. Use it with the debug macros. + + * w32-glib-io.c (_gpgme_io_set_nonblocking): Add debug + statements. Disable error return for failed nonblocking call. + +2006-01-03 Marcus Brinkmann + + * w32-glib-io.c (_gpgme_io_close): Only close fd if there is no + channel for it. + +2005-12-31 Marcus Brinkmann + + * w32-glib-io.c (find_channel): Set channel to unbuffered. + (_gpgme_io_select): Fix debug output. + +2005-12-23 Werner Koch + + * gpgme.h (struct _gpgme_signature): Append field PKA_ADDRESS. + * verify.c (release_op_data, _gpgme_verify_status_handler): Set + this field. + +2005-12-20 Werner Koch + + * gpgme.h (gpgme_status_code_t): Added GPGME_STATUS_PKA_TRUST_BAD + and GPGME_STATUS_PKA_TRUST_GOOD. + (struct _gpgme_signature): New field pka_trust. + * verify.c (_gpgme_verify_status_handler): Set pka_trust. + +2005-12-06 Werner Koch + + * keylist.c (keylist_colon_handler): Store fingerprints of the + subkeys. Reset the secret flag of subkeys for stub secret keys. + (NR_FIELDS): Bumped up to 16 + +2005-11-27 Marcus Brinkmann + + * engine.c (_gpgme_set_engine_info): Use new_file_name in + engine_get_version invocation. Reported by Stéphane Corthésy. + +2005-11-24 Marcus Brinkmann + + * w32-glib-io.c (_gpgme_io_fd2str): Remove debug printf. + +2005-11-18 Werner Koch + + * w32-glib-io.c: Include glib.h before windows to avoid a symbol + shadowing warning. + (find_channel): Better use g_io_channel_win32_new_fd instead of + the autodetection function g_io_channel_unix_new. + (_gpgme_io_select): Rewritten. It is now a fully working select + implementation. + +2005-11-18 Marcus Brinkmann + + * priv-io.h (_gpgme_io_fd2str): New prototype. + * posix-io.c (_gpgme_io_fd2str): New function. + * w32-io.c (_gpgme_io_fd2str): New function. + * rungpg.c: Use this new function. + * w32-glib-io.c (_gpgme_io_fd2str): Rewrote the file handle code + again. Two's company, three's the musketeers. + + * w32-glib-io.c: Rewrote the file handle code. We don't create + system fds for every handle (doesn't work for inherited handles), + but we create pseudo fds in a private namespace that designate a + handle and potentially a giochannel. + +2005-11-18 Werner Koch + + * versioninfo.rc.in: Set file version to LT-version + Svn-revision. + +2005-11-17 Marcus Brinkmann + + * w32-glib-io.c: New file. + * gpgme.def (gpgme_get_giochannel): Add symbol. + * Makefile.am (system_components) [HAVE_DOSISH_SYSTEM]: Remove + w32-io.c. + (ltlib_gpgme_extra): New variable. + (lib_LTLIBRARIES): Add $(ltlib_gpgme_extra). + (system_components_not_extra): New variable. + (libgpgme_la_SOURCES, libgpgme_pthread_la_SOURCES, + (libgpgme_pth_la_SOURCES): Add $(system_components_not_extra). + (libgpgme_glib_la_LDFLAGS, libgpgme_glib_la_DEPENDENCIES, + (libgpgme_glib_la_LIBADD, libgpgme_glib_la_CFLAGS) + [BUILD_W32_GLIB]: New variables. + * gpgme-config.in (glib): New option. + * gpgme.m4 (AM_PATH_GPGME_GLIB): New macro. + +2005-11-17 Marcus Brinkmann + + * priv-io.h (_gpgme_io_waitpid, _gpgme_io_kill): Removed. + * w32-io.c (_gpgme_io_waitpid, _gpgme_io_kill): Removed. + * posix-io.c (_gpgme_io_kill): Removed. + (_gpgme_io_waitpid): Declare static. + +2005-10-24 Marcus Brinkmann + + * w32-io.c (_gpgme_io_spawn): Don't minimize window, hide it. + +2005-10-21 Werner Koch + + * Makefile.am: Fixed cut+paste problem + +2005-10-20 Marcus Brinkmann + + * Makefile.am: Build versioninfo.lo, not versioninfo.o. Also, fix + the whole mess. + +2005-10-16 Marcus Brinkmann + + * rungpg.c (gpg_edit): Don't add a key argument if in card edit + mode. + +2005-10-06 Marcus Brinkmann + + * Makefile.am (gpgme.dll gpgme.dll.a): Use $(srcdir) for + gpgme.def. + + * gpgme.h (gpgme_free): New prototype. + * data-mem.c (gpgme_free): New function. + * libgpgme.vers (GPGME_1.1): Add gpgme_free. + * gpgme.def: Add gpgme_free. + +2005-10-02 Marcus Brinkmann + + * util.h (_gpgme_decode_percent_string): Add new argument BINARY + to prototype. + * verify.c (parse_notation): Likewise for invocation. + * conversion.c (_gpgme_decode_percent_string): Likewise to + declaration. If set, do not replace '\0' characters with a + printable string. + * gpgme.h (struct _gpgme_key_sig): New field notations. + * ops.h (_gpgme_parse_notation): New prototype. + * sig-notation.c (_gpgme_parse_notation): New function. + * key.c (gpgme_key_unref): Free all signature notations. + * keylist.c (op_data_t): New member tmp_keysig. + (finish_key): Clear OPD->tmp_keysig. + * gpgme.c (gpgme_set_keylist_mode): Remove check. + * rungpg.c (gpg_keylist): Support listing signature notations. + (gpg_keylist_ext): Likewise. + 2005-10-01 Marcus Brinkmann * engine.h (_gpgme_set_engine_info): Add prototype. diff -urpNP gpgme-1.1.0/gpgme/Makefile.am gpgme-1.1.1/gpgme/Makefile.am --- gpgme-1.1.0/gpgme/Makefile.am 2005-10-01 02:06:07.000000000 +0000 +++ gpgme-1.1.1/gpgme/Makefile.am 2005-11-18 23:03:28.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2000 Werner Koch (dd9jn) + # Copyright (C) 2000 Werner Koch (dd9jn) # Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH # # This file is part of GPGME. @@ -39,8 +39,15 @@ else ltlib_gpgme_pth = endif +if BUILD_W32_GLIB +ltlib_gpgme_extra = libgpgme-glib.la +else +ltlib_gpgme_extra = +endif + noinst_LTLIBRARIES = libgpgme-real.la -lib_LTLIBRARIES = libgpgme.la $(ltlib_gpgme_pthread) $(ltlib_gpgme_pth) +lib_LTLIBRARIES = libgpgme.la $(ltlib_gpgme_extra) \ + $(ltlib_gpgme_pthread) $(ltlib_gpgme_pth) if HAVE_LD_VERSION_SCRIPT libgpgme_version_script_cmd = -Wl,--version-script=$(srcdir)/libgpgme.vers @@ -57,9 +64,11 @@ assuan_libobjs = endif if HAVE_DOSISH_SYSTEM -system_components = w32-util.c w32-sema.c w32-io.c +system_components = w32-util.c w32-sema.c +system_components_not_extra = w32-io.c else system_components = ath.h posix-util.c posix-sema.c posix-io.c +system_components_not_extra = endif if HAVE_GPGSM @@ -83,16 +92,57 @@ libgpgme_real_la_SOURCES = \ $(gpgsm_components) sema.h priv-io.h $(system_components) \ debug.c debug.h gpgme.c version.c error.c -libgpgme_la_SOURCES = ath.h ath.c -libgpgme_pthread_la_SOURCES = ath.h ath-pthread.c -libgpgme_pth_la_SOURCES = ath.h ath-pth.c +libgpgme_la_SOURCES = ath.h ath.c $(system_components_not_extra) +libgpgme_pthread_la_SOURCES = \ + ath.h ath-pthread.c $(system_components_not_extra) +libgpgme_pth_la_SOURCES = ath.h ath-pth.c $(system_components_not_extra) + +if BUILD_W32_GLIB +libgpgme_glib_la_SOURCES = ath.h ath.c w32-glib-io.c +endif AM_CPPFLAGS = $(assuan_cppflags) @GPG_ERROR_CFLAGS@ -libgpgme_la_LDFLAGS = $(libgpgme_version_script_cmd) -version-info \ + +if HAVE_W32_SYSTEM + +LTRCCOMPILE = $(LIBTOOL) --mode=compile $(RC) \ + `echo $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) | \ + sed -e 's/-I/--include-dir /g;s/-D/--define /g'` + +%.lo : %.rc + $(LTRCCOMPILE) -i $< -o $@ + +gpgme_res = versioninfo.lo +gpgme_res_ldflag = -Wl,.libs/versioninfo.o + +no_undefined = -no-undefined +export_symbols = -export-symbols $(srcdir)/gpgme.def + +install-def-file: + $(INSTALL) $(srcdir)/gpgme.def $(DESTDIR)$(libdir)/gpgme.def + +uninstall-def-file: + -rm $(DESTDIR)$(libdir)/gpgme.def + +gpgme_deps = $(gpgme_res) gpgme.def + +else +gpgme_res = +gpgme_res_ldflag = +no_undefined = +export_symbols = +install-def-file: +uninstall-def-file: + +gpgme_deps = +endif + +libgpgme_la_LDFLAGS = $(gpgme_res_ldflag) $(no_undefined) $(export_symbols) \ + $(libgpgme_version_script_cmd) -version-info \ @LIBGPGME_LT_CURRENT@:@LIBGPGME_LT_REVISION@:@LIBGPGME_LT_AGE@ libgpgme_la_DEPENDENCIES = libgpgme-real.la $(assuan_libobjs) \ - @LTLIBOBJS@ $(srcdir)/libgpgme.vers + @LTLIBOBJS@ $(srcdir)/libgpgme.vers $(gpgme_deps) libgpgme_la_LIBADD = libgpgme-real.la $(assuan_libobjs) @LTLIBOBJS@ \ @GPG_ERROR_LIBS@ @@ -113,36 +163,20 @@ libgpgme_pth_la_DEPENDENCIES = libgpgme- libgpgme_pth_la_LIBADD = libgpgme-real.la $(assuan_libobjs) @LTLIBOBJS@ \ @PTH_LIBS@ @GPG_ERROR_LIBS@ +if BUILD_W32_GLIB +libgpgme_glib_la_LDFLAGS = $(gpgme_res_ldflag) $(no_undefined) \ + $(export_symbols) $(libgpgme_version_script_cmd) -version-info \ + @LIBGPGME_LT_CURRENT@:@LIBGPGME_LT_REVISION@:@LIBGPGME_LT_AGE@ +libgpgme_glib_la_CFLAGS = $(AM_CFLAGS) @GLIB_CFLAGS@ +libgpgme_glib_la_DEPENDENCIES = libgpgme-real.la $(assuan_libobjs) \ + @LTLIBOBJS@ $(srcdir)/libgpgme.vers $(gpgme_deps) +libgpgme_glib_la_LIBADD = libgpgme-real.la $(assuan_libobjs) @LTLIBOBJS@ \ + @GPG_ERROR_LIBS@ @GLIB_LIBS@ +endif + status-table.h : gpgme.h $(srcdir)/mkstatus < $(srcdir)/gpgme.h > status-table.h -# Special code to build a DLL. The current libtool (1.5.6) is not -# able to do this properly; we better use gcc's built in magic. -if HAVE_W32_SYSTEM - -w32_o_files = ath.o conversion.o data-compat.o data-fd.o \ - data-mem.o data-stream.o data-user.o data.o debug.o \ - decrypt-verify.o decrypt.o delete.o edit.o encrypt-sign.o \ - encrypt.o engine-gpgsm.o engine.o error.o export.o genkey.o \ - get-env.o gpgme.o import.o key.o keylist.o memrchr.o \ - op-support.o passphrase.o progress.o putc_unlocked.o \ - rungpg.o sign.o signers.o trust-item.o trustlist.o \ - ttyname_r.o vasprintf.o verify.o version.o \ - w32-io.o w32-sema.o w32-util.o \ - wait-global.o wait-private.o wait-user.o wait.o - -all-local: gpgme.dll gpgme.dll.a - -install-exec-hook: - cp gpgme.dll gpgme.dll.a $(DESTDIR)$(libdir)/ - $(STRIP) $(DESTDIR)$(libdir)/gpgme.dll - -gpgme.dll gpgme.dll.a: gpgme.def $(w32_o_files) versioninfo.o - $(CC) -shared -o gpgme.dll gpgme.def $(w32_o_files) \ - versioninfo.o @GPG_ERROR_LIBS@ -Wl,--out-implib,gpgme.dll.a +install-data-local: install-def-file - -.rc.o: - $(WINDRES) `test -f '$<' || echo '$(srcdir)/'`$< $@ - -endif +uninstall-local: uninstall-def-file diff -urpNP gpgme-1.1.0/gpgme/Makefile.in gpgme-1.1.1/gpgme/Makefile.in --- gpgme-1.1.0/gpgme/Makefile.in 2005-10-01 21:13:45.000000000 +0000 +++ gpgme-1.1.1/gpgme/Makefile.in 2006-02-23 16:09:49.000000000 +0000 @@ -14,25 +14,6 @@ @SET_MAKE@ -# Copyright (C) 2000 Werner Koch (dd9jn) -# Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH -# -# This file is part of GPGME. -# -# GPGME is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as -# published by the Free Software Foundation; either version 2.1 of the -# License, or (at your option) any later version. -# -# GPGME is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General -# Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - @@ -64,10 +45,10 @@ DIST_COMMON = $(include_HEADERS) $(srcdi $(srcdir)/versioninfo.rc.in ChangeLog funopen.c isascii.c \ memrchr.c putc_unlocked.c ttyname_r.c vasprintf.c ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/glibc21.m4 \ - $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/pth.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/glib-2.0.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gpg-error.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/pth.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -84,10 +65,21 @@ am__installdirs = "$(DESTDIR)$(libdir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) @BUILD_ASSUAN_TRUE@am__DEPENDENCIES_1 = ../assuan/libassuan.la -am_libgpgme_pth_la_OBJECTS = libgpgme_pth_la-ath-pth.lo +am__libgpgme_glib_la_SOURCES_DIST = ath.h ath.c w32-glib-io.c +@BUILD_W32_GLIB_TRUE@am_libgpgme_glib_la_OBJECTS = \ +@BUILD_W32_GLIB_TRUE@ libgpgme_glib_la-ath.lo \ +@BUILD_W32_GLIB_TRUE@ libgpgme_glib_la-w32-glib-io.lo +libgpgme_glib_la_OBJECTS = $(am_libgpgme_glib_la_OBJECTS) +@BUILD_W32_GLIB_TRUE@am_libgpgme_glib_la_rpath = -rpath $(libdir) +am__libgpgme_pth_la_SOURCES_DIST = ath.h ath-pth.c w32-io.c +@HAVE_DOSISH_SYSTEM_TRUE@am__objects_1 = libgpgme_pth_la-w32-io.lo +am_libgpgme_pth_la_OBJECTS = libgpgme_pth_la-ath-pth.lo \ + $(am__objects_1) libgpgme_pth_la_OBJECTS = $(am_libgpgme_pth_la_OBJECTS) @HAVE_PTH_TRUE@am_libgpgme_pth_la_rpath = -rpath $(libdir) -am_libgpgme_pthread_la_OBJECTS = ath-pthread.lo +am__libgpgme_pthread_la_SOURCES_DIST = ath.h ath-pthread.c w32-io.c +@HAVE_DOSISH_SYSTEM_TRUE@am__objects_2 = w32-io.lo +am_libgpgme_pthread_la_OBJECTS = ath-pthread.lo $(am__objects_2) libgpgme_pthread_la_OBJECTS = $(am_libgpgme_pthread_la_OBJECTS) @HAVE_PTHREAD_TRUE@am_libgpgme_pthread_la_rpath = -rpath $(libdir) libgpgme_real_la_LIBADD = @@ -101,12 +93,11 @@ am__libgpgme_real_la_SOURCES_DIST = gpgm delete.c edit.c engine.h engine-backend.h engine.c rungpg.c \ status-table.h engine-gpgsm.c sema.h priv-io.h ath.h \ posix-util.c posix-sema.c posix-io.c w32-util.c w32-sema.c \ - w32-io.c debug.c debug.h gpgme.c version.c error.c -@HAVE_GPGSM_TRUE@am__objects_1 = engine-gpgsm.lo -@HAVE_DOSISH_SYSTEM_FALSE@am__objects_2 = posix-util.lo posix-sema.lo \ + debug.c debug.h gpgme.c version.c error.c +@HAVE_GPGSM_TRUE@am__objects_3 = engine-gpgsm.lo +@HAVE_DOSISH_SYSTEM_FALSE@am__objects_4 = posix-util.lo posix-sema.lo \ @HAVE_DOSISH_SYSTEM_FALSE@ posix-io.lo -@HAVE_DOSISH_SYSTEM_TRUE@am__objects_2 = w32-util.lo w32-sema.lo \ -@HAVE_DOSISH_SYSTEM_TRUE@ w32-io.lo +@HAVE_DOSISH_SYSTEM_TRUE@am__objects_4 = w32-util.lo w32-sema.lo am_libgpgme_real_la_OBJECTS = conversion.lo get-env.lo data.lo \ data-fd.lo data-stream.lo data-mem.lo data-user.lo \ data-compat.lo signers.lo sig-notation.lo wait.lo \ @@ -114,10 +105,11 @@ am_libgpgme_real_la_OBJECTS = conversion encrypt.lo encrypt-sign.lo decrypt.lo decrypt-verify.lo \ verify.lo sign.lo passphrase.lo progress.lo key.lo keylist.lo \ trust-item.lo trustlist.lo import.lo export.lo genkey.lo \ - delete.lo edit.lo engine.lo rungpg.lo $(am__objects_1) \ - $(am__objects_2) debug.lo gpgme.lo version.lo error.lo + delete.lo edit.lo engine.lo rungpg.lo $(am__objects_3) \ + $(am__objects_4) debug.lo gpgme.lo version.lo error.lo libgpgme_real_la_OBJECTS = $(am_libgpgme_real_la_OBJECTS) -am_libgpgme_la_OBJECTS = ath.lo +am__libgpgme_la_SOURCES_DIST = ath.h ath.c w32-io.c +am_libgpgme_la_OBJECTS = ath.lo $(am__objects_2) libgpgme_la_OBJECTS = $(am_libgpgme_la_OBJECTS) binSCRIPT_INSTALL = $(INSTALL_SCRIPT) SCRIPTS = $(bin_SCRIPTS) @@ -132,11 +124,14 @@ LTCOMPILE = $(LIBTOOL) --tag=CC --mode=c CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libgpgme_pth_la_SOURCES) $(libgpgme_pthread_la_SOURCES) \ - $(libgpgme_real_la_SOURCES) $(libgpgme_la_SOURCES) -DIST_SOURCES = $(libgpgme_pth_la_SOURCES) \ - $(libgpgme_pthread_la_SOURCES) \ - $(am__libgpgme_real_la_SOURCES_DIST) $(libgpgme_la_SOURCES) +SOURCES = $(libgpgme_glib_la_SOURCES) $(libgpgme_pth_la_SOURCES) \ + $(libgpgme_pthread_la_SOURCES) $(libgpgme_real_la_SOURCES) \ + $(libgpgme_la_SOURCES) +DIST_SOURCES = $(am__libgpgme_glib_la_SOURCES_DIST) \ + $(am__libgpgme_pth_la_SOURCES_DIST) \ + $(am__libgpgme_pthread_la_SOURCES_DIST) \ + $(am__libgpgme_real_la_SOURCES_DIST) \ + $(am__libgpgme_la_SOURCES_DIST) m4dataDATA_INSTALL = $(INSTALL_DATA) DATA = $(m4data_DATA) includeHEADERS_INSTALL = $(INSTALL_HEADER) @@ -149,6 +144,7 @@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -158,7 +154,10 @@ BUILD_ASSUAN_TRUE = @BUILD_ASSUAN_TRUE@ BUILD_COMPLUS_FALSE = @BUILD_COMPLUS_FALSE@ BUILD_COMPLUS_TRUE = @BUILD_COMPLUS_TRUE@ BUILD_FILEVERSION = @BUILD_FILEVERSION@ +BUILD_REVISION = @BUILD_REVISION@ BUILD_TIMESTAMP = @BUILD_TIMESTAMP@ +BUILD_W32_GLIB_FALSE = @BUILD_W32_GLIB_FALSE@ +BUILD_W32_GLIB_TRUE = @BUILD_W32_GLIB_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -181,6 +180,11 @@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ GPG = @GPG@ GPGME_CONFIG_API_VERSION = @GPGME_CONFIG_API_VERSION@ GPGME_CONFIG_CFLAGS = @GPGME_CONFIG_CFLAGS@ @@ -219,6 +223,7 @@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -227,11 +232,13 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ PTH_CFLAGS = @PTH_CFLAGS@ PTH_CPPFLAGS = @PTH_CPPFLAGS@ PTH_LDFLAGS = @PTH_LDFLAGS@ PTH_LIBS = @PTH_LIBS@ RANLIB = @RANLIB@ +RC = @RC@ RUN_GPGSM_TESTS_FALSE = @RUN_GPGSM_TESTS_FALSE@ RUN_GPGSM_TESTS_TRUE = @RUN_GPGSM_TESTS_TRUE@ RUN_GPG_TESTS_FALSE = @RUN_GPG_TESTS_FALSE@ @@ -240,15 +247,16 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ -WINDRES = @WINDRES@ ac_ct_AR = @ac_ct_AR@ +ac_ct_AS = @ac_ct_AS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DLLTOOL = @ac_ct_DLLTOOL@ ac_ct_F77 = @ac_ct_F77@ +ac_ct_OBJDUMP = @ac_ct_OBJDUMP@ ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_RC = @ac_ct_RC@ ac_ct_STRIP = @ac_ct_STRIP@ -ac_ct_WINDRES = @ac_ct_WINDRES@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ @@ -286,6 +294,23 @@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +# Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH +# +# This file is part of GPGME. +# +# GPGME is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. +# +# GPGME is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General +# Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA EXTRA_DIST = gpgme-config.in gpgme.m4 mkstatus libgpgme.vers \ versioninfo.rc.in gpgme.def @@ -299,8 +324,12 @@ include_HEADERS = gpgme.h @HAVE_PTHREAD_TRUE@ltlib_gpgme_pthread = libgpgme-pthread.la @HAVE_PTH_FALSE@ltlib_gpgme_pth = @HAVE_PTH_TRUE@ltlib_gpgme_pth = libgpgme-pth.la +@BUILD_W32_GLIB_FALSE@ltlib_gpgme_extra = +@BUILD_W32_GLIB_TRUE@ltlib_gpgme_extra = libgpgme-glib.la noinst_LTLIBRARIES = libgpgme-real.la -lib_LTLIBRARIES = libgpgme.la $(ltlib_gpgme_pthread) $(ltlib_gpgme_pth) +lib_LTLIBRARIES = libgpgme.la $(ltlib_gpgme_extra) \ + $(ltlib_gpgme_pthread) $(ltlib_gpgme_pth) + @HAVE_LD_VERSION_SCRIPT_FALSE@libgpgme_version_script_cmd = @HAVE_LD_VERSION_SCRIPT_TRUE@libgpgme_version_script_cmd = -Wl,--version-script=$(srcdir)/libgpgme.vers @BUILD_ASSUAN_FALSE@assuan_cppflags = @@ -308,7 +337,9 @@ lib_LTLIBRARIES = libgpgme.la $(ltlib_gp @BUILD_ASSUAN_FALSE@assuan_libobjs = @BUILD_ASSUAN_TRUE@assuan_libobjs = ../assuan/libassuan.la @HAVE_DOSISH_SYSTEM_FALSE@system_components = ath.h posix-util.c posix-sema.c posix-io.c -@HAVE_DOSISH_SYSTEM_TRUE@system_components = w32-util.c w32-sema.c w32-io.c +@HAVE_DOSISH_SYSTEM_TRUE@system_components = w32-util.c w32-sema.c +@HAVE_DOSISH_SYSTEM_FALSE@system_components_not_extra = +@HAVE_DOSISH_SYSTEM_TRUE@system_components_not_extra = w32-io.c @HAVE_GPGSM_FALSE@gpgsm_components = @HAVE_GPGSM_TRUE@gpgsm_components = engine-gpgsm.c libgpgme_real_la_SOURCES = \ @@ -326,15 +357,33 @@ libgpgme_real_la_SOURCES = \ $(gpgsm_components) sema.h priv-io.h $(system_components) \ debug.c debug.h gpgme.c version.c error.c -libgpgme_la_SOURCES = ath.h ath.c -libgpgme_pthread_la_SOURCES = ath.h ath-pthread.c -libgpgme_pth_la_SOURCES = ath.h ath-pth.c +libgpgme_la_SOURCES = ath.h ath.c $(system_components_not_extra) +libgpgme_pthread_la_SOURCES = \ + ath.h ath-pthread.c $(system_components_not_extra) + +libgpgme_pth_la_SOURCES = ath.h ath-pth.c $(system_components_not_extra) +@BUILD_W32_GLIB_TRUE@libgpgme_glib_la_SOURCES = ath.h ath.c w32-glib-io.c AM_CPPFLAGS = $(assuan_cppflags) @GPG_ERROR_CFLAGS@ -libgpgme_la_LDFLAGS = $(libgpgme_version_script_cmd) -version-info \ +@HAVE_W32_SYSTEM_TRUE@LTRCCOMPILE = $(LIBTOOL) --mode=compile $(RC) \ +@HAVE_W32_SYSTEM_TRUE@ `echo $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) | \ +@HAVE_W32_SYSTEM_TRUE@ sed -e 's/-I/--include-dir /g;s/-D/--define /g'` + +@HAVE_W32_SYSTEM_FALSE@gpgme_res = +@HAVE_W32_SYSTEM_TRUE@gpgme_res = versioninfo.lo +@HAVE_W32_SYSTEM_FALSE@gpgme_res_ldflag = +@HAVE_W32_SYSTEM_TRUE@gpgme_res_ldflag = -Wl,.libs/versioninfo.o +@HAVE_W32_SYSTEM_FALSE@no_undefined = +@HAVE_W32_SYSTEM_TRUE@no_undefined = -no-undefined +@HAVE_W32_SYSTEM_FALSE@export_symbols = +@HAVE_W32_SYSTEM_TRUE@export_symbols = -export-symbols $(srcdir)/gpgme.def +@HAVE_W32_SYSTEM_FALSE@gpgme_deps = +@HAVE_W32_SYSTEM_TRUE@gpgme_deps = $(gpgme_res) gpgme.def +libgpgme_la_LDFLAGS = $(gpgme_res_ldflag) $(no_undefined) $(export_symbols) \ + $(libgpgme_version_script_cmd) -version-info \ @LIBGPGME_LT_CURRENT@:@LIBGPGME_LT_REVISION@:@LIBGPGME_LT_AGE@ libgpgme_la_DEPENDENCIES = libgpgme-real.la $(assuan_libobjs) \ - @LTLIBOBJS@ $(srcdir)/libgpgme.vers + @LTLIBOBJS@ $(srcdir)/libgpgme.vers $(gpgme_deps) libgpgme_la_LIBADD = libgpgme-real.la $(assuan_libobjs) @LTLIBOBJS@ \ @GPG_ERROR_LIBS@ @@ -360,25 +409,22 @@ libgpgme_pth_la_DEPENDENCIES = libgpgme- libgpgme_pth_la_LIBADD = libgpgme-real.la $(assuan_libobjs) @LTLIBOBJS@ \ @PTH_LIBS@ @GPG_ERROR_LIBS@ +@BUILD_W32_GLIB_TRUE@libgpgme_glib_la_LDFLAGS = $(gpgme_res_ldflag) $(no_undefined) \ +@BUILD_W32_GLIB_TRUE@ $(export_symbols) $(libgpgme_version_script_cmd) -version-info \ +@BUILD_W32_GLIB_TRUE@ @LIBGPGME_LT_CURRENT@:@LIBGPGME_LT_REVISION@:@LIBGPGME_LT_AGE@ + +@BUILD_W32_GLIB_TRUE@libgpgme_glib_la_CFLAGS = $(AM_CFLAGS) @GLIB_CFLAGS@ +@BUILD_W32_GLIB_TRUE@libgpgme_glib_la_DEPENDENCIES = libgpgme-real.la $(assuan_libobjs) \ +@BUILD_W32_GLIB_TRUE@ @LTLIBOBJS@ $(srcdir)/libgpgme.vers $(gpgme_deps) -# Special code to build a DLL. The current libtool (1.5.6) is not -# able to do this properly; we better use gcc's built in magic. -@HAVE_W32_SYSTEM_TRUE@w32_o_files = ath.o conversion.o data-compat.o data-fd.o \ -@HAVE_W32_SYSTEM_TRUE@ data-mem.o data-stream.o data-user.o data.o debug.o \ -@HAVE_W32_SYSTEM_TRUE@ decrypt-verify.o decrypt.o delete.o edit.o encrypt-sign.o \ -@HAVE_W32_SYSTEM_TRUE@ encrypt.o engine-gpgsm.o engine.o error.o export.o genkey.o \ -@HAVE_W32_SYSTEM_TRUE@ get-env.o gpgme.o import.o key.o keylist.o memrchr.o \ -@HAVE_W32_SYSTEM_TRUE@ op-support.o passphrase.o progress.o putc_unlocked.o \ -@HAVE_W32_SYSTEM_TRUE@ rungpg.o sign.o signers.o trust-item.o trustlist.o \ -@HAVE_W32_SYSTEM_TRUE@ ttyname_r.o vasprintf.o verify.o version.o \ -@HAVE_W32_SYSTEM_TRUE@ w32-io.o w32-sema.o w32-util.o \ -@HAVE_W32_SYSTEM_TRUE@ wait-global.o wait-private.o wait-user.o wait.o +@BUILD_W32_GLIB_TRUE@libgpgme_glib_la_LIBADD = libgpgme-real.la $(assuan_libobjs) @LTLIBOBJS@ \ +@BUILD_W32_GLIB_TRUE@ @GPG_ERROR_LIBS@ @GLIB_LIBS@ all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: -.SUFFIXES: .c .lo .o .obj .rc +.SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ @@ -448,6 +494,8 @@ clean-noinstLTLIBRARIES: echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done +libgpgme-glib.la: $(libgpgme_glib_la_OBJECTS) $(libgpgme_glib_la_DEPENDENCIES) + $(LINK) $(am_libgpgme_glib_la_rpath) $(libgpgme_glib_la_LDFLAGS) $(libgpgme_glib_la_OBJECTS) $(libgpgme_glib_la_LIBADD) $(LIBS) libgpgme-pth.la: $(libgpgme_pth_la_OBJECTS) $(libgpgme_pth_la_DEPENDENCIES) $(LINK) $(am_libgpgme_pth_la_rpath) $(libgpgme_pth_la_LDFLAGS) $(libgpgme_pth_la_OBJECTS) $(libgpgme_pth_la_LIBADD) $(LIBS) libgpgme-pthread.la: $(libgpgme_pthread_la_OBJECTS) $(libgpgme_pthread_la_DEPENDENCIES) @@ -514,7 +562,10 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/import.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/key.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keylist.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgpgme_glib_la-ath.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgpgme_glib_la-w32-glib-io.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgpgme_pth_la-ath-pth.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgpgme_pth_la-w32-io.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/op-support.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/passphrase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/posix-io.Plo@am__quote@ @@ -558,6 +609,20 @@ distclean-compile: @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< +libgpgme_glib_la-ath.lo: ath.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgpgme_glib_la_CFLAGS) $(CFLAGS) -MT libgpgme_glib_la-ath.lo -MD -MP -MF "$(DEPDIR)/libgpgme_glib_la-ath.Tpo" -c -o libgpgme_glib_la-ath.lo `test -f 'ath.c' || echo '$(srcdir)/'`ath.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgpgme_glib_la-ath.Tpo" "$(DEPDIR)/libgpgme_glib_la-ath.Plo"; else rm -f "$(DEPDIR)/libgpgme_glib_la-ath.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ath.c' object='libgpgme_glib_la-ath.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgpgme_glib_la_CFLAGS) $(CFLAGS) -c -o libgpgme_glib_la-ath.lo `test -f 'ath.c' || echo '$(srcdir)/'`ath.c + +libgpgme_glib_la-w32-glib-io.lo: w32-glib-io.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgpgme_glib_la_CFLAGS) $(CFLAGS) -MT libgpgme_glib_la-w32-glib-io.lo -MD -MP -MF "$(DEPDIR)/libgpgme_glib_la-w32-glib-io.Tpo" -c -o libgpgme_glib_la-w32-glib-io.lo `test -f 'w32-glib-io.c' || echo '$(srcdir)/'`w32-glib-io.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgpgme_glib_la-w32-glib-io.Tpo" "$(DEPDIR)/libgpgme_glib_la-w32-glib-io.Plo"; else rm -f "$(DEPDIR)/libgpgme_glib_la-w32-glib-io.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='w32-glib-io.c' object='libgpgme_glib_la-w32-glib-io.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgpgme_glib_la_CFLAGS) $(CFLAGS) -c -o libgpgme_glib_la-w32-glib-io.lo `test -f 'w32-glib-io.c' || echo '$(srcdir)/'`w32-glib-io.c + libgpgme_pth_la-ath-pth.lo: ath-pth.c @am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgpgme_pth_la_CPPFLAGS) $(CPPFLAGS) $(libgpgme_pth_la_CFLAGS) $(CFLAGS) -MT libgpgme_pth_la-ath-pth.lo -MD -MP -MF "$(DEPDIR)/libgpgme_pth_la-ath-pth.Tpo" -c -o libgpgme_pth_la-ath-pth.lo `test -f 'ath-pth.c' || echo '$(srcdir)/'`ath-pth.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgpgme_pth_la-ath-pth.Tpo" "$(DEPDIR)/libgpgme_pth_la-ath-pth.Plo"; else rm -f "$(DEPDIR)/libgpgme_pth_la-ath-pth.Tpo"; exit 1; fi @@ -565,6 +630,13 @@ libgpgme_pth_la-ath-pth.lo: ath-pth.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgpgme_pth_la_CPPFLAGS) $(CPPFLAGS) $(libgpgme_pth_la_CFLAGS) $(CFLAGS) -c -o libgpgme_pth_la-ath-pth.lo `test -f 'ath-pth.c' || echo '$(srcdir)/'`ath-pth.c +libgpgme_pth_la-w32-io.lo: w32-io.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgpgme_pth_la_CPPFLAGS) $(CPPFLAGS) $(libgpgme_pth_la_CFLAGS) $(CFLAGS) -MT libgpgme_pth_la-w32-io.lo -MD -MP -MF "$(DEPDIR)/libgpgme_pth_la-w32-io.Tpo" -c -o libgpgme_pth_la-w32-io.lo `test -f 'w32-io.c' || echo '$(srcdir)/'`w32-io.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgpgme_pth_la-w32-io.Tpo" "$(DEPDIR)/libgpgme_pth_la-w32-io.Plo"; else rm -f "$(DEPDIR)/libgpgme_pth_la-w32-io.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='w32-io.c' object='libgpgme_pth_la-w32-io.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgpgme_pth_la_CPPFLAGS) $(CPPFLAGS) $(libgpgme_pth_la_CFLAGS) $(CFLAGS) -c -o libgpgme_pth_la-w32-io.lo `test -f 'w32-io.c' || echo '$(srcdir)/'`w32-io.c + mostlyclean-libtool: -rm -f *.lo @@ -687,9 +759,7 @@ distdir: $(DISTFILES) check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am -@HAVE_W32_SYSTEM_FALSE@all-local: -all-am: Makefile $(LTLIBRARIES) $(SCRIPTS) $(DATA) $(HEADERS) \ - all-local +all-am: Makefile $(LTLIBRARIES) $(SCRIPTS) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(m4datadir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ @@ -721,7 +791,6 @@ maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -@HAVE_W32_SYSTEM_FALSE@install-exec-hook: clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ @@ -743,11 +812,10 @@ info: info-am info-am: -install-data-am: install-includeHEADERS install-m4dataDATA +install-data-am: install-data-local install-includeHEADERS \ + install-m4dataDATA install-exec-am: install-binSCRIPTS install-libLTLIBRARIES - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-info: install-info-am @@ -774,41 +842,44 @@ ps: ps-am ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-includeHEADERS \ - uninstall-info-am uninstall-libLTLIBRARIES \ + uninstall-info-am uninstall-libLTLIBRARIES uninstall-local \ + uninstall-m4dataDATA + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ + ctags distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binSCRIPTS \ + install-data install-data-am install-data-local install-exec \ + install-exec-am install-includeHEADERS install-info \ + install-info-am install-libLTLIBRARIES install-m4dataDATA \ + install-man install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binSCRIPTS uninstall-includeHEADERS \ + uninstall-info-am uninstall-libLTLIBRARIES uninstall-local \ uninstall-m4dataDATA -.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ - clean-generic clean-libLTLIBRARIES clean-libtool \ - clean-noinstLTLIBRARIES ctags distclean distclean-compile \ - distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-binSCRIPTS install-data install-data-am install-exec \ - install-exec-am install-exec-hook install-includeHEADERS \ - install-info install-info-am install-libLTLIBRARIES \ - install-m4dataDATA install-man install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-binSCRIPTS \ - uninstall-includeHEADERS uninstall-info-am \ - uninstall-libLTLIBRARIES uninstall-m4dataDATA + # Copyright (C) 2000 Werner Koch (dd9jn) +@HAVE_W32_SYSTEM_TRUE@%.lo : %.rc +@HAVE_W32_SYSTEM_TRUE@ $(LTRCCOMPILE) -i $< -o $@ + +@HAVE_W32_SYSTEM_TRUE@install-def-file: +@HAVE_W32_SYSTEM_TRUE@ $(INSTALL) $(srcdir)/gpgme.def $(DESTDIR)$(libdir)/gpgme.def + +@HAVE_W32_SYSTEM_TRUE@uninstall-def-file: +@HAVE_W32_SYSTEM_TRUE@ -rm $(DESTDIR)$(libdir)/gpgme.def +@HAVE_W32_SYSTEM_FALSE@install-def-file: +@HAVE_W32_SYSTEM_FALSE@uninstall-def-file: status-table.h : gpgme.h $(srcdir)/mkstatus < $(srcdir)/gpgme.h > status-table.h -@HAVE_W32_SYSTEM_TRUE@all-local: gpgme.dll gpgme.dll.a - -@HAVE_W32_SYSTEM_TRUE@install-exec-hook: -@HAVE_W32_SYSTEM_TRUE@ cp gpgme.dll gpgme.dll.a $(DESTDIR)$(libdir)/ -@HAVE_W32_SYSTEM_TRUE@ $(STRIP) $(DESTDIR)$(libdir)/gpgme.dll - -@HAVE_W32_SYSTEM_TRUE@gpgme.dll gpgme.dll.a: gpgme.def $(w32_o_files) versioninfo.o -@HAVE_W32_SYSTEM_TRUE@ $(CC) -shared -o gpgme.dll gpgme.def $(w32_o_files) \ -@HAVE_W32_SYSTEM_TRUE@ versioninfo.o @GPG_ERROR_LIBS@ -Wl,--out-implib,gpgme.dll.a +install-data-local: install-def-file -@HAVE_W32_SYSTEM_TRUE@.rc.o: -@HAVE_W32_SYSTEM_TRUE@ $(WINDRES) `test -f '$<' || echo '$(srcdir)/'`$< $@ +uninstall-local: uninstall-def-file # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -urpNP gpgme-1.1.0/gpgme/conversion.c gpgme-1.1.1/gpgme/conversion.c --- gpgme-1.1.0/gpgme/conversion.c 2005-09-08 14:42:31.000000000 +0000 +++ gpgme-1.1.1/gpgme/conversion.c 2005-10-02 14:24:22.000000000 +0000 @@ -174,9 +174,11 @@ _gpgme_decode_c_string (const char *src, large enough buffer is allocated with malloc and *DESTP is set to the result. Currently, LEN is only used to specify if allocation is desired or not, the caller is expected to make sure that *DESTP - is large enough if LEN is not zero. */ + is large enough if LEN is not zero. If BINARY is 1, then '\0' + characters are allowed in the output. */ gpgme_error_t -_gpgme_decode_percent_string (const char *src, char **destp, size_t len) +_gpgme_decode_percent_string (const char *src, char **destp, size_t len, + int binary) { char *dest; @@ -222,7 +224,7 @@ _gpgme_decode_percent_string (const char } else { - if (!val) + if (!val && !binary) { /* A binary zero is not representable in a C string. */ diff -urpNP gpgme-1.1.0/gpgme/data-mem.c gpgme-1.1.1/gpgme/data-mem.c --- gpgme-1.1.0/gpgme/data-mem.c 2005-09-08 14:42:31.000000000 +0000 +++ gpgme-1.1.1/gpgme/data-mem.c 2005-10-06 10:06:15.000000000 +0000 @@ -161,6 +161,7 @@ static struct _gpgme_data_cbs mem_cbs = }; +/* Create a new data buffer and return it in R_DH. */ gpgme_error_t gpgme_data_new (gpgme_data_t *dh) { @@ -200,6 +201,9 @@ gpgme_data_new_from_mem (gpgme_data_t *d } +/* Destroy the data buffer DH and return a pointer to its content. + The memory has be to released with gpgme_free() by the user. It's + size is returned in R_LEN. */ char * gpgme_data_release_and_get_mem (gpgme_data_t dh, size_t *r_len) { @@ -222,3 +226,13 @@ gpgme_data_release_and_get_mem (gpgme_da return str; } + + +/* Release the memory returned by gpgme_data_release_and_get_mem(). */ +void +gpgme_free (void *buffer) +{ + if (buffer) + free (buffer); +} + diff -urpNP gpgme-1.1.0/gpgme/debug.c gpgme-1.1.1/gpgme/debug.c --- gpgme-1.1.0/gpgme/debug.c 2005-09-08 14:42:31.000000000 +0000 +++ gpgme-1.1.1/gpgme/debug.c 2006-02-09 19:56:31.000000000 +0000 @@ -1,6 +1,6 @@ /* debug.c - helpful output in desperate situations 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. diff -urpNP gpgme-1.1.0/gpgme/debug.h gpgme-1.1.1/gpgme/debug.h --- gpgme-1.1.0/gpgme/debug.h 2005-09-08 14:42:31.000000000 +0000 +++ gpgme-1.1.1/gpgme/debug.h 2006-02-09 19:56:31.000000000 +0000 @@ -1,5 +1,5 @@ /* debug.h - interface to debugging functions - Copyright (C) 2002, 2004 g10 Code GmbH + Copyright (C) 2002, 2004, 2005 g10 Code GmbH This file is part of GPGME. @@ -21,6 +21,20 @@ #ifndef DEBUG_H #define DEBUG_H +#include + +/* Remove path components from filenames (i.e. __FILE__) for cleaner + logs. */ +static inline const char *_gpgme_debug_srcname (const char *file) + GPGME_GCC_A_PURE; + +static inline const char * +_gpgme_debug_srcname (const char *file) +{ + const char *s = strrchr (file, '/'); + return s? s+1:file; +} + /* Log the formatted string FORMAT at debug level LEVEL or higher. */ void _gpgme_debug (int level, const char *format, ...); @@ -76,22 +90,26 @@ void _gpgme_debug_end (void **helper); #else /* This finally works everywhere, horror. */ #define DEBUG0(fmt) \ - _gpgme_debug (1, "%s:%s: " fmt, __FILE__, XSTRINGIFY (__LINE__)) + _gpgme_debug (1, "%s:%s: " fmt, _gpgme_debug_srcname (__FILE__), \ + XSTRINGIFY (__LINE__)) #define DEBUG1(fmt,a) \ - _gpgme_debug (1, "%s:%s: " fmt, __FILE__, XSTRINGIFY (__LINE__), (a)) + _gpgme_debug (1, "%s:%s: " fmt, _gpgme_debug_srcname (__FILE__), \ + XSTRINGIFY (__LINE__), (a)) #define DEBUG2(fmt,a,b) \ - _gpgme_debug (1, "%s:%s: " fmt, __FILE__, XSTRINGIFY (__LINE__), (a), (b)) + _gpgme_debug (1, "%s:%s: " fmt, _gpgme_debug_srcname (__FILE__), \ + XSTRINGIFY (__LINE__), (a), (b)) #define DEBUG3(fmt,a,b,c) \ - _gpgme_debug (1, "%s:%s: " fmt, __FILE__, XSTRINGIFY (__LINE__), (a), (b), \ - (c)) + _gpgme_debug (1, "%s:%s: " fmt, _gpgme_debug_srcname (__FILE__), \ + XSTRINGIFY (__LINE__), (a), (b), (c)) #define DEBUG4(fmt,a,b,c,d) \ - _gpgme_debug (1, "%s:%s: " fmt, __FILE__, XSTRINGIFY (__LINE__), (a), (b), \ - (c), (d)) + _gpgme_debug (1, "%s:%s: " fmt, _gpgme_debug_srcname (__FILE__), \ + XSTRINGIFY (__LINE__), (a), (b), (c), (d)) #define DEBUG5(fmt,a,b,c,d,e) \ - _gpgme_debug (1, "%s:%s: " fmt, __FILE__, XSTRINGIFY (__LINE__), (a), (b), \ - (c), (d), (e)) + _gpgme_debug (1, "%s:%s: " fmt, _gpgme_debug_srcname (__FILE__), \ + XSTRINGIFY (__LINE__), (a), (b), (c), (d), (e)) #define DEBUG_BEGIN(hlp,lvl,fmt) \ - _gpgme_debug_begin (&(hlp), lvl, "%s:%s: " fmt, __FILE__, XSTRINGIFY (__LINE__)) + _gpgme_debug_begin (&(hlp), lvl, "%s:%s: " fmt, \ + _gpgme_debug_srcname (__FILE__), XSTRINGIFY (__LINE__)) #define DEBUG_ADD0(hlp,fmt) \ _gpgme_debug_add (&(hlp), fmt) #define DEBUG_ADD1(hlp,fmt,a) \ diff -urpNP gpgme-1.1.0/gpgme/engine.c gpgme-1.1.1/gpgme/engine.c --- gpgme-1.1.0/gpgme/engine.c 2005-10-01 20:14:48.000000000 +0000 +++ gpgme-1.1.1/gpgme/engine.c 2006-02-22 11:37:32.000000000 +0000 @@ -1,6 +1,6 @@ /* engine.c - GPGME engine support. Copyright (C) 2000 Werner Koch (dd9jn) - Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH + Copyright (C) 2001, 2002, 2003, 2004, 2006 g10 Code GmbH This file is part of GPGME. @@ -106,14 +106,33 @@ engine_get_req_version (gpgme_protocol_t gpgme_error_t gpgme_engine_check_version (gpgme_protocol_t proto) { + gpgme_error_t err; + gpgme_engine_info_t info; int result; - char *engine_version = engine_get_version (proto, NULL); - result = _gpgme_compare_versions (engine_version, - engine_get_req_version (proto)); - if (engine_version) - free (engine_version); + LOCK (engine_info_lock); + info = engine_info; + if (!info) + { + /* Make sure it is initialized. */ + UNLOCK (engine_info_lock); + err = gpgme_get_engine_info (&info); + if (err) + return err; + LOCK (engine_info_lock); + } + + while (info && info->protocol != proto) + info = info->next; + + if (!info) + result = 0; + else + result = _gpgme_compare_versions (info->version, + info->req_version); + + UNLOCK (engine_info_lock); return result ? 0 : gpg_error (GPG_ERR_INV_ENGINE); } @@ -335,7 +354,7 @@ _gpgme_set_engine_info (gpgme_engine_inf /* Install the new members. */ info->file_name = new_file_name; info->home_dir = new_home_dir; - info->version = engine_get_version (proto, file_name); + info->version = engine_get_version (proto, new_file_name); return 0; } diff -urpNP gpgme-1.1.0/gpgme/gpgme-config.in gpgme-1.1.1/gpgme/gpgme-config.in --- gpgme-1.1.0/gpgme/gpgme-config.in 2005-09-08 14:42:31.000000000 +0000 +++ gpgme-1.1.1/gpgme/gpgme-config.in 2005-11-18 23:03:28.000000000 +0000 @@ -25,9 +25,10 @@ thread_modules="" libs_pth="@PTH_LDFLAGS@ @PTH_LIBS@" cflags_pth="@PTH_CFLAGS@" -@HAVE_PTHREAD_TRUE@thread_modules="$thread_modules pthread" -libs_pthread="-lpthread" -cflags_pthread="" +# Configure glib. +libs_glib="@GLIB_LIBS@" +cflags_glib="@GLIB_CFLAGS@" +with_glib= output="" @@ -74,6 +75,9 @@ while test $# -gt 0; do --exec-prefix) output="$output $exec_prefix" ;; + --glib) + with_glib=yes + ;; --version) echo "@VERSION@" exit 0 @@ -95,6 +99,9 @@ while test $# -gt 0; do ;; esac output="$output $gpg_error_cflags" + if test "x$with_glib" = "xyes"; then + output="$output $glib_cflags" + fi ;; --libs) if test "x$libdir" != "x/usr/lib" -a "x$libdir" != "x/lib"; then @@ -105,12 +112,20 @@ while test $# -gt 0; do output="$output -lgpgme-pthread $libs_pthread" ;; pth) - output="$output -lgpgme-pth $libs_pth" + output="$output -lgpgme-pth $libs_pth" ;; *) - output="$output -lgpgme" + if test "x$with_glib" = "xyes"; then + output="$output -lgpgme-glib" + else + output="$output -lgpgme" + fi + ;; esac output="$output $gpg_error_libs" + if test "x$with_glib" = "xyes"; then + output="$output $glib_cflags" + fi ;; --thread=*) for thread_mod in $thread_modules; do diff -urpNP gpgme-1.1.0/gpgme/gpgme.c gpgme-1.1.1/gpgme/gpgme.c --- gpgme-1.1.0/gpgme/gpgme.c 2005-10-01 02:06:07.000000000 +0000 +++ gpgme-1.1.1/gpgme/gpgme.c 2005-10-02 14:24:22.000000000 +0000 @@ -251,11 +251,6 @@ gpgme_get_include_certs (gpgme_ctx_t ctx gpgme_error_t gpgme_set_keylist_mode (gpgme_ctx_t ctx, gpgme_keylist_mode_t mode) { - if (!((mode & GPGME_KEYLIST_MODE_LOCAL) - || (mode & GPGME_KEYLIST_MODE_EXTERN) - || (mode & GPGME_KEYLIST_MODE_SIGS))) - return gpg_error (GPG_ERR_INV_VALUE); - ctx->keylist_mode = mode; return 0; } diff -urpNP gpgme-1.1.0/gpgme/gpgme.def gpgme-1.1.1/gpgme/gpgme.def --- gpgme-1.1.0/gpgme/gpgme.def 2005-10-01 02:06:07.000000000 +0000 +++ gpgme-1.1.1/gpgme/gpgme.def 2005-11-18 23:03:28.000000000 +0000 @@ -151,5 +151,8 @@ EXPORTS gpgme_sig_notation_add @118 gpgme_sig_notation_get @119 + gpgme_free @120 + + gpgme_get_giochannel @121 ; END diff -urpNP gpgme-1.1.0/gpgme/gpgme.h gpgme-1.1.1/gpgme/gpgme.h --- gpgme-1.1.0/gpgme/gpgme.h 2005-10-01 21:13:02.000000000 +0000 +++ gpgme-1.1.1/gpgme/gpgme.h 2006-02-23 16:10:04.000000000 +0000 @@ -72,7 +72,7 @@ extern "C" { AM_PATH_GPGME macro) check that this header matches the installed library. Warning: Do not edit the next line. configure will do that for you! */ -#define GPGME_VERSION "1.1.0" +#define GPGME_VERSION "1.1.1" @@ -305,10 +305,11 @@ gpgme_protocol_t; /* The available keylist mode flags. */ -#define GPGME_KEYLIST_MODE_LOCAL 1 -#define GPGME_KEYLIST_MODE_EXTERN 2 -#define GPGME_KEYLIST_MODE_SIGS 4 -#define GPGME_KEYLIST_MODE_VALIDATE 256 +#define GPGME_KEYLIST_MODE_LOCAL 1 +#define GPGME_KEYLIST_MODE_EXTERN 2 +#define GPGME_KEYLIST_MODE_SIGS 4 +#define GPGME_KEYLIST_MODE_SIG_NOTATIONS 8 +#define GPGME_KEYLIST_MODE_VALIDATE 256 typedef unsigned int gpgme_keylist_mode_t; @@ -444,6 +445,8 @@ typedef enum GPGME_STATUS_SC_OP_SUCCESS, GPGME_STATUS_CARDCTRL, GPGME_STATUS_BACKUP_KEY_CREATED, + GPGME_STATUS_PKA_TRUST_BAD, + GPGME_STATUS_PKA_TRUST_GOOD, GPGME_STATUS_PLAINTEXT } @@ -594,6 +597,12 @@ struct _gpgme_key_sig /* Crypto backend specific signature class. */ unsigned int sig_class; + + /* Notation data and policy URLs. */ + gpgme_sig_notation_t notations; + + /* Internal to GPGME, do not use. */ + gpgme_sig_notation_t _last_notation; }; typedef struct _gpgme_key_sig *gpgme_key_sig_t; @@ -989,10 +998,13 @@ gpgme_error_t gpgme_data_new_from_mem (g int copy); /* Destroy the data buffer DH and return a pointer to its content. - The memory has be to released with free by the user. It's size is - returned in R_LEN. */ + The memory has be to released with gpgme_free() by the user. It's + size is returned in R_LEN. */ char *gpgme_data_release_and_get_mem (gpgme_data_t dh, size_t *r_len); +/* Release the memory returned by gpgme_data_release_and_get_mem(). */ +void gpgme_free (void *buffer); + gpgme_error_t gpgme_data_new_from_cbs (gpgme_data_t *dh, gpgme_data_cbs_t cbs, void *handle); @@ -1008,11 +1020,11 @@ gpgme_data_encoding_t gpgme_data_get_enc gpgme_error_t gpgme_data_set_encoding (gpgme_data_t dh, gpgme_data_encoding_t enc); -/* Get the filename associated with the data object with handle DH, or +/* Get the file name associated with the data object with handle DH, or NULL if there is none. */ char *gpgme_data_get_file_name (gpgme_data_t dh); -/* Set the filename associated with the data object with handle DH to +/* Set the file name associated with the data object with handle DH to FILE_NAME. */ gpgme_error_t gpgme_data_set_file_name (gpgme_data_t dh, const char *file_name); @@ -1308,8 +1320,11 @@ struct _gpgme_signature /* Key should not have been used for signing. */ unsigned int wrong_key_usage : 1; + /* PKA status: 0 = not available, 1 = bad, 2 = okay, 3 = RFU. */ + unsigned int pka_trust : 2; + /* Internal to GPGME, do not use. */ - int _unused : 31; + int _unused : 29; gpgme_validity_t validity; gpgme_error_t validity_reason; @@ -1319,6 +1334,9 @@ struct _gpgme_signature /* The hash algorithm used to create the signature. */ gpgme_hash_algo_t hash_algo; + + /* The mailbox from the PKA information or NULL. */ + char *pka_address; }; typedef struct _gpgme_signature *gpgme_signature_t; diff -urpNP gpgme-1.1.0/gpgme/gpgme.m4 gpgme-1.1.1/gpgme/gpgme.m4 --- gpgme-1.1.0/gpgme/gpgme.m4 2005-09-08 14:42:31.000000000 +0000 +++ gpgme-1.1.1/gpgme/gpgme.m4 2005-11-18 23:03:28.000000000 +0000 @@ -236,3 +236,72 @@ AC_DEFUN([AM_PATH_GPGME_PTHREAD], AC_SUBST(GPGME_PTHREAD_CFLAGS) AC_SUBST(GPGME_PTHREAD_LIBS) ]) + + +dnl AM_PATH_GPGME_GLIB([MINIMUM-VERSION, +dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) +dnl Test for libgpgme-glib and define GPGME_GLIB_CFLAGS and GPGME_GLIB_LIBS. +dnl +AC_DEFUN([AM_PATH_GPGME_GLIB], +[ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl + tmp=ifelse([$1], ,1:0.4.2,$1) + if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then + req_gpgme_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` + min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` + else + req_gpgme_api=0 + min_gpgme_version="$tmp" + fi + + AC_MSG_CHECKING(for GPGME - version >= $min_gpgme_version) + ok=no + if test "$GPGME_CONFIG" != "no" ; then + req_major=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` + req_minor=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` + req_micro=`echo $min_gpgme_version | \ + sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` + if test "$gpgme_version_major" -gt "$req_major"; then + ok=yes + else + if test "$gpgme_version_major" -eq "$req_major"; then + if test "$gpgme_version_minor" -gt "$req_minor"; then + ok=yes + else + if test "$gpgme_version_minor" -eq "$req_minor"; then + if test "$gpgme_version_micro" -ge "$req_micro"; then + ok=yes + fi + fi + fi + fi + fi + fi + if test $ok = yes; then + # If we have a recent GPGME, we should also check that the + # API is compatible. + if test "$req_gpgme_api" -gt 0 ; then + tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0` + if test "$tmp" -gt 0 ; then + if test "$req_gpgme_api" -ne "$tmp" ; then + ok=no + fi + fi + fi + fi + if test $ok = yes; then + GPGME_GLIB_CFLAGS=`$GPGME_CONFIG --glib --cflags` + GPGME_GLIB_LIBS=`$GPGME_CONFIG --glib --libs` + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + GPGME_GLIB_CFLAGS="" + GPGME_GLIB_LIBS="" + AC_MSG_RESULT(no) + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GPGME_GLIB_CFLAGS) + AC_SUBST(GPGME_GLIB_LIBS) +]) + diff -urpNP gpgme-1.1.0/gpgme/key.c gpgme-1.1.1/gpgme/key.c --- gpgme-1.1.0/gpgme/key.c 2005-09-08 14:42:31.000000000 +0000 +++ gpgme-1.1.1/gpgme/key.c 2005-10-02 14:24:22.000000000 +0000 @@ -337,9 +337,19 @@ gpgme_key_unref (gpgme_key_t key) while (keysig) { - gpgme_key_sig_t next = keysig->next; + gpgme_key_sig_t next_keysig = keysig->next; + gpgme_sig_notation_t notation = keysig->notations; + + while (notation) + { + gpgme_sig_notation_t next_notation = notation->next; + + _gpgme_sig_notation_free (notation); + notation = next_notation; + } + free (keysig); - keysig = next; + keysig = next_keysig; } free (uid); uid = next_uid; diff -urpNP gpgme-1.1.0/gpgme/keylist.c gpgme-1.1.1/gpgme/keylist.c --- gpgme-1.1.0/gpgme/keylist.c 2005-09-29 17:29:14.000000000 +0000 +++ gpgme-1.1.1/gpgme/keylist.c 2006-02-22 11:37:43.000000000 +0000 @@ -1,6 +1,6 @@ /* keylist.c - Listing keys. Copyright (C) 2000 Werner Koch (dd9jn) - Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH + Copyright (C) 2001, 2002, 2003, 2004, 2006 g10 Code GmbH This file is part of GPGME. @@ -48,8 +48,13 @@ typedef struct struct _gpgme_op_keylist_result result; gpgme_key_t tmp_key; + /* This points to the last uid in tmp_key. */ gpgme_user_id_t tmp_uid; + + /* This points to the last sig in tmp_uid. */ + gpgme_key_sig_t tmp_keysig; + /* Something new is available. */ int key_cond; struct key_queue_item_s *key_queue; @@ -64,8 +69,9 @@ release_op_data (void *hook) if (opd->tmp_key) gpgme_key_unref (opd->tmp_key); - /* opd->tmp_uid is actually part of opd->tmp_key, so we do not need - to release it here. */ + + /* opd->tmp_uid and opd->tmp_keysig are actually part of opd->tmp_key, + so we do not need to release them here. */ while (key) { @@ -170,7 +176,8 @@ set_mainkey_trust_info (gpgme_key_t key, case 'd': /* Note that gpg 1.3 won't print that anymore but only uses - the capabilities field. */ + the capabilities field. However, it is still used for + external key listings. */ key->disabled = 1; break; @@ -351,6 +358,7 @@ finish_key (gpgme_ctx_t ctx, op_data_t o opd->tmp_key = NULL; opd->tmp_uid = NULL; + opd->tmp_keysig = NULL; if (key) _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_NEXT_KEY, key); @@ -365,10 +373,10 @@ keylist_colon_handler (void *priv, char enum { RT_NONE, RT_SIG, RT_UID, RT_SUB, RT_PUB, RT_FPR, - RT_SSB, RT_SEC, RT_CRT, RT_CRS, RT_REV + RT_SSB, RT_SEC, RT_CRT, RT_CRS, RT_REV, RT_SPK } rectype = RT_NONE; -#define NR_FIELDS 13 +#define NR_FIELDS 16 char *field[NR_FIELDS]; int fields = 0; void *hook; @@ -423,6 +431,8 @@ keylist_colon_handler (void *priv, char rectype = RT_SUB; else if (!strcmp (field[0], "ssb") && key) rectype = RT_SSB; + else if (!strcmp (field[0], "spk") && key) + rectype = RT_SPK; else rectype = RT_NONE; @@ -432,6 +442,12 @@ keylist_colon_handler (void *priv, char if (rectype != RT_SIG && rectype != RT_REV) opd->tmp_uid = NULL; + /* Only look at subpackets immediately following a signature. For + this, clear the signature pointer when encountering anything but + a subpacket. */ + if (rectype != RT_SPK) + opd->tmp_keysig = NULL; + switch (rectype) { case RT_PUB: @@ -451,7 +467,7 @@ keylist_colon_handler (void *priv, char } if (rectype == RT_SEC || rectype == RT_CRS) - key->secret = 1; + key->secret = subkey->secret = 1; if (rectype == RT_CRT || rectype == RT_CRS) key->protocol = GPGME_PROTOCOL_CMS; finish_key (ctx, opd); @@ -478,8 +494,9 @@ keylist_colon_handler (void *priv, char subkey->pubkey_algo = i; } - /* Field 5 has the long keyid. */ - if (fields >= 5 && strlen (field[4]) == DIM(subkey->_keyid) - 1) + /* Field 5 has the long keyid. Allow short key IDs for the + output of an external keyserver listing. */ + if (fields >= 5 && strlen (field[4]) <= DIM(subkey->_keyid) - 1) strcpy (subkey->_keyid, field[4]); /* Field 6 has the timestamp (seconds). */ @@ -513,6 +530,13 @@ keylist_colon_handler (void *priv, char /* Field 12 has the capabilities. */ if (fields >= 12) set_mainkey_capability (key, field[11]); + + /* Field 15 carries special flags of a secret key. We reset the + SECRET flag of a subkey here if the key is actually only a + stub. The SECRET flag of the key will be true even then. */ + if (fields >= 15 && key->secret) + if (*field[14] == '#') + subkey->secret = 0; break; case RT_SUB: @@ -567,6 +591,11 @@ keylist_colon_handler (void *priv, char /* Field 12 has the capabilities. */ if (fields >= 12) set_subkey_capability (subkey, field[11]); + + /* Field 15 carries special flags of a secret key. */ + if (fields >= 15 && key->secret) + if (*field[14] == '#') + subkey->secret = 0; break; case RT_UID: @@ -586,11 +615,17 @@ keylist_colon_handler (void *priv, char case RT_FPR: /* Field 10 has the fingerprint (take only the first one). */ - if (fields >= 10 && !key->subkeys->fpr && field[9] && *field[9]) + if (fields >= 10 && field[9] && *field[9]) { - key->subkeys->fpr = strdup (field[9]); - if (!key->subkeys->fpr) - return gpg_error_from_errno (errno); + /* Need to apply it to the last subkey because all subkeys + do have fingerprints. */ + subkey = key->_last_subkey; + if (!subkey->fpr) + { + subkey->fpr = strdup (field[9]); + if (!subkey->fpr) + return gpg_error_from_errno (errno); + } } /* Field 13 has the gpgsm chain ID (take only the first one). */ @@ -673,8 +708,51 @@ keylist_colon_handler (void *priv, char if (field[10][2] == 'x') keysig->exportable = 1; } + + opd->tmp_keysig = keysig; break; + case RT_SPK: + if (!opd->tmp_keysig) + return 0; + assert (opd->tmp_keysig == key->_last_uid->_last_keysig); + + if (fields >= 4) + { + /* Field 2 has the subpacket type. */ + int type = atoi (field[1]); + + /* Field 3 has the flags. */ + int flags = atoi (field[2]); + + /* Field 4 has the length. */ + int len = atoi (field[3]); + + /* Field 5 has the data. */ + char *data = field[4]; + + /* Type 20: Notation data. */ + /* Type 26: Policy URL. */ + if (type == 20 || type == 26) + { + gpgme_sig_notation_t notation; + + keysig = opd->tmp_keysig; + + /* At this time, any error is serious. */ + err = _gpgme_parse_notation (¬ation, type, flags, len, data); + if (err) + return err; + + /* Add a new notation. FIXME: Could be factored out. */ + if (!keysig->notations) + keysig->notations = notation; + if (keysig->_last_notation) + keysig->_last_notation->next = notation; + keysig->_last_notation = notation; + } + } + case RT_NONE: /* Unknown record. */ break; diff -urpNP gpgme-1.1.0/gpgme/libgpgme.vers gpgme-1.1.1/gpgme/libgpgme.vers --- gpgme-1.1.0/gpgme/libgpgme.vers 2005-10-01 02:06:07.000000000 +0000 +++ gpgme-1.1.1/gpgme/libgpgme.vers 2005-10-06 10:06:58.000000000 +0000 @@ -34,6 +34,8 @@ GPGME_1.1 { gpgme_sig_notation_clear; gpgme_sig_notation_add; gpgme_sig_notation_get; + + gpgme_free; }; diff -urpNP gpgme-1.1.0/gpgme/ops.h gpgme-1.1.1/gpgme/ops.h --- gpgme-1.1.0/gpgme/ops.h 2005-10-01 02:06:07.000000000 +0000 +++ gpgme-1.1.1/gpgme/ops.h 2005-10-02 14:24:22.000000000 +0000 @@ -160,4 +160,10 @@ gpgme_error_t _gpgme_sig_notation_create pointer is ignored. */ void _gpgme_sig_notation_free (gpgme_sig_notation_t notation); +/* Parse a notation or policy URL subpacket. If the packet type is + not known, return no error but NULL in NOTATION. */ +gpgme_error_t _gpgme_parse_notation (gpgme_sig_notation_t *notationp, + int type, int pkflags, int len, + char *data); + #endif /* OPS_H */ diff -urpNP gpgme-1.1.0/gpgme/posix-io.c gpgme-1.1.1/gpgme/posix-io.c --- gpgme-1.1.0/gpgme/posix-io.c 2005-09-08 14:42:31.000000000 +0000 +++ gpgme-1.1.1/gpgme/posix-io.c 2005-11-18 23:03:27.000000000 +0000 @@ -56,6 +56,16 @@ _gpgme_io_subsystem_init (void) } } + +/* Write the printable version of FD to the buffer BUF of length + BUFLEN. The printable version is the representation on the command + line that the child process expects. */ +int +_gpgme_io_fd2str (char *buf, int buflen, int fd) +{ + return snprintf (buf, buflen, "%d", fd); +} + static struct { @@ -174,6 +184,30 @@ _gpgme_io_set_nonblocking (int fd) } +static int +_gpgme_io_waitpid (int pid, int hang, int *r_status, int *r_signal) +{ + int status; + + *r_status = 0; + *r_signal = 0; + if (_gpgme_ath_waitpid (pid, &status, hang? 0 : WNOHANG) == pid) + { + if (WIFSIGNALED (status)) + { + *r_status = 4; /* Need some value here. */ + *r_signal = WTERMSIG (status); + } + else if (WIFEXITED (status)) + *r_status = WEXITSTATUS (status); + else + *r_status = 4; /* Oops. */ + return 1; + } + return 0; +} + + /* Returns 0 on success, -1 on error. */ int _gpgme_io_spawn (const char *path, char **argv, @@ -273,37 +307,6 @@ _gpgme_io_spawn (const char *path, char } -int -_gpgme_io_waitpid (int pid, int hang, int *r_status, int *r_signal) -{ - int status; - - *r_status = 0; - *r_signal = 0; - if (_gpgme_ath_waitpid (pid, &status, hang? 0 : WNOHANG) == pid) - { - if (WIFSIGNALED (status)) - { - *r_status = 4; /* Need some value here. */ - *r_signal = WTERMSIG (status); - } - else if (WIFEXITED (status)) - *r_status = WEXITSTATUS (status); - else - *r_status = 4; /* Oops. */ - return 1; - } - return 0; -} - - -int -_gpgme_io_kill (int pid, int hard) -{ - return kill (pid, hard ? SIGKILL : SIGTERM); -} - - /* * Select on the list of fds. * Returns: -1 = error diff -urpNP gpgme-1.1.0/gpgme/posix-util.c gpgme-1.1.1/gpgme/posix-util.c --- gpgme-1.1.0/gpgme/posix-util.c 2005-09-08 14:42:31.000000000 +0000 +++ gpgme-1.1.1/gpgme/posix-util.c 2006-02-09 19:56:31.000000000 +0000 @@ -48,3 +48,10 @@ _gpgme_get_gpgsm_path (void) return NULL; #endif } + +/* See w32-util.c */ +int +_gpgme_get_conf_int (const char *key, int *value) +{ + return 0; +} diff -urpNP gpgme-1.1.0/gpgme/priv-io.h gpgme-1.1.1/gpgme/priv-io.h --- gpgme-1.1.0/gpgme/priv-io.h 2005-09-08 14:42:31.000000000 +0000 +++ gpgme-1.1.1/gpgme/priv-io.h 2005-11-18 23:03:28.000000000 +0000 @@ -57,11 +57,11 @@ int _gpgme_io_set_nonblocking (int fd); int _gpgme_io_spawn (const char *path, char **argv, struct spawn_fd_item_s *fd_child_list, struct spawn_fd_item_s *fd_parent_list); -int _gpgme_io_waitpid (int pid, int hang, int *r_status, int *r_signal); -int _gpgme_io_kill (int pid, int hard); int _gpgme_io_select (struct io_select_fd_s *fds, size_t nfds, int nonblock); -#endif /* IO_H */ - - +/* Write the printable version of FD to the buffer BUF of length + BUFLEN. The printable version is the representation on the command + line that the child process expects. */ +int _gpgme_io_fd2str (char *buf, int buflen, int fd); +#endif /* IO_H */ diff -urpNP gpgme-1.1.0/gpgme/rungpg.c gpgme-1.1.1/gpgme/rungpg.c --- gpgme-1.1.0/gpgme/rungpg.c 2005-10-01 02:06:07.000000000 +0000 +++ gpgme-1.1.1/gpgme/rungpg.c 2006-02-22 11:37:25.000000000 +0000 @@ -1,6 +1,6 @@ /* rungpg.c - Gpg Engine. Copyright (C) 2000 Werner Koch (dd9jn) - Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH + Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 g10 Code GmbH This file is part of GPGME. @@ -65,6 +65,8 @@ struct fd_data_map_s }; +typedef gpgme_error_t (*colon_preprocessor_t) (char *line, char **rline); + struct engine_gpg { char *file_name; @@ -95,6 +97,7 @@ struct engine_gpg engine_colon_line_handler_t fnc; /* this indicate use of this structrue */ void *fnc_value; void *tag; + colon_preprocessor_t preprocess_fnc; } colon; char **argv; @@ -407,7 +410,7 @@ gpg_new (void **engine, const char *file { char buf[25]; - sprintf (buf, "%d", gpg->status.fd[1]); + _gpgme_io_fd2str (buf, sizeof (buf), gpg->status.fd[1]); rc = add_arg (gpg, buf); if (rc) goto leave; @@ -720,7 +723,10 @@ build_argv (engine_gpg_t gpg) fd_data_map[datac].dup_to = a->dup_to; if (a->dup_to == -1) { - argv[argc] = malloc (25); + char *ptr; + int buflen = 25; + + argv[argc] = malloc (buflen); if (!argv[argc]) { int saved_errno = errno; @@ -728,9 +734,16 @@ build_argv (engine_gpg_t gpg) free_argv (argv); return gpg_error_from_errno (saved_errno); } - sprintf (argv[argc], - a->print_fd ? "%d" : "-&%d", - fd_data_map[datac].peer_fd); + + ptr = argv[argc]; + if (!a->print_fd) + { + *(ptr++) = '-'; + *(ptr++) = '&'; + buflen -= 2; + } + + _gpgme_io_fd2str (ptr, buflen, fd_data_map[datac].peer_fd); argc++; } datac++; @@ -1003,14 +1016,27 @@ read_colon_line (engine_gpg_t gpg) { /* (we require that the last line is terminated by a LF) and we skip empty lines. Note: we use UTF8 encoding - and escaping of special characters We require at + and escaping of special characters. We require at least one colon to cope with some other printed information. */ *p = 0; if (*buffer && strchr (buffer, ':')) { + char *line = NULL; + + if (gpg->colon.preprocess_fnc) + { + gpgme_error_t err; + + err = gpg->colon.preprocess_fnc (buffer, &line); + if (err) + return err; + } + assert (gpg->colon.fnc); - gpg->colon.fnc (gpg->colon.fnc_value, buffer); + gpg->colon.fnc (gpg->colon.fnc_value, line ? line : buffer); + if (line) + free (line); } /* To reuse the buffer for the next line we have to @@ -1356,7 +1382,7 @@ gpg_edit (void *engine, int type, gpgme_ err = add_data (gpg, out, 1, 1); if (!err) err = add_arg (gpg, "--"); - if (!err) + if (!err && type == 0) { const char *s = key->subkeys ? key->subkeys->fpr : NULL; if (!s) @@ -1603,6 +1629,93 @@ gpg_import (void *engine, gpgme_data_t k } +/* The output for external keylistings in GnuPG is different from all + the other key listings. We catch this here with a special + preprocessor that reformats the colon handler lines. */ +static gpgme_error_t +gpg_keylist_preprocess (char *line, char **r_line) +{ + enum + { + RT_NONE, RT_INFO, RT_PUB, RT_UID + } + rectype = RT_NONE; +#define NR_FIELDS 16 + char *field[NR_FIELDS]; + int fields = 0; + + *r_line = NULL; + + while (line && fields < NR_FIELDS) + { + field[fields++] = line; + line = strchr (line, ':'); + if (line) + *(line++) = '\0'; + } + + if (!strcmp (field[0], "info")) + rectype = RT_INFO; + else if (!strcmp (field[0], "pub")) + rectype = RT_PUB; + else if (!strcmp (field[0], "uid")) + rectype = RT_UID; + else + rectype = RT_NONE; + + switch (rectype) + { + case RT_INFO: + /* FIXME: Eventually, check the version number at least. */ + return 0; + + case RT_PUB: + if (fields < 7) + return 0; + + /* The format is: + + pub:::::: + + as defined in 5.2. Machine Readable Indexes of the OpenPGP + HTTP Keyserver Protocol (draft). + + We want: + pub:o::::::::::::: + */ + + if (asprintf (r_line, "pub:o%s:%s:%s:%s:%s:%s::::::::", + field[6], field[3], field[2], field[1], + field[4], field[5]) < 0) + return gpg_error_from_errno (errno); + return 0; + + case RT_UID: + /* The format is: + + uid:::: + + as defined in 5.2. Machine Readable Indexes of the OpenPGP + HTTP Keyserver Protocol (draft). + + We want: + uid:o::::::::: + */ + + if (asprintf (r_line, "uid:o%s::::%s:%s:::%s:", + field[4], field[2], field[3], field[1]) < 0) + return gpg_error_from_errno (errno); + return 0; + + case RT_NONE: + /* Unknown record. */ + break; + } + return 0; + +} + + static gpgme_error_t gpg_keylist (void *engine, const char *pattern, int secret_only, gpgme_keylist_mode_t mode) @@ -1610,6 +1723,13 @@ gpg_keylist (void *engine, const char *p engine_gpg_t gpg = engine; gpgme_error_t err; + if (mode & GPGME_KEYLIST_MODE_EXTERN) + { + if ((mode & GPGME_KEYLIST_MODE_LOCAL) + || secret_only) + return gpg_error (GPG_ERR_NOT_SUPPORTED); + } + err = add_arg (gpg, "--with-colons"); if (!err) err = add_arg (gpg, "--fixed-list-mode"); @@ -1617,11 +1737,28 @@ gpg_keylist (void *engine, const char *p err = add_arg (gpg, "--with-fingerprint"); if (!err) err = add_arg (gpg, "--with-fingerprint"); + if (!err && (mode & GPGME_KEYLIST_MODE_SIGS) + && (mode & GPGME_KEYLIST_MODE_SIG_NOTATIONS)) + { + err = add_arg (gpg, "--list-options"); + if (!err) + err = add_arg (gpg, "show-sig-subpackets=\"20,26\""); + } if (!err) - err = add_arg (gpg, secret_only ? "--list-secret-keys" - : ((mode & GPGME_KEYLIST_MODE_SIGS) - ? "--check-sigs" : "--list-keys")); - + { + if (mode & GPGME_KEYLIST_MODE_EXTERN) + { + err = add_arg (gpg, "--search-keys"); + gpg->colon.preprocess_fnc = gpg_keylist_preprocess; + } + else + { + err = add_arg (gpg, secret_only ? "--list-secret-keys" + : ((mode & GPGME_KEYLIST_MODE_SIGS) + ? "--check-sigs" : "--list-keys")); + } + } + /* Tell the gpg object about the data. */ if (!err) err = add_arg (gpg, "--"); @@ -1652,6 +1789,13 @@ gpg_keylist_ext (void *engine, const cha err = add_arg (gpg, "--with-fingerprint"); if (!err) err = add_arg (gpg, "--with-fingerprint"); + if (!err && (mode & GPGME_KEYLIST_MODE_SIGS) + && (mode & GPGME_KEYLIST_MODE_SIG_NOTATIONS)) + { + err = add_arg (gpg, "--list-options"); + if (!err) + err = add_arg (gpg, "show-sig-subpackets=\"20,26\""); + } if (!err) err = add_arg (gpg, secret_only ? "--list-secret-keys" : ((mode & GPGME_KEYLIST_MODE_SIGS) diff -urpNP gpgme-1.1.0/gpgme/sig-notation.c gpgme-1.1.1/gpgme/sig-notation.c --- gpgme-1.1.0/gpgme/sig-notation.c 2005-10-01 02:06:07.000000000 +0000 +++ gpgme-1.1.1/gpgme/sig-notation.c 2005-10-02 14:24:22.000000000 +0000 @@ -80,7 +80,10 @@ _gpgme_sig_notation_create (gpgme_sig_no if (!notation) return gpg_error_from_errno (errno); - if (name_len) + /* This is critical. We want to reliably identify policy URLs by + using a NULL pointer for NAME. So all notations must have a NAME + string, even if it is empty. */ + if (name) { /* We add a trailing '\0' for stringification in the good case. */ @@ -96,7 +99,7 @@ _gpgme_sig_notation_create (gpgme_sig_no notation->name_len = name_len; } - if (value_len) + if (value) { /* We add a trailing '\0' for stringification in the good case. */ @@ -121,3 +124,137 @@ _gpgme_sig_notation_create (gpgme_sig_no _gpgme_sig_notation_free (notation); return err; } + + +/* GnuPG subpacket flags. */ + +/* This subpacket data is part of the hashed data. */ +#define GNUPG_SPK_HASHED 0x01 + +/* This subpacket is marked critical. */ +#define GNUPG_SPK_CRITICAL 0x02 + +/* Parse a notation or policy URL subpacket. If the packet type is + not known, return no error but NULL in NOTATION. */ +gpgme_error_t +_gpgme_parse_notation (gpgme_sig_notation_t *notationp, + int type, int pkflags, int len, char *data) +{ + gpgme_error_t err; + char *name = NULL; + int name_len = 0; + char *value = NULL; + int value_len = 0; + gpgme_sig_notation_flags_t flags = 0; + char *decoded_data; + unsigned char *bdata; + + /* Type 20: Notation data. */ + /* Type 26: Policy URL. */ + if (type != 20 && type != 26) + { + *notationp = NULL; + return 0; + } + + /* A few simple sanity checks. */ + if (len > strlen (data)) + return gpg_error (GPG_ERR_INV_ENGINE); + + /* See below for the format of a notation subpacket. It has at + least four octets of flags and two times two octets of length + information. */ + if (type == 20 && len < 4 + 2 + 2) + return gpg_error (GPG_ERR_INV_ENGINE); + + err = _gpgme_decode_percent_string (data, &decoded_data, 0, 1); + if (err) + return err; + bdata = (unsigned char *) decoded_data; + + /* Flags common to notation data and policy URL. */ + if (pkflags & GNUPG_SPK_CRITICAL) + flags |= GPGME_SIG_NOTATION_CRITICAL; + + /* This information is relevant in parsing multi-octet numbers below: + + 3.1. Scalar numbers + + Scalar numbers are unsigned, and are always stored in big-endian + format. Using n[k] to refer to the kth octet being interpreted, + the value of a two-octet scalar is ((n[0] << 8) + n[1]). The + value of a four-octet scalar is ((n[0] << 24) + (n[1] << 16) + + (n[2] << 8) + n[3]). + + From RFC2440: OpenPGP Message Format. Copyright (C) The Internet + Society (1998). All Rights Reserved. */ +#define RFC2440_GET_WORD(chr) ((((int)((unsigned char *)(chr))[0]) << 8) \ + + ((int)((unsigned char *)(chr))[1])) + + if (type == 20) + { + /* 5.2.3.15. Notation Data + + (4 octets of flags, 2 octets of name length (M), + 2 octets of value length (N), M octets of name data, + N octets of value data) + + [...] The "flags" field holds four octets of flags. + All undefined flags MUST be zero. Defined flags are: + + First octet: 0x80 = human-readable. [...] + Other octets: none. + + From RFC2440: OpenPGP Message Format. Copyright (C) The + Internet Society (1998). All Rights Reserved. */ + + int chr; + + /* First octet of flags. */ +#define RFC2440_SPK20_FLAG1_HUMAN_READABLE 0x80 + + chr = *bdata; + bdata++; + + if (chr & RFC2440_SPK20_FLAG1_HUMAN_READABLE) + flags |= GPGME_SIG_NOTATION_HUMAN_READABLE; + + /* The second, third and four octet of flags are unused. */ + bdata++; + bdata++; + bdata++; + + name_len = RFC2440_GET_WORD (bdata); + bdata += 2; + + value_len = RFC2440_GET_WORD (bdata); + bdata += 2; + + /* Small sanity check. */ + if (4 + 2 + 2 + name_len + value_len > len) + { + free (decoded_data); + return gpg_error (GPG_ERR_INV_ENGINE); + } + + name = (char *) bdata; + bdata += name_len; + + value = (char *) bdata; + } + else + { + /* Type is 26. */ + + /* NAME is NULL, name_len is 0. */ + + value = (char *) bdata; + value_len = strlen (value); + } + + err = _gpgme_sig_notation_create (notationp, name, name_len, + value, value_len, flags); + + free (decoded_data); + return err; +} diff -urpNP gpgme-1.1.0/gpgme/status-table.h gpgme-1.1.1/gpgme/status-table.h --- gpgme-1.1.0/gpgme/status-table.h 2005-10-01 21:15:17.000000000 +0000 +++ gpgme-1.1.1/gpgme/status-table.h 2006-02-23 16:35:51.000000000 +0000 @@ -62,6 +62,8 @@ static struct status_table_s status_tabl { "NO_PUBKEY", GPGME_STATUS_NO_PUBKEY }, { "NO_RECP", GPGME_STATUS_NO_RECP }, { "NO_SECKEY", GPGME_STATUS_NO_SECKEY }, + { "PKA_TRUST_BAD", GPGME_STATUS_PKA_TRUST_BAD }, + { "PKA_TRUST_GOOD", GPGME_STATUS_PKA_TRUST_GOOD }, { "PLAINTEXT", GPGME_STATUS_PLAINTEXT }, { "POLICY_URL", GPGME_STATUS_POLICY_URL }, { "PROGRESS", GPGME_STATUS_PROGRESS }, diff -urpNP gpgme-1.1.0/gpgme/util.h gpgme-1.1.1/gpgme/util.h --- gpgme-1.1.0/gpgme/util.h 2005-09-08 14:42:31.000000000 +0000 +++ gpgme-1.1.1/gpgme/util.h 2006-02-09 19:56:31.000000000 +0000 @@ -31,6 +31,7 @@ /*-- {posix,w32}-util.c --*/ const char *_gpgme_get_gpg_path (void); const char *_gpgme_get_gpgsm_path (void); +int _gpgme_get_conf_int (const char *key, int *value); /*-- replacement functions in .c --*/ @@ -80,9 +81,10 @@ gpgme_error_t _gpgme_decode_c_string (co large enough buffer is allocated with malloc and *DESTP is set to the result. Currently, LEN is only used to specify if allocation is desired or not, the caller is expected to make sure that *DESTP - is large enough if LEN is not zero. */ + is large enough if LEN is not zero. If BINARY is 1, then '\0' + characters are allowed in the output. */ gpgme_error_t _gpgme_decode_percent_string (const char *src, char **destp, - size_t len); + size_t len, int binary); /* Parse the string TIMESTAMP into a time_t. The string may either be diff -urpNP gpgme-1.1.0/gpgme/verify.c gpgme-1.1.1/gpgme/verify.c --- gpgme-1.1.0/gpgme/verify.c 2005-10-01 02:06:07.000000000 +0000 +++ gpgme-1.1.1/gpgme/verify.c 2006-02-09 19:56:31.000000000 +0000 @@ -64,6 +64,8 @@ release_op_data (void *hook) if (sig->fpr) free (sig->fpr); + if (sig->pka_address) + free (sig->pka_address); free (sig); sig = next; } @@ -434,7 +436,7 @@ parse_notation (gpgme_signature_t sig, g if (code == GPGME_STATUS_NOTATION_NAME) { - err = _gpgme_decode_percent_string (args, ¬ation->name, 0); + err = _gpgme_decode_percent_string (args, ¬ation->name, 0, 0); if (err) { _gpgme_sig_notation_free (notation); @@ -453,7 +455,7 @@ parse_notation (gpgme_signature_t sig, g { /* This is a policy URL. */ - err = _gpgme_decode_percent_string (args, ¬ation->value, 0); + err = _gpgme_decode_percent_string (args, ¬ation->value, 0, 0); if (err) { _gpgme_sig_notation_free (notation); @@ -497,7 +499,7 @@ parse_notation (gpgme_signature_t sig, g dest += cur_len; } - err = _gpgme_decode_percent_string (args, &dest, len); + err = _gpgme_decode_percent_string (args, &dest, len, 0); if (err) return err; @@ -588,6 +590,7 @@ _gpgme_verify_status_handler (void *priv void *hook; op_data_t opd; gpgme_signature_t sig; + char *end; err = _gpgme_op_data_lookup (ctx, OPDATA_VERIFY, &hook, -1, NULL); opd = hook; @@ -651,6 +654,20 @@ _gpgme_verify_status_handler (void *priv return sig ? parse_trust (sig, code, args) : gpg_error (GPG_ERR_INV_ENGINE); + case GPGME_STATUS_PKA_TRUST_BAD: + case GPGME_STATUS_PKA_TRUST_GOOD: + opd->only_newsig_seen = 0; + /* Check that we only get one of these status codes per + signature; if not the crypto backend misbehaves. */ + if (!sig || sig->pka_trust || sig->pka_address) + return gpg_error (GPG_ERR_INV_ENGINE); + sig->pka_trust = code == GPGME_STATUS_PKA_TRUST_GOOD? 2 : 1; + end = strchr (args, ' '); + if (end) + *end = 0; + sig->pka_address = strdup (args); + break; + case GPGME_STATUS_ERROR: opd->only_newsig_seen = 0; /* The error status is informational, so we don't return an diff -urpNP gpgme-1.1.0/gpgme/versioninfo.rc.in gpgme-1.1.1/gpgme/versioninfo.rc.in --- gpgme-1.1.0/gpgme/versioninfo.rc.in 2005-09-08 14:42:31.000000000 +0000 +++ gpgme-1.1.1/gpgme/versioninfo.rc.in 2005-11-18 23:03:28.000000000 +0000 @@ -18,7 +18,7 @@ VS_VERSION_INFO VERSIONINFO - FILEVERSION @BUILD_FILEVERSION@ + FILEVERSION @LIBGPGME_LT_CURRENT@,@LIBGPGME_LT_AGE@,@LIBGPGME_LT_REVISION@,@BUILD_REVISION@ PRODUCTVERSION @BUILD_FILEVERSION@ FILEFLAGSMASK 0x3fL #ifdef _DEBUG @@ -37,7 +37,7 @@ BEGIN VALUE "Comments", "Provided under the terms of the GNU Lesser General Public License.\0" VALUE "CompanyName", "g10 Code GmbH\0" VALUE "FileDescription", "GPGME - GnuPG Made Easy\0" - VALUE "FileVersion", "@VERSION@\0" + VALUE "FileVersion", "@LIBGPGME_LT_CURRENT@.@LIBGPGME_LT_AGE@.@LIBGPGME_LT_REVISION@.@BUILD_REVISION@\0" VALUE "InternalName", "gpgme\0" VALUE "LegalCopyright", "Copyright © 2005 g10 Code GmbH\0" VALUE "LegalTrademarks", "\0" diff -urpNP gpgme-1.1.0/gpgme/w32-glib-io.c gpgme-1.1.1/gpgme/w32-glib-io.c --- gpgme-1.1.0/gpgme/w32-glib-io.c 1970-01-01 00:00:00.000000000 +0000 +++ gpgme-1.1.1/gpgme/w32-glib-io.c 2006-02-09 19:56:31.000000000 +0000 @@ -0,0 +1,635 @@ +/* w32-glib-io.c - W32 Glib I/O functions + Copyright (C) 2000 Werner Koch (dd9jn) + Copyright (C) 2001, 2002, 2004, 2005 g10 Code GmbH + + This file is part of GPGME. + + GPGME is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + GPGME is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "util.h" +#include "priv-io.h" +#include "sema.h" +#include "debug.h" + + + +/* This file is an ugly hack to get GPGME working with glib on Windows + targets. On Windows, you can not select() on file descriptors. + The only way to check if there is something to read is to read + something. This means that GPGME can not let glib check for data + without letting glib also handle the data on Windows targets. + + The ugly consequence is that we need to work on GIOChannels in + GPGME, creating a glib dependency. Also, we need to export an + interface for the application to get at GPGME's GIOChannel. There + is no good way to abstract all this with callbacks, because the + whole thing is also interconnected with the creation of pipes and + child processes. + + The following rule applies only to this I/O backend: + + * ALL operations must use the user defined event loop. GPGME can + not anymore provide its own event loop. This is mostly a sanity + requirement: Although we have in theory all information we need to + make the GPGME W32 code for select still work, it would be a big + complication and require changes throughout GPGME. + + Eventually, we probably have to bite the bullet and make some + really nice callback interfaces to let the user control all this at + a per-context level. */ + + +#define MAX_SLAFD 256 + +GIOChannel *giochannel_table[MAX_SLAFD]; + + +static GIOChannel * +find_channel (int fd, int create) +{ + if (fd < 0 || fd >= MAX_SLAFD) + return NULL; + + if (create && !giochannel_table[fd]) + { + giochannel_table[fd] = g_io_channel_win32_new_fd (fd); + g_io_channel_set_encoding (giochannel_table[fd], NULL, NULL); + g_io_channel_set_buffered (giochannel_table[fd], FALSE); + } + + return giochannel_table[fd]; +} + +/* Look up the giochannel for "file descriptor" FD. */ +GIOChannel * +gpgme_get_giochannel (int fd) +{ + return find_channel (fd, 0); +} + + +/* Write the printable version of FD to the buffer BUF of length + BUFLEN. The printable version is the representation on the command + line that the child process expects. */ +int +_gpgme_io_fd2str (char *buf, int buflen, int fd) +{ + return snprintf (buf, buflen, "%ld", (long) _get_osfhandle (fd)); +} + + +void +_gpgme_io_subsystem_init (void) +{ +} + + +static struct +{ + void (*handler) (int,void*); + void *value; +} notify_table[MAX_SLAFD]; + +int +_gpgme_io_read (int fd, void *buffer, size_t count) +{ + int saved_errno = 0; + gsize nread; + GIOChannel *chan; + GIOStatus status; + + DEBUG2 ("fd %d: about to read %d bytes\n", fd, (int) count); + + chan = find_channel (fd, 0); + if (!chan) + { + DEBUG1 ("fd %d: no channel registered\n", fd); + errno = EINVAL; + return -1; + } + DEBUG2 ("fd %d: channel %p\n", fd, chan); + + { + GError *err = NULL; + status = g_io_channel_read_chars (chan, (gchar *) buffer, + count, &nread, &err); + if (err) + { + DEBUG3 ("fd %d: status %i, err %s\n", fd, status, err->message); + g_error_free (err); + } + } + + if (status == G_IO_STATUS_EOF) + nread = 0; + else if (status != G_IO_STATUS_NORMAL) + { + DEBUG2 ("fd %d: status %d\n", fd, status); + nread = -1; + saved_errno = EIO; + } + + DEBUG2 ("fd %d: got %d bytes\n", fd, nread); + if (nread > 0) + _gpgme_debug (2, "fd %d: got `%.*s'\n", fd, nread, buffer); + + errno = saved_errno; + return nread; +} + + +int +_gpgme_io_write (int fd, const void *buffer, size_t count) +{ + int saved_errno = 0; + gsize nwritten; + GIOChannel *chan; + GIOStatus status; + + DEBUG2 ("fd %d: about to write %d bytes\n", fd, (int) count); + _gpgme_debug (2, "fd %d: write `%.*s'\n", fd, (int) count, buffer); + + chan = find_channel (fd, 0); + if (!chan) + { + DEBUG1 ("fd %d: no channel registered\n", fd); + errno = EINVAL; + return -1; + } + + status = g_io_channel_write_chars (chan, (gchar *) buffer, count, + &nwritten, NULL); + if (status != G_IO_STATUS_NORMAL) + { + nwritten = -1; + saved_errno = EIO; + } + DEBUG2 ("fd %d: wrote %d bytes\n", fd, (int) nwritten); + errno = saved_errno; + return nwritten; +} + + +int +_gpgme_io_pipe (int filedes[2], int inherit_idx) +{ + GIOChannel *chan; + +#define PIPEBUF_SIZE 4096 + if (_pipe (filedes, PIPEBUF_SIZE, O_NOINHERIT) == -1) + return -1; + + /* Make one end inheritable. */ + if (inherit_idx == 0) + { + int new_read; + + new_read = _dup (filedes[0]); + _close (filedes[0]); + filedes[0] = new_read; + + if (new_read < 0) + { + _close (filedes[1]); + return -1; + } + } + else if (inherit_idx == 1) + { + int new_write; + + new_write = _dup (filedes[1]); + _close (filedes[1]); + filedes[1] = new_write; + + if (new_write < 0) + { + _close (filedes[0]); + return -1; + } + } + + /* Now we have a pipe with the right end inheritable. The other end + should have a giochannel. */ + chan = find_channel (filedes[1 - inherit_idx], 1); + if (!chan) + { + DEBUG2 ("channel creation for %d failed: ec=%d\n", + filedes[1 - inherit_idx], errno); + _close (filedes[0]); + _close (filedes[1]); + return -1; + } + + DEBUG5 ("CreatePipe %d (%p) %d (%p) inherit=%p\n", + filedes[0], (HANDLE) _get_osfhandle (filedes[0]), + filedes[1], (HANDLE) _get_osfhandle (filedes[1]), + chan); + return 0; +} + + +int +_gpgme_io_close (int fd) +{ + GIOChannel *chan; + + if (fd < 0 || fd >= MAX_SLAFD) + { + errno = EBADF; + return -1; + } + + /* First call the notify handler. */ + DEBUG1 ("closing fd %d", fd); + if (notify_table[fd].handler) + { + notify_table[fd].handler (fd, notify_table[fd].value); + notify_table[fd].handler = NULL; + notify_table[fd].value = NULL; + } + + /* Then do the close. */ + chan = giochannel_table[fd]; + if (chan) + { + g_io_channel_shutdown (chan, 1, NULL); + g_io_channel_unref (chan); + giochannel_table[fd] = NULL; + } + else + _close (fd); + + + return 0; +} + + +int +_gpgme_io_set_close_notify (int fd, void (*handler)(int, void*), void *value) +{ + assert (fd != -1); + + if (fd < 0 || fd >= (int) DIM (notify_table)) + return -1; + DEBUG1 ("set notification for fd %d", fd); + notify_table[fd].handler = handler; + notify_table[fd].value = value; + return 0; +} + + +int +_gpgme_io_set_nonblocking (int fd) +{ + GIOChannel *chan; + GIOStatus status; + + chan = find_channel (fd, 0); + if (!chan) + { + DEBUG1 ("set nonblocking for fd %d failed: channel not found", fd); + errno = EIO; + return -1; + } + + status = g_io_channel_set_flags (chan, + g_io_channel_get_flags (chan) | + G_IO_FLAG_NONBLOCK, NULL); + if (status != G_IO_STATUS_NORMAL) + { + /* glib 1.9.2 does not implement set_flags and returns an error. */ + DEBUG2 ("set nonblocking for fd %d failed: status=%d - ignored", + fd, status); +/* errno = EIO; */ +/* return -1; */ + } + + return 0; +} + + +static char * +build_commandline ( char **argv ) +{ + int i, n = 0; + char *buf, *p; + + /* FIXME: we have to quote some things because under Windows the + * program parses the commandline and does some unquoting. For now + * we only do very basic quoting to the first argument because this + * one often contains a space (e.g. C:\\Program Files\GNU\GnuPG\gpg.exe) + * and we would produce an invalid line in that case. */ + for (i=0; argv[i]; i++) + n += strlen (argv[i]) + 2 + 1; /* 2 extra bytes for possible quoting */ + buf = p = malloc (n); + if ( !buf ) + return NULL; + *buf = 0; + if ( argv[0] ) + { + if (strpbrk (argv[0], " \t")) + p = stpcpy (stpcpy (stpcpy (p, "\""), argv[0]), "\""); + else + p = stpcpy (p, argv[0]); + for (i = 1; argv[i]; i++) + { + if (!*argv[i]) + p = stpcpy (p, " \"\""); + else + p = stpcpy (stpcpy (p, " "), argv[i]); + } + } + + return buf; +} + + +int +_gpgme_io_spawn ( const char *path, char **argv, + struct spawn_fd_item_s *fd_child_list, + struct spawn_fd_item_s *fd_parent_list ) +{ + SECURITY_ATTRIBUTES sec_attr; + PROCESS_INFORMATION pi = { + NULL, /* returns process handle */ + 0, /* returns primary thread handle */ + 0, /* returns pid */ + 0 /* returns tid */ + }; + STARTUPINFO si; + char *envblock = NULL; + int cr_flags = CREATE_DEFAULT_ERROR_MODE + | GetPriorityClass (GetCurrentProcess ()); + int i; + char *arg_string; + int duped_stdin = 0; + int duped_stderr = 0; + HANDLE hnul = INVALID_HANDLE_VALUE; + /* FIXME. */ + int debug_me = 0; + + memset (&sec_attr, 0, sizeof sec_attr); + sec_attr.nLength = sizeof sec_attr; + sec_attr.bInheritHandle = FALSE; + + arg_string = build_commandline (argv); + if (!arg_string ) + return -1; + + memset (&si, 0, sizeof si); + si.cb = sizeof (si); + si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; + si.wShowWindow = debug_me? SW_SHOW : SW_HIDE; + si.hStdInput = GetStdHandle (STD_INPUT_HANDLE); + si.hStdOutput = GetStdHandle (STD_OUTPUT_HANDLE); + si.hStdError = GetStdHandle (STD_ERROR_HANDLE); + + for (i=0; fd_child_list[i].fd != -1; i++ ) { + if (fd_child_list[i].dup_to == 0 ) { + si.hStdInput = (HANDLE) _get_osfhandle (fd_child_list[i].fd); + DEBUG2 ("using %d (%p) for stdin", fd_child_list[i].fd, + _get_osfhandle (fd_child_list[i].fd)); + duped_stdin=1; + } + else if (fd_child_list[i].dup_to == 1 ) { + si.hStdOutput = (HANDLE) _get_osfhandle (fd_child_list[i].fd); + DEBUG2 ("using %d (%p) for stdout", fd_child_list[i].fd, + _get_osfhandle (fd_child_list[i].fd)); + } + else if (fd_child_list[i].dup_to == 2 ) { + si.hStdError = (HANDLE) _get_osfhandle (fd_child_list[i].fd); + DEBUG2 ("using %d (%p) for stderr", fd_child_list[i].fd, + _get_osfhandle (fd_child_list[i].fd)); + duped_stderr = 1; + } + } + + if( !duped_stdin || !duped_stderr ) { + SECURITY_ATTRIBUTES sa; + + memset (&sa, 0, sizeof sa ); + sa.nLength = sizeof sa; + sa.bInheritHandle = TRUE; + hnul = CreateFile ( "nul", + GENERIC_READ|GENERIC_WRITE, + FILE_SHARE_READ|FILE_SHARE_WRITE, + &sa, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL ); + if ( hnul == INVALID_HANDLE_VALUE ) { + DEBUG1 ("can't open `nul': ec=%d\n", (int)GetLastError ()); + free (arg_string); + return -1; + } + /* Make sure that the process has a connected stdin */ + if ( !duped_stdin ) { + si.hStdInput = hnul; + DEBUG1 ("using %d for dummy stdin", (int)hnul ); + } + /* We normally don't want all the normal output */ + if ( !duped_stderr ) { + si.hStdError = hnul; + DEBUG1 ("using %d for dummy stderr", (int)hnul ); + } + } + + DEBUG2 ("CreateProcess, path=`%s' args=`%s'", path, arg_string); + cr_flags |= CREATE_SUSPENDED; + if ( !CreateProcessA (path, + arg_string, + &sec_attr, /* process security attributes */ + &sec_attr, /* thread security attributes */ + TRUE, /* inherit handles */ + cr_flags, /* creation flags */ + envblock, /* environment */ + NULL, /* use current drive/directory */ + &si, /* startup information */ + &pi /* returns process information */ + ) ) { + DEBUG1 ("CreateProcess failed: ec=%d\n", (int) GetLastError ()); + free (arg_string); + return -1; + } + + /* Close the /dev/nul handle if used. */ + if (hnul != INVALID_HANDLE_VALUE ) { + if ( !CloseHandle ( hnul ) ) + DEBUG1 ("CloseHandle(hnul) failed: ec=%d\n", (int)GetLastError()); + } + + /* Close the other ends of the pipes. */ + for (i = 0; fd_parent_list[i].fd != -1; i++) + _gpgme_io_close (fd_parent_list[i].fd); + + DEBUG4 ("CreateProcess ready\n" + "- hProcess=%p hThread=%p\n" + "- dwProcessID=%d dwThreadId=%d\n", + pi.hProcess, pi.hThread, + (int) pi.dwProcessId, (int) pi.dwThreadId); + + if ( ResumeThread ( pi.hThread ) < 0 ) { + DEBUG1 ("ResumeThread failed: ec=%d\n", (int)GetLastError ()); + } + + if ( !CloseHandle (pi.hThread) ) { + DEBUG1 ("CloseHandle of thread failed: ec=%d\n", + (int)GetLastError ()); + } + + return 0; +} + + +/* + * Select on the list of fds. + * Returns: -1 = error + * 0 = timeout or nothing to select + * >0 = number of signaled fds + */ +int +_gpgme_io_select (struct io_select_fd_s *fds, size_t nfds, int nonblock) +{ + int npollfds; + GPollFD *pollfds; + int *pollfds_map; + int i, j; + int any, n, count; + int timeout = 1000; /* Use a 1s timeout. */ + void *dbg_help = NULL; + + if (nonblock) + timeout = 0; + + pollfds = calloc (nfds, sizeof *pollfds); + if (!pollfds) + return -1; + pollfds_map = calloc (nfds, sizeof *pollfds_map); + if (!pollfds_map) + { + free (pollfds); + return -1; + } + npollfds = 0; + + DEBUG_BEGIN (dbg_help, 3, "gpgme:select on [ "); + any = 0; + for (i = 0; i < nfds; i++) + { + if (fds[i].fd == -1) + continue; + if (fds[i].frozen) + DEBUG_ADD1 (dbg_help, "f%d ", fds[i].fd); + else if (fds[i].for_read ) + { + GIOChannel *chan = find_channel (fds[i].fd, 0); + assert (chan); + g_io_channel_win32_make_pollfd (chan, G_IO_IN, pollfds + npollfds); + pollfds_map[npollfds] = i; + DEBUG_ADD2 (dbg_help, "r%d<%d> ", fds[i].fd, pollfds[npollfds].fd); + npollfds++; + any = 1; + } + else if (fds[i].for_write) + { + GIOChannel *chan = find_channel (fds[i].fd, 0); + assert (chan); + g_io_channel_win32_make_pollfd (chan, G_IO_OUT, pollfds + npollfds); + pollfds_map[npollfds] = i; + DEBUG_ADD2 (dbg_help, "w%d<%d> ", fds[i].fd, pollfds[npollfds].fd); + npollfds++; + any = 1; + } + fds[i].signaled = 0; + } + DEBUG_END (dbg_help, "]"); + if (!any) + { + count = 0; + goto leave; + } + + + count = g_io_channel_win32_poll (pollfds, npollfds, timeout); + if (count < 0) + { + int saved_errno = errno; + DEBUG1 ("_gpgme_io_select failed: %s\n", strerror (errno)); + errno = saved_errno; + goto leave; + } + + DEBUG_BEGIN (dbg_help, 3, "select OK [ "); + if (DEBUG_ENABLED (dbg_help)) + { + for (i = 0; i < npollfds; i++) + { + if ((pollfds[i].revents & G_IO_IN)) + DEBUG_ADD1 (dbg_help, "r%d ", fds[pollfds_map[i]].fd); + if ((pollfds[i].revents & G_IO_OUT)) + DEBUG_ADD1 (dbg_help, "w%d ", fds[pollfds_map[i]].fd); + } + DEBUG_END (dbg_help, "]"); + } + + /* COUNT is used to stop the lop as soon as possible. */ + for (n = count, i = 0; i < npollfds && n; i++) + { + j = pollfds_map[i]; + assert (j >= 0 && j < nfds); + if (fds[j].fd == -1) + ; + else if (fds[j].for_read) + { + if ((pollfds[i].revents & G_IO_IN)) + { + fds[j].signaled = 1; + n--; + } + } + else if (fds[j].for_write) + { + if ((pollfds[i].revents & G_IO_OUT)) + { + fds[j].signaled = 1; + n--; + } + } + } + +leave: + free (pollfds); + free (pollfds_map); + return count; +} diff -urpNP gpgme-1.1.0/gpgme/w32-io.c gpgme-1.1.1/gpgme/w32-io.c --- gpgme-1.1.0/gpgme/w32-io.c 2005-09-25 19:26:35.000000000 +0000 +++ gpgme-1.1.1/gpgme/w32-io.c 2006-02-15 12:48:26.000000000 +0000 @@ -119,6 +119,23 @@ DEFINE_STATIC_LOCK (writer_table_lock); +static int +get_desired_thread_priority (void) +{ + int value; + + if (!_gpgme_get_conf_int ("IOThreadPriority", &value)) + { + value = THREAD_PRIORITY_HIGHEST; + DEBUG1 ("** Using standard IOThreadPriority of %d\n", value); + } + else + DEBUG1 ("** Configured IOThreadPriority is %d\n", value); + + return value; +} + + static HANDLE set_synchronize (HANDLE h) { @@ -266,7 +283,7 @@ create_reader (HANDLE fd) /* We set the priority of the thread higher because we know that it only runs for a short time. This greatly helps to increase the performance of the I/O. */ - SetThreadPriority (c->thread_hd, THREAD_PRIORITY_HIGHEST); + SetThreadPriority (c->thread_hd, get_desired_thread_priority ()); } return c; @@ -421,7 +438,13 @@ writer (void *arg) DEBUG2 ("writer thread %p for file %p started", c->thread_hd, c->file_hd ); for (;;) { LOCK (c->mutex); + if ( c->stop_me ) { + UNLOCK (c->mutex); + break; + } if ( !c->nbytes ) { + if (!SetEvent (c->is_empty)) + DEBUG1 ("SetEvent failed: ec=%d", (int)GetLastError ()); if (!ResetEvent (c->have_data) ) DEBUG1 ("ResetEvent failed: ec=%d", (int)GetLastError ()); UNLOCK (c->mutex); @@ -451,14 +474,6 @@ writer (void *arg) LOCK (c->mutex); c->nbytes -= nwritten; - if (c->stop_me) { - UNLOCK (c->mutex); - break; - } - if ( !c->nbytes ) { - if ( !SetEvent (c->is_empty) ) - DEBUG1 ("SetEvent failed: ec=%d", (int)GetLastError ()); - } UNLOCK (c->mutex); } /* indicate that we have an error */ @@ -488,7 +503,7 @@ create_writer (HANDLE fd) return NULL; c->file_hd = fd; - c->have_data = CreateEvent (&sec_attr, FALSE, FALSE, NULL); + c->have_data = CreateEvent (&sec_attr, TRUE, FALSE, NULL); c->is_empty = CreateEvent (&sec_attr, TRUE, TRUE, NULL); c->stopped = CreateEvent (&sec_attr, TRUE, FALSE, NULL); if (!c->have_data || !c->is_empty || !c->stopped ) { @@ -524,7 +539,7 @@ create_writer (HANDLE fd) /* We set the priority of the thread higher because we know that it only runs for a short time. This greatly helps to increase the performance of the I/O. */ - SetThreadPriority (c->thread_hd, THREAD_PRIORITY_HIGHEST); + SetThreadPriority (c->thread_hd, get_desired_thread_priority ()); } return c; @@ -620,12 +635,14 @@ _gpgme_io_write ( int fd, const void *bu LOCK (c->mutex); if ( c->nbytes ) { /* bytes are pending for send */ + /* Reset the is_empty event. Better safe than sorry. */ + if (!ResetEvent (c->is_empty)) + DEBUG1 ("ResetEvent failed: ec=%d", (int)GetLastError ()); UNLOCK (c->mutex); DEBUG2 ("fd %d: waiting for empty buffer in thread %p", fd, c->thread_hd); WaitForSingleObject (c->is_empty, INFINITE); DEBUG2 ("fd %d: thread %p buffer is empty", fd, c->thread_hd); - assert (!c->nbytes); LOCK (c->mutex); } @@ -634,11 +651,20 @@ _gpgme_io_write ( int fd, const void *bu DEBUG1 ("fd %d: write error", fd ); return -1; } - + + /* If no error occured, the number of bytes in the buffer must be + zero. */ + assert (!c->nbytes); + if (count > WRITEBUF_SIZE) count = WRITEBUF_SIZE; memcpy (c->buffer, buffer, count); c->nbytes = count; + + /* We have to reset the is_empty event early, because it is also + used by the select() implementation to probe the channel. */ + if (!ResetEvent (c->is_empty)) + DEBUG1 ("ResetEvent failed: ec=%d", (int)GetLastError ()); if (!SetEvent (c->have_data)) DEBUG1 ("SetEvent failed: ec=%d", (int)GetLastError ()); UNLOCK (c->mutex); @@ -843,7 +869,7 @@ _gpgme_io_spawn ( const char *path, char memset (&si, 0, sizeof si); si.cb = sizeof (si); si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; - si.wShowWindow = debug_me? SW_SHOW : SW_MINIMIZE; + si.wShowWindow = debug_me? SW_SHOW : SW_HIDE; si.hStdInput = GetStdHandle (STD_INPUT_HANDLE); si.hStdOutput = GetStdHandle (STD_OUTPUT_HANDLE); si.hStdError = GetStdHandle (STD_ERROR_HANDLE); @@ -942,60 +968,6 @@ _gpgme_io_spawn ( const char *path, char } - - -int -_gpgme_io_waitpid ( int pid, int hang, int *r_status, int *r_signal ) -{ - HANDLE proc = fd_to_handle (pid); - int code, ret = 0; - DWORD exc; - - *r_status = 0; - *r_signal = 0; - code = WaitForSingleObject ( proc, hang? INFINITE : 0 ); - switch (code) { - case WAIT_FAILED: - DEBUG2 ("WFSO pid=%d failed: %d\n", (int)pid, (int)GetLastError () ); - break; - - case WAIT_OBJECT_0: - if (!GetExitCodeProcess (proc, &exc)) { - DEBUG2 ("** GECP pid=%d failed: ec=%d\n", - (int)pid, (int)GetLastError () ); - *r_status = 4; - } - else { - DEBUG2 ("GECP pid=%d exit code=%d\n", (int)pid, exc); - *r_status = exc; - } - ret = 1; - break; - - case WAIT_TIMEOUT: - if (hang) - DEBUG1 ("WFSO pid=%d timed out\n", (int)pid); - break; - - default: - DEBUG2 ("WFSO pid=%d returned %d\n", (int)pid, code ); - break; - } - return ret; -} - -int -_gpgme_io_kill ( int pid, int hard ) -{ - HANDLE proc = fd_to_handle (pid); - - #warning I am not sure how to kill a process - /* fixme: figure out how this can be done */ - return 0; -} - - - /* * Select on the list of fds. * Returns: -1 = error @@ -1055,18 +1027,11 @@ _gpgme_io_select ( struct io_select_fd_s DEBUG0 ("Too many objects for WFMO!" ); return -1; } - LOCK (c->mutex); - if ( !c->nbytes ) { - waitidx[nwait] = i; - waitbuf[nwait++] = c->is_empty; - DEBUG_ADD1 (dbg_help, "w%d ", fds[i].fd ); - any = 1; - } - else { - DEBUG_ADD1 (dbg_help, "w%d(ignored) ", fds[i].fd ); - } - UNLOCK (c->mutex); + waitidx[nwait] = i; + waitbuf[nwait++] = c->is_empty; } + DEBUG_ADD1 (dbg_help, "w%d ", fds[i].fd ); + any = 1; } } } @@ -1146,3 +1111,22 @@ _gpgme_io_subsystem_init (void) } +/* Write the printable version of FD to the buffer BUF of length + BUFLEN. The printable version is the representation on the command + line that the child process expects. */ +int +_gpgme_io_fd2str (char *buf, int buflen, int fd) +{ + return snprintf (buf, buflen, "%d", fd); +} + + +/* The following interface is only useful for GPGME Glib. */ + +/* Look up the giochannel for file descriptor FD. */ +void * +gpgme_get_giochannel (int fd) +{ + return NULL; +} + diff -urpNP gpgme-1.1.0/gpgme/w32-util.c gpgme-1.1.1/gpgme/w32-util.c --- gpgme-1.1.0/gpgme/w32-util.c 2005-09-08 14:42:31.000000000 +0000 +++ gpgme-1.1.1/gpgme/w32-util.c 2006-02-09 19:56:31.000000000 +0000 @@ -265,7 +265,6 @@ find_program_at_standard_place (const ch return result; } - const char * _gpgme_get_gpg_path (void) { @@ -301,3 +300,18 @@ _gpgme_get_gpgsm_path (void) UNLOCK (get_path_lock); return gpgsm_program; } + + +/* Return an integer value from gpgme specific configuration + entries. VALUE receives that value; function returns true if a value + has been configured and false if not. */ +int +_gpgme_get_conf_int (const char *key, int *value) +{ + char *tmp = read_w32_registry_string (NULL, "Software\\GNU\\gpgme", key); + if (!tmp) + return 0; + *value = atoi (tmp); + free (tmp); + return 1; +} diff -urpNP gpgme-1.1.0/gpgme.spec gpgme-1.1.1/gpgme.spec --- gpgme-1.1.0/gpgme.spec 2005-10-01 21:15:18.000000000 +0000 +++ gpgme-1.1.1/gpgme.spec 2006-02-23 16:35:52.000000000 +0000 @@ -1,7 +1,7 @@ # This is a template. The dist target uses it to create the real file. Summary: GPGME - GnuPG Made Easy Name: gpgme -Version: 1.1.0 +Version: 1.1.1 Release: 1 URL: http://www.gnupg.org/gpgme.html Source: ftp://ftp.gnupg.org/gcrypt/alpha/gpgme/%{name}-%{version}.tar.gz diff -urpNP gpgme-1.1.0/m4/glib-2.0.m4 gpgme-1.1.1/m4/glib-2.0.m4 --- gpgme-1.1.0/m4/glib-2.0.m4 1970-01-01 00:00:00.000000000 +0000 +++ gpgme-1.1.1/m4/glib-2.0.m4 2005-11-18 23:03:28.000000000 +0000 @@ -0,0 +1,215 @@ +# Configure paths for GLIB +# Owen Taylor 1997-2001 + +dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) +dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject or +dnl gthread is specified in MODULES, pass to pkg-config +dnl +AC_DEFUN([AM_PATH_GLIB_2_0], +[dnl +dnl Get the cflags and libraries from pkg-config +dnl +AC_ARG_ENABLE(glibtest, [ --disable-glibtest do not try to compile and run a test GLIB program], + , enable_glibtest=yes) + + pkg_config_args=glib-2.0 + for module in . $4 + do + case "$module" in + gmodule) + pkg_config_args="$pkg_config_args gmodule-2.0" + ;; + gmodule-no-export) + pkg_config_args="$pkg_config_args gmodule-no-export-2.0" + ;; + gobject) + pkg_config_args="$pkg_config_args gobject-2.0" + ;; + gthread) + pkg_config_args="$pkg_config_args gthread-2.0" + ;; + esac + done + + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + + no_glib="" + + if test x$PKG_CONFIG != xno ; then + if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then + : + else + echo *** pkg-config too old; version 0.7 or better required. + no_glib=yes + PKG_CONFIG=no + fi + else + no_glib=yes + fi + + min_glib_version=ifelse([$1], ,2.0.0,$1) + AC_MSG_CHECKING(for GLIB - version >= $min_glib_version) + + if test x$PKG_CONFIG != xno ; then + ## don't try to run the test against uninstalled libtool libs + if $PKG_CONFIG --uninstalled $pkg_config_args; then + echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH" + enable_glibtest=no + fi + + if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then + : + else + no_glib=yes + fi + fi + + if test x"$no_glib" = x ; then + GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0` + GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0` + GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0` + + GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args` + GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args` + glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_glibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$GLIB_LIBS $LIBS" +dnl +dnl Now check if the installed GLIB is sufficiently new. (Also sanity +dnl checks the results of pkg-config to some extent) +dnl + rm -f conf.glibtest + AC_TRY_RUN([ +#include +#include +#include + +int +main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.glibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_glib_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_glib_version"); + exit(1); + } + + if ((glib_major_version != $glib_config_major_version) || + (glib_minor_version != $glib_config_minor_version) || + (glib_micro_version != $glib_config_micro_version)) + { + printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", + $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, + glib_major_version, glib_minor_version, glib_micro_version); + printf ("*** was found! If pkg-config was correct, then it is best\n"); + printf ("*** to remove the old version of GLib. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); + printf("*** to point to the correct configuration files\n"); + } + else if ((glib_major_version != GLIB_MAJOR_VERSION) || + (glib_minor_version != GLIB_MINOR_VERSION) || + (glib_micro_version != GLIB_MICRO_VERSION)) + { + printf("*** GLIB header files (version %d.%d.%d) do not match\n", + GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); + printf("*** library (version %d.%d.%d)\n", + glib_major_version, glib_minor_version, glib_micro_version); + } + else + { + if ((glib_major_version > major) || + ((glib_major_version == major) && (glib_minor_version > minor)) || + ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n", + glib_major_version, glib_minor_version, glib_micro_version); + printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n", + major, minor, micro); + printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n"); + printf("*** correct copy of pkg-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} +],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_glib" = x ; then + AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$PKG_CONFIG" = "no" ; then + echo "*** A new enough version of pkg-config was not found." + echo "*** See http://www.freedesktop.org/software/pkgconfig/" + else + if test -f conf.glibtest ; then + : + else + echo "*** Could not run GLIB test program, checking why..." + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$LIBS $GLIB_LIBS" + AC_TRY_LINK([ +#include +#include +], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GLIB or finding the wrong" + echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GLIB is incorrectly installed."]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GLIB_CFLAGS="" + GLIB_LIBS="" + GLIB_GENMARSHAL="" + GOBJECT_QUERY="" + GLIB_MKENUMS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GLIB_CFLAGS) + AC_SUBST(GLIB_LIBS) + AC_SUBST(GLIB_GENMARSHAL) + AC_SUBST(GOBJECT_QUERY) + AC_SUBST(GLIB_MKENUMS) + rm -f conf.glibtest +]) diff -urpNP gpgme-1.1.0/m4/pth.m4 gpgme-1.1.1/m4/pth.m4 --- gpgme-1.1.0/m4/pth.m4 2005-09-08 14:42:29.000000000 +0000 +++ gpgme-1.1.1/m4/pth.m4 2006-02-22 11:33:02.000000000 +0000 @@ -285,8 +285,6 @@ dnl fi #include ]) define(_code2, [dnl - int main(int argc, char *argv[]) - { FILE *fp; if (!(fp = fopen("conftestval", "w"))) exit(1); @@ -299,7 +297,6 @@ dnl fi fprintf(fp, "yes"); fclose(fp); exit(0); - } ]) _AC_PTH_VERBOSE([+ Performing Sanity Checks:]) _AC_PTH_VERBOSE([ o pre-processor test]) @@ -329,7 +326,7 @@ dnl fi See config.log for possibly more details.]) fi _AC_PTH_VERBOSE([ o run-time check]) - AC_TRY_RUN(_code1 _code2, _ok=`cat conftestval`, _ok=no, _ok=no) + AC_TRY_RUN(AC_LANG_PROGRAM(_code1, _code2), _ok=`cat conftestval`, _ok=no, _ok=no) if test ".$_ok" != .yes; then if test ".$_ok" = .no; then _AC_PTH_ERROR([dnl diff -urpNP gpgme-1.1.0/tests/ChangeLog gpgme-1.1.1/tests/ChangeLog --- gpgme-1.1.0/tests/ChangeLog 2005-10-01 20:14:48.000000000 +0000 +++ gpgme-1.1.1/tests/ChangeLog 2005-12-18 15:18:05.000000000 +0000 @@ -1,3 +1,28 @@ +2005-12-06 Werner Koch + + * gpg/t-keylist.c (main): Changed for that secondary keys now have + a fingerprint. + * gpg/t-keylist-sig.c (main): Ditto. + * gpgsm/t-keylist.c (main): Ditto. The test used to be wrong. + +2005-10-18 Werner Koch + + * gpg/pubdemo.asc, gpg/secdemo.asc: Add 2 expired subkeys to + Whisky. + * gpg/t-keylist.c: Reordered list to match new demo keyring. Add + arg for number of subkeys and for extra checking function. + (main): Enhanced a few error outputs. Changed subkey + counting. Call extra checking fucntion. + (check_whisky): New. + +2005-10-07 Marcus Brinkmann + + * gpgsm/t-keylist.c (main): Allow for an email address as a second + uid. + + * gpg/t-sig-notation.c: Change critical notation to something + GnuPG understands. + 2005-10-01 Marcus Brinkmann * gpg/Makefile.am (EXTRA_DIST): Remove gpg.conf. diff -urpNP gpgme-1.1.0/tests/Makefile.in gpgme-1.1.1/tests/Makefile.in --- gpgme-1.1.0/tests/Makefile.in 2005-10-01 21:13:46.000000000 +0000 +++ gpgme-1.1.1/tests/Makefile.in 2006-02-23 16:09:49.000000000 +0000 @@ -60,10 +60,10 @@ noinst_PROGRAMS = $(am__EXEEXT_1) subdir = tests DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/glibc21.m4 \ - $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/pth.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/glib-2.0.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gpg-error.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/pth.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -112,6 +112,7 @@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -121,7 +122,10 @@ BUILD_ASSUAN_TRUE = @BUILD_ASSUAN_TRUE@ BUILD_COMPLUS_FALSE = @BUILD_COMPLUS_FALSE@ BUILD_COMPLUS_TRUE = @BUILD_COMPLUS_TRUE@ BUILD_FILEVERSION = @BUILD_FILEVERSION@ +BUILD_REVISION = @BUILD_REVISION@ BUILD_TIMESTAMP = @BUILD_TIMESTAMP@ +BUILD_W32_GLIB_FALSE = @BUILD_W32_GLIB_FALSE@ +BUILD_W32_GLIB_TRUE = @BUILD_W32_GLIB_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -144,6 +148,11 @@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ GPG = @GPG@ GPGME_CONFIG_API_VERSION = @GPGME_CONFIG_API_VERSION@ GPGME_CONFIG_CFLAGS = @GPGME_CONFIG_CFLAGS@ @@ -182,6 +191,7 @@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -190,11 +200,13 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ PTH_CFLAGS = @PTH_CFLAGS@ PTH_CPPFLAGS = @PTH_CPPFLAGS@ PTH_LDFLAGS = @PTH_LDFLAGS@ PTH_LIBS = @PTH_LIBS@ RANLIB = @RANLIB@ +RC = @RC@ RUN_GPGSM_TESTS_FALSE = @RUN_GPGSM_TESTS_FALSE@ RUN_GPGSM_TESTS_TRUE = @RUN_GPGSM_TESTS_TRUE@ RUN_GPG_TESTS_FALSE = @RUN_GPG_TESTS_FALSE@ @@ -203,15 +215,16 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ -WINDRES = @WINDRES@ ac_ct_AR = @ac_ct_AR@ +ac_ct_AS = @ac_ct_AS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DLLTOOL = @ac_ct_DLLTOOL@ ac_ct_F77 = @ac_ct_F77@ +ac_ct_OBJDUMP = @ac_ct_OBJDUMP@ ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_RC = @ac_ct_RC@ ac_ct_STRIP = @ac_ct_STRIP@ -ac_ct_WINDRES = @ac_ct_WINDRES@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ diff -urpNP gpgme-1.1.0/tests/gpg/Makefile.in gpgme-1.1.1/tests/gpg/Makefile.in --- gpgme-1.1.0/tests/gpg/Makefile.in 2005-10-01 21:13:46.000000000 +0000 +++ gpgme-1.1.1/tests/gpg/Makefile.in 2006-02-23 16:09:50.000000000 +0000 @@ -61,10 +61,10 @@ subdir = tests/gpg DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/glibc21.m4 \ - $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/pth.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/glib-2.0.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gpg-error.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/pth.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -191,6 +191,7 @@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -200,7 +201,10 @@ BUILD_ASSUAN_TRUE = @BUILD_ASSUAN_TRUE@ BUILD_COMPLUS_FALSE = @BUILD_COMPLUS_FALSE@ BUILD_COMPLUS_TRUE = @BUILD_COMPLUS_TRUE@ BUILD_FILEVERSION = @BUILD_FILEVERSION@ +BUILD_REVISION = @BUILD_REVISION@ BUILD_TIMESTAMP = @BUILD_TIMESTAMP@ +BUILD_W32_GLIB_FALSE = @BUILD_W32_GLIB_FALSE@ +BUILD_W32_GLIB_TRUE = @BUILD_W32_GLIB_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -223,6 +227,11 @@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ GPG = @GPG@ GPGME_CONFIG_API_VERSION = @GPGME_CONFIG_API_VERSION@ GPGME_CONFIG_CFLAGS = @GPGME_CONFIG_CFLAGS@ @@ -261,6 +270,7 @@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -269,11 +279,13 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ PTH_CFLAGS = @PTH_CFLAGS@ PTH_CPPFLAGS = @PTH_CPPFLAGS@ PTH_LDFLAGS = @PTH_LDFLAGS@ PTH_LIBS = @PTH_LIBS@ RANLIB = @RANLIB@ +RC = @RC@ RUN_GPGSM_TESTS_FALSE = @RUN_GPGSM_TESTS_FALSE@ RUN_GPGSM_TESTS_TRUE = @RUN_GPGSM_TESTS_TRUE@ RUN_GPG_TESTS_FALSE = @RUN_GPG_TESTS_FALSE@ @@ -282,15 +294,16 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ -WINDRES = @WINDRES@ ac_ct_AR = @ac_ct_AR@ +ac_ct_AS = @ac_ct_AS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DLLTOOL = @ac_ct_DLLTOOL@ ac_ct_F77 = @ac_ct_F77@ +ac_ct_OBJDUMP = @ac_ct_OBJDUMP@ ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_RC = @ac_ct_RC@ ac_ct_STRIP = @ac_ct_STRIP@ -ac_ct_WINDRES = @ac_ct_WINDRES@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ diff -urpNP gpgme-1.1.0/tests/gpg/pubdemo.asc gpgme-1.1.1/tests/gpg/pubdemo.asc --- gpgme-1.1.0/tests/gpg/pubdemo.asc 2005-09-08 14:42:32.000000000 +0000 +++ gpgme-1.1.1/tests/gpg/pubdemo.asc 2005-10-20 12:27:57.000000000 +0000 @@ -1,67 +1,67 @@ -26 demo keys: +26 demo keys [2005-10-18] pub 1024D/68697734 1999-03-08 Alpha Test (demo key) uid Alice (demo key) uid Alfa Test (demo key) -sub 1024g/46A871F8 1999-03-08 +sub 1024g/46A871F8 1999-03-08 +pub 1024D/A9E3B0B2 1999-03-08 Bravo Test (demo key) +uid Bob (demo key) +sub 1024g/E29BA37F 1999-03-08 pub 1024D/1AFDAB6C 1999-03-08 Charlie Test (demo key) -sub 1024g/BC43DA60 1999-03-08 +sub 1024g/BC43DA60 1999-03-08 +pub 1024D/EB9DC9E6 1999-03-08 Delta Test (demo key) +sub 1024g/B0C45424 1999-03-08 pub 1024D/FAEF6D1B 1999-03-08 Echo Test (demo key) uid Eve (demo key) uid Echelon (demo key) -sub 1024g/7272144D 1999-03-08 -pub 1024D/8FC282E6 1999-03-08 Golf Test (demo key) -sub 1024g/9DCAD354 1999-03-08 -pub 1024D/04259677 1999-03-08 India Test (demo key) -sub 1024g/61F76C73 1999-03-08 -pub 1024D/43C2D0C7 1999-03-08 Kilo Test (demo key) -sub 1024g/9AF64D02 1999-03-08 -pub 1024D/A9E3B0B2 1999-03-08 Bravo Test (demo key) -uid Bob (demo key) -sub 1024g/E29BA37F 1999-03-08 -pub 1024D/EB9DC9E6 1999-03-08 Delta Test (demo key) -sub 1024g/B0C45424 1999-03-08 +sub 1024g/7272144D 1999-03-08 pub 1024D/7372E243 1999-03-08 Foxtrot Test (demo key) -sub 1024g/EE45198E 1999-03-08 +sub 1024g/EE45198E 1999-03-08 +pub 1024D/8FC282E6 1999-03-08 Golf Test (demo key) +sub 1024g/9DCAD354 1999-03-08 pub 1024D/34C6E3F1 1999-03-08 Hotel Test (demo key) -sub 1024g/D622AD0A 1999-03-08 +sub 1024g/D622AD0A 1999-03-08 +pub 1024D/04259677 1999-03-08 India Test (demo key) +sub 1024g/61F76C73 1999-03-08 pub 1024D/D2699313 1999-03-08 Juliet Test (demo key) -sub 1024g/35F8F136 1999-03-08 +sub 1024g/35F8F136 1999-03-08 +pub 1024D/43C2D0C7 1999-03-08 Kilo Test (demo key) +sub 1024g/9AF64D02 1999-03-08 pub 1024D/B79103F8 1999-03-08 Lima Test (demo key) -sub 1024g/FE56350C 1999-03-08 +sub 1024g/FE56350C 1999-03-08 pub 1024D/BE5CF886 1999-03-08 Mike Test (demo key) uid Mallory (demo key) -sub 1024g/4F31EAE8 1999-03-08 +sub 1024g/4F31EAE8 1999-03-08 pub 1024D/30CEC684 1999-03-08 November Test (demo key) -sub 1024g/8B70E472 1999-03-08 +sub 1024g/8B70E472 1999-03-08 pub 1024D/6D9732AC 1999-03-08 Oscar Test (demo key) -sub 1024g/2681619F 1999-03-08 +sub 1024g/2681619F 1999-03-08 pub 1024D/3FF13206 1999-03-08 Papa test (demo key) -sub 1024g/63330D9C 1999-03-08 +sub 1024g/63330D9C 1999-03-08 pub 1024D/3C661C84 1999-03-08 Quebec Test (demo key) -sub 1024g/A029ACF4 1999-03-08 +sub 1024g/A029ACF4 1999-03-08 pub 1024D/777FBED3 1999-03-08 Romeo Test (demo key) -sub 1024g/11D102EA 1999-03-08 +sub 1024g/11D102EA 1999-03-08 pub 1024D/A3AE3EA1 1999-03-08 Sierra Test (demo key) -sub 1024g/0F1B50B4 1999-03-08 +sub 1024g/0F1B50B4 1999-03-08 pub 1024D/85A81F38 1999-03-08 Tango Test (demo key) -sub 1024g/101C0402 1999-03-08 +sub 1024g/101C0402 1999-03-08 pub 1024D/653244D6 1999-03-08 Uniform Test (demo key) -sub 1024g/5522BDB9 1999-03-08 +sub 1024g/5522BDB9 1999-03-08 pub 1024D/61F04784 1999-03-08 Victor Test (demo key) -sub 1024g/07287134 1999-03-08 +sub 1024g/07287134 1999-03-08 pub 1024D/EC67DBDE 1999-03-08 Whisky Test (demo key) -sub 1024g/FD6E27F6 1999-03-08 +sub 1024g/FD6E27F6 1999-03-08 +sub 1024D/E51987C9 2005-10-18 [expires: 2005-10-18] +sub 1024R/40DB9D43 2005-10-18 [expires: 2005-10-18] pub 1024D/567FB34A 1999-03-08 XRay Test (demo key) -sub 1024g/41E408BE 1999-03-08 +sub 1024g/41E408BE 1999-03-08 pub 1024D/4B11B25F 1999-03-08 Yankee Test (demo key) -sub 1024g/F7B080AD 1999-03-08 +sub 1024g/F7B080AD 1999-03-08 pub 1024D/54ACD246 1999-03-08 Zulu Test (demo key) -sub 1024g/A172C881 1999-03-08 +sub 1024g/A172C881 1999-03-08 -----BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v0.9.3 (GNU/Linux) -Comment: For info see http://www.gnupg.org mQGiBDbjjp4RBAC2ZbFDX0wmJI8yLDYQdIiZeAuHLmfyHsqXaLGUMZtWiAvn/hNp ctwahmzKm5oXinHUvUkLOQ0s8rOlu15nhw4azc30rTP1LsIkn5zORNnFdgYC6RKy @@ -86,200 +86,200 @@ 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 @@ -498,69 +498,89 @@ vc0pfY+56AP/WOVJ0KGzP6k9bYjYSRJ1MJb70wdV h9J9zW+DBrtpqS6vjlDYU5y6RGbGRl6ndtXhV5FpE4cbLax/pGFWEq20K1doaXNr eSBUZXN0IChkZW1vIGtleSkgPHdoaXNreUBleGFtcGxlLm5ldD6IVQQTEQIAFQUC NuO0NAMLCgMDFQMCAxYCAQIXgAAKCRDe8Pe47Gfb3qJqAJ9MbluIqs8qjd1lOkj5 -8xC5K482bACgjeYJadH5StXmbJMGw2ZD29yevzO5AQ0ENuO0VhAEAM9X7EMxDw3O -SqgnI76WuIBSsI0gF/UptzpT8g8AY6gQPVhU9fgQHbu7cr8SZFV3dyUVLTzkNq7m -sUivd3/Fecuf77CpKBCrQlzst+UykiPQ/bT3+gq3owGi9MBCfeU2l5yZZ3yjGIqg -8/XnxmCbuItw69FNyz7+nQoDM28ci9B3AAMFA/wJBLjxXXqWFY5JdXq7ck66Qx5Y -HDpPH7szUKrIGKGZHxk2UXoU8G9WRfQ0VVQfaomfnKvo+bFDFJGcLfIITI8FrjzG -oh2K3PKcxsQiQ1SsVlMT3XmuvST0yvDM8a4t9o+2v8yLLgEjR2dn/lTiGjE/ANun -Ro9TBGpvz5P085NmzohGBBgRAgAGBQI247RWAAoJEN7w97jsZ9ve/yAAn18Lg2NX -AdY6HW0LEurh0Xcv8zlWAJ9ePiLMYxpoW5nv4g4nuOAWoL/KLJkBogQ247TcEQQA -rUqUbiVTMxJhp8bA4vMXAzCuLjys4A44DE+uRFb9AGsZTmw/FTPETO7iU/3frlyY -yTgIvI2zDF1SwHXG06KF3yIu8LF6OCM0N0k7KnKpw8M2tkPiT+D8ANrHU5d178ev -zm40PyNDyKxSGNlIG1N4MIKFtNdMlahLvu91kG04WesAoLPa5zISvsX+Ew95M1o4 -Qti8iYHbA/4wr+eYRywP35eb/F5V9bOLWhWmEDzw4KHXQ7V+OJ7JD5n44S5KLPKw -IogohDlPmrxDTAJ/YAukApUItd30kr0Uq34QgFktAsqgCP7C5KEM1TTxU25Tcs4o -jUHoDyMj14ECuiTCP0ZFRKUivopgjgRhFTKXVVWTySkQ0g9SDaITSgP/a0FyXMQU -YJjuB7GA6r4U6QnIHsxS5xrQgkshb4tp2MVWMhqlhsfOLaj1WZ+oe0DxKw0O3YKT -H/EAzmNelKcMbtTcilLaIdI5l+Ylam/bZe7QvbN2s72Kn2PZjtYqO3Uzqw14bqAJ -Rl0ekleMdZRMMzAsour+iNVPHnlodXnQ2gy0J1hSYXkgVGVzdCAoZGVtbyBrZXkp -IDx4cmF5QGV4YW1wbGUubmV0PohVBBMRAgAVBQI247TcAwsKAwMVAwIDFgIBAheA -AAoJEIl5psVWf7NKt08An0PRqhiMzF+L37DyvcaVl+0zSrmbAJ0fL+8D5Frcp1m3 -YtBMpo+j5dsieLkBDQQ247UFEAQAxuGlBvqoDkxhIDgFZzdHJO+gJym94zgSGHkB -mBIBf5Q2G2O3zkN7SIENI16yg9cxy7zkTbBu9PMgzUe/UuQov9Z6YXKzTj1jLozr -GdljKOcW5YRvlibo7eKXDUkSvT+X6J1BOIVexl05Y4Ncmf7otNDre29QfK8gGBO/ -bdQd7L8ABAsD/R4Nq/JQav4/7d5ETuMZddPAxV4kCnY+7F7oJgHDKJheJxt49rNt -fXSxBZUsJ9P6Xhr46fCRT33DD1P8RyUmmS3/dJl7H/qR3A1rox4FQPWAuk4WGhsf -SXvlZnFWKJhC8TZzFisjiXjw1OFYiF4TArxj9D7d/cHEKIi43rtefpf+iEYEGBEC -AAYFAjbjtQUACgkQiXmmxVZ/s0rskACeKGRhY+fGFtaL1JQxoHdDPRJ+wu8AmwQa -u+u5pPZc9UrBr0UV+pGPpY+emQGiBDbjtVERBADdUAZzhP6+69VdyRrgRNotouUv -XE6I8h0kxZFZZDrQJmpZcNWkUHDqgbYDJ9RmIeEuWZNmyzPxSFcvD9RGw9KmIZu2 -kZYqIuzg4KqOyU3SUfNycarEZYJkmLEyBlrkNxZkmPCp1cRsMKGCbhQs//v6Iq8h -6dNA2EWgJev0y12gcwCguk0KZIqVO7UfkaVaZhMr0Cd1at8D/juKnRViDMi9SEjS -JZwb3mw1+yECnM8vrM+AoGoAKiCz/n8N9Gf2DTsFy4yKEskPQ8s09Wc5epBFo3gN -ruMu4kDnde0uCmiDEbTwzpdSKZO5x9yi+7b39uCNkgoDlzwonaXNdIn2NnFKjL47 -TnV/vKFdtSZgLW902vwYGTr1ArL/BACIcx9TdxsJ9NMyaKD7MEcKQeOrOqv/Mq1H -xFPkDBI4hTZpQiId1XTxqkJ6UHDw9sR/TvtO5YKrZjINkmaBZFiHlx1oyB0B3u6X -UVLXIc9liyFyh9aOBdQkdHgjyI8Kzk6Z0ejYcre5TY4zfplAZKkUDlY3U0Sb0a0x -IGhgo3YRELQrWWFua2VlIFRlc3QgKGRlbW8ga2V5KSA8eWFua2VlQGV4YW1wbGUu -bmV0PohVBBMRAgAVBQI247VRAwsKAwMVAwIDFgIBAheAAAoJEJ7vNM1LEbJfSQQA -oJRRe9UHKHiX2iFczXq6nrvr0NhLAJ99W/I5b2/2QQ01we8i1mcSYPWj47kBDQQ2 -47VnEAQAmuK5RcS0zTyXp6SjW2+WeQIpJnJDflL0+iBe//3SADv01qUmw3jWMAux -G+CcCApksl122V9npEHiLC4Q2A69roLRsbxKBPebustfadLJoVYqPsvjnrBlafe5 -GcrFPnKbE0wV6ZXx/Tp/eSDiQlid4lWz5J+z/mN7KhHANzoRAbsAAwYEAJO5fkCS -dNwkisFXzeKslWxm9Yoe1TOouiSV11hex0j94Hpz5wGWEXF7z+FbDq+4V0UqGkKx -aERsl6HMWNkImj57N/9h1C1YDfiKTimg5tZpKmehXtldpWGCNDZrE0RasrFCKENV -hFMhpc4kAnx6rbA0+LhRvJkvkdxY7pKU//aZiEYEGBECAAYFAjbjtWcACgkQnu80 -zUsRsl/0XACfffuI4IS7cgh0PNghr/0v3L/NhncAoJNwutmN7kkv9n/oPqkByzLx -vZt4mQGiBDbjtcsRBACBDJOGX9C/xxCVZNP6OHz6cL5vM3PimUAhV+9HAVVPQViT -nFKrkYPSQyRfWzjOU8RO1Tp5CHz747oOb6j9P74yH1uy78yFg4UuhXBWinhuCKKq -4IIWwJkCKBFr1U8fu8a6Y6NcjqiDA0KmGRJrMPmXenXkJpFGHG78rUvNi9IMfwCg -ugzNILh/3XZCZU+BUPYeXL+nUAEEAIDXZhj1vFXHgi9lmijKDjJocEBoamN/taQy -6Ox1RRD6HtfAPY5TER1n7xm9hMzE+Ov1IKpH/E872Rha1qu1v7eOa6eTuNWF0Nvm -SR955freRsNuR8JNIb6StI2ER9pzBUfjykC9pg2wPeC7wpQJIF9TF+Ja1BvG2I+h -a2xJ786AA/sHEUvAOsc58YbPlbIPyp2JdEHvXTRT2NISVRuTMQsg8vV99nMYR2CU -h270uPyy2xZaD/kYcJ9/1ngY7C9pbbNWoV70PkEMO/qj67OIViWVPzUhIdURorbp -Ghuc3oBzUxOgial7IbISPRItDgg2oZoY4hqyQNx8Cj2ZZAzDpM2vCrQnWnVsdSBU -ZXN0IChkZW1vIGtleSkgPHp1bHVAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjtcsD -CwoDAxUDAgMWAgECF4AACgkQa8R3gFSs0kZA6wCeJUyRzuFbsZ0uQulvpgOIRTLT -KscAoLd3InVEj20peTUQ5b2NOimSXnKxuQENBDbjtfIQBADMfPDBQoMzv52Mmjb8 -SdaYKKNzqDd9K1oY2hcMSi+LcHag+KJFOyKBf3SoHmcU/vCEN+LyTgljYSKDmEf4 -wZ2+eLfqFgSdBJp2xm55ih+9CHXg3dXx9SbHiGJCIxfJaIsnNz3VmJGPDDjBlaf/ -hjl/7SZvR+MJpVLFPGjj7uOhTwADBQP/Sgv0abeCXVdVXwGEmhdV0VDo833IQRdR -u1yt+QLnWRMGTY1oQapsH6QLwYSZfDJlxbsBA3tfqKStpRSbdGNNTsK+RIehsGdd -i3sWGplRGm5Xt5KpkY/mc/tLFaYJNMqAgfWQcKlZHBp7EoWMgiRiDJUWq0TH1wRD -oPaRc+H5GdqIRgQYEQIABgUCNuO18gAKCRBrxHeAVKzSRn1jAKC5Gp5sHM9sWdZe -M6qfu54F2OwMQACfTjYXfpMApAROPkjhhFNqH0d8x5E= -=1N8S +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 +fMeR +=oe6c -----END PGP PUBLIC KEY BLOCK----- + diff -urpNP gpgme-1.1.0/tests/gpg/secdemo.asc gpgme-1.1.1/tests/gpg/secdemo.asc --- gpgme-1.1.0/tests/gpg/secdemo.asc 2005-09-08 14:42:32.000000000 +0000 +++ gpgme-1.1.1/tests/gpg/secdemo.asc 2005-10-20 12:27:57.000000000 +0000 @@ -1,32 +1,32 @@ -26 demo keys (passphrase is "abc"): +26 demo keys (passphrase is "abc") [2005-10-18] sec 1024D/68697734 1999-03-08 Alpha Test (demo key) uid Alice (demo key) uid Alfa Test (demo key) ssb 1024g/46A871F8 1999-03-08 +sec 1024D/A9E3B0B2 1999-03-08 Bravo Test (demo key) +uid Bob (demo key) +ssb 1024g/E29BA37F 1999-03-08 sec 1024D/1AFDAB6C 1999-03-08 Charlie Test (demo key) ssb 1024g/BC43DA60 1999-03-08 +sec 1024D/EB9DC9E6 1999-03-08 Delta Test (demo key) +ssb 1024g/B0C45424 1999-03-08 sec 1024D/FAEF6D1B 1999-03-08 Echo Test (demo key) uid Eve (demo key) uid Echelon (demo key) ssb 1024g/7272144D 1999-03-08 -sec 1024D/8FC282E6 1999-03-08 Golf Test (demo key) -ssb 1024g/9DCAD354 1999-03-08 -sec 1024D/04259677 1999-03-08 India Test (demo key) -ssb 1024g/61F76C73 1999-03-08 -sec 1024D/43C2D0C7 1999-03-08 Kilo Test (demo key) -ssb 1024g/9AF64D02 1999-03-08 -sec 1024D/A9E3B0B2 1999-03-08 Bravo Test (demo key) -uid Bob (demo key) -ssb 1024g/E29BA37F 1999-03-08 -sec 1024D/EB9DC9E6 1999-03-08 Delta Test (demo key) -ssb 1024g/B0C45424 1999-03-08 sec 1024D/7372E243 1999-03-08 Foxtrot Test (demo key) ssb 1024g/EE45198E 1999-03-08 +sec 1024D/8FC282E6 1999-03-08 Golf Test (demo key) +ssb 1024g/9DCAD354 1999-03-08 sec 1024D/34C6E3F1 1999-03-08 Hotel Test (demo key) ssb 1024g/D622AD0A 1999-03-08 +sec 1024D/04259677 1999-03-08 India Test (demo key) +ssb 1024g/61F76C73 1999-03-08 sec 1024D/D2699313 1999-03-08 Juliet Test (demo key) ssb 1024g/35F8F136 1999-03-08 +sec 1024D/43C2D0C7 1999-03-08 Kilo Test (demo key) +ssb 1024g/9AF64D02 1999-03-08 sec 1024D/B79103F8 1999-03-08 Lima Test (demo key) ssb 1024g/FE56350C 1999-03-08 sec 1024D/BE5CF886 1999-03-08 Mike Test (demo key) @@ -52,6 +52,8 @@ sec 1024D/61F04784 1999-03-08 Victor Te ssb 1024g/07287134 1999-03-08 sec 1024D/EC67DBDE 1999-03-08 Whisky Test (demo key) ssb 1024g/FD6E27F6 1999-03-08 +ssb 1024D/E51987C9 2005-10-18 +ssb 1024R/40DB9D43 2005-10-18 sec 1024D/567FB34A 1999-03-08 XRay Test (demo key) ssb 1024g/41E408BE 1999-03-08 sec 1024D/4B11B25F 1999-03-08 Yankee Test (demo key) @@ -59,9 +61,8 @@ ssb 1024g/F7B080AD 1999-03-08 sec 1024D/54ACD246 1999-03-08 Zulu Test (demo key) ssb 1024g/A172C881 1999-03-08 + -----BEGIN PGP PRIVATE KEY BLOCK----- -Version: GnuPG v0.9.3 (GNU/Linux) -Comment: For info see http://www.gnupg.org lQHOBDbjjp4RBAC2ZbFDX0wmJI8yLDYQdIiZeAuHLmfyHsqXaLGUMZtWiAvn/hNp ctwahmzKm5oXinHUvUkLOQ0s8rOlu15nhw4azc30rTP1LsIkn5zORNnFdgYC6RKy @@ -72,299 +73,269 @@ VeVGG+B/SzJ6+yifdHWQVkcD/RXDyLXX4+WHGP2a cjajA/9VZufOXWqCXkBvz4Oy3Q5FbjQQ0/+ty8rDn8OTaiPi41FyUnEi6LO+qyBS 09FjnZj++PkcRcXW99SNxmEJRY7MuNHt5wIvEH2jNEOJ9lszzZFBDbuwsjXHK35+ lPbGEy69xCP26iEafysKKbRXJhE1C+tk8SnK+Gm62sivmK/5av8EAQNuYiCeVh4Q -pF3i4v6LDa82cNBI92zOHLJAu1nbeJ6bl86f/lrm6DuH/SYjOkRTQV9mYWN0b3I6 -AACvUW2sEdiVCzqYu9QdI92LJQd2HLYgKf0mIzpEU0FfZmFjdG9yOgAAr3LeP6n0 -SUaQqSNKJPx1Wes66+3KH0n9JiM6RFNBX2ZhY3RvcjoAAK9/tmRCQsDGIXRnEJZM -rvRjIUE4qvtztClBbHBoYSBUZXN0IChkZW1vIGtleSkgPGFscGhhQGV4YW1wbGUu -bmV0PohVBBMRAgAVBQI2446eAwsKAwMVAwIDFgIBAheAAAoJEC1yfMdoaXc0OXgA -niui4cH4ukKQ2LkLn2McRrWRsA3MAKCZ122s1KPXI/JMLBTBGCE9SiYQJLQQQWxp -Y2UgKGRlbW8ga2V5KYhVBBMRAgAVBQI247arAwsKAwMVAwIDFgIBAheAAAoJEC1y -fMdoaXc0J4wAn0x5RWtqCjklzo93B143k4zBvLftAKCFbrlxlNCUPVsGUir9Azxv -P0A3gbQnQWxmYSBUZXN0IChkZW1vIGtleSkgPGFsZmFAZXhhbXBsZS5uZXQ+iFUE -ExECABUFAjbjuFgDCwoDAxUDAgMWAgECF4AACgkQLXJ8x2hpdzS3wgCgk/BrqP5W -blWLc2+6jwlmuLg8n8MAn12puZol0HwV0mcd8aHWtcrfL8lynQGlBDbjjw8QBACc -jdcfV/S7I319mfDvbOwczDvTqDsRbb2cPhQNAbg7NFlWJKtRrmff14jtCt9M77WZ -5W+zTLwX8+8Wy3mMfrys8ucZKtfPixOXVPhyinUUGSq68IArA8vLSUTuOO0LIi05 -LAg6jzGhN9jgkQReZyqxub4oe/3JhIX9grgJ/tsjNwADBwP9GeXmMrGi5wMD3qkP -bzb1MqwsVBJq75eLLxu85JIN2XIAGw6Q0FJp4o7d4BAQqAMzt3ONU1OcCWlDQRDx -j1nynE5ZgRBiVoyudEELgNnYhp3MSEuUg7PkFWn+N+GuvyhVUHApleyvP09kvP57 -hif6yJRS+V6L1ugP0vZmBI4dqQ//BAEDbmIgnlYeEKRd4uL+iw2vNnOO9Y3cRSEx -yy8unuzNvx5GFG6KNtxoFCDzMMzUa0EDH1x/QJA3CgqMpS282nLdk/5O+AphiEVe -Gv8+c6pL/t7falIfSgKZ0j2nvCKH12SobwiNflTGJB+jLnnesjqYJD7h0SVLjToP -/vtKPYlXOU1ZpKzDwP5YcQQuRhF9Tj8SUxScIIhGBBgRAgAGBQI2448PAAoJEC1y -fMdoaXc0IKkAoJ/NQGlvFv5clcDIf1AXjLlTFG9uAJ9rs8IOzHfNWuUSNxdhRvO+ -O7fYF5UBzgQ245BnEQQAvwwkLp4Dtoie4/fvandnK4wVPCvgJkIbNuyQZCarQGwv -8RapBwbANT4vGW+ky2vzgptj21xYjOcdNMIhJ1Sjc7hjs1PLhwepMFrS4/Ple1Tl -jpEgxLZ5UxertMvSTr7OxsA76jjOQt0B+y2vs5zXgLtedux4+pdFxkgM8r6fjZMA -oJ5LVNdVRaSkiHaKZWQWsjfTs0/LA/wMHP/PdH4kjFmDRqOPp+iB8YYwQTPZS/gw -HtUbQhLcFEljaxrCMRZw0ZDMbzKWk+BrrBvgz4Wk3XawwUshYgi8SgwWIDG0jusE -PYOs1hBIdWTEzFVP2pK/NQzhAqJV5/390OLEY8SN4bts/LY1XsADzU7lhE0Oohx6 -FanaZCuGgAQAn2zK53yuk7o8UrPdTHygVn2McsPYYzOvlVfHCSXQ14oXjCs1nK1X -nMIGGM7pJjYpzv/wUZkHLNcHX4uVHXxyzRQ4oMPekncmaR8fu/YIQ9zag5s2GpKE -SKAynGQCKwI4H5eYn+ryIgOHNS44UnXFUwbEsonP5pJNNRIM7VimNGn/BAEDIkls -jKh5E70pJ77zKAq/uP+EnBQq0tCcyqQgQiG1n28iMQy45N5zv/0mIzpEU0FfZmFj -dG9yOgAAr2cvUYCyL3NVUcfw3gGkK+A8ZyTfoBH9JiM6RFNBX2ZhY3RvcjoAAK9H -YClNyCyakk4UDrW4qn8YgsdvZcxN/SYjOkRTQV9mYWN0b3I6AACvZ5Ed3zcwNvmF -Ptb2h6OhMGgwrNan67QtQ2hhcmxpZSBUZXN0IChkZW1vIGtleSkgPGNoYXJsaWVA -ZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjkGcDCwoDAxUDAgMWAgECF4AACgkQQT9K -8xr9q2w+RACghpiwPnn7F3HJsm9VXM8SwBjWThIAnjHZulQw9Tee9XDT5STui+ZG -+WN3nQGlBDbjkIIQBAChY8NSvu6sK0p4D0AVBsRz8iVXYqbRlRTZAHS4LCXwx/i8 -FmfdIXnaNLOoyi44YruSCnlZdh4YWquCx2mgywG589AzcFhahmqElNbKb7m4F//E -GIZK0zTgW13tQwG9hTXOhYeqchnOOaDDwPEK1Gr+2o/5ANqhqrin0TFFBWLgdwAD -BwP/R009s61X/FkUUAh8w4Tua6qndN/2GsqXsyPYjdF5E3gErK8jDcDLniOHqksw -V17bJG81czCRE5JcVFLLWQJg9cpeoTpP+YcF+m9whtswaOJ/LPrx888i/OmluSD8 -1VP+6zBhhTUbpazfLEdt3XczpW7CNdNbyiEcgT+6Cr+W2Gb/BAEDIklsjKh5E70p -J77zKAq/uPsbfaq2h50JWrb/wQiufxaUrYRvo5FjMBLnoUE+L/yG/Hp2ZRZuA5Ez -BpZ3ON5LaFadahL98oQe/W3IXFZwxyYfGCtVrV16zx6cFTJQK/iIqp3TNp/fA6TR -E3syS1FQZIZMiFLvgSy4Tsu4vAadP290Tc62LP9ivC3PiIxt3aqW2l/NLohGBBgR -AgAGBQI245CCAAoJEEE/SvMa/atsta0An3ZMmv9EVWVwEvf/Rwf7nbFsgGhuAJ0b -P+lAOCRSYziWSIDf+BJ9F19H3ZUBzgQ245HNEQQAis7GTDqtEM6luop6eWsxFi9+ -qhUVp9N6S+xlbwzQZVA4FjCqf1VR9JX8fwjLecmxT5xThQVcRqgeFVaCyky2Nge/ -FcFMPZQeaP5jv5GRWc5PvH9Sw8pvGOTB56V4ZeR4cQLDBm5CF5tKu1BCWWq2MLHf -ct7TXe6QCzZKcjzdw8sAoN9VvrKN+EbQC+THzdWaUWpdcfWnBACFWEyLVPTpI1jN -soCZ00F8Fau/2baXk8mdROlJZS6bq54ksfOQQzReBWce35h0W7NeBRp+yeoSf7Y3 -i0jTO4mrOiL/0NCcS8qKNnGKG1irdLes3pQhDZpcUe2G9W3FnGhxl6W5hpYc9550 -mUj2H3I5tmfSYsVcVjpNSIdBizxE2AP/SI1t6q7LHMQp0h3MPQ2z7daMhUGViXnV -l2+rKjb5T7bvSFdV0iyyuyoqvUPBGWwJFLAxj6esHRlQ6W8togHuoJCR7cL2bK79 -8mgYOExk5gBexq1VHQQZN1edK4LGo2ESKrCVtkYwBzAU76hYFKAbKMU8dMxI7DRd -LjZ3vdQ3FNr/BAED+xylaHWcBOTZBCd4ui6NIsLkQLv5uFW66tWYKvc2APAe8oKx -h5YMp/0mIzpEU0FfZmFjdG9yOgAAr0tuCtmJhCp9PoSOTFA2ssaMB7jl+5H9JiM6 -RFNBX2ZhY3RvcjoAAK9Ilc3l2agIgR5iIQnvOgyYUe4duz+d/SYjOkRTQV9mYWN0 -b3I6AACvfQ0dS/51Esd9E/rbG/m1C3qIenSthbQnRWNobyBUZXN0IChkZW1vIGtl -eSkgPGVjaG9AZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjpH8DCwoDAxUDAgMWAgEC -F4AACgkQMYwfrvrvbRtnAwCgs2haIgJu/UEpmCEnojO1zCoaBwwAmgPAlNY/PttA -u6zYqTh2M9yn1DIXtA5FdmUgKGRlbW8ga2V5KYhVBBMRAgAVBQI247gAAwsKAwMV -AwIDFgIBAheAAAoJEDGMH676720bIN0AnjjH9IN8523PCAYk6yD1IFM/ad1qAKCe -nkWU2ZO8/oU8seCQ3HkXkG2JRrQSRWNoZWxvbiAoZGVtbyBrZXkpiFUEExECABUF -AjbjuB8DCwoDAxUDAgMWAgECF4AACgkQMYwfrvrvbRtepgCeOpUG5rVkWVJXULae -GZzqbT+2SbUAn3HmDGXzAJ6lCiYh5NrTIb8A7wIdnQGlBDbjkf8QBAC0pe0mjRH/ -JmKL3mubSTRMKGcd77+l8psl4GtcA6iqNj3g650Q2xxgW+Qb1iL9SeiIJP8KuEfj -6vfPVKZHKkRAfsjnpbhN8zz7WQa2y8kkmqojHoGIh5wAD3NE6ox+1D2WvnySmU1J -OuAQlEDfRC5C9hSrQBkO0TUCWL2wquDv1wADBQQAl3TuGt2SCuYSXo4R2dNZpB2u -kqqHOj7nnTQu7ZVoi1OtgZYxor/w783GzLJ75PfdQMSd6T+Gbyq+QgpaiBvlmWtc -5rcF3ZgnxiW9n2zUlQ+M6denubJT6/Aqfn7yL9v0sr8K7kTrPqAM0lb6DAMwBkpN -8o+Z0+aIpG5/jOtnwuT/BAED+xylaHWcBOTZBCd4ui6NIsGHGb+xn5M8RwQblStX -KFu07GugiONqnqNgB+sywt1otn4dFUWo/4FzJzvEtBQ6EjchWAVKoVYj5H7ExOP4 -BKNDNb9JfOzu9ItHk8TvQ5X7HoV/r9eM0i6MRzNOlvchB1P3Hjw4a2Pj6TwpEBGZ -uuYqe14UAGPlUjHSn+LuhtGpE06zuYhGBBgRAgAGBQI245H/AAoJEDGMH676720b -j5AAn2T9b/n1T2CTa+Q5oGKLAsBIcgeGAJ9kC4ETWfY8itary77dKmyVJetgl5UB -zgQ245LREQQAubUOd0B7cFzJHF5vo5NwiMZ1JXPjyNqL2OWE/XfaeJiB55oMmVEP -mK1JF69wU7ZBpo1l4PEIWcP7WRMqvBEFl+8LnelRkSW95kwFr3D8TRnarZy3kfiB -F1t33dnkVTaZYxCDKOBdZ/ZiRvLa6gZ/KHhITfzaS7h36G2MbAlGlj8AoKQPFsEP -jByKYdx72m5/2Ju/4d4jA/oCNAKaJH7N8Y3HLis1ShhpytJP1yC9GJjtec3ugzYS -C7RKV3NJcBeCX4om3KhiDSN6YYVICf4wdqz6TAocoqPzR2t7Fz6+upxIgh5WGnnC -s2e7uO1eXUCSXONfiDEDzRKGTQjkdvwFo+880DkiGln/qmRrcILA568dwNnOrBio -5QP/dbkpUBhqGDr2LchpkoYyQlqzbvUpXJ1xlfZim1jfrmdfsk83dE3iBzvmT8By -IZcMoqDEHil95LmJp3qw1yVeApP/ZWR+0XiBLEF9GhcAOc5ihH2ACSXLWiRXpyMm -K2/erTvTX3QkAcqoQ1cFWCwNNCrlgycB84Hdm5GXdajp7cD/BAEDMzjCY4kr/Q3j -hyianLh3vPRtiNtOM1BAXVlyCFrMAWM4wvd1NvQzOv0mIzpEU0FfZmFjdG9yOgAA -r2YMtXCKQcwejpJAvOyUDQkN7pMthHn9JiM6RFNBX2ZhY3RvcjoAAK9Jr4qS3ZZl -PdL7YV1+Phgvnly8701B/SYjOkRTQV9mYWN0b3I6AACvUexSWiUCxWbF+aprVRlc -r9OTu8iDIbQnR29sZiBUZXN0IChkZW1vIGtleSkgPGdvbGZAZXhhbXBsZS5uZXQ+ -iFUEExECABUFAjbjktEDCwoDAxUDAgMWAgECF4AACgkQFoQQpI/CguYi4wCgmXVE -CJyjkfpJJBTdGzCjhUq4N/sAn3Cguw1R4rX0391e1pAUuyM4OsFnnQGlBDbjkvwQ -BAC2wan9ScDXLgCqN7CWSRM5B68vC3PCbemYsuOXZjdN8afw2LSHxZ3buRXfYxRn -JNo1pm4PGkMQ7ZpQikZZVCZa+WoIVXYXRnYAjxHhvHW0LaQPvnyFS9H5LaGf2Urs -TWVA+695zYsSaX669XFb9WbiIMGB4yUiXPvQwUL0tSd+kwADBQP8C3sKWjsPh02T -jcEy+FDxWAn4g3LfsOPw8dfawJln+0h9LA0hTebbKBJWt5OUMqjjTq/pCZ5+z+b1 -0f2WwET/xAvjQSTdJjrFX9DNNU3jhCCelEpal9oxsbNYlVd5zOU2RN4hlmj+eEOb -5oy5wy797sQpsbrgGetCTsvPotIpvbH/BAEDMzjCY4kr/Q3jhyianLh3vPDNvR6M -j3Bba3JZVQTKkPeSB3XBJgQ8ssznZMvxlNdGPl6SOlpBYPcmUuo2u69fS+LUzqxM -0unjLC/WRRPWr5QCyg3kJFXpZ5DcsdXUPikfaRD4XWuVPTStcu7NC3YRt+QN0y4m -dadZMjSAwMyHg/oqZHF6HoK/TA5ZTVHNlabj+zNpyYhGBBgRAgAGBQI245L9AAoJ -EBaEEKSPwoLmSuUAnRcjDyrjIbOCDkQfCrpPvbqiHoQMAKCYSE1DVqBk+RlVUp8R -uPmgvzIKC5UBzgQ245SxEQQAyG4mRUQZagjDgl0xAnaSbLCQ5wJqYq/snwCl+IbD -lXcoHqXQNO9QJrPKwKQAUv3Nvk7mqZWnfMPoskLOASrs6nkCv2Fo9Aw6smNizO6i -W7xXepwvxjho4hLnE00oGPCDhUnAU05LO2pTBoxwHVs0o6vtaaViXk0s6dOFCoVd -f9MAoLjiGlK/3DFWoUrqIiuE3aLfgkddBACrp1snJ1BtiGhmKjt7An6Qoc5LVnU4 -1J/REiQIyitUFAvPX+fiqzDyE3VD8qX/vvTLpgZCYvvEdBlSfM8IcCn1/Qh4aw9J -HzuvKQg8WclvnQ8zq/7RV9J7h/aS/KIhDJIpGhi6YfjfjdSKfLYYfr3S4TVK9xD0 -Za3AH7/lrTqW8gP/fpKWu8fJyJ9kqHyYrI/j4ykt5QKBj3tHjqCv7FQb4FY8txnN -3fLzBtva/tlkSKRsLobixjZUGF+uQR1dTCv042LxZ6aEUqrUytxqUc05pCSAvEZV -8bX2H/5+ulSwdxKEzs1h2NvSTAiZ54zzKGjHNmEitdAaPD/9u5xdAiqPFxH/BAED -CYhWuhxneJYv2ZhcXqW11qNlLO3tHf4QWPYOZ9bRChm0UzW5CRik8f0mIzpEU0Ff -ZmFjdG9yOgAAr2JqCOINgV2LqfCiK4s7X0mqwBz/uAX9JiM6RFNBX2ZhY3RvcjoA -AK9CmjU0rQ5lHrAdn3TtY6fEEyaU9UBx/SYjOkRTQV9mYWN0b3I6AACvdPZBZuBl -tFtFIRj0/+lL7Cm9daq3wbQpSW5kaWEgVGVzdCAoZGVtbyBrZXkpIDxpbmRpYUBl -eGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOUsQMLCgMDFQMCAxYCAQIXgAAKCRAf6Pxv -BCWWd1pYAJ4lvyDCV/l9oXkJOzNeGL3Df5u87gCfWm5F7YsIhi+PR7BVafFUBsWT -w+udAaUENuOVEhAEAIMMgk/e8lsV/KEkd4/jNK4yFj5iy/Faon800I3GUzETuQA2 -AT3getR+GuV4pbZWE/80b9hnNW50UJGiP1+SXfVtY5vT8p/gNFwn5d0O/pq3bpgF -RJmoawTzx8SFDwCVPHEcwOHE2j5LvfrvRBOyKU32tr976ri+Uowt0+92LuA7AAMF -A/0Yo9dDqhjR2UoNcYfEZwWhRHaaJenP3z3QbzjJkASb5H84xCTEpv0dqEtVTJUo -Io8Lh5VjbiCwok4QPLVSbQFeHqTKb7N96PjevkZ1Co6OrLCNOcPRvXxgCwSGbuuL -MkQJEutnXLu0DOKquY94KXXh79La7lTgjReE/1Wzbgc1+v8EAQMJiFa6HGd4li/Z -mFxepbXWoDrmIq/iTdsieZ9YRYA+rJ4OBtb2sjqV2L6WYNOqc2qDSj9QDIRJ8yiD -ysA/4Yiur+UNBqRtJQGroegDXG4+NHsudnVzGXaQsgEqAjZ9PZEtsrEf8D89NeZ0 -3yQFkAXQ3n+aCf69jmau/Yf2YAX7D8brkxgQp3PCUcOgGv8EPo9r+AeRiEYEGBEC -AAYFAjbjlRIACgkQH+j8bwQllncJeACaAqT6TL4N3gG2lLQNzV6gMd/p3dgAn2/2 -mEgFb3CkorWwdW++wf/YThe0lQHOBDbjlSURBACcp0BogujMnThXpn4UjBARj9oX -gQWskkhz657AXu6RmX/u5RmpLGqbNmNuqKDIwUbJslIxrpOnA3QEobkIl7ThH+ZU -IhGzPUnHlhd7M3dQWw1U0TfpHyXx3FYb7CCPabrSC7hWWh1ylUxz+RGJJSApR+D/ -GY+dF7dIllKUbaUGbwCg1z+vkNbzqibcwdYrwCjKG9VeFa8D/A5yPHqB9NMp+3Ol -AGE4XRTR8LeelALpu+MuNMGFCMLdZfmt/Amoyau51FsQ7WwWrNM5A+1v3Fq0x5Wp -Nw6Lr7HbN9d6zidN+L0uCrXPweET8ueS3DFnHI945epe703TbcjJBO/uYLn0LXEx -mTg846/1ZlQbPgLzmzb/2JMkJ+QzA/4xFbRL2YeaKyu4JjpMNUVzXYogUwg9KZZq -/qBbpsIAD7Agd+ZxLJHoweItXaC0nS9C6qDJZ95OJrE+h/Tt2D2lmxXseTVlSESa -Wh45x9mbC0eRGFYYRsSx3z0hYwMmXA0ntj0lndC8ru8HjZtBW/KF0VB0RcfSyW+W -+yAq0Jxo5v8EAQNzQpmchsGqHF94WG/VI+1oYlA4rI/KYT/DB+zHXBquIl2KZoUR -ebyb/SYjOkRTQV9mYWN0b3I6AACvUJB07mtW6/9i6mmuR9JtC7USM0AP//0mIzpE -U0FfZmFjdG9yOgAAr2EW7SJ8fPMvmLE8+Kb56tIqW9FrYAP9JiM6RFNBX2ZhY3Rv -cjoAAK9VpNLwU8ljMnpHbTNr6de2pplMjS3ztCdLaWxvIFRlc3QgKGRlbW8ga2V5 -KSA8a2lsb0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOVJQMLCgMDFQMCAxYCAQIX -gAAKCRCtGw+tQ8LQx9USAJ4sELIj8IZxlvkwqmmEMXtm1kIhQgCfZEpMtTpkRbT+ -rEHMssei72JJi+OdAaUENuOVSBAEALmZYtP72G7OodR4RfR270RxTHj40PfUpPIf -3U8ezyO3kqjB12IdD2YIXIZW6zEj53psX8DGya5nSvVjdFofQSVHtsnB/H7VHBka -OQnREoInHs4helYOD0M/RZcbRIb65e6vEesuzvo9N0ACSlBsAXbeeNKGfGGCog74 -GVGcZ6HnAAMHA/9W9n2MwJ7lq0GV4V0EOHDVcTAVRSh0nB9uKBVW7hFi4DP7XYBf -gj8Nlbc22vMkkdSvNFUoLEH7Op9sMglXfiCPJSh02U/6XyAhXDyZRyrOIHviTZ9S -HMQQIqtEETVuYRkzvSnSfDBVq1p9gW6eZN9q6AM7gmoKInpRaODFRWU7Df8EAQNz -QpmchsGqHF94WG/VI+1oYTZm8S4dmnYvEY77B6haPMQN5nCjubqfHGGIMJxRRG/I -HzXq0tNi4fusoLILtVbUgta+94uzgnsrUJqZbfmwrId96U52nG82ZMhLpX41lZ/d -LZouCr/jMO0uvF+WYMjO04ffBfcnNkeQv0p7WDH0zZZjuJ0aoUwBM9xxU3lYTgzl -aZi8iEYEGBECAAYFAjbjlUgACgkQrRsPrUPC0MeO/QCeNYtFDXrr21NZlLu0OfAe -lPBM51AAoKglouZG0f49sm9tHg1Gc/nwjzzhlQHOBDbjouIRBACKncc4Ueec7dWa -VARy2SmNVufeSenYs4AsIPP0v59jEl7JI0rb+4JbIJoAzW/hcm26GS/UbbpQwig8 -/PgMUV5QfBST4CEOlf7/x2a4HKk9tDV4An7q2aNr1beW+twxfUGWWV5I0o1b/iKV -k/LiQRiaMr8pJXY266m6/2Pn9LmDtwCg+Iqfx8gsK2PZCWv87uEKAOLzHXsD/1eR -xLqCt1hT98gdDLykRTlI3kMq6EK3I+z/8pDIMDuPIJq1eM68YdFZr8s7i1ye1QpD -ltPYHgWnUC733ujAKANdyybm3HrA3TSBjEAhNfcu8nkrVorvASQUDCLJatWRWJTU -VrPH+GXIXMA/Oi6LDsgNDOJanwzzvDCCm8hWQqW9A/4xYAZ4NVFrQq8gtQPJWuMI -fSFSvpZWNgQgYZntiXSUGYOVs28T/87RoRx02tsVDw2PA8z68q/XRuM9NdetxbUX -QHB9eszFLi3W1idsXhd/C4SyiTgEFXG8Y8s94Eadgk1PAYHN6Gd3SY7jmevqYGVL -mBp7qfj5Y9XSM5SE0Th+fP8EAQNn55Peu081+nAbRC00SOkO5P3aJwu7AIvXN9Ng -rJdUW7TQmQK+cHyT/SYjOkRTQV9mYWN0b3I6AACvbK2QUpz29Yo72wl9Cy/TCjWc -O22z5f0mIzpEU0FfZmFjdG9yOgAAr3et3apzZ+S3o9ywcdaosE2TLfNzuX/9JiM6 -RFNBX2ZhY3RvcjoAAK9PHpBSB/T7wKTGFBngy9sOwtS7ZM3ptClCcmF2byBUZXN0 -IChkZW1vIGtleSkgPGJyYXZvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI246LjAwsK -AwMVAwIDFgIBAheAAAoJEP4YCx2p47CybMcAnj/BlcF5gdhj8huiFijkgZZi/YgA -AKDxpmP4JCksz+UPKsQ8UbtuTPbpPbQOQm9iIChkZW1vIGtleSmIVQQTEQIAFQUC -NuO3OwMLCgMDFQMCAxYCAQIXgAAKCRD+GAsdqeOwshrhAKCK3IrzNqME6oA3RllO -rx87OCIRggCfVkR+Nf6N59lS5j7jMXOuk799fQ6dAaUENuOjBxAEAJVJ1fFRaXPz -UWOoeBHhvUS2aGZbz0Kamwd8qVLCVi8G1sH/LtMUh+8CvhkVum6p7Dom+2MgRmhe -+iVNbAdU8QWS4bQsBrTeiVpinMLpkEO4uRvT1G6QIPjN1jrHBsAxGw7NmC/n3stl -e04ssueY7JOmyNEMvO1ay42CWbmt985PAAMHA/9LJVm8UR0RWfn91BOnt4C1d2tt -kQzfv1y0InbrrdFtNl3nmUgF6/V9OcpCS8NNjZ7nzIhDgT43Ov32qD0LJ/p7c6ES -tNSoQE6G6wGB7j/sTkushUy+joAVT2qCfRKCye7/DDa3FXDdcSOovweCX7hD/nth -G8k576rb1h70svx5qP8EAQNn55Peu081+nAbRC00SOkO55yVYRTuqV1cyTx/djMo -oC9B9hYiXA8kcUn/RO3hztHVFGSYQWYNhOGBPe+FrUFfY6yjGeS9rlLKQ3oaGCr6 -pvZYdIBdzktW+TItDPYmRaaBTKrBw8jmccsn7xnEriVcgkSTTMd706I8cCIQh/iK -iM5pFZGPPghQPn6paS6L+ydP0ZNliEYEGBECAAYFAjbjowcACgkQ/hgLHanjsLIy -uQCdFkPnvUpYurVoPjhg1pw4UzuaVYwAnROb93OSUP9PZxf4XVJwHKU2PnCUlQHO -BDbjo4cRBADeZztXPNYwpoIf6BfqepImZqhVd2qXuZBJnEvwaFoAl7er42pXXLZh -WIu7/gWODfcyNxsUKgMbeQ+nWO2jdcZQtt+gmRAGl1F5LbxsP6aRw43W7PAkbmYg -PY5tY/dhgFGP5puoV9mhijpFcK/cjeg6wNgmjuEsCv8BF5FX4/p2swCgwmgcx88E -pJF3/EDrTk4/8Xr6Z88EAL99JWgnl0w2TNiP9T3c5mtVdcYs32ntJH82TiQQ0LR0 -A7zRY5ruojNZC9LsTht5K69AJakrDA/Fu5mr2xYoFJcW4b7rpeKUy/wYifeOhYY5 -T2NDYvaZnQJXZ6O8lGLFgAxCmnZEN4IRFahKs/gAmG86d6fCvuSrohSZvQ+Lsr06 -BACFT4tjfuL6MZ0VhsClxeBPny2AM10+bDDM5eOl5ODLN9Nxf+SRu5AdIojz2OqD -9Jd55WobpUXGzTI+0g23636IuJuH7VGCF92nFwkjdIDblRoqYPAsJRkMiC4FkRae -qF0DpgJacYSBnHdY3Yd7I+cvgkK7oBjzTiU/Zs5hZAeK8f8EAQNhroQ8vAawUbBJ -GAm7E5zNoXK3ly9yV45/SohVZDzODvOlo6LWymLq/SYjOkRTQV9mYWN0b3I6AACv -VTx87uYeuay/ZhQKJudCoAgGZGdML/0mIzpEU0FfZmFjdG9yOgAAr34g7RZNSO3G -bdz8PNLxVgFG9ZaKo7X9JiM6RFNBX2ZhY3RvcjoAAK9YCrkTYjGM3LHB50POLDFY -Z1O3Mu9jtClEZWx0YSBUZXN0IChkZW1vIGtleSkgPGRlbHRhQGV4YW1wbGUubmV0 -PohVBBMRAgAVBQI246OHAwsKAwMVAwIDFgIBAheAAAoJEOup8kDrncnmriYAoLZf -OyE8KQbqCKZA2lLbxnCXr2G1AKCnWAeL/6RLjuyT7ddG3qd+ggEnB50BpQQ246Oq -EAQAj7WdaOJjzJNs2G8rvrDZvD/uaALQ9PtdvYAp/Drp7xMH5T62+KKTlKdO3s8I -QBPiuFocJNir5st/nm8Xl+gcOZOvtr45c/cl54fGO1gOjBZOfgbkdBVK/LMwuQWI -ebK4qCZnAOlDLYNGVUguGLnEQBSfnhhkgh0WA0kqt7fYvpcAAwUD/3cOEqPlMdYe -LnGEG4wPxtyVIchwGOv0YRW5apbz2fdO7otj1AFUN5WzFw0A5+WHza1OIUhg50Zc -o6HnwKx6F+LbZ5aOc37EAvaFgPuMxBfkaWYagCof3jBF0CbTWUXV/D5/dFmIeuGT -uUMNsGVH+OSMW2hBN/7+aJK5LLHL+hzp/wQBA2GuhDy8BrBRsEkYCbsTnM2iEIZ+ -jDx69i6vtiK2mS5+ud0+9/XEd1foHMXoByohTsJeUvbwXvAu7FvDdfroq3XGvSjZ -+czTMIekzBbYRxC+pPYENNuBn/e6LTKQD4oVW+uQYcPax5AvZeR5tm9RPxuQ1EYN -AmHR2OEtmE4zSbqGtrnsp/a097bTCnmxH6PsQ19HSseIRgQYEQIABgUCNuOjqgAK -CRDrqfJA653J5nNNAJ9Se4OBQyISgG6RMM2e6+frY01H+wCeJmn1SGKVrWnZeIBE -j+jR5OSAMDCVAc4ENuOlJhEEAN1bOV3WXINYOoY9LMY6x6FfJNJrSk59VMtySkmk -OkStyfyNLxwqteRVSjAjtKVmE9GZgj7mmoZobkVnlUl3VN8paKFzs74kMegrfJqY -6eHo4VAU9lQXX5aUAaIVctz5Y4PNuA5IzL/zJcDqfTN76/d63mf0rOJvewMaPDkM -yaJjAKCZTCeh+qyQdW/VLq0ODTyZcAsoowQAhUbJ/2KPcHM1vR9VgZQ4tTTuepDd -Gk1A9oq09CkGhtGSdD9lJ3O6IAtwIH5Drrh/VwoYD46C2bQv9/XFSYpFbetP2XMy -1wLLqRy50IjY4eb+A5w/MqqOPmiekPzh+BHgF1ux6FPz66ubEWIr9sUUjp4LUvl5 -0FBxEuztMXaNjdIEAJ1fL3IeDqINMmHKy9HtS4tYT/Wz3KyKuFmA9vS/IgXAd9HM -z3oBgg+ktmv+O+SsNrBPFgZ8YhmuPtTIZ4+7tEJ4VFVVfnkHp682/d8CpubBDUYd -NftYcI10CQ/TvJPFn/Cdm508DNDBGQR9nf1N1xxs6Ed8e9u/dE1DRXFta1BS/wQB -A7n3lqEldy5uprCBgI7BwpM0ElWN+2D2a9LgElCF6MeTnG4Ycamo4Gb9JiM6RFNB -X2ZhY3RvcjoAAK9TlqT8l+FZ3rsTboSXkdYnCZZwh4rd/SYjOkRTQV9mYWN0b3I6 -AACvZXMVrb4dxU2h5sKMOGXEpcHs+DuVW/0mIzpEU0FfZmFjdG9yOgAAr3vtqeEa -itcXHtaGrkSx+21NoZaKkS+0LUZveHRyb3QgVGVzdCAoZGVtbyBrZXkpIDxmb3h0 -cm90QGV4YW1wbGUubmV0PohVBBMRAgAVBQI246UmAwsKAwMVAwIDFgIBAheAAAoJ -ENS/V/NzcuJDdy0An1AXntULu0eTFfoqIj2gIoRR6l/kAJ0VIXasNn5cMC6DtduH -/Cl3BCFW250BpQQ246VQEAQA31Qj2MGefTCoF0x+D+9UMxZ6RuBPzI6gzX1tzcUP -WYy38NIq+lNYBg7hLFkUfn0uTsAm33h2Q8z4/DGT7jmQWpoIg7yNTr6681L/gYo5 -FhhC+qERZ1iPMyfMwwD7rrz9bthUGTqChV2h6NiPUPM7ic/D9rxJICXy8dsoj0dQ -6dsAAwUD/0ggimQTUCGmNHHypor/GY0XAAL4Vy8jAsC0FH1UaqDVTrTDH1qWLRnS -9uxEsOJIGSLMSdxC0FZEYq4jCm7CYjTOHTHvvYDbhs9QhvW9r4VD2efbERFSEYMi -H69ASQLGDp/O5kOZTgQOvl5oxzvsrOMaRFSWcn66uUAMORmHKz1g/wQBA7n3lqEl -dy5uprCBgI7BwpMwsmLANtSNhKe+VmFkvN9msymkZ/XyA43Ts3EpgI/RoP2B4GS9 -LyuCC26DEqGnsats++yae/wDoWz1mM9tq4UcML4hSHIbZnG2OEZDIiu1q5aS1I27 -UeWhA8+qPhPosw9cJ3Y3sQIgdIEiKzAdfsjhmE78aSpljhGnFumTVv9p/lCNuAGI -RgQYEQIABgUCNuOlUAAKCRDUv1fzc3LiQ475AJ9aAil0KqenoLziTexEcc2EnFmR -uwCdEjwBOoJFx6qltIM/tJcxqRi7qu2VAc4ENuOl2hEEAKeOL2pIdZ+zQtehxdL9 -l/uDBFSTuN9rLb8DgLiw8Z9j8U5CEH/M38WzH1nHKKlZKjGVZYiyhRfAG83wvHnT -83lq+Ad0lgaZTR4z6nrd5ViOlHPlfqo4RPZPzPe+uF7EfDl792sJerXGAasLosmK -nxKAyJyVjh7eZcjTS/hUhO9zAKDVyLHJ/gQlMYk8vE5XYL7Pw4d28wP/VsKVkjlx -sXpcrCQIoKeDXgKNVv9L+0Pebspzr2WOah8iBN1QOkbtexIKCbb9mmviEnJU0FFx -5MIw4mipvY4EpCaH3McGwJpCzWmdzID8Z6oISUyKsuP7PXjmASbogV6Iqy2m/2RD -tfbIlbwotfbiOT9Tr3IPbH+tHAZByMRyvxID/RN90WOPSpODxr9AH9btmeJD0BfN -t99116+qdwvWrTofcbkBgzvB34vLLDaMKVIyinxz2lYyC7aSpA3uzjZvoPvPrQJF -LE0dx7DSkUTtWbQGByRabpyrXYdKZzsFXLb+LSTWwF3sQLax0C4cYT7OLPlxjDVq -/A0jgztaZVWa37IY/wQBA4atrlwHD2LVQWW8aUn17IvjZxnp2Z5Em6q1rszts7m9 -rXCv+fKUFF/9JiM6RFNBX2ZhY3RvcjoAAK9hYwqxHjc6iHxWUSLF376lmCzbsJxV -/SYjOkRTQV9mYWN0b3I6AACvYBDzN17V2d/ZXmycyHFyOyxqAighH/0mIzpEU0Ff -ZmFjdG9yOgAAr1pTL8K2pO6rbaqNJoTiKU0q6XdGAj+0KUhvdGVsIFRlc3QgKGRl -bW8ga2V5KSA8aG90ZWxAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjpdoDCwoDAxUD -AgMWAgECF4AACgkQE9uWVTTG4/Hs1ACdFOYsQ4pNSdT9grdhmONXKXgVRzkAoImb -lC/iwRti3/yZ8Ljc0tEc4HTPnQGlBDbjph0QBADOk7pS4JZak/26nkZWEs+hIIF9 -IgD0labkCnr+GNDmGJrsJxLwTjU+NoaXo+SHmWPaqRJQFrz3ZJfJAxioyoSr+Hv4 -Fbv6frZIJEy1g4dFhk8DiG+zR3uPOcZCUyyW3HupqahU0/RcX7CzXAcuPJCXeoye -SsBDyUAk/6ODs/kerwADBwP8DrWpAtFexIWvsswGdpRJHSjr7j8cJ2Hy36acB5AE -MCSd7kNM+LCrOqyOhh6RfokrvCT6ZuwlN39nDnkmSr3FWbqcRSj8khs3tw+Uyp8I -tqhL621vFn180I7dZM11bECv+YZlmIF/L3JNzFR+jmpODR99bLjQI0dpUqT6IhyS -0bP/BAEDhq2uXAcPYtVBZbxpSfXsi+AHAuizXUm/50gOqDPn9/AvgQnPzxgeV71O -aUzUKvZEVIC7A8eNbmLXooM3Kc6ppaVOy1l6BVNcHA+iAdEOnGL9e46NALwFz+DH -rt2umY2banvt6kYyWqChnp6vnk8O4CD8ufKnQ4c3zfSul69uuUA+l4e5ZG8V5yUo -ikTP7kb7/7PSMohGBBgRAgAGBQI246YdAAoJEBPbllU0xuPxJmgAnjzxkJIErPw9 -iJ/WlLv4gvPY/IhLAJ9WR725AmIjPEe8YqhNfx5b+Va9CpUBzgQ246f/EQQAl65u -b9rEKS7XsXwNkvGtj1K7gnql2H1bJ5GF9bGCWhWmB8WFtsAy9XUeC3WbrcuWFgTs -btTfXZ5I7j7HSG6ukf6Ycusb+bA1IoT+GAQGWpFeWoXe16wXZFl0pEc2iUnx9Tht -oQF0fO5YlbvHJPEQ3kvoqcdb52WOOfOuCAJxc6sAoNqo5w0YxgJ9jkj7J4cmR+OF -UEKXA/wO0jrvYE7eiZeFUjGNiRotxzhTzh53rxtz2/DWG3D+IBFOt4qqxxp3WCSN -O5SnBZWUW50hDkhTxS7jSmsfPBmCinmQ6EF5FaFPyLQBq0uKwhMaWficdrQS9syX -FlPuzQ5jOS3kVAxOmtDd7CMTC8892dj02qzAE46QNNUI91kZXAP+PINfoJ8hV2zv -lGZ9tVlo+Lgsl1BOvxvEgmYV14gyTmMWga5sNq7TdMdWi8Fz0Vy7sI4S+RMJ96rM -ws2iTzWLi2jGO44itoWttCwqmGJmlSWurRsvYhSBgvNCLXFGGaQn5ncO1tqKnWSD -f625UnAipsgW8P4Agd5qJZiwXfJ67Hj/BAEDu6tMael+rX7E/usFH0MyFQczfHWC -g6VkC9TYfdLwbBVtdcq/lugvQP0mIzpEU0FfZmFjdG9yOgAAr030xCMZovqQobPR -re1kY7ZER8BZq7H9JiM6RFNBX2ZhY3RvcjoAAK91zg0swEPwYMWjD9p9kHpjle8c -eWvt/SYjOkRTQV9mYWN0b3I6AACvbxuq5MH2Yu4E6hH46k0+/KnqrsrS0bQrSnVs -aWV0IFRlc3QgKGRlbW8ga2V5KSA8anVsaWV0QGV4YW1wbGUubmV0PohVBBMRAgAV -BQI246f/AwsKAwMVAwIDFgIBAheAAAoJEAyCDHHSaZMTQPYAnj5F4su5N516+dcX -YBl7cLVDPp1JAJ9d2mO76rlmINaaTtH5lhApIjQjEZ0BpQQ246gqEAQAkdlSJYfT -iZH/CkfV8tnhI6IDz+SgiZKcneEBnO+hAJottARGAojdbURlOIeZqRCgKpdTXBK7 -MdHAz4RKFnAAXPDBZgA5q+Coqn580t/O/AKGb8kKn9n52z9lC8A5KnHaRAsOKVyP -TIU5vq6FLmsWmMB55iz826Dk9kMhV7mmdQcABA0EAI8Jq3Jnqf0HqqaX7CZuNKHJ -gag14bTaBw0niZK0KSB6FBpzitEoyst5JBPCl0ayQEw0Hn4jhZAqcZybI//pC1CN -QBBO47VUi0y1UVjExtaNmmWxugzkzWHHx4WmyWsCQwGN4B9riUws4g3dgC007l+a -onKzj5QEo1XiiMNTFFmP/wQBA7urTGnpfq1+xP7rBR9DMhUEbuQV+5mF3JEYDt0d -r9Ej9Ccl8GT/tOi0QsPNbtaWED6pY70iZMVJSk0TG7pZ47FNx8UHI2bJKWWjCF1n -uXV+mW/xLMM1GgFMwK44bX2IsEJVqFjB7alBd/uj0ugnj2feFeTao2xDuSQ71IjG -y/lFtOkcdJOov7L4tNh2/8ag6bbuZKiIRgQYEQIABgUCNuOoKgAKCRAMggxx0mmT -E4+uAJ4+JbldpmIpRDEuE8tFCnHacQr0/QCeLU0G5RaI4jZI+QUKtYiXq0ITUnGV -Ac4ENuOo3REEAMFaZuaYHLD67UlMCLHGPk1dFdAn3Mu2TFFDUYfEtA/JDOiNZacP -iQSZ7zK+wVe66Vs9fzNkyeXqpwLzC35vkTx0K1m69Ave9LnXIZ70zvpVEL/UeCuI -TRiocxNglPgn4dyJ+2V0cWJ36NGcZmkvBW0vGItpYCbpIGLzYVOfiVUbAKC2Nze7 -9Iyw+DKU9HI39B4fz85nkwP9HbIb9z5kXiRZyCaXOMnFBQ3bAZh4Og5ZQxdLyZ/r -IX4Mu3DGjqg6UtosdVNHr6ofZWHPXNqqTUivoUmOS5Qa8dtUW3YGa8vbpK1OMnjM -LhQVJZg/eou99s9OFP5GgPh5r5Vw/EYQZ6qzS6YiYnqzSt5LcolL2+Ae0ajXUizi -c/UD/0TNXtCRfkS4SeVSkZXarb1oZjHdGlw6ENiLGiA0e5b4r0rByW4EQQGZPvg3 -DFXMjqp0lVVmfmXFPggLkbTP+SJ1/VGSC/wSqPkMiKSCenRqwHwWIdKxv7f13hye -TZXR7P8uaSddSXaakqmT99v6pdZOo8NsVQTx3PzPKpEVciPB/wQBA3B94sZ4BXVU -UYZFifR1y3VNINM8s1ZkPHDNwxOmQwK5PkcxqfpPpGv9JiM6RFNBX2ZhY3RvcjoA -AK95UQT4zAahgt0Z7gBkqnFPjSb7Fn9j/SYjOkRTQV9mYWN0b3I6AACvZij2NXRN -N8KfYKoU+00zOAYGp8PcUf0mIzpEU0FfZmFjdG9yOgAAr2BTPmLEX46yXGfFOW40 -pPQsV5wHy6+0J0xpbWEgVGVzdCAoZGVtbyBrZXkpIDxsaW1hQGV4YW1wbGUubmV0 +pF3i4v6LDa82cNBI92zOHLJAu1nbeJ6bl86f/lrm6DuHtClBbHBoYSBUZXN0IChk +ZW1vIGtleSkgPGFscGhhQGV4YW1wbGUubmV0PohVBBMRAgAVBQI2446eAwsKAwMV +AwIDFgIBAheAAAoJEC1yfMdoaXc0OXgAniui4cH4ukKQ2LkLn2McRrWRsA3MAKCZ +122s1KPXI/JMLBTBGCE9SiYQJLQQQWxpY2UgKGRlbW8ga2V5KYhVBBMRAgAVBQI2 +47arAwsKAwMVAwIDFgIBAheAAAoJEC1yfMdoaXc0J4wAn0x5RWtqCjklzo93B143 +k4zBvLftAKCFbrlxlNCUPVsGUir9AzxvP0A3gbQnQWxmYSBUZXN0IChkZW1vIGtl +eSkgPGFsZmFAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjuFgDCwoDAxUDAgMWAgEC +F4AACgkQLXJ8x2hpdzS3wgCgk/BrqP5WblWLc2+6jwlmuLg8n8MAn12puZol0HwV +0mcd8aHWtcrfL8lynQGlBDbjjw8QBACcjdcfV/S7I319mfDvbOwczDvTqDsRbb2c +PhQNAbg7NFlWJKtRrmff14jtCt9M77WZ5W+zTLwX8+8Wy3mMfrys8ucZKtfPixOX +VPhyinUUGSq68IArA8vLSUTuOO0LIi05LAg6jzGhN9jgkQReZyqxub4oe/3JhIX9 +grgJ/tsjNwADBwP9GeXmMrGi5wMD3qkPbzb1MqwsVBJq75eLLxu85JIN2XIAGw6Q +0FJp4o7d4BAQqAMzt3ONU1OcCWlDQRDxj1nynE5ZgRBiVoyudEELgNnYhp3MSEuU +g7PkFWn+N+GuvyhVUHApleyvP09kvP57hif6yJRS+V6L1ugP0vZmBI4dqQ//BAED +bmIgnlYeEKRd4uL+iw2vNnOO9Y3cRSExyy8unuzNvx5GFG6KNtxoFCDzMMzUa0ED +H1x/QJA3CgqMpS282nLdk/5O+AphiEVeGv8+c6pL/t7falIfSgKZ0j2nvCKH12So +bwiNflTGJB+jLnnesjqYJD7h0SVLjToP/vtKPYlXOU1ZpKzDwP5YcQQuRhF9Tj8S +UxScIIhGBBgRAgAGBQI2448PAAoJEC1yfMdoaXc0IKkAoJ/NQGlvFv5clcDIf1AX +jLlTFG9uAJ9rs8IOzHfNWuUSNxdhRvO+O7fYF5UBzgQ246LiEQQAip3HOFHnnO3V +mlQEctkpjVbn3knp2LOALCDz9L+fYxJeySNK2/uCWyCaAM1v4XJtuhkv1G26UMIo +PPz4DFFeUHwUk+AhDpX+/8dmuBypPbQ1eAJ+6tmja9W3lvrcMX1BllleSNKNW/4i +lZPy4kEYmjK/KSV2Nuupuv9j5/S5g7cAoPiKn8fILCtj2Qlr/O7hCgDi8x17A/9X +kcS6grdYU/fIHQy8pEU5SN5DKuhCtyPs//KQyDA7jyCatXjOvGHRWa/LO4tcntUK +Q5bT2B4Fp1Au997owCgDXcsm5tx6wN00gYxAITX3LvJ5K1aK7wEkFAwiyWrVkViU +1Fazx/hlyFzAPzouiw7IDQziWp8M87wwgpvIVkKlvQP+MWAGeDVRa0KvILUDyVrj +CH0hUr6WVjYEIGGZ7Yl0lBmDlbNvE//O0aEcdNrbFQ8NjwPM+vKv10bjPTXXrcW1 +F0BwfXrMxS4t1tYnbF4XfwuEsok4BBVxvGPLPeBGnYJNTwGBzehnd0mO45nr6mBl +S5gae6n4+WPV0jOUhNE4fnz/BAEDZ+eT3rtPNfpwG0QtNEjpDuT92icLuwCL1zfT +YKyXVFu00JkCvnB8k7QpQnJhdm8gVGVzdCAoZGVtbyBrZXkpIDxicmF2b0BleGFt +cGxlLm5ldD6IVQQTEQIAFQUCNuOi4wMLCgMDFQMCAxYCAQIXgAAKCRD+GAsdqeOw +smzHAJ4/wZXBeYHYY/IbohYo5IGWYv2IAACg8aZj+CQpLM/lDyrEPFG7bkz26T20 +DkJvYiAoZGVtbyBrZXkpiFUEExECABUFAjbjtzsDCwoDAxUDAgMWAgECF4AACgkQ +/hgLHanjsLIa4QCgityK8zajBOqAN0ZZTq8fOzgiEYIAn1ZEfjX+jefZUuY+4zFz +rpO/fX0OnQGlBDbjowcQBACVSdXxUWlz81FjqHgR4b1EtmhmW89CmpsHfKlSwlYv +BtbB/y7TFIfvAr4ZFbpuqew6JvtjIEZoXvolTWwHVPEFkuG0LAa03olaYpzC6ZBD +uLkb09RukCD4zdY6xwbAMRsOzZgv597LZXtOLLLnmOyTpsjRDLztWsuNglm5rffO +TwADBwP/SyVZvFEdEVn5/dQTp7eAtXdrbZEM379ctCJ2663RbTZd55lIBev1fTnK +QkvDTY2e58yIQ4E+Nzr99qg9Cyf6e3OhErTUqEBOhusBge4/7E5LrIVMvo6AFU9q +gn0Sgsnu/ww2txVw3XEjqL8Hgl+4Q/57YRvJOe+q29Ye9LL8eaj/BAEDZ+eT3rtP +NfpwG0QtNEjpDueclWEU7qldXMk8f3YzKKAvQfYWIlwPJHFJ/0Tt4c7R1RRkmEFm +DYThgT3vha1BX2Osoxnkva5SykN6Ghgq+qb2WHSAXc5LVvkyLQz2JkWmgUyqwcPI +5nHLJ+8ZxK4lXIJEk0zHe9OiPHAiEIf4iojOaRWRjz4IUD5+qWkui/snT9GTZYhG +BBgRAgAGBQI246MHAAoJEP4YCx2p47CyMrkAnRZD571KWLq1aD44YNacOFM7mlWM +AJ0Tm/dzklD/T2cX+F1ScBylNj5wlJUBzgQ245BnEQQAvwwkLp4Dtoie4/fvandn +K4wVPCvgJkIbNuyQZCarQGwv8RapBwbANT4vGW+ky2vzgptj21xYjOcdNMIhJ1Sj +c7hjs1PLhwepMFrS4/Ple1TljpEgxLZ5UxertMvSTr7OxsA76jjOQt0B+y2vs5zX +gLtedux4+pdFxkgM8r6fjZMAoJ5LVNdVRaSkiHaKZWQWsjfTs0/LA/wMHP/PdH4k +jFmDRqOPp+iB8YYwQTPZS/gwHtUbQhLcFEljaxrCMRZw0ZDMbzKWk+BrrBvgz4Wk +3XawwUshYgi8SgwWIDG0jusEPYOs1hBIdWTEzFVP2pK/NQzhAqJV5/390OLEY8SN +4bts/LY1XsADzU7lhE0Oohx6FanaZCuGgAQAn2zK53yuk7o8UrPdTHygVn2McsPY +YzOvlVfHCSXQ14oXjCs1nK1XnMIGGM7pJjYpzv/wUZkHLNcHX4uVHXxyzRQ4oMPe +kncmaR8fu/YIQ9zag5s2GpKESKAynGQCKwI4H5eYn+ryIgOHNS44UnXFUwbEsonP +5pJNNRIM7VimNGn/BAEDIklsjKh5E70pJ77zKAq/uP+EnBQq0tCcyqQgQiG1n28i +MQy45N5zv7QtQ2hhcmxpZSBUZXN0IChkZW1vIGtleSkgPGNoYXJsaWVAZXhhbXBs +ZS5uZXQ+iFUEExECABUFAjbjkGcDCwoDAxUDAgMWAgECF4AACgkQQT9K8xr9q2w+ +RACghpiwPnn7F3HJsm9VXM8SwBjWThIAnjHZulQw9Tee9XDT5STui+ZG+WN3nQGl +BDbjkIIQBAChY8NSvu6sK0p4D0AVBsRz8iVXYqbRlRTZAHS4LCXwx/i8FmfdIXna +NLOoyi44YruSCnlZdh4YWquCx2mgywG589AzcFhahmqElNbKb7m4F//EGIZK0zTg +W13tQwG9hTXOhYeqchnOOaDDwPEK1Gr+2o/5ANqhqrin0TFFBWLgdwADBwP/R009 +s61X/FkUUAh8w4Tua6qndN/2GsqXsyPYjdF5E3gErK8jDcDLniOHqkswV17bJG81 +czCRE5JcVFLLWQJg9cpeoTpP+YcF+m9whtswaOJ/LPrx888i/OmluSD81VP+6zBh +hTUbpazfLEdt3XczpW7CNdNbyiEcgT+6Cr+W2Gb/BAEDIklsjKh5E70pJ77zKAq/ +uPsbfaq2h50JWrb/wQiufxaUrYRvo5FjMBLnoUE+L/yG/Hp2ZRZuA5EzBpZ3ON5L +aFadahL98oQe/W3IXFZwxyYfGCtVrV16zx6cFTJQK/iIqp3TNp/fA6TRE3syS1FQ +ZIZMiFLvgSy4Tsu4vAadP290Tc62LP9ivC3PiIxt3aqW2l/NLohGBBgRAgAGBQI2 +45CCAAoJEEE/SvMa/atsta0An3ZMmv9EVWVwEvf/Rwf7nbFsgGhuAJ0bP+lAOCRS +YziWSIDf+BJ9F19H3ZUBzgQ246OHEQQA3mc7VzzWMKaCH+gX6nqSJmaoVXdql7mQ +SZxL8GhaAJe3q+NqV1y2YViLu/4Fjg33MjcbFCoDG3kPp1jto3XGULbfoJkQBpdR +eS28bD+mkcON1uzwJG5mID2ObWP3YYBRj+abqFfZoYo6RXCv3I3oOsDYJo7hLAr/ +AReRV+P6drMAoMJoHMfPBKSRd/xA605OP/F6+mfPBAC/fSVoJ5dMNkzYj/U93OZr +VXXGLN9p7SR/Nk4kENC0dAO80WOa7qIzWQvS7E4beSuvQCWpKwwPxbuZq9sWKBSX +FuG+66XilMv8GIn3joWGOU9jQ2L2mZ0CV2ejvJRixYAMQpp2RDeCERWoSrP4AJhv +Onenwr7kq6IUmb0Pi7K9OgQAhU+LY37i+jGdFYbApcXgT58tgDNdPmwwzOXjpeTg +yzfTcX/kkbuQHSKI89jqg/SXeeVqG6VFxs0yPtINt+t+iLibh+1RghfdpxcJI3SA +25UaKmDwLCUZDIguBZEWnqhdA6YCWnGEgZx3WN2HeyPnL4JCu6AY804lP2bOYWQH +ivH/BAEDYa6EPLwGsFGwSRgJuxOczaFyt5cvcleOf0qIVWQ8zg7zpaOi1spi6rQp +RGVsdGEgVGVzdCAoZGVtbyBrZXkpIDxkZWx0YUBleGFtcGxlLm5ldD6IVQQTEQIA +FQUCNuOjhwMLCgMDFQMCAxYCAQIXgAAKCRDrqfJA653J5q4mAKC2XzshPCkG6gim +QNpS28Zwl69htQCgp1gHi/+kS47sk+3XRt6nfoIBJwedAaUENuOjqhAEAI+1nWji +Y8yTbNhvK76w2bw/7mgC0PT7Xb2AKfw66e8TB+U+tviik5SnTt7PCEAT4rhaHCTY +q+bLf55vF5foHDmTr7a+OXP3JeeHxjtYDowWTn4G5HQVSvyzMLkFiHmyuKgmZwDp +Qy2DRlVILhi5xEAUn54YZIIdFgNJKre32L6XAAMFA/93DhKj5THWHi5xhBuMD8bc +lSHIcBjr9GEVuWqW89n3Tu6LY9QBVDeVsxcNAOflh82tTiFIYOdGXKOh58Csehfi +22eWjnN+xAL2hYD7jMQX5GlmGoAqH94wRdAm01lF1fw+f3RZiHrhk7lDDbBlR/jk +jFtoQTf+/miSuSyxy/oc6f8EAQNhroQ8vAawUbBJGAm7E5zNohCGfow8evYur7Yi +tpkufrndPvf1xHdX6BzF6AcqIU7CXlL28F7wLuxbw3X66Kt1xr0o2fnM0zCHpMwW +2EcQvqT2BDTbgZ/3ui0ykA+KFVvrkGHD2seQL2XkebZvUT8bkNRGDQJh0djhLZhO +M0m6hra57Kf2tPe20wp5sR+j7ENfR0rHiEYEGBECAAYFAjbjo6oACgkQ66nyQOud +yeZzTQCfUnuDgUMiEoBukTDNnuvn62NNR/sAniZp9Uhila1p2XiARI/o0eTkgDAw +lQHOBDbjkc0RBACKzsZMOq0QzqW6inp5azEWL36qFRWn03pL7GVvDNBlUDgWMKp/ +VVH0lfx/CMt5ybFPnFOFBVxGqB4VVoLKTLY2B78VwUw9lB5o/mO/kZFZzk+8f1LD +ym8Y5MHnpXhl5HhxAsMGbkIXm0q7UEJZarYwsd9y3tNd7pALNkpyPN3DywCg31W+ +so34RtAL5MfN1ZpRal1x9acEAIVYTItU9OkjWM2ygJnTQXwVq7/ZtpeTyZ1E6Ull +LpurniSx85BDNF4FZx7fmHRbs14FGn7J6hJ/tjeLSNM7ias6Iv/Q0JxLyoo2cYob +WKt0t6zelCENmlxR7Yb1bcWcaHGXpbmGlhz3nnSZSPYfcjm2Z9JixVxWOk1Ih0GL +PETYA/9IjW3qrsscxCnSHcw9DbPt1oyFQZWJedWXb6sqNvlPtu9IV1XSLLK7Kiq9 +Q8EZbAkUsDGPp6wdGVDpby2iAe6gkJHtwvZsrv3yaBg4TGTmAF7GrVUdBBk3V50r +gsajYRIqsJW2RjAHMBTvqFgUoBsoxTx0zEjsNF0uNne91DcU2v8EAQP7HKVodZwE +5NkEJ3i6Lo0iwuRAu/m4Vbrq1Zgq9zYA8B7ygrGHlgyntCdFY2hvIFRlc3QgKGRl +bW8ga2V5KSA8ZWNob0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOkfwMLCgMDFQMC +AxYCAQIXgAAKCRAxjB+u+u9tG2cDAKCzaFoiAm79QSmYISeiM7XMKhoHDACaA8CU +1j8+20C7rNipOHYz3KfUMhe0DkV2ZSAoZGVtbyBrZXkpiFUEExECABUFAjbjuAAD +CwoDAxUDAgMWAgECF4AACgkQMYwfrvrvbRsg3QCeOMf0g3znbc8IBiTrIPUgUz9p +3WoAoJ6eRZTZk7z+hTyx4JDceReQbYlGtBJFY2hlbG9uIChkZW1vIGtleSmIVQQT +EQIAFQUCNuO4HwMLCgMDFQMCAxYCAQIXgAAKCRAxjB+u+u9tG16mAJ46lQbmtWRZ +UldQtp4ZnOptP7ZJtQCfceYMZfMAnqUKJiHk2tMhvwDvAh2dAaUENuOR/xAEALSl +7SaNEf8mYovea5tJNEwoZx3vv6XymyXga1wDqKo2PeDrnRDbHGBb5BvWIv1J6Igk +/wq4R+Pq989UpkcqREB+yOeluE3zPPtZBrbLySSaqiMegYiHnAAPc0TqjH7UPZa+ +fJKZTUk64BCUQN9ELkL2FKtAGQ7RNQJYvbCq4O/XAAMFBACXdO4a3ZIK5hJejhHZ +01mkHa6Sqoc6PuedNC7tlWiLU62BljGiv/DvzcbMsnvk991AxJ3pP4ZvKr5CClqI +G+WZa1zmtwXdmCfGJb2fbNSVD4zp16e5slPr8Cp+fvIv2/SyvwruROs+oAzSVvoM +AzAGSk3yj5nT5oikbn+M62fC5P8EAQP7HKVodZwE5NkEJ3i6Lo0iwYcZv7GfkzxH +BBuVK1coW7Tsa6CI42qeo2AH6zLC3Wi2fh0VRaj/gXMnO8S0FDoSNyFYBUqhViPk +fsTE4/gEo0M1v0l87O70i0eTxO9DlfsehX+v14zSLoxHM06W9yEHU/cePDhrY+Pp +PCkQEZm65ip7XhQAY+VSMdKf4u6G0akTTrO5iEYEGBECAAYFAjbjkf8ACgkQMYwf +rvrvbRuPkACfZP1v+fVPYJNr5DmgYosCwEhyB4YAn2QLgRNZ9jyK1qvLvt0qbJUl +62CXlQHOBDbjpSYRBADdWzld1lyDWDqGPSzGOsehXyTSa0pOfVTLckpJpDpErcn8 +jS8cKrXkVUowI7SlZhPRmYI+5pqGaG5FZ5VJd1TfKWihc7O+JDHoK3yamOnh6OFQ +FPZUF1+WlAGiFXLc+WODzbgOSMy/8yXA6n0ze+v3et5n9Kzib3sDGjw5DMmiYwCg +mUwnofqskHVv1S6tDg08mXALKKMEAIVGyf9ij3BzNb0fVYGUOLU07nqQ3RpNQPaK +tPQpBobRknQ/ZSdzuiALcCB+Q664f1cKGA+Ogtm0L/f1xUmKRW3rT9lzMtcCy6kc +udCI2OHm/gOcPzKqjj5onpD84fgR4BdbsehT8+urmxFiK/bFFI6eC1L5edBQcRLs +7TF2jY3SBACdXy9yHg6iDTJhysvR7UuLWE/1s9ysirhZgPb0vyIFwHfRzM96AYIP +pLZr/jvkrDawTxYGfGIZrj7UyGePu7RCeFRVVX55B6evNv3fAqbmwQ1GHTX7WHCN +dAkP07yTxZ/wnZudPAzQwRkEfZ39TdccbOhHfHvbv3RNQ0VxbWtQUv8EAQO595ah +JXcubqawgYCOwcKTNBJVjftg9mvS4BJQhejHk5xuGHGpqOBmtC1Gb3h0cm90IFRl +c3QgKGRlbW8ga2V5KSA8Zm94dHJvdEBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOl +JgMLCgMDFQMCAxYCAQIXgAAKCRDUv1fzc3LiQ3ctAJ9QF57VC7tHkxX6KiI9oCKE +Uepf5ACdFSF2rDZ+XDAug7Xbh/wpdwQhVtudAaUENuOlUBAEAN9UI9jBnn0wqBdM +fg/vVDMWekbgT8yOoM19bc3FD1mMt/DSKvpTWAYO4SxZFH59Lk7AJt94dkPM+Pwx +k+45kFqaCIO8jU6+uvNS/4GKORYYQvqhEWdYjzMnzMMA+668/W7YVBk6goVdoejY +j1DzO4nPw/a8SSAl8vHbKI9HUOnbAAMFA/9IIIpkE1AhpjRx8qaK/xmNFwAC+Fcv +IwLAtBR9VGqg1U60wx9ali0Z0vbsRLDiSBkizEncQtBWRGKuIwpuwmI0zh0x772A +24bPUIb1va+FQ9nn2xERUhGDIh+vQEkCxg6fzuZDmU4EDr5eaMc77KzjGkRUlnJ+ +urlADDkZhys9YP8EAQO595ahJXcubqawgYCOwcKTMLJiwDbUjYSnvlZhZLzfZrMp +pGf18gON07NxKYCP0aD9geBkvS8rggtugxKhp7GrbPvsmnv8A6Fs9ZjPbauFHDC+ +IUhyG2ZxtjhGQyIrtauWktSNu1HloQPPqj4T6LMPXCd2N7ECIHSBIiswHX7I4ZhO +/GkqZY4Rpxbpk1b/af5QjbgBiEYEGBECAAYFAjbjpVAACgkQ1L9X83Ny4kOO+QCf +WgIpdCqnp6C84k3sRHHNhJxZkbsAnRI8ATqCRceqpbSDP7SXMakYu6rtlQHOBDbj +ktERBAC5tQ53QHtwXMkcXm+jk3CIxnUlc+PI2ovY5YT9d9p4mIHnmgyZUQ+YrUkX +r3BTtkGmjWXg8QhZw/tZEyq8EQWX7wud6VGRJb3mTAWvcPxNGdqtnLeR+IEXW3fd +2eRVNpljEIMo4F1n9mJG8trqBn8oeEhN/NpLuHfobYxsCUaWPwCgpA8WwQ+MHIph +3Hvabn/Ym7/h3iMD+gI0Apokfs3xjccuKzVKGGnK0k/XIL0YmO15ze6DNhILtEpX +c0lwF4JfiibcqGINI3phhUgJ/jB2rPpMChyio/NHa3sXPr66nEiCHlYaecKzZ7u4 +7V5dQJJc41+IMQPNEoZNCOR2/AWj7zzQOSIaWf+qZGtwgsDnrx3A2c6sGKjlA/91 +uSlQGGoYOvYtyGmShjJCWrNu9SlcnXGV9mKbWN+uZ1+yTzd0TeIHO+ZPwHIhlwyi +oMQeKX3kuYmnerDXJV4Ck/9lZH7ReIEsQX0aFwA5zmKEfYAJJctaJFenIyYrb96t +O9NfdCQByqhDVwVYLA00KuWDJwHzgd2bkZd1qOntwP8EAQMzOMJjiSv9DeOHKJqc +uHe89G2I204zUEBdWXIIWswBYzjC93U29DM6tCdHb2xmIFRlc3QgKGRlbW8ga2V5 +KSA8Z29sZkBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOS0QMLCgMDFQMCAxYCAQIX +gAAKCRAWhBCkj8KC5iLjAKCZdUQInKOR+kkkFN0bMKOFSrg3+wCfcKC7DVHitfTf +3V7WkBS7Izg6wWedAaUENuOS/BAEALbBqf1JwNcuAKo3sJZJEzkHry8Lc8Jt6Ziy +45dmN03xp/DYtIfFndu5Fd9jFGck2jWmbg8aQxDtmlCKRllUJlr5aghVdhdGdgCP +EeG8dbQtpA++fIVL0fktoZ/ZSuxNZUD7r3nNixJpfrr1cVv1ZuIgwYHjJSJc+9DB +QvS1J36TAAMFA/wLewpaOw+HTZONwTL4UPFYCfiDct+w4/Dx19rAmWf7SH0sDSFN +5tsoEla3k5QyqONOr+kJnn7P5vXR/ZbARP/EC+NBJN0mOsVf0M01TeOEIJ6USlqX +2jGxs1iVV3nM5TZE3iGWaP54Q5vmjLnDLv3uxCmxuuAZ60JOy8+i0im9sf8EAQMz +OMJjiSv9DeOHKJqcuHe88M29HoyPcFtrcllVBMqQ95IHdcEmBDyyzOdky/GU10Y+ +XpI6WkFg9yZS6ja7r19L4tTOrEzS6eMsL9ZFE9avlALKDeQkVelnkNyx1dQ+KR9p +EPhda5U9NK1y7s0LdhG35A3TLiZ1p1kyNIDAzIeD+ipkcXoegr9MDllNUc2VpuP7 +M2nJiEYEGBECAAYFAjbjkv0ACgkQFoQQpI/CguZK5QCdFyMPKuMhs4IORB8Kuk+9 +uqIehAwAoJhITUNWoGT5GVVSnxG4+aC/MgoLlQHOBDbjpdoRBACnji9qSHWfs0LX +ocXS/Zf7gwRUk7jfay2/A4C4sPGfY/FOQhB/zN/Fsx9ZxyipWSoxlWWIsoUXwBvN +8Lx50/N5avgHdJYGmU0eM+p63eVYjpRz5X6qOET2T8z3vrhexHw5e/drCXq1xgGr +C6LJip8SgMiclY4e3mXI00v4VITvcwCg1cixyf4EJTGJPLxOV2C+z8OHdvMD/1bC +lZI5cbF6XKwkCKCng14CjVb/S/tD3m7Kc69ljmofIgTdUDpG7XsSCgm2/Zpr4hJy +VNBRceTCMOJoqb2OBKQmh9zHBsCaQs1pncyA/GeqCElMirLj+z145gEm6IFeiKst +pv9kQ7X2yJW8KLX24jk/U69yD2x/rRwGQcjEcr8SA/0TfdFjj0qTg8a/QB/W7Zni +Q9AXzbffddevqncL1q06H3G5AYM7wd+Lyyw2jClSMop8c9pWMgu2kqQN7s42b6D7 +z60CRSxNHcew0pFE7Vm0BgckWm6cq12HSmc7BVy2/i0k1sBd7EC2sdAuHGE+ziz5 +cYw1avwNI4M7WmVVmt+yGP8EAQOGra5cBw9i1UFlvGlJ9eyL42cZ6dmeRJuqta7M +7bO5va1wr/nylBRftClIb3RlbCBUZXN0IChkZW1vIGtleSkgPGhvdGVsQGV4YW1w +bGUubmV0PohVBBMRAgAVBQI246XaAwsKAwMVAwIDFgIBAheAAAoJEBPbllU0xuPx +7NQAnRTmLEOKTUnU/YK3YZjjVyl4FUc5AKCJm5Qv4sEbYt/8mfC43NLRHOB0z50B +pQQ246YdEAQAzpO6UuCWWpP9up5GVhLPoSCBfSIA9JWm5Ap6/hjQ5hia7CcS8E41 +PjaGl6Pkh5lj2qkSUBa892SXyQMYqMqEq/h7+BW7+n62SCRMtYOHRYZPA4hvs0d7 +jznGQlMsltx7qamoVNP0XF+ws1wHLjyQl3qMnkrAQ8lAJP+jg7P5Hq8AAwcD/A61 +qQLRXsSFr7LMBnaUSR0o6+4/HCdh8t+mnAeQBDAkne5DTPiwqzqsjoYekX6JK7wk ++mbsJTd/Zw55Jkq9xVm6nEUo/JIbN7cPlMqfCLaoS+ttbxZ9fNCO3WTNdWxAr/mG +ZZiBfy9yTcxUfo5qTg0ffWy40CNHaVKk+iIcktGz/wQBA4atrlwHD2LVQWW8aUn1 +7IvgBwLos11Jv+dIDqgz5/fwL4EJz88YHle9TmlM1Cr2RFSAuwPHjW5i16KDNynO +qaWlTstZegVTXBwPogHRDpxi/XuOjQC8Bc/gx67drpmNm2p77epGMlqgoZ6er55P +DuAg/Lnyp0OHN830rpevbrlAPpeHuWRvFeclKIpEz+5G+/+z0jKIRgQYEQIABgUC +NuOmHQAKCRAT25ZVNMbj8SZoAJ488ZCSBKz8PYif1pS7+ILz2PyISwCfVke9uQJi +IzxHvGKoTX8eW/lWvQqVAc4ENuOUsREEAMhuJkVEGWoIw4JdMQJ2kmywkOcCamKv +7J8ApfiGw5V3KB6l0DTvUCazysCkAFL9zb5O5qmVp3zD6LJCzgEq7Op5Ar9haPQM +OrJjYszuolu8V3qcL8Y4aOIS5xNNKBjwg4VJwFNOSztqUwaMcB1bNKOr7WmlYl5N +LOnThQqFXX/TAKC44hpSv9wxVqFK6iIrhN2i34JHXQQAq6dbJydQbYhoZio7ewJ+ +kKHOS1Z1ONSf0RIkCMorVBQLz1/n4qsw8hN1Q/Kl/770y6YGQmL7xHQZUnzPCHAp +9f0IeGsPSR87rykIPFnJb50PM6v+0VfSe4f2kvyiIQySKRoYumH4343Uiny2GH69 +0uE1SvcQ9GWtwB+/5a06lvID/36SlrvHycifZKh8mKyP4+MpLeUCgY97R46gr+xU +G+BWPLcZzd3y8wbb2v7ZZEikbC6G4sY2VBhfrkEdXUwr9ONi8WemhFKq1MrcalHN +OaQkgLxGVfG19h/+frpUsHcShM7NYdjb0kwImeeM8yhoxzZhIrXQGjw//bucXQIq +jxcR/wQBAwmIVrocZ3iWL9mYXF6ltdajZSzt7R3+EFj2DmfW0QoZtFM1uQkYpPG0 +KUluZGlhIFRlc3QgKGRlbW8ga2V5KSA8aW5kaWFAZXhhbXBsZS5uZXQ+iFUEExEC +ABUFAjbjlLEDCwoDAxUDAgMWAgECF4AACgkQH+j8bwQllndaWACeJb8gwlf5faF5 +CTszXhi9w3+bvO4An1puRe2LCIYvj0ewVWnxVAbFk8PrnQGlBDbjlRIQBACDDIJP +3vJbFfyhJHeP4zSuMhY+YsvxWqJ/NNCNxlMxE7kANgE94HrUfhrleKW2VhP/NG/Y +ZzVudFCRoj9fkl31bWOb0/Kf4DRcJ+XdDv6at26YBUSZqGsE88fEhQ8AlTxxHMDh +xNo+S73670QTsilN9ra/e+q4vlKMLdPvdi7gOwADBQP9GKPXQ6oY0dlKDXGHxGcF +oUR2miXpz9890G84yZAEm+R/OMQkxKb9HahLVUyVKCKPC4eVY24gsKJOEDy1Um0B +Xh6kym+zfej43r5GdQqOjqywjTnD0b18YAsEhm7rizJECRLrZ1y7tAziqrmPeCl1 +4e/S2u5U4I0XhP9Vs24HNfr/BAEDCYhWuhxneJYv2ZhcXqW11qA65iKv4k3bInmf +WEWAPqyeDgbW9rI6ldi+lmDTqnNqg0o/UAyESfMog8rAP+GIrq/lDQakbSUBq6Ho +A1xuPjR7LnZ1cxl2kLIBKgI2fT2RLbKxH/A/PTXmdN8kBZAF0N5/mgn+vY5mrv2H +9mAF+w/G65MYEKdzwlHDoBr/BD6Pa/gHkYhGBBgRAgAGBQI245USAAoJEB/o/G8E +JZZ3CXgAmgKk+ky+Dd4BtpS0Dc1eoDHf6d3YAJ9v9phIBW9wpKK1sHVvvsH/2E4X +tJUBzgQ246f/EQQAl65ub9rEKS7XsXwNkvGtj1K7gnql2H1bJ5GF9bGCWhWmB8WF +tsAy9XUeC3WbrcuWFgTsbtTfXZ5I7j7HSG6ukf6Ycusb+bA1IoT+GAQGWpFeWoXe +16wXZFl0pEc2iUnx9ThtoQF0fO5YlbvHJPEQ3kvoqcdb52WOOfOuCAJxc6sAoNqo +5w0YxgJ9jkj7J4cmR+OFUEKXA/wO0jrvYE7eiZeFUjGNiRotxzhTzh53rxtz2/DW +G3D+IBFOt4qqxxp3WCSNO5SnBZWUW50hDkhTxS7jSmsfPBmCinmQ6EF5FaFPyLQB +q0uKwhMaWficdrQS9syXFlPuzQ5jOS3kVAxOmtDd7CMTC8892dj02qzAE46QNNUI +91kZXAP+PINfoJ8hV2zvlGZ9tVlo+Lgsl1BOvxvEgmYV14gyTmMWga5sNq7TdMdW +i8Fz0Vy7sI4S+RMJ96rMws2iTzWLi2jGO44itoWttCwqmGJmlSWurRsvYhSBgvNC +LXFGGaQn5ncO1tqKnWSDf625UnAipsgW8P4Agd5qJZiwXfJ67Hj/BAEDu6tMael+ +rX7E/usFH0MyFQczfHWCg6VkC9TYfdLwbBVtdcq/lugvQLQrSnVsaWV0IFRlc3Qg +KGRlbW8ga2V5KSA8anVsaWV0QGV4YW1wbGUubmV0PohVBBMRAgAVBQI246f/AwsK +AwMVAwIDFgIBAheAAAoJEAyCDHHSaZMTQPYAnj5F4su5N516+dcXYBl7cLVDPp1J +AJ9d2mO76rlmINaaTtH5lhApIjQjEZ0BpQQ246gqEAQAkdlSJYfTiZH/CkfV8tnh +I6IDz+SgiZKcneEBnO+hAJottARGAojdbURlOIeZqRCgKpdTXBK7MdHAz4RKFnAA +XPDBZgA5q+Coqn580t/O/AKGb8kKn9n52z9lC8A5KnHaRAsOKVyPTIU5vq6FLmsW +mMB55iz826Dk9kMhV7mmdQcABA0EAI8Jq3Jnqf0HqqaX7CZuNKHJgag14bTaBw0n +iZK0KSB6FBpzitEoyst5JBPCl0ayQEw0Hn4jhZAqcZybI//pC1CNQBBO47VUi0y1 +UVjExtaNmmWxugzkzWHHx4WmyWsCQwGN4B9riUws4g3dgC007l+aonKzj5QEo1Xi +iMNTFFmP/wQBA7urTGnpfq1+xP7rBR9DMhUEbuQV+5mF3JEYDt0dr9Ej9Ccl8GT/ +tOi0QsPNbtaWED6pY70iZMVJSk0TG7pZ47FNx8UHI2bJKWWjCF1nuXV+mW/xLMM1 +GgFMwK44bX2IsEJVqFjB7alBd/uj0ugnj2feFeTao2xDuSQ71IjGy/lFtOkcdJOo +v7L4tNh2/8ag6bbuZKiIRgQYEQIABgUCNuOoKgAKCRAMggxx0mmTE4+uAJ4+Jbld +pmIpRDEuE8tFCnHacQr0/QCeLU0G5RaI4jZI+QUKtYiXq0ITUnGVAc4ENuOVJREE +AJynQGiC6MydOFemfhSMEBGP2heBBaySSHPrnsBe7pGZf+7lGaksaps2Y26ooMjB +RsmyUjGuk6cDdAShuQiXtOEf5lQiEbM9SceWF3szd1BbDVTRN+kfJfHcVhvsII9p +utILuFZaHXKVTHP5EYklIClH4P8Zj50Xt0iWUpRtpQZvAKDXP6+Q1vOqJtzB1ivA +KMob1V4VrwP8DnI8eoH00yn7c6UAYThdFNHwt56UAum74y40wYUIwt1l+a38CajJ +q7nUWxDtbBas0zkD7W/cWrTHlak3Douvsds313rOJ034vS4Ktc/B4RPy55LcMWcc +j3jl6l7vTdNtyMkE7+5gufQtcTGZODzjr/VmVBs+AvObNv/YkyQn5DMD/jEVtEvZ +h5orK7gmOkw1RXNdiiBTCD0plmr+oFumwgAPsCB35nEskejB4i1doLSdL0LqoMln +3k4msT6H9O3YPaWbFex5NWVIRJpaHjnH2ZsLR5EYVhhGxLHfPSFjAyZcDSe2PSWd +0Lyu7weNm0Fb8oXRUHRFx9LJb5b7ICrQnGjm/wQBA3NCmZyGwaocX3hYb9Uj7Whi +UDisj8phP8MH7MdcGq4iXYpmhRF5vJu0J0tpbG8gVGVzdCAoZGVtbyBrZXkpIDxr +aWxvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI245UlAwsKAwMVAwIDFgIBAheAAAoJ +EK0bD61DwtDH1RIAniwQsiPwhnGW+TCqaYQxe2bWQiFCAJ9kSky1OmRFtP6sQcyy +x6LvYkmL450BpQQ245VIEAQAuZli0/vYbs6h1HhF9HbvRHFMePjQ99Sk8h/dTx7P +I7eSqMHXYh0PZghchlbrMSPnemxfwMbJrmdK9WN0Wh9BJUe2ycH8ftUcGRo5CdES +giceziF6Vg4PQz9FlxtEhvrl7q8R6y7O+j03QAJKUGwBdt540oZ8YYKiDvgZUZxn +oecAAwcD/1b2fYzAnuWrQZXhXQQ4cNVxMBVFKHScH24oFVbuEWLgM/tdgF+CPw2V +tzba8ySR1K80VSgsQfs6n2wyCVd+II8lKHTZT/pfICFcPJlHKs4ge+JNn1IcxBAi +q0QRNW5hGTO9KdJ8MFWrWn2Bbp5k32roAzuCagoielFo4MVFZTsN/wQBA3NCmZyG +waocX3hYb9Uj7WhhNmbxLh2adi8RjvsHqFo8xA3mcKO5up8cYYgwnFFEb8gfNerS +02Lh+6ygsgu1VtSC1r73i7OCeytQmplt+bCsh33pTnacbzZkyEulfjWVn90tmi4K +v+Mw7S68X5ZgyM7Th98F9yc2R5C/SntYMfTNlmO4nRqhTAEz3HFTeVhODOVpmLyI +RgQYEQIABgUCNuOVSAAKCRCtGw+tQ8LQx479AJ41i0UNeuvbU1mUu7Q58B6U8Ezn +UACgqCWi5kbR/j2yb20eDUZz+fCPPOGVAc4ENuOo3REEAMFaZuaYHLD67UlMCLHG +Pk1dFdAn3Mu2TFFDUYfEtA/JDOiNZacPiQSZ7zK+wVe66Vs9fzNkyeXqpwLzC35v +kTx0K1m69Ave9LnXIZ70zvpVEL/UeCuITRiocxNglPgn4dyJ+2V0cWJ36NGcZmkv +BW0vGItpYCbpIGLzYVOfiVUbAKC2Nze79Iyw+DKU9HI39B4fz85nkwP9HbIb9z5k +XiRZyCaXOMnFBQ3bAZh4Og5ZQxdLyZ/rIX4Mu3DGjqg6UtosdVNHr6ofZWHPXNqq +TUivoUmOS5Qa8dtUW3YGa8vbpK1OMnjMLhQVJZg/eou99s9OFP5GgPh5r5Vw/EYQ +Z6qzS6YiYnqzSt5LcolL2+Ae0ajXUizic/UD/0TNXtCRfkS4SeVSkZXarb1oZjHd +Glw6ENiLGiA0e5b4r0rByW4EQQGZPvg3DFXMjqp0lVVmfmXFPggLkbTP+SJ1/VGS +C/wSqPkMiKSCenRqwHwWIdKxv7f13hyeTZXR7P8uaSddSXaakqmT99v6pdZOo8Ns +VQTx3PzPKpEVciPB/wQBA3B94sZ4BXVUUYZFifR1y3VNINM8s1ZkPHDNwxOmQwK5 +PkcxqfpPpGu0J0xpbWEgVGVzdCAoZGVtbyBrZXkpIDxsaW1hQGV4YW1wbGUubmV0 PohVBBMRAgAVBQI246jdAwsKAwMVAwIDFgIBAheAAAoJEDfKtR+3kQP4ilwAn2q9 qdnkpFPi1neWFi0OEOr5le7lAJ40e+wQHgKIE+Fn7sjYQ0Liwn7oip0BpQQ246j1 EAQAp/Ccn5EzxXIGljKVKZ5Pp0xJA3uBoQBvXzu2pU4HU+vmgwnX1313x+4BsHVE @@ -386,37 +357,32 @@ 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 @@ -439,35 +405,30 @@ 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 @@ -490,34 +451,29 @@ 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 @@ -540,35 +496,30 @@ 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 @@ -591,34 +542,29 @@ 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 @@ -641,97 +587,113 @@ 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 -=P9+G +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 +AKCugutV1S43Ft0SWUfgFty8UHTrMA== +=+vvt -----END PGP PRIVATE KEY BLOCK----- diff -urpNP gpgme-1.1.0/tests/gpg/t-keylist-sig.c gpgme-1.1.1/tests/gpg/t-keylist-sig.c --- gpgme-1.1.0/tests/gpg/t-keylist-sig.c 2005-09-08 14:42:32.000000000 +0000 +++ gpgme-1.1.1/tests/gpg/t-keylist-sig.c 2005-12-18 15:18:05.000000000 +0000 @@ -310,10 +310,9 @@ main (int argc, char **argv) key->subkeys->next->keyid); exit (1); } - if (key->subkeys->next->fpr) + if (!key->subkeys->next->fpr) { - fprintf (stderr, "Secondary key has unexpectedly a fingerprint: %s\n", - key->subkeys->next->fpr); + fprintf (stderr, "Secondary key has unexpectedly no fingerprint\n"); exit (1); } if (key->subkeys->next->expires) @@ -467,7 +466,7 @@ main (int argc, char **argv) after importing the secret key. We disable this test for now. */ #ifdef __GNUC__ -#warning test disabled due to problems with gpg 1.3.4 +#warning test disabled due to problems with gpg 1.3.4 generated key #endif if (key->uids && (!key->uids->next->signatures /*|| key->uids->next->signatures->next*/)) { diff -urpNP gpgme-1.1.0/tests/gpg/t-keylist.c gpgme-1.1.1/tests/gpg/t-keylist.c --- gpgme-1.1.0/tests/gpg/t-keylist.c 2005-09-08 14:42:32.000000000 +0000 +++ gpgme-1.1.1/tests/gpg/t-keylist.c 2005-12-18 15:18:05.000000000 +0000 @@ -33,8 +33,8 @@ #include "t-support.h" - -struct + +struct key_info_s { char *fpr; char *sec_keyid; @@ -44,73 +44,83 @@ struct char *comment; char *email; } uid[3]; -} -keys[] = + int n_subkeys; + void (*misc_check)(struct key_info_s *keyinfo, gpgme_key_t key); +}; + + +static void check_whisky (struct key_info_s *keyinfo, gpgme_key_t key); + + + +struct key_info_s keys[] = { { "A0FF4590BB6122EDEF6E3C542D727CC768697734", "6AE6D7EE46A871F8", { { "Alfa Test", "demo key", "alfa@example.net" }, { "Alpha Test", "demo key", "alpha@example.net" }, - { "Alice", "demo key", NULL } } }, + { "Alice", "demo key", NULL } }, 1 }, + { "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2", "5381EA4EE29BA37F", + { { "Bob", "demo key", NULL }, + { "Bravo Test", "demo key", "bravo@example.net" } }, 1 }, { "61EE841A2A27EB983B3B3C26413F4AF31AFDAB6C", "E71E72ACBC43DA60", - { { "Charlie Test", "demo key", "charlie@example.net" } } }, + { { "Charlie Test", "demo key", "charlie@example.net" } }, 1 }, + { "6560C59C43D031C54D7C588EEBA9F240EB9DC9E6", "06F22880B0C45424", + { { "Delta Test", "demo key", "delta@example.net" } }, 1 }, { "3531152DE293E26A07F504BC318C1FAEFAEF6D1B", "B5C79E1A7272144D", { { "Echelon", "demo key", NULL }, { "Echo Test", "demo key", "echo@example.net" }, - { "Eve", "demo key", NULL } } }, - { "C9C07DCC6621B9FB8D071B1D168410A48FC282E6", "247491CC9DCAD354", - { { "Golf Test", "demo key", "golf@example.net" } } }, - { "CD538D6CC9FB3D745ECDA5201FE8FC6F04259677", "C1C8EFDE61F76C73", - { { "India Test", "demo key", "india@example.net" } } }, - { "3FD11083779196C2ECDD9594AD1B0FAD43C2D0C7", "86CBB34A9AF64D02", - { { "Kilo Test", "demo key", "kilo@example.net" } } }, - { "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2", "5381EA4EE29BA37F", - { { "Bob", "demo key", NULL }, - { "Bravo Test", "demo key", "bravo@example.net" } } }, - { "6560C59C43D031C54D7C588EEBA9F240EB9DC9E6", "06F22880B0C45424", - { { "Delta Test", "demo key", "delta@example.net" } } }, + { "Eve", "demo key", NULL } }, 1 }, { "56D33268F7FE693FBB594762D4BF57F37372E243", "0A32EE79EE45198E", - { { "Foxtrot Test", "demo key", "foxtrot@example.net" } } }, + { { "Foxtrot Test", "demo key", "foxtrot@example.net" } }, 1 }, + { "C9C07DCC6621B9FB8D071B1D168410A48FC282E6", "247491CC9DCAD354", + { { "Golf Test", "demo key", "golf@example.net" } }, 1 }, { "9E91CBB11E4D4135583EF90513DB965534C6E3F1", "76E26537D622AD0A", - { { "Hotel Test", "demo key", "hotel@example.net" } } }, + { { "Hotel Test", "demo key", "hotel@example.net" } }, 1 }, + { "CD538D6CC9FB3D745ECDA5201FE8FC6F04259677", "C1C8EFDE61F76C73", + { { "India Test", "demo key", "india@example.net" } }, 1 }, { "F8F1EDC73995AB739AD54B380C820C71D2699313", "BD0B108735F8F136", - { { "Juliet Test", "demo key", "juliet@example.net" } } }, + { { "Juliet Test", "demo key", "juliet@example.net" } }, 1 }, + { "3FD11083779196C2ECDD9594AD1B0FAD43C2D0C7", "86CBB34A9AF64D02", + { { "Kilo Test", "demo key", "kilo@example.net" } }, 1 }, { "1DDD28CEF714F5B03B8C246937CAB51FB79103F8", "0363B449FE56350C", - { { "Lima Test", "demo key", "lima@example.net" } } }, + { { "Lima Test", "demo key", "lima@example.net" } }, 1 }, { "2686AA191A278013992C72EBBE794852BE5CF886", "5F600A834F31EAE8", { { "Mallory", "demo key", NULL }, - { "Mike Test", "demo key", "mike@example.net" } } }, + { "Mike Test", "demo key", "mike@example.net" } }, 1 }, { "5AB9D6D7BAA1C95B3BAA3D9425B00FD430CEC684", "4C1D63308B70E472", - { { "November Test", "demo key", "november@example.net" } } }, + { { "November Test", "demo key", "november@example.net" } }, 1 }, { "43929E89F8F79381678CAE515F6356BA6D9732AC", "FF0785712681619F", - { { "Oscar Test", "demo key", "oscar@example.net" } } }, + { { "Oscar Test", "demo key", "oscar@example.net" } }, 1 }, { "6FAA9C201E5E26DCBAEC39FD5D15E01D3FF13206", "2764E18263330D9C", - { { "Papa test", "demo key", "papa@example.net" } } }, + { { "Papa test", "demo key", "papa@example.net" } }, 1 }, { "A7969DA1C3297AA96D49843F1C67EC133C661C84", "6CDCFC44A029ACF4", - { { "Quebec Test", "demo key", "quebec@example.net" } } }, + { { "Quebec Test", "demo key", "quebec@example.net" } }, 1 }, { "38FBE1E4BF6A5E1242C8F6A13BDBEDB1777FBED3", "9FAB805A11D102EA", - { { "Romeo Test", "demo key", "romeo@example.net" } } }, + { { "Romeo Test", "demo key", "romeo@example.net" } }, 1 }, { "045B2334ADD69FC221076841A5E67F7FA3AE3EA1", "93B88B0F0F1B50B4", - { { "Sierra Test", "demo key", "sierra@example.net" } } }, + { { "Sierra Test", "demo key", "sierra@example.net" } }, 1 }, { "ECAC774F4EEEB0620767044A58CB9A4C85A81F38", "97B60E01101C0402", - { { "Tango Test", "demo key", "tango@example.net" } } }, + { { "Tango Test", "demo key", "tango@example.net" } }, 1 }, { "0DBCAD3F08843B9557C6C4D4A94C0F75653244D6", "93079B915522BDB9", - { { "Uniform Test", "demo key", "uniform@example.net" } } }, + { { "Uniform Test", "demo key", "uniform@example.net" } }, 1 }, { "E8143C489C8D41124DC40D0B47AF4B6961F04784", "04071FB807287134", - { { "Victor Test", "demo key", "victor@example.org" } } }, + { { "Victor Test", "demo key", "victor@example.org" } }, 1 }, { "E8D6C90B683B0982BD557A99DEF0F7B8EC67DBDE", "D7FBB421FD6E27F6", - { { "Whisky Test", "demo key", "whisky@example.net" } } }, + { { "Whisky Test", "demo key", "whisky@example.net" } }, 3, + check_whisky }, { "04C1DF62EFA0EBB00519B06A8979A6C5567FB34A", "5CC6F87F41E408BE", - { { "XRay Test", "demo key", "xray@example.net" } } }, + { { "XRay Test", "demo key", "xray@example.net" } }, 1 }, { "ED9B316F78644A58D042655A9EEF34CD4B11B25F", "5ADFD255F7B080AD", - { { "Yankee Test", "demo key", "yankee@example.net" } } }, + { { "Yankee Test", "demo key", "yankee@example.net" } }, 1 }, { "23FD347A419429BACCD5E72D6BC4778054ACD246", "EF9DC276A172C881", - { { "Zulu Test", "demo key", "zulu@example.net" } } }, + { { "Zulu Test", "demo key", "zulu@example.net" } }, 1 }, { "ADAB7FCC1F4DE2616ECFA402AF82244F9CD9FD55", "087DD7E0381701C4", { { "Joe Random Hacker", "test key with passphrase \"x\"", - "joe@setq.org" } } }, + "joe@setq.org" } }, 1 }, { NULL } }; + int main (int argc, char **argv) { @@ -119,6 +129,8 @@ main (int argc, char **argv) gpgme_key_t key; gpgme_keylist_result_t result; int i = 0; + int n; + gpgme_subkey_t subkey; init_gpgme (GPGME_PROTOCOL_OpenPGP); @@ -207,9 +219,13 @@ main (int argc, char **argv) key->owner_trust); exit (1); } - if (!key->subkeys || !key->subkeys->next || key->subkeys->next->next) + + for (n=0, subkey = key->subkeys; subkey; subkey = subkey->next) + n++; + if (!n || n-1 != keys[i].n_subkeys) { - fprintf (stderr, "Key has unexpected number of subkeys\n"); + fprintf (stderr, "Key `%s' has unexpected number of subkeys\n", + keys[i].uid[0].name); exit (1); } @@ -268,8 +284,8 @@ main (int argc, char **argv) } if (strcmp (key->subkeys->keyid, &keys[i].fpr[40 - 16])) { - fprintf (stderr, "Primary key has unexpected key ID: %s\n", - key->subkeys->keyid); + fprintf (stderr, "Primary key `%s' has unexpected key ID: %s\n", + keys[i].uid[0].name, key->subkeys->keyid); exit (1); } if (strcmp (key->subkeys->fpr, keys[i].fpr)) @@ -280,8 +296,8 @@ main (int argc, char **argv) } if (key->subkeys->expires) { - fprintf (stderr, "Primary key unexpectedly expires: %lu\n", - key->subkeys->expires); + fprintf (stderr, "Primary key `%s' unexpectedly expires: %lu\n", + keys[i].uid[0].name, key->subkeys->expires); exit (1); } @@ -340,14 +356,14 @@ main (int argc, char **argv) } if (strcmp (key->subkeys->next->keyid, keys[i].sec_keyid)) { - fprintf (stderr, "Secondary key has unexpected key ID: %s\n", - key->subkeys->next->keyid); + fprintf (stderr, "Secondary key `%s' has unexpected key ID: %s/%s\n", + keys[i].uid[0].name, + key->subkeys->next->keyid, keys[i].sec_keyid ); exit (1); } - if (key->subkeys->next->fpr) + if (!key->subkeys->next->fpr) { - fprintf (stderr, "Secondary key has unexpectedly a fingerprint: %s\n", - key->subkeys->next->fpr); + fprintf (stderr, "Secondary key has unexpectedly no fingerprint\n"); exit (1); } if (key->subkeys->next->expires) @@ -506,6 +522,9 @@ main (int argc, char **argv) exit (1); } + if (keys[i].misc_check) + keys[i].misc_check (keys+i, key); + gpgme_key_unref (key); i++; } @@ -530,3 +549,31 @@ main (int argc, char **argv) gpgme_release (ctx); return 0; } + + + +/* Check expration of keys. This test assumes three subkeys of which + 2 are expired; it is used with the "Whisky" test key. It has + already been checked that these 3 subkeys are available. */ +static void +check_whisky (struct key_info_s *keyinfo, gpgme_key_t key) +{ + const char *name = keyinfo->uid[0].name; + gpgme_subkey_t sub1, sub2; + + sub1 = key->subkeys->next->next; + sub2 = sub1->next; + + if (!sub1->expired || !sub2->expired) + { + fprintf (stderr, "Subkey of `%s' not flagged as expired\n", name); + exit (1); + } + if (sub1->expires != 1129636886 || sub2->expires != 1129636939) + { + fprintf (stderr, "Subkey of `%s' has wrong expiration date\n", name); + exit (1); + } + +} + diff -urpNP gpgme-1.1.0/tests/gpg/t-sig-notation.c gpgme-1.1.1/tests/gpg/t-sig-notation.c --- gpgme-1.1.0/tests/gpg/t-sig-notation.c 2005-10-01 02:06:08.000000000 +0000 +++ gpgme-1.1.1/tests/gpg/t-sig-notation.c 2005-10-06 23:00:02.000000000 +0000 @@ -42,8 +42,8 @@ static struct { { "laughing@me", "Just Squeeze Me", GPGME_SIG_NOTATION_HUMAN_READABLE }, - { "leave@home", - "Right Now", + { "preferred-email-encoding@pgp.com", + "pgpmime", GPGME_SIG_NOTATION_HUMAN_READABLE | GPGME_SIG_NOTATION_CRITICAL }, { NULL, "http://www.gnu.org/policy/", diff -urpNP gpgme-1.1.0/tests/gpgsm/Makefile.in gpgme-1.1.1/tests/gpgsm/Makefile.in --- gpgme-1.1.0/tests/gpgsm/Makefile.in 2005-10-01 21:13:47.000000000 +0000 +++ gpgme-1.1.1/tests/gpgsm/Makefile.in 2006-02-23 16:09:50.000000000 +0000 @@ -61,10 +61,10 @@ subdir = tests/gpgsm DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/glibc21.m4 \ - $(top_srcdir)/m4/gpg-error.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/pth.m4 $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac +am__aclocal_m4_deps = $(top_srcdir)/m4/glib-2.0.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gpg-error.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/pth.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -130,6 +130,7 @@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -139,7 +140,10 @@ BUILD_ASSUAN_TRUE = @BUILD_ASSUAN_TRUE@ BUILD_COMPLUS_FALSE = @BUILD_COMPLUS_FALSE@ BUILD_COMPLUS_TRUE = @BUILD_COMPLUS_TRUE@ BUILD_FILEVERSION = @BUILD_FILEVERSION@ +BUILD_REVISION = @BUILD_REVISION@ BUILD_TIMESTAMP = @BUILD_TIMESTAMP@ +BUILD_W32_GLIB_FALSE = @BUILD_W32_GLIB_FALSE@ +BUILD_W32_GLIB_TRUE = @BUILD_W32_GLIB_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -162,6 +166,11 @@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GOBJECT_QUERY = @GOBJECT_QUERY@ GPG = @GPG@ GPGME_CONFIG_API_VERSION = @GPGME_CONFIG_API_VERSION@ GPGME_CONFIG_CFLAGS = @GPGME_CONFIG_CFLAGS@ @@ -200,6 +209,7 @@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -208,11 +218,13 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ PTH_CFLAGS = @PTH_CFLAGS@ PTH_CPPFLAGS = @PTH_CPPFLAGS@ PTH_LDFLAGS = @PTH_LDFLAGS@ PTH_LIBS = @PTH_LIBS@ RANLIB = @RANLIB@ +RC = @RC@ RUN_GPGSM_TESTS_FALSE = @RUN_GPGSM_TESTS_FALSE@ RUN_GPGSM_TESTS_TRUE = @RUN_GPGSM_TESTS_TRUE@ RUN_GPG_TESTS_FALSE = @RUN_GPG_TESTS_FALSE@ @@ -221,15 +233,16 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ -WINDRES = @WINDRES@ ac_ct_AR = @ac_ct_AR@ +ac_ct_AS = @ac_ct_AS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DLLTOOL = @ac_ct_DLLTOOL@ ac_ct_F77 = @ac_ct_F77@ +ac_ct_OBJDUMP = @ac_ct_OBJDUMP@ ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_RC = @ac_ct_RC@ ac_ct_STRIP = @ac_ct_STRIP@ -ac_ct_WINDRES = @ac_ct_WINDRES@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ diff -urpNP gpgme-1.1.0/tests/gpgsm/t-keylist.c gpgme-1.1.1/tests/gpgsm/t-keylist.c --- gpgme-1.1.0/tests/gpgsm/t-keylist.c 2005-09-08 14:42:32.000000000 +0000 +++ gpgme-1.1.1/tests/gpgsm/t-keylist.c 2006-02-09 19:56:31.000000000 +0000 @@ -44,6 +44,7 @@ struct char *issuer_name; char *chain_id; char *uid; + char *email; gpgme_validity_t validity; unsigned int key_length; } @@ -53,7 +54,7 @@ keys[] = "CN=test cert 1,OU=Aegypten Project,O=g10 Code GmbH,L=D\xc3\xbcsseldorf,C=DE", "3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E", "CN=test cert 1,OU=Aegypten Project,O=g10 Code GmbH,L=D\xc3\xbcsseldorf,C=DE", - GPGME_VALIDITY_ULTIMATE, 1024 + NULL, GPGME_VALIDITY_ULTIMATE, 1024 }, { "DFA56FB5FC41E3A8921F77AD1622EEFD9152A5AD", 0, 909684190, 1009821790, "01", "1.2.840.113549.1.9.1=#63657274696679407063612E64666E2E6465," @@ -63,7 +64,7 @@ keys[] = "1.2.840.113549.1.9.1=#63657274696679407063612E64666E2E6465," "CN=DFN Top Level Certification Authority,OU=DFN-PCA," "O=Deutsches Forschungsnetz,C=DE", - GPGME_VALIDITY_NEVER, 2048 + "", GPGME_VALIDITY_NEVER, 2048 }, { "2C8F3C356AB761CB3674835B792CDA52937F9285", 0, 973183644, 1009735200, "15", "1.2.840.113549.1.9.1=#63657274696679407063612E64666E2E6465," @@ -73,7 +74,7 @@ keys[] = "1.2.840.113549.1.9.1=#63657274696679407063612E64666E2E6465," "CN=DFN Server Certification Authority,OU=DFN-PCA," "O=Deutsches Forschungsnetz,C=DE", - GPGME_VALIDITY_UNKNOWN, 2048 + "", GPGME_VALIDITY_UNKNOWN, 2048 }, { NULL } }; @@ -244,9 +245,10 @@ main (int argc, char **argv) fprintf (stderr, "Primary key unexpectedly unusable for certifications\n"); exit (1); } - if (key->subkeys->secret) + if (key->subkeys->secret != keys[i].secret) { - fprintf (stderr, "Primary key unexpectedly secret\n"); + fprintf (stderr, "Primary Key unexpectedly%s secret\n", + key->secret ? "" : " not"); exit (1); } if (key->subkeys->pubkey_algo != GPGME_PK_RSA) @@ -286,7 +288,8 @@ main (int argc, char **argv) exit (1); } - if (!key->uids || key->uids->next) + /* Be tolerant against a missing email (ie, older gpgsm versions). */ + if (!key->uids || (key->uids->next && !keys[i].email)) { fprintf (stderr, "Key has unexpected number of user IDs\n"); exit (1); @@ -336,6 +339,20 @@ main (int argc, char **argv) key->uids->uid); exit (1); } + if (key->uids->next && strcmp (key->uids->next->uid, keys[i].email)) + { + fprintf (stderr, "Unexpected email in user ID: %s\n", + key->uids->next->uid); + exit (1); + } + if (key->uids->next && strcmp (key->uids->next->uid, keys[i].email)) + { + fprintf (stderr, "Unexpected email in user ID: %s\n", + key->uids->next->uid); + exit (1); + } + + gpgme_key_unref (key); i++; -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (GNU/Linux) iD8DBQFD/fcrwKTLuYeXhWkRAo2oAJ4mnHhIyjP7NRjOF7Iwzrn6yTSx8wCfQtX8 IJNUUvCaxLJ+JWw6P+DZ00I= =0R2G -----END PGP SIGNATURE-----