Accepting request 997447 from home:AndreasStieger:branches:Base:System

gpgme 1.18.0

OBS-URL: https://build.opensuse.org/request/show/997447
OBS-URL: https://build.opensuse.org/package/show/Base:System/gpgme?expand=0&rev=136
This commit is contained in:
Pedro Monreal Gonzalez 2022-08-16 22:06:15 +00:00 committed by Git OBS Bridge
parent 04cc7c57c5
commit 2cf610bda2
10 changed files with 58 additions and 211 deletions

View File

@ -1,3 +1,3 @@
libgpgme11
libgpgmepp6
libqgpgme7
libqgpgme15

View File

@ -1,126 +0,0 @@
From 81a33ea5e1b86d586b956e893a5b25c4cd41c969 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ingo=20Kl=C3=B6cker?= <dev@ingo-kloecker.de>
Date: Sat, 26 Jun 2021 18:02:47 +0200
Subject: [PATCH] core: Fix use-after-free issue in test
* tests/gpg/t-edit-sign.c (sign_key, verify_key_signature): New.
(main): Factored out signing and verifying the result.
--
Factoring the two steps of the test into different functions fixes the
use-after-free issue that was caused by accidentaly using a variable
of the first step in the second step.
GnuPG-bug-id: 5509
---
tests/gpg/t-edit-sign.c | 54 ++++++++++++++++++++++++++++-------------
1 file changed, 37 insertions(+), 17 deletions(-)
diff --git a/tests/gpg/t-edit-sign.c b/tests/gpg/t-edit-sign.c
index 2f983622..e0494c54 100644
--- a/tests/gpg/t-edit-sign.c
+++ b/tests/gpg/t-edit-sign.c
@@ -107,31 +107,19 @@ interact_fnc (void *opaque, const char *status, const char *args, int fd)
}
-int
-main (int argc, char **argv)
+void
+sign_key (const char *key_fpr, const char *signer_fpr)
{
gpgme_ctx_t ctx;
gpgme_error_t err;
gpgme_data_t out = NULL;
- const char *signer_fpr = "A0FF4590BB6122EDEF6E3C542D727CC768697734"; /* Alpha Test */
gpgme_key_t signing_key = NULL;
- const char *key_fpr = "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2"; /* Bravo Test */
gpgme_key_t key = NULL;
- gpgme_key_t signed_key = NULL;
- gpgme_user_id_t signed_uid = NULL;
- gpgme_key_sig_t key_sig = NULL;
char *agent_info;
- int mode;
-
- (void)argc;
- (void)argv;
-
- init_gpgme (GPGME_PROTOCOL_OpenPGP);
err = gpgme_new (&ctx);
fail_if_err (err);
- /* Sign the key */
agent_info = getenv("GPG_AGENT_INFO");
if (!(agent_info && strchr (agent_info, ':')))
gpgme_set_passphrase_cb (ctx, passphrase_cb, 0);
@@ -159,8 +147,23 @@ main (int argc, char **argv)
gpgme_data_release (out);
gpgme_key_unref (key);
gpgme_key_unref (signing_key);
+ gpgme_release (ctx);
+}
+
+
+void
+verify_key_signature (const char *key_fpr, const char *signer_keyid)
+{
+ gpgme_ctx_t ctx;
+ gpgme_error_t err;
+ gpgme_key_t signed_key = NULL;
+ gpgme_user_id_t signed_uid = NULL;
+ gpgme_key_sig_t key_sig = NULL;
+ int mode;
+
+ err = gpgme_new (&ctx);
+ fail_if_err (err);
- /* Verify the key signature */
mode = gpgme_get_keylist_mode (ctx);
mode |= GPGME_KEYLIST_MODE_SIGS;
err = gpgme_set_keylist_mode (ctx, mode);
@@ -168,7 +171,7 @@ main (int argc, char **argv)
err = gpgme_get_key (ctx, key_fpr, &signed_key, 0);
fail_if_err (err);
- signed_uid = key->uids;
+ signed_uid = signed_key->uids;
if (!signed_uid)
{
fprintf (stderr, "Signed key has no user IDs\n");
@@ -180,7 +183,7 @@ main (int argc, char **argv)
exit (1);
}
key_sig = signed_uid->signatures->next;
- if (strcmp ("2D727CC768697734", key_sig->keyid))
+ if (strcmp (signer_keyid, key_sig->keyid))
{
fprintf (stderr, "Unexpected key ID in second user ID sig: %s\n",
key_sig->keyid);
@@ -196,6 +199,23 @@ main (int argc, char **argv)
gpgme_key_unref (signed_key);
gpgme_release (ctx);
+}
+
+
+int
+main (int argc, char **argv)
+{
+ const char *signer_fpr = "A0FF4590BB6122EDEF6E3C542D727CC768697734"; /* Alpha Test */
+ const char *signer_keyid = signer_fpr + strlen(signer_fpr) - 16;
+ const char *key_fpr = "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2"; /* Bravo Test */
+
+ (void)argc;
+ (void)argv;
+
+ init_gpgme (GPGME_PROTOCOL_OpenPGP);
+
+ sign_key (key_fpr, signer_fpr);
+ verify_key_signature (key_fpr, signer_keyid);
return 0;
}
--
2.32.0

View File

@ -1,33 +0,0 @@
From 6a79e90dedc19877ae1c520fed875b57089a5425 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Ingo=20Kl=C3=B6cker?= <dev@ingo-kloecker.de>
Date: Thu, 8 Jul 2021 11:54:06 +0200
Subject: [PATCH] Make sure expiration time is interpreted as unsigned number
* lang/qt/tests/t-various.cpp (testSignKeyWithExpiration): Convert
expiration time to uint_least32_t.
--
This fixes the test on 32-bit systems where time_t (the return type of
expirationTime()) is a signed 32-bit integer type.
GnuPG-bug-id: 5522
---
lang/qt/tests/t-various.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lang/qt/tests/t-various.cpp b/lang/qt/tests/t-various.cpp
index 8563b681..72a2487a 100644
--- a/lang/qt/tests/t-various.cpp
+++ b/lang/qt/tests/t-various.cpp
@@ -355,7 +355,7 @@ private Q_SLOTS:
target.update();
const auto keySignature = target.userID(0).signature(target.userID(0).numSignatures() - 1);
QVERIFY(!keySignature.neverExpires());
- const auto expirationDate = QDateTime::fromSecsSinceEpoch(keySignature.expirationTime()).date();
+ const auto expirationDate = QDateTime::fromSecsSinceEpoch(uint_least32_t(keySignature.expirationTime())).date();
QCOMPARE(expirationDate, QDate(2106, 2, 6)); // expiration date is capped at 2106-02-06
}
--
2.11.0

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6c8cc4aedb10d5d4c905894ba1d850544619ee765606ac43df7405865de29ed0
size 1718913

