Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gpgme for openSUSE:Factory checked in at 2026-06-30 15:11:16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gpgme (Old) and /work/SRC/openSUSE:Factory/.gpgme.new.11887 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gpgme" Tue Jun 30 15:11:16 2026 rev:119 rq:1362358 version:2.1.1 Changes: -------- --- /work/SRC/openSUSE:Factory/gpgme/gpgme.changes 2026-06-01 17:58:39.893032549 +0200 +++ /work/SRC/openSUSE:Factory/.gpgme.new.11887/gpgme.changes 2026-06-30 15:11:31.548166627 +0200 @@ -1,0 +2,6 @@ +Mon Jun 29 04:08:23 UTC 2026 - Andreas Stieger <[email protected]> + +- Update to 2.1.1: + * gpgme_op_export now also returns operational errors + +------------------------------------------------------------------- Old: ---- gpgme-2.1.0.tar.bz2 gpgme-2.1.0.tar.bz2.sig New: ---- gpgme-2.1.1.tar.bz2 gpgme-2.1.1.tar.bz2.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gpgme.spec ++++++ --- /var/tmp/diff_new_pack.bHKJeT/_old 2026-06-30 15:11:32.208188983 +0200 +++ /var/tmp/diff_new_pack.bHKJeT/_new 2026-06-30 15:11:32.212189118 +0200 @@ -19,7 +19,7 @@ %define sover 45 Name: gpgme -Version: 2.1.0 +Version: 2.1.1 Release: 0 Summary: Programmatic library interface to GnuPG License: GPL-3.0-or-later AND LGPL-2.1-or-later ++++++ gpgme-2.1.0.tar.bz2 -> gpgme-2.1.1.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/ChangeLog new/gpgme-2.1.1/ChangeLog --- old/gpgme-2.1.0/ChangeLog 2026-05-18 11:17:49.000000000 +0200 +++ new/gpgme-2.1.1/ChangeLog 2026-06-25 16:05:30.000000000 +0200 @@ -1,3 +1,48 @@ +2026-06-25 Werner Koch <[email protected]> + + Release 2.1.1. + + commit c68741376b5561f6a9885819c55922cd189a5172 + + + w32: Use gpgrt_w32_set_errno if gpgrt is new enough. + + commit df6c94f136e5411aabeb3000403f402f2a25092b + * src/w32-io.c (_gpgme_io_spawn): Add mapping from Windows error + number. + (_gpgme_io_select): Ditto. + +2026-06-22 Ingo Klöcker <[email protected]> + + Trace result of gpgme_op_export. + + commit c2613252133a959bace04f0f78f913029d247e0b + * src/export.c (gpgme_op_export): Trace the returned error. + +2026-06-22 Werner Koch <[email protected]> + + Let gpgme_op_export also return operational errors. + + commit 8dad6c1d1ccd042c5700e7fa07025ce00da590fc + * src/export.c (gpgme_op_export): On success check and return + operational errors. + +2026-05-21 NIIBE Yutaka <[email protected]> + + json:w32: Add CRLF handling for armored output. + + commit 95d7cdb6b4309ef77f875edaf09a9632268ea1d3 + * src/json-core.c (make_data_object): Remove CR for CRLF when + it's armored output. + +2026-05-20 NIIBE Yutaka <[email protected]> + + m4: Deprecate AM_PATH_GPGME_GLIB macro. + + commit 2e02b9d0243d6c27562b01f18bf4976a816af6f6 + * src/gpgme.m4 (AM_PATH_GPGME_GLIB): Deprecated. + +2026-05-19 NIIBE Yutaka <[email protected]> + + w32:io: Serialize the access to ctx->* between reader/writer and io. + + commit 6ef2d2a4d663d566df419058b93cfa52dd24e9af + * src/w32-io.c (reader, writer): Protect shared access to ctx->* + correctly, by using the internal buffer. + 2026-05-18 Werner Koch <[email protected]> Release 2.1.0. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/NEWS new/gpgme-2.1.1/NEWS --- old/gpgme-2.1.0/NEWS 2026-05-18 11:14:43.000000000 +0200 +++ new/gpgme-2.1.1/NEWS 2026-06-25 16:04:19.000000000 +0200 @@ -1,3 +1,19 @@ +Noteworthy changes in version 2.1.1 (2026-06-25) [C46/A1/R1] +------------------------------------------------ + + * gpgme_op_export now also returns operational errors. [T8287] + + * w32: Improve debug output in spawn and selection functions. + [rMf5ad431a1c] + + * w32: Improve serialization between reader and writer threads. + [T8264] + + * w32: Add CRLF handling for armored output in gpgme-json. [T8263] + + Release-info: https://dev.gnupg.org/T8269 + + Noteworthy changes in version 2.1.0 (2026-05-18) [C46/A1/R0] ------------------------------------------------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/README new/gpgme-2.1.1/README --- old/gpgme-2.1.0/README 2025-12-11 09:40:41.000000000 +0100 +++ new/gpgme-2.1.1/README 2026-06-25 16:04:19.000000000 +0200 @@ -1,7 +1,7 @@ GPGME - GnuPG Made Easy --------------------------- -Copyright 2001-2025 g10 Code GmbH +Copyright 2001-2026 g10 Code GmbH This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without @@ -65,30 +65,14 @@ $ gpg --verify gpgme-x.y.z.tar.gz.sig gpgme-x.y.z.tar.gz This checks that the detached signature gpgme-x.y.z.tar.gz.sig is - indeed a a signature of gpgme-x.y.z.tar.gz. The key used to create - this signature is at least one of: + indeed a a signature of gpgme-x.y.z.tar.gz. - rsa2048 2011-01-12 [expires: 2019-12-31] - Key fingerprint = D869 2123 C406 5DEA 5E0F 3AB5 249B 39D2 4F25 E3B6 - Werner Koch (dist sig) - - rsa2048 2014-10-29 [expires: 2019-12-31] - Key fingerprint = 46CC 7308 65BB 5C78 EBAB ADCF 0437 6F3E E085 6959 - David Shaw (GnuPG Release Signing Key) <dshaw 'at' jabberwocky.com> - - rsa2048 2014-10-29 [expires: 2020-10-30] - Key fingerprint = 031E C253 6E58 0D8E A286 A9F2 2071 B08A 33BD 3F06 - NIIBE Yutaka (GnuPG Release Key) <gniibe 'at' fsij.org> - - rsa3072 2017-03-17 [expires: 2027-03-15] - Key fingerprint = 5B80 C575 4298 F0CB 55D8 ED6A BCEF 7E29 4B09 2E28 - Andre Heinecke (Release Signing Key) - - The keys are available at <https://gnupg.org/signature_key.html> - and in released GnuPG tarballs in the file g10/distsigkey.gpg . - You have to make sure that these are really the desired keys and - not faked one. You should do this by comparing the fingerprints - with the fingerprints published elsewhere. + The keys used to create a signature are available at + <https://gnupg.org/signature_key.html> and in released GnuPG + tarballs in the file g10/distsigkey.gpg . You have to make sure + that these are really the desired keys and not faked one. You + should do this by comparing the fingerprints with the fingerprints + published for example with all GnuPG related release announcements. b) If you don't have any of the above programs, you have to verify the SHA1 checksum: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/VERSION new/gpgme-2.1.1/VERSION --- old/gpgme-2.1.0/VERSION 2026-05-18 11:17:39.000000000 +0200 +++ new/gpgme-2.1.1/VERSION 2026-06-25 16:05:19.000000000 +0200 @@ -1,2 +1,2 @@ -2.1.0 -5bc31cad011192ef5d06304a28f3b8bf1382081c +2.1.1 +c68741376b5561f6a9885819c55922cd189a5172 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/conf/config.h.in new/gpgme-2.1.1/conf/config.h.in --- old/gpgme-2.1.0/conf/config.h.in 2026-05-18 11:17:47.000000000 +0200 +++ new/gpgme-2.1.1/conf/config.h.in 2026-06-25 16:04:49.000000000 +0200 @@ -360,5 +360,5 @@ #define GPG_ERR_ENABLE_GETTEXT_MACROS 1 #define CRIGHTBLURB "Copyright (C) 2000 Werner Koch\n" \ - "Copyright (C) 2001--2025 g10 Code GmbH\n" + "Copyright (C) 2001--2026 g10 Code GmbH\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/configure new/gpgme-2.1.1/configure --- old/gpgme-2.1.0/configure 2026-05-18 11:17:40.000000000 +0200 +++ new/gpgme-2.1.1/configure 2026-06-25 16:05:20.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for gpgme 2.1.0. +# Generated by GNU Autoconf 2.71 for gpgme 2.1.1. # # Report bugs to <https://bugs.gnupg.org>. # @@ -621,8 +621,8 @@ # Identity of this package. PACKAGE_NAME='gpgme' PACKAGE_TARNAME='gpgme' -PACKAGE_VERSION='2.1.0' -PACKAGE_STRING='gpgme 2.1.0' +PACKAGE_VERSION='2.1.1' +PACKAGE_STRING='gpgme 2.1.1' PACKAGE_BUGREPORT='https://bugs.gnupg.org' PACKAGE_URL='' @@ -1453,7 +1453,7 @@ # 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 2.1.0 to adapt to many kinds of systems. +\`configure' configures gpgme 2.1.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1524,7 +1524,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of gpgme 2.1.0:";; + short | recursive ) echo "Configuration of gpgme 2.1.1:";; esac cat <<\_ACEOF @@ -1666,7 +1666,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -gpgme configure 2.1.0 +gpgme configure 2.1.1 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2323,7 +2323,7 @@ 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 2.1.0, which was +It was created by gpgme $as_me 2.1.1, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3095,7 +3095,7 @@ # LIBGPGME_LT_CURRENT=46 LIBGPGME_LT_AGE=1 -LIBGPGME_LT_REVISION=0 +LIBGPGME_LT_REVISION=1 ################################################ @@ -3113,7 +3113,7 @@ VERSION_MAJOR=2 VERSION_MINOR=1 -VERSION_MICRO=0 +VERSION_MICRO=1 @@ -3634,7 +3634,7 @@ # Define the identity of the package. PACKAGE='gpgme' - VERSION='2.1.0' + VERSION='2.1.1' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -6501,7 +6501,7 @@ -VERSION_NUMBER=0x020100 +VERSION_NUMBER=0x020101 # We need to compile and run a program on the build machine. A @@ -15650,8 +15650,8 @@ # # Provide information about the build. # -BUILD_REVISION="5bc31cad" -BUILD_COMMITID="5bc31cad011192ef5d06304a28f3b8bf1382081c" +BUILD_REVISION="c6874137" +BUILD_COMMITID="c68741376b5561f6a9885819c55922cd189a5172" printf "%s\n" "#define BUILD_REVISION \"$BUILD_REVISION\"" >>confdefs.h @@ -15661,7 +15661,7 @@ BUILD_VERSION=`echo "$PACKAGE_VERSION" | sed 's/\([0-9.]*\).*/\1./'` -BUILD_VERSION="${BUILD_VERSION}23491" +BUILD_VERSION="${BUILD_VERSION}50823" BUILD_FILEVERSION=`echo "${BUILD_VERSION}" | tr . ,` @@ -18206,7 +18206,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by gpgme $as_me 2.1.0, which was +This file was extended by gpgme $as_me 2.1.1, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18274,7 +18274,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -gpgme config.status 2.1.0 +gpgme config.status 2.1.1 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" @@ -20229,7 +20229,7 @@ echo " GPGME v${VERSION} has been configured as follows: - Revision: 5bc31cad (23491) + Revision: c6874137 (50823) Platform: $host UI Server: $uiserver diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/configure.ac new/gpgme-2.1.1/configure.ac --- old/gpgme-2.1.0/configure.ac 2026-05-18 11:14:06.000000000 +0200 +++ new/gpgme-2.1.1/configure.ac 2026-06-25 16:04:19.000000000 +0200 @@ -32,7 +32,7 @@ m4_define([mym4_package],[gpgme]) m4_define([mym4_major], [2]) m4_define([mym4_minor], [1]) -m4_define([mym4_micro], [0]) +m4_define([mym4_micro], [1]) # Below is m4 magic to extract and compute the git revision number, # the decimalized short revision number, a beta version string and a @@ -57,7 +57,7 @@ # LIBGPGME_LT_CURRENT=46 LIBGPGME_LT_AGE=1 -LIBGPGME_LT_REVISION=0 +LIBGPGME_LT_REVISION=1 ################################################ AC_SUBST(LIBGPGME_LT_CURRENT) @@ -729,7 +729,7 @@ #define GPG_ERR_ENABLE_GETTEXT_MACROS 1 #define CRIGHTBLURB "Copyright (C) 2000 Werner Koch\n" \ - "Copyright (C) 2001--2025 g10 Code GmbH\n" + "Copyright (C) 2001--2026 g10 Code GmbH\n" ]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/doc/defsincdate new/gpgme-2.1.1/doc/defsincdate --- old/gpgme-2.1.0/doc/defsincdate 2026-05-18 11:17:48.000000000 +0200 +++ new/gpgme-2.1.1/doc/defsincdate 2026-06-25 16:05:29.000000000 +0200 @@ -1 +1 @@ -1779015582 +1782141765 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/doc/gpgme.info new/gpgme-2.1.1/doc/gpgme.info --- old/gpgme-2.1.0/doc/gpgme.info 2026-05-15 15:44:35.000000000 +0200 +++ new/gpgme-2.1.1/doc/gpgme.info 2026-06-25 16:04:54.000000000 +0200 @@ -19,8 +19,8 @@ This file documents the GPGME library. - This is Edition 2.0.2-beta35, last updated 23 April 2026, of ‘The -‘GnuPG Made Easy’ Reference Manual’, for Version 2.0.2-beta35. + This is Edition 2.1.1-beta9, last updated 22 June 2026, of ‘The +‘GnuPG Made Easy’ Reference Manual’, for Version 2.1.1-beta9. Copyright © 2002–2008, 2010, 2012–2018 g10 Code GmbH. @@ -37,131 +37,131 @@ Indirect: -gpgme.info-1: 1683 -gpgme.info-2: 303697 +gpgme.info-1: 1680 +gpgme.info-2: 303687 Tag Table: (Indirect) -Node: Top1683 -Node: Introduction9120 -Node: Getting Started9910 -Node: Features11371 -Node: Overview12759 -Node: Preparation13868 -Node: Header14865 -Node: Building the Source15612 -Node: Largefile Support (LFS)18002 -Node: Using Automake23419 -Node: Using Libtool25131 -Node: Library Version Check25428 -Node: Signal Handling31887 -Node: Multi-Threading33157 -Ref: Multi-Threading-Footnote-134573 -Node: Protocols and Engines34996 -Node: Engine Version Check37747 -Node: Engine Information40796 -Node: Engine Configuration44656 -Node: OpenPGP45960 -Node: Cryptographic Message Syntax46300 -Node: Assuan46613 -Node: Algorithms46987 -Ref: Algorithms-Footnote-147466 -Node: Public Key Algorithms47594 -Node: Hash Algorithms50196 -Node: Error Handling51410 -Node: Error Values53284 -Node: Error Sources58487 -Node: Error Codes60927 -Node: Error Strings65948 -Node: Exchanging Data67755 -Node: Creating Data Buffers69640 -Node: Memory Based Data Buffers70156 -Node: File Based Data Buffers73589 -Node: Callback Based Data Buffers76702 -Node: Destroying Data Buffers80893 -Node: Manipulating Data Buffers82400 -Node: Data Buffer I/O Operations82892 -Node: Data Buffer Meta-Data85265 -Node: Data Buffer Convenience90846 -Node: Contexts93120 -Node: Creating Contexts94239 -Node: Destroying Contexts95086 -Node: Result Management95425 -Node: Context Attributes97006 -Node: Protocol Selection98173 -Node: Crypto Engine99219 -Node: Setting the Sender101108 -Node: ASCII Armor102631 -Node: Text Mode103260 -Node: Offline Mode104194 -Node: Pinentry Mode105725 -Node: Included Certificates107619 -Node: Key Listing Mode109065 -Node: Passphrase Callback115387 -Node: Progress Meter Callback118949 -Node: Status Message Callback120934 -Node: Context Flags122699 -Node: Locale131456 -Node: Additional Logs133048 -Node: Key Management135246 -Node: Key objects136470 -Node: Listing Keys154912 -Node: Information About Keys163565 -Node: Manipulating Keys164873 -Node: Generating Keys168861 -Node: Signing Keys187799 -Node: Exporting Keys193558 -Node: Importing Keys201147 -Ref: Importing Keys-Footnote-1210015 -Node: Deleting Keys210143 -Node: Changing Passphrases212566 -Node: Changing TOFU Data213893 -Node: Advanced Key Editing216001 -Node: Crypto Operations218734 -Node: Decrypt220054 -Node: Verify229655 -Node: Decrypt and Verify245978 -Node: Sign248833 -Node: Selecting Signers249397 -Node: Creating a Signature250956 -Node: Signature Notation Data257442 -Node: Encrypt260309 -Node: Encrypting a Plaintext260680 -Node: Random277910 -Node: Getting Random278186 -Node: Miscellaneous280016 -Node: Running other Programs280428 -Node: Using the Assuan protocol282591 -Node: Checking for updates285389 -Node: Run Control290206 -Node: Waiting For Completion290950 -Node: Using External Event Loops293075 -Node: I/O Callback Interface295047 -Node: Registering I/O Callbacks299975 -Node: I/O Callback Example303697 -Node: I/O Callback Example GTK+310322 -Node: I/O Callback Example GDK312111 -Node: I/O Callback Example Qt313753 -Node: Cancellation316041 -Node: UI Server Protocol318349 -Ref: UI Server Protocol-Footnote-1319784 -Node: UI Server Encrypt319903 -Node: UI Server Sign325261 -Node: UI Server Decrypt327614 -Node: UI Server Verify329269 -Node: UI Server Set Input Files332841 -Node: UI Server Sign/Encrypt Files333911 -Node: UI Server Verify/Decrypt Files335719 -Node: UI Server Import/Export Keys337595 -Node: UI Server Checksum Files338657 -Node: Miscellaneous UI Server Commands340875 -Ref: command SENDER342806 -Node: Debugging344508 -Node: Deprecated Functions346667 -Node: Library Copying357370 -Node: Copying385590 -Node: Concept Index423340 -Node: Function and Data Index438198 +Node: Top1680 +Node: Introduction9114 +Node: Getting Started9904 +Node: Features11365 +Node: Overview12753 +Node: Preparation13862 +Node: Header14859 +Node: Building the Source15606 +Node: Largefile Support (LFS)17996 +Node: Using Automake23413 +Node: Using Libtool25125 +Node: Library Version Check25422 +Node: Signal Handling31881 +Node: Multi-Threading33151 +Ref: Multi-Threading-Footnote-134567 +Node: Protocols and Engines34990 +Node: Engine Version Check37741 +Node: Engine Information40790 +Node: Engine Configuration44650 +Node: OpenPGP45954 +Node: Cryptographic Message Syntax46294 +Node: Assuan46607 +Node: Algorithms46981 +Ref: Algorithms-Footnote-147460 +Node: Public Key Algorithms47588 +Node: Hash Algorithms50190 +Node: Error Handling51404 +Node: Error Values53278 +Node: Error Sources58481 +Node: Error Codes60921 +Node: Error Strings65942 +Node: Exchanging Data67749 +Node: Creating Data Buffers69634 +Node: Memory Based Data Buffers70150 +Node: File Based Data Buffers73583 +Node: Callback Based Data Buffers76696 +Node: Destroying Data Buffers80887 +Node: Manipulating Data Buffers82394 +Node: Data Buffer I/O Operations82886 +Node: Data Buffer Meta-Data85259 +Node: Data Buffer Convenience90840 +Node: Contexts93114 +Node: Creating Contexts94233 +Node: Destroying Contexts95080 +Node: Result Management95419 +Node: Context Attributes97000 +Node: Protocol Selection98167 +Node: Crypto Engine99213 +Node: Setting the Sender101102 +Node: ASCII Armor102625 +Node: Text Mode103254 +Node: Offline Mode104188 +Node: Pinentry Mode105719 +Node: Included Certificates107613 +Node: Key Listing Mode109059 +Node: Passphrase Callback115381 +Node: Progress Meter Callback118943 +Node: Status Message Callback120928 +Node: Context Flags122693 +Node: Locale131450 +Node: Additional Logs133042 +Node: Key Management135240 +Node: Key objects136464 +Node: Listing Keys154906 +Node: Information About Keys163559 +Node: Manipulating Keys164867 +Node: Generating Keys168855 +Node: Signing Keys187793 +Node: Exporting Keys193552 +Node: Importing Keys201141 +Ref: Importing Keys-Footnote-1210009 +Node: Deleting Keys210137 +Node: Changing Passphrases212560 +Node: Changing TOFU Data213887 +Node: Advanced Key Editing215995 +Node: Crypto Operations218728 +Node: Decrypt220048 +Node: Verify229649 +Node: Decrypt and Verify245972 +Node: Sign248827 +Node: Selecting Signers249391 +Node: Creating a Signature250950 +Node: Signature Notation Data257436 +Node: Encrypt260303 +Node: Encrypting a Plaintext260674 +Node: Random277904 +Node: Getting Random278180 +Node: Miscellaneous280009 +Node: Running other Programs280421 +Node: Using the Assuan protocol282584 +Node: Checking for updates285382 +Node: Run Control290199 +Node: Waiting For Completion290943 +Node: Using External Event Loops293068 +Node: I/O Callback Interface295040 +Node: Registering I/O Callbacks299968 +Node: I/O Callback Example303687 +Node: I/O Callback Example GTK+310312 +Node: I/O Callback Example GDK312101 +Node: I/O Callback Example Qt313743 +Node: Cancellation316031 +Node: UI Server Protocol318339 +Ref: UI Server Protocol-Footnote-1319774 +Node: UI Server Encrypt319893 +Node: UI Server Sign325251 +Node: UI Server Decrypt327604 +Node: UI Server Verify329259 +Node: UI Server Set Input Files332831 +Node: UI Server Sign/Encrypt Files333901 +Node: UI Server Verify/Decrypt Files335709 +Node: UI Server Import/Export Keys337585 +Node: UI Server Checksum Files338647 +Node: Miscellaneous UI Server Commands340865 +Ref: command SENDER342796 +Node: Debugging344498 +Node: Deprecated Functions346657 +Node: Library Copying357360 +Node: Copying385580 +Node: Concept Index423330 +Node: Function and Data Index438188 End Tag Table diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/doc/gpgme.info-1 new/gpgme-2.1.1/doc/gpgme.info-1 --- old/gpgme-2.1.0/doc/gpgme.info-1 2026-05-15 15:44:35.000000000 +0200 +++ new/gpgme-2.1.1/doc/gpgme.info-1 2026-06-25 16:04:54.000000000 +0200 @@ -19,8 +19,8 @@ This file documents the GPGME library. - This is Edition 2.0.2-beta35, last updated 23 April 2026, of ‘The -‘GnuPG Made Easy’ Reference Manual’, for Version 2.0.2-beta35. + This is Edition 2.1.1-beta9, last updated 22 June 2026, of ‘The +‘GnuPG Made Easy’ Reference Manual’, for Version 2.1.1-beta9. Copyright © 2002–2008, 2010, 2012–2018 g10 Code GmbH. @@ -41,8 +41,8 @@ Main Menu ********* -This is Edition 2.0.2-beta35, last updated 23 April 2026, of ‘The ‘GnuPG -Made Easy’ Reference Manual’, for Version 2.0.2-beta35 of the GPGME +This is Edition 2.1.1-beta9, last updated 22 June 2026, of ‘The ‘GnuPG +Made Easy’ Reference Manual’, for Version 2.1.1-beta9 of the GPGME library. * Menu: @@ -6618,7 +6618,7 @@ -- Data type: enum gpgme_random_mode_t - This enum ist used to select special modes of the random generator. + This enum is used to select special modes of the random generator. ‘GPGME_RANDOM_MODE_NORMAL’ This is the standard mode, you may also use 0 instead of this diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/doc/gpgme.info-2 new/gpgme-2.1.1/doc/gpgme.info-2 --- old/gpgme-2.1.0/doc/gpgme.info-2 2026-05-15 15:44:35.000000000 +0200 +++ new/gpgme-2.1.1/doc/gpgme.info-2 2026-06-25 16:04:54.000000000 +0200 @@ -19,8 +19,8 @@ This file documents the GPGME library. - This is Edition 2.0.2-beta35, last updated 23 April 2026, of ‘The -‘GnuPG Made Easy’ Reference Manual’, for Version 2.0.2-beta35. + This is Edition 2.1.1-beta9, last updated 22 June 2026, of ‘The +‘GnuPG Made Easy’ Reference Manual’, for Version 2.1.1-beta9. Copyright © 2002–2008, 2010, 2012–2018 g10 Code GmbH. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/doc/gpgme.texi new/gpgme-2.1.1/doc/gpgme.texi --- old/gpgme-2.1.0/doc/gpgme.texi 2026-05-15 11:29:12.000000000 +0200 +++ new/gpgme-2.1.1/doc/gpgme.texi 2026-06-25 16:04:19.000000000 +0200 @@ -7209,7 +7209,7 @@ @deftp {Data type} {enum gpgme_random_mode_t} @tindex gpgme_random_mode_t -This enum ist used to select special modes of the random generator. +This enum is used to select special modes of the random generator. @table @code @item GPGME_RANDOM_MODE_NORMAL diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/gpgme.spec new/gpgme-2.1.1/gpgme.spec --- old/gpgme-2.1.0/gpgme.spec 2026-05-18 11:17:49.000000000 +0200 +++ new/gpgme-2.1.1/gpgme.spec 2026-06-25 16:05:30.000000000 +0200 @@ -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: 2.1.0 +Version: 2.1.1 Release: 1 URL: https://gnupg.org/gpgme.html Source: https://www.gnupg.org/ftp/gcrypt/gpgme/%{name}-%{version}.tar.gz diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/lang/cl/gpgme.asd new/gpgme-2.1.1/lang/cl/gpgme.asd --- old/gpgme-2.1.0/lang/cl/gpgme.asd 2026-05-18 11:17:46.000000000 +0200 +++ new/gpgme-2.1.1/lang/cl/gpgme.asd 2026-06-25 16:05:27.000000000 +0200 @@ -27,7 +27,7 @@ (defsystem gpgme :description "GnuPG Made Easy." :author "g10 Code GmbH" - :version "2.1.0" + :version "2.1.1" :licence "GPL" :defsystem-depends-on ("cffi-grovel") :depends-on ("cffi" "gpg-error" "trivial-garbage") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/src/export.c new/gpgme-2.1.1/src/export.c --- old/gpgme-2.1.0/src/export.c 2026-04-01 15:20:29.000000000 +0200 +++ new/gpgme-2.1.1/src/export.c 2026-06-25 16:04:19.000000000 +0200 @@ -256,8 +256,23 @@ err = export_start (ctx, 1, pattern, mode, keydata); if (!err) - err = _gpgme_wait_one (ctx); - return err; + { + err = _gpgme_wait_one (ctx); + if (!err) + { + /* For this synchronous operation we check for operational + * errors and return them. */ + void *hook; + op_data_t opd; + + err = _gpgme_op_data_lookup (ctx, OPDATA_EXPORT, &hook, -1, NULL); + opd = hook; + if (!err) + err = opd->err ? opd->err : opd->failure_code; + } + } + + return TRACE_ERR (err); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/src/gpgme.h.in new/gpgme-2.1.1/src/gpgme.h.in --- old/gpgme-2.1.0/src/gpgme.h.in 2026-05-15 11:18:05.000000000 +0200 +++ new/gpgme-2.1.1/src/gpgme.h.in 2026-06-25 16:04:19.000000000 +0200 @@ -1,6 +1,6 @@ /* gpgme.h - Public interface to GnuPG Made Easy. -*- c -*- * Copyright (C) 2000 Werner Koch (dd9jn) - * Copyright (C) 2001-2025 g10 Code GmbH + * Copyright (C) 2001-2026 g10 Code GmbH * * This file is part of GPGME. * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/src/gpgme.m4 new/gpgme-2.1.1/src/gpgme.m4 --- old/gpgme-2.1.0/src/gpgme.m4 2025-12-11 09:40:41.000000000 +0100 +++ new/gpgme-2.1.1/src/gpgme.m4 2026-06-23 09:50:48.000000000 +0200 @@ -330,8 +330,9 @@ 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 +AC_DEFUN([AM_PATH_GPGME_GLIB],[ + AC_OBSOLETE([$0], [; use AM_PATH_GPGME instead to use GPGME_CFLAGS and GPGME_LIBS])dnl + 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/'` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/src/json-core.c new/gpgme-2.1.1/src/json-core.c --- old/gpgme-2.1.0/src/json-core.c 2025-12-11 09:40:41.000000000 +0100 +++ new/gpgme-2.1.1/src/json-core.c 2026-06-23 09:50:48.000000000 +0200 @@ -1195,6 +1195,9 @@ char *buffer; const char *s; size_t buflen, n; +#ifdef HAVE_W32_SYSTEM + int armor_enabled = 0; +#endif if (!base64 || base64 == -1) /* Make sure that we really have a string. */ gpgme_data_write (data, "", 1); @@ -1225,6 +1228,10 @@ break; } } +#ifdef HAVE_W32_SYSTEM + else + armor_enabled = !base64; +#endif xjson_AddStringToObject (result, "type", type); xjson_AddBoolToObject (result, "base64", base64); @@ -1232,7 +1239,52 @@ if (base64) err = add_base64_to_object (result, "data", buffer, buflen); else - err = cjson_AddStringToObject (result, "data", buffer); + { +#ifdef HAVE_W32_SYSTEM + /* + * In armored output on Windows, newline is CRLF. We need to + * convert CRLF into LF so that the JSON representation is + * always same. + */ + if (armor_enabled) + { + char *p, *p_write; + const char *p_end = buffer + buflen; + + p = p_write = buffer; + + while (1) + { + char c0, c1; + + c0 = *p++; + if (p >= p_end) + { + *p_write++ = c0; + break; + } + + if (c0 != '\r') + { + *p_write++ = c0; + continue; + } + + c1 = *p++; + if (c1 == '\n') + *p_write++ = c1; + else + { + *p_write++ = c0; + *p_write++ = c1; + } + if (p >= p_end) + break; + } + } +#endif + err = cjson_AddStringToObject (result, "data", buffer); + } leave: gpgme_free (buffer); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/src/versioninfo.rc.in new/gpgme-2.1.1/src/versioninfo.rc.in --- old/gpgme-2.1.0/src/versioninfo.rc.in 2025-05-05 16:32:11.000000000 +0200 +++ new/gpgme-2.1.1/src/versioninfo.rc.in 2026-06-25 16:04:19.000000000 +0200 @@ -39,7 +39,7 @@ VALUE "FileDescription", "GPGME - GnuPG Made Easy\0" VALUE "FileVersion", "@LIBGPGME_LT_CURRENT@.@LIBGPGME_LT_AGE@.@LIBGPGME_LT_REVISION@.@BUILD_REVISION@\0" VALUE "InternalName", "gpgme\0" - VALUE "LegalCopyright", "Copyright � 2001-2025 g10 Code GmbH\0" + VALUE "LegalCopyright", "Copyright � 2001-2026 g10 Code GmbH\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "gpgme.dll\0" VALUE "PrivateBuild", "\0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgme-2.1.0/src/w32-io.c new/gpgme-2.1.1/src/w32-io.c --- old/gpgme-2.1.0/src/w32-io.c 2026-05-18 11:13:23.000000000 +0200 +++ new/gpgme-2.1.1/src/w32-io.c 2026-06-25 16:04:19.000000000 +0200 @@ -352,9 +352,10 @@ DWORD nread; int sock; - TRACE_BEG (DEBUG_SYSIO, "gpgme:reader", ctx->hdd, - "hd=%p, sock=%p, thread=%p, refcount=%d", - ctx->hdd->hd, (void *)ctx->hdd->sock, ctx->thread_hd, + TRACE_BEG (DEBUG_SYSIO, "gpgme:reader", ctx->hdd, "hd=%p", ctx->hdd->hd); + LOCK (ctx->mutex); + TRACE_LOG ("sock=%p, thread=%p, refcount=%d", + (void *)ctx->hdd->sock, ctx->thread_hd, ctx->refcount); if (ctx->hdd->hd != INVALID_HANDLE_VALUE) @@ -364,7 +365,8 @@ for (;;) { - LOCK (ctx->mutex); + char buffer[READBUF_SIZE]; + /* Leave a 1 byte gap so that we can see whether it is empty or full. */ if ((ctx->writepos + 1) % READBUF_SIZE == ctx->readpos) @@ -374,22 +376,20 @@ { TRACE_LOG ("ResetEvent failed: ec=%d", (int) GetLastError ()); } - UNLOCK (ctx->mutex); TRACE_LOG ("waiting for space (refcnt=%d)", ctx->refcount); + UNLOCK (ctx->mutex); wait_for_single_object (ctx->have_space_ev, INFINITE); TRACE_LOG ("got space"); LOCK (ctx->mutex); } if (ctx->stop_me) { - UNLOCK (ctx->mutex); break; } nbytes = (ctx->readpos + READBUF_SIZE - ctx->writepos - 1) % READBUF_SIZE; if (nbytes > READBUF_SIZE - ctx->writepos) nbytes = READBUF_SIZE - ctx->writepos; - UNLOCK (ctx->mutex); TRACE_LOG ("%s %d bytes", sock? "receiving":"reading", nbytes); @@ -397,7 +397,9 @@ { int n; - n = recv (ctx->hdd->sock, ctx->buffer + ctx->writepos, nbytes, 0); + UNLOCK (ctx->mutex); + n = recv (ctx->hdd->sock, buffer, nbytes, 0); + LOCK (ctx->mutex); if (n < 0) { ctx->error_code = (int) WSAGetLastError (); @@ -413,14 +415,11 @@ if ( ctx->error_code == WSAECONNABORTED || ctx->error_code == WSAECONNRESET) { - LOCK (ctx->mutex); if (ctx->stop_me) { - UNLOCK (ctx->mutex); TRACE_LOG ("got shutdown"); break; } - UNLOCK (ctx->mutex); } ctx->error = 1; @@ -428,12 +427,17 @@ } break; } + memcpy (ctx->buffer + ctx->writepos, buffer, n); nread = n; } else { - if (!ReadFile (ctx->hdd->hd, - ctx->buffer + ctx->writepos, nbytes, &nread, NULL)) + BOOL res; + + UNLOCK (ctx->mutex); + res = ReadFile (ctx->hdd->hd, buffer, nbytes, &nread, NULL); + LOCK (ctx->mutex); + if (!res) { ctx->error_code = (int) GetLastError (); if (ctx->error_code == ERROR_BROKEN_PIPE) @@ -453,18 +457,16 @@ } break; } + memcpy (ctx->buffer + ctx->writepos, buffer, nread); } - LOCK (ctx->mutex); if (ctx->stop_me) { - UNLOCK (ctx->mutex); break; } if (!nread) { ctx->eof = 1; TRACE_LOG ("got eof"); - UNLOCK (ctx->mutex); break; } @@ -476,7 +478,6 @@ TRACE_LOG ("SetEvent (%p) failed: ec=%d", ctx->have_data_ev, (int) GetLastError ()); } - UNLOCK (ctx->mutex); } /* Indicate that we have an error or EOF. */ if (!SetEvent (ctx->have_data_ev)) @@ -485,6 +486,8 @@ (int) GetLastError ()); } + UNLOCK (ctx->mutex); + TRACE_LOG ("waiting for close"); wait_for_single_object (ctx->close_ev, INFINITE); @@ -756,10 +759,10 @@ struct writer_context_s *ctx = arg; DWORD nwritten; int sock; - TRACE_BEG (DEBUG_SYSIO, "gpgme:writer", ctx->hdd, - "hd=%p, sock=%p, thread=%p, refcount=%d", - ctx->hdd->hd, (void *)ctx->hdd->sock, ctx->thread_hd, - ctx->refcount); + TRACE_BEG (DEBUG_SYSIO, "gpgme:writer", ctx->hdd, "hd=%p", ctx->hdd->hd); + LOCK (ctx->mutex); + TRACE_LOG ("sock=%p, thread=%p, refcount=%d", + (void *)ctx->hdd->sock, ctx->thread_hd, ctx->refcount); if (ctx->hdd->hd != INVALID_HANDLE_VALUE) sock = 0; @@ -768,10 +771,10 @@ for (;;) { - LOCK (ctx->mutex); + char buffer[READBUF_SIZE]; + if (ctx->stop_me && !ctx->nbytes) { - UNLOCK (ctx->mutex); break; } if (!ctx->nbytes) @@ -788,10 +791,8 @@ } if (ctx->stop_me && !ctx->nbytes) { - UNLOCK (ctx->mutex); break; } - UNLOCK (ctx->mutex); TRACE_LOG ("%s %zd bytes", sock?"sending":"writing", ctx->nbytes); @@ -804,7 +805,11 @@ be used with WriteFile. */ int n; - n = send (ctx->hdd->sock, ctx->buffer, ctx->nbytes, 0); + n = ctx->nbytes; + memcpy (buffer, ctx->buffer, n); + UNLOCK (ctx->mutex); + n = send (ctx->hdd->sock, buffer, n, 0); + LOCK (ctx->mutex); if (n < 0) { ctx->error_code = (int) WSAGetLastError (); @@ -816,8 +821,14 @@ } else { - if (!WriteFile (ctx->hdd->hd, ctx->buffer, - ctx->nbytes, &nwritten, NULL)) + BOOL res; + int n = ctx->nbytes; + + memcpy (buffer, ctx->buffer, n); + UNLOCK (ctx->mutex); + res = WriteFile (ctx->hdd->hd, buffer, n, &nwritten, NULL); + LOCK (ctx->mutex); + if (!res) { if (GetLastError () == ERROR_BUSY) { @@ -834,14 +845,13 @@ } TRACE_LOG ("wrote %d bytes", (int) nwritten); - LOCK (ctx->mutex); ctx->nbytes -= nwritten; - UNLOCK (ctx->mutex); } /* Indicate that we have an error. */ if (!SetEvent (ctx->is_empty)) TRACE_LOG ("SetEvent failed: ec=%d", (int) GetLastError ()); + UNLOCK (ctx->mutex); TRACE_LOG ("waiting for close"); wait_for_single_object (ctx->close_ev, INFINITE); @@ -1674,9 +1684,11 @@ close (tmp_fd); DeleteFileA (tmp_name); free (tmp_name); - - /* FIXME: Should translate the error code. */ +#if GPGRT_VERSION_NUMBER >= 0x013e00 /* gpgrt >= 1.62 */ + gpgrt_w32_set_errno (lasterr); +#else gpg_err_set_errno (EIO); +#endif return TRACE_SYSRES (-1); } @@ -1699,7 +1711,8 @@ if (!DuplicateHandle (GetCurrentProcess(), ohd, pi.hProcess, &hd, 0, TRUE, DUPLICATE_SAME_ACCESS)) { - TRACE_LOG ("DuplicateHandle failed: ec=%d", (int) GetLastError ()); + int lasterr = (int) GetLastError (); + TRACE_LOG ("DuplicateHandle failed: ec=%d", lasterr); TerminateProcess (pi.hProcess, 0); /* Just in case TerminateProcess didn't work, let the process fail on its own. */ @@ -1711,8 +1724,11 @@ DeleteFileA (tmp_name); free (tmp_name); - /* FIXME: Should translate the error code. */ +#if GPGRT_VERSION_NUMBER >= 0x013e00 /* gpgrt >= 1.62 */ + gpgrt_w32_set_errno (lasterr); +#else gpg_err_set_errno (EIO); +#else UNLOCK (fd_table_lock); return TRACE_SYSRES (-1); } @@ -1826,7 +1842,9 @@ int i; int any; int count; + int errnoset = 0; void *dbg_help = NULL; + TRACE_BEG (DEBUG_SYSIO, "_gpgme_io_select", fds, "nfds=%zd, nonblock=%u", nfds, nonblock); @@ -1859,7 +1877,6 @@ { TRACE_END (dbg_help, "oops ]"); TRACE_LOG ("Too many objects for WFMO!"); - /* FIXME: Should translate the error code. */ gpg_err_set_errno (EIO); return TRACE_SYSRES (-1); } @@ -1882,7 +1899,6 @@ { TRACE_END (dbg_help, "oops ]"); TRACE_LOG ("Too many objects for WFMO!"); - /* FIXME: Should translate the error code. */ gpg_err_set_errno (EIO); return TRACE_SYSRES (-1); } @@ -1949,6 +1965,10 @@ } #endif TRACE_LOG ("WFMO failed: %d", le); +#if GPGRT_VERSION_NUMBER >= 0x013e00 /* gpgrt >= 1.62 */ + gpgrt_w32_set_errno (le); + errnoset = 1; +#endif count = -1; } else @@ -1971,11 +1991,8 @@ TRACE_END (dbg_help, "]"); } - if (count < 0) - { - /* FIXME: Should determine a proper error code. */ + if (count < 0 && !errnoset) gpg_err_set_errno (EIO); - } return TRACE_SYSRES (count); }