Binary file not shown.

3
gpgme-1.18.0.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:361d4eae47ce925dba0ea569af40e7b52c645c4ae2e65e5621bf1b6cdd8b0e9e
size 1762323

BIN
gpgme-1.18.0.tar.bz2.sig Normal file

Binary file not shown.

View File

@ -1,32 +0,0 @@
From 4b64774b6d13ffa4f59dddf947a97d61bcfa2f2e Mon Sep 17 00:00:00 2001
From: Jiri Kucera <sanczes@gmail.com>
Date: Sun, 25 Jul 2021 11:35:54 +0200
Subject: [PATCH] core: Support closefrom also for glibc.
* src/posix-io.c (_gpgme_io_spawn): Use glibc's closefrom.
--
Since 2.34, glibc introduces closefrom (the implementation
follows *BSD standard).
Signed-off-by: Werner Koch <wk@gnupg.org>
---
src/posix-io.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/posix-io.c b/src/posix-io.c
index e712ef28..2a3a81fc 100644
--- a/src/posix-io.c
+++ b/src/posix-io.c
@@ -570,7 +570,7 @@ _gpgme_io_spawn (const char *path, char *const argv[], unsigned int flags,
if (fd_list[i].fd > fd)
fd = fd_list[i].fd;
fd++;
-#if defined(__sun) || defined(__FreeBSD__)
+#if defined(__sun) || defined(__FreeBSD__) || defined(__GLIBC__)
closefrom (fd);
max_fds = fd;
#else /*!__sun */
--
2.11.0

View File

@ -1,3 +1,45 @@
-------------------------------------------------------------------
Tue Aug 16 17:05:43 UTC 2022 - Andreas Stieger <andreas.stieger@gmx.de>
- gpgme 1.18.0
* New keylist mode to force refresh via external methods
* The keylist operations now create an import result to report the
result of the locate keylist modes
* core: Return BAD_PASSPHRASE error code on symmetric decryption
failure
* cpp, qt: Do not export internal symbols anymore
* cpp, qt: Support revocation of own OpenPGP keys
* qt: The file name of (signed and) encrypted data can now be set
* cpp, qt: Support setting the primary user ID
* python: Fix segv(NULL) when inspecting contect after exeception
- includes changes from version 1.17.1:
* qt: Fix a bug in the ABI compatibility of 1.17.0
- includes changes from 1.17.0:
* New context flag "key-origin"
* New context flag "import-filter"
* New export mode to export secret subkeys
* Detect errors during the export of secret keys
* New function gpgme_op_receive_keys to import keys from a keyserver
without first running a key listing
* Detect bad passphrase error in certificate import
* Allow setting --key-origin when importing keys
* Support components "keyboxd", "gpg-agent", "scdaemon", "dirmngr",
"pinentry", and "socketdir" in gpgme_get_dirinfo
* Under Unix use poll(2) instead of select(2), when available.
* Fix results returned by gpgme_data_* functions
* Support closefrom also for glibc
(drop upstream gpgme-use-glibc-closefrom.patch
* cpp,qt: Add support for export of secret keys and secret subkeys.
* cpp,qt: Support for adding existing subkeys to other keys
* qt: Extend ChangeExpiryJob to change expiration of primary key
and of subkeys at the same time
* qt: Support WKD lookup without implicit import
* qt: Allow specifying an import filter when importing keys
* qt: Allow retrieving the default value of a config entry
- drop patches included upstream
* gpgme-1.16.0-Use-after-free-in-t-edit-sign-test.patch
* gpgme-1.16.0-t-various-testSignKeyWithExpiration-32-bit.patch
-------------------------------------------------------------------
Fri Dec 24 13:05:32 UTC 2021 - Ben Greiner <code@bnavigator.de>

View File

@ -1,7 +1,7 @@
#
# spec file
#
# Copyright (c) 2021 SUSE LLC
# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -30,7 +30,7 @@
%endif
%{!?python_module:%define python_module() python-%{**} python3-{**}}
Name: gpgme%{psuffix}
Version: 1.16.0
Version: 1.18.0
Release: 0
Summary: Programmatic library interface to GnuPG
License: GPL-3.0-or-later AND LGPL-2.1-or-later
@ -43,10 +43,6 @@ Source2: baselibs.conf
Source3: gpgme.keyring
# used to have a fixed timestamp
Source99: gpgme.changes
Patch0: gpgme-1.16.0-Use-after-free-in-t-edit-sign-test.patch
Patch1: gpgme-1.16.0-t-various-testSignKeyWithExpiration-32-bit.patch
# PATCH-FIX-UPSTREAM bsc#1189089 Use glibc's closefrom
Patch2: gpgme-use-glibc-closefrom.patch
# PATCH-FIX-UPSTREAM support python 3.10 -- https://dev.gnupg.org/D545
Patch3: gpgme-D545-python310.patch
# PATCH-FIX-UPSTREAM support python 3.10 -- https://dev.gnupg.org/D546
@ -185,12 +181,12 @@ management.
This package contains the bindings to use the library from Python 3 applications.
%endif
%package -n libqgpgme7
%package -n libqgpgme15
Summary: Programmatic Qt library interface to GnuPG
Group: System/Libraries
Requires: gpg2
%description -n libqgpgme7
%description -n libqgpgme15
GnuPG Made Easy (GPGME) is a library designed to make access to GnuPG
easier for applications. It provides a high-level crypto API for
encryption, decryption, signing, signature verification, and key
@ -203,7 +199,7 @@ Summary: Development files for libqgpgme, a Qt library for accessing GnuP
Group: Development/Libraries/C and C++
Requires: libgpgme-devel = %{version}
Requires: libgpgmepp-devel = %{version}
Requires: libqgpgme7 = %{version}
Requires: libqgpgme15 = %{version}
%description -n libqgpgme-devel
GnuPG Made Easy (GPGME) is a library designed to make access to GnuPG
@ -215,14 +211,11 @@ This package contains the bindings to use the library in Qt C++ applications.
%prep
%setup -q -n gpgme-%{version}
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
./autogen.sh
%build
./autogen.sh
build_timestamp=$(date -u +%{Y}-%{m}-%{dT}%{H}:%{M}+0000 -r %{SOURCE99})
languages="cl cpp"
@ -259,12 +252,15 @@ rm -r %{buildroot}%{_libdir}/pkgconfig/gpgme*
%check
%if ! 0%{?qemu_user_space_build}
# QT tests fail on https://dev.gnupg.org/T6137
%if !%{with qt}
%make_build check
%endif
%endif
%if %{with qt}
%post -n libqgpgme7 -p /sbin/ldconfig
%postun -n libqgpgme7 -p /sbin/ldconfig
%post -n libqgpgme15 -p /sbin/ldconfig
%postun -n libqgpgme15 -p /sbin/ldconfig
%endif
%if !%{with qt}
@ -323,7 +319,7 @@ rm -r %{buildroot}%{_libdir}/pkgconfig/gpgme*
%endif
%if %{with qt}
%files -n libqgpgme7
%files -n libqgpgme15
%license COPYING COPYING.LESSER LICENSES
%{_libdir}/libqgpgme.so.*