diff options
author | Kristian Fiskerstrand <k_f@gentoo.org> | 2016-02-12 22:47:36 +0100 |
---|---|---|
committer | Kristian Fiskerstrand <k_f@gentoo.org> | 2016-02-12 22:47:36 +0100 |
commit | a991aaf0280fc6410f1e6f22989cc46b18224c26 (patch) | |
tree | e73633a3f391f031e749605c9ac5822270e52ed9 | |
parent | c3f25a35664cfe0d06ff946157e2302fed763710 (diff) | |
download | gentoo-a991aaf0280fc6410f1e6f22989cc46b18224c26.tar.gz gentoo-a991aaf0280fc6410f1e6f22989cc46b18224c26.tar.xz |
app-crypt/gnupg: Fix test failure in 2.1.11
Bug: 573398
Package-Manager: portage-2.2.27
-rw-r--r-- | app-crypt/gnupg/files/gnupg-2.1.11-tests.patch | 136 | ||||
-rw-r--r-- | app-crypt/gnupg/gnupg-2.1.11-r1.ebuild | 174 |
2 files changed, 310 insertions, 0 deletions
diff --git a/app-crypt/gnupg/files/gnupg-2.1.11-tests.patch b/app-crypt/gnupg/files/gnupg-2.1.11-tests.patch new file mode 100644 index 00000000000..216ea7dafc0 --- /dev/null +++ b/app-crypt/gnupg/files/gnupg-2.1.11-tests.patch @@ -0,0 +1,136 @@ +From acac103ba5772ae738ce5409d17feab80596cde6 Mon Sep 17 00:00:00 2001 +From: "Neal H. Walfield" <neal@g10code.com> +Date: Fri, 12 Feb 2016 22:12:21 +0100 +Subject: [PATCH 1/1] common: Change simple_query to ignore status messages. + +* common/simple-pwquery.c (simple_query): Ignore status messages. + +-- +Signed-off-by: Neal H. Walfield <neal@g10code.com> +GnuPG-bug-id: 2229 +--- + common/simple-pwquery.c | 95 ++++++++++++++++++++++++++++++++++--------------- + 1 file changed, 67 insertions(+), 28 deletions(-) + +diff --git a/common/simple-pwquery.c b/common/simple-pwquery.c +index 90d04c0..b2d666c 100644 +--- a/common/simple-pwquery.c ++++ b/common/simple-pwquery.c +@@ -618,6 +618,7 @@ simple_query (const char *query) + int fd = -1; + int nread; + char response[500]; ++ int have = 0; + int rc; + + rc = agent_open (&fd); +@@ -628,40 +629,78 @@ simple_query (const char *query) + if (rc) + goto leave; + +- /* get response */ +- nread = readline (fd, response, 499); +- if (nread < 0) +- { +- rc = -nread; +- goto leave; +- } +- if (nread < 3) ++ while (1) + { +- rc = SPWQ_PROTOCOL_ERROR; +- goto leave; +- } ++ if (! have || ! strchr (response, '\n')) ++ /* get response */ ++ { ++ nread = readline (fd, &response[have], ++ sizeof (response) - 1 /* NUL */ - have); ++ if (nread < 0) ++ { ++ rc = -nread; ++ goto leave; ++ } ++ have += nread; ++ if (have < 3) ++ { ++ rc = SPWQ_PROTOCOL_ERROR; ++ goto leave; ++ } ++ response[have] = 0; ++ } + +- if (response[0] == 'O' && response[1] == 'K') +- /* OK, do nothing. */; +- else if ((nread > 7 && !memcmp (response, "ERR 111", 7) +- && (response[7] == ' ' || response[7] == '\n') ) +- || ((nread > 4 && !memcmp (response, "ERR ", 4) +- && (strtoul (response+4, NULL, 0) & 0xffff) == 99)) ) +- { +- /* 111 is the old Assuan code for canceled which might still +- be in use by old installations. 99 is GPG_ERR_CANCELED as +- used by modern gpg-agents; 0xffff is used to mask out the +- error source. */ ++ if (response[0] == 'O' && response[1] == 'K') ++ /* OK, do nothing. */; ++ else if ((nread > 7 && !memcmp (response, "ERR 111", 7) ++ && (response[7] == ' ' || response[7] == '\n') ) ++ || ((nread > 4 && !memcmp (response, "ERR ", 4) ++ && (strtoul (response+4, NULL, 0) & 0xffff) == 99)) ) ++ { ++ /* 111 is the old Assuan code for canceled which might still ++ be in use by old installations. 99 is GPG_ERR_CANCELED as ++ used by modern gpg-agents; 0xffff is used to mask out the ++ error source. */ + #ifdef SPWQ_USE_LOGGING +- log_info (_("canceled by user\n") ); ++ log_info (_("canceled by user\n") ); + #endif +- } +- else +- { ++ } ++ else if (response[0] == 'S' && response[1] == ' ') ++ { ++ char *nextline; ++ int consumed; ++ ++ nextline = strchr (response, '\n'); ++ if (! nextline) ++ /* Point to the NUL. */ ++ nextline = &response[have]; ++ else ++ /* Move past the \n. */ ++ nextline ++; ++ ++ consumed = (size_t) nextline - (size_t) response; ++ ++ /* Skip any additional newlines. */ ++ while (consumed < have && response[consumed] == '\n') ++ consumed ++; ++ ++ have -= consumed; ++ ++ if (have) ++ memmove (response, &response[consumed], have + 1); ++ ++ continue; ++ } ++ else ++ { + #ifdef SPWQ_USE_LOGGING +- log_error (_("problem with the agent\n")); ++ log_error (_("problem with the agent (unexpected response \"%s\"\n"), ++ response); + #endif +- rc = SPWQ_ERR_RESPONSE; ++ rc = SPWQ_ERR_RESPONSE; ++ } ++ ++ break; + } + + leave: +-- +2.1.4 + diff --git a/app-crypt/gnupg/gnupg-2.1.11-r1.ebuild b/app-crypt/gnupg/gnupg-2.1.11-r1.ebuild new file mode 100644 index 00000000000..4b653de3dbf --- /dev/null +++ b/app-crypt/gnupg/gnupg-2.1.11-r1.ebuild @@ -0,0 +1,174 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI="5" + +inherit eutils flag-o-matic toolchain-funcs + +DESCRIPTION="The GNU Privacy Guard, a GPL OpenPGP implementation" +HOMEPAGE="http://www.gnupg.org/" +MY_P="${P/_/-}" +SRC_URI="mirror://gnupg/gnupg/${MY_P}.tar.bz2" + +LICENSE="GPL-3" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86" +IUSE="bzip2 doc +gnutls ldap nls readline static selinux smartcard tofu tools usb" + +COMMON_DEPEND_LIBS=" + dev-libs/npth + >=dev-libs/libassuan-2.4.1 + >=dev-libs/libgcrypt-1.6.2[threads] + >=dev-libs/libgpg-error-1.21 + >=dev-libs/libksba-1.2.0 + >=net-misc/curl-7.10 + gnutls? ( >=net-libs/gnutls-3.0 ) + sys-libs/zlib + ldap? ( net-nds/openldap ) + bzip2? ( app-arch/bzip2 ) + readline? ( sys-libs/readline:0= ) + smartcard? ( usb? ( virtual/libusb:0 ) ) + tofu? ( >=dev-db/sqlite-3.7 ) + " +COMMON_DEPEND_BINS="app-crypt/pinentry + !app-crypt/dirmngr" + +# Existence of executables is checked during configuration. +DEPEND="${COMMON_DEPEND_LIBS} + ${COMMON_DEPEND_BINS} + static? ( + >=dev-libs/libassuan-2[static-libs] + >=dev-libs/libgcrypt-1.6.2[static-libs] + >=dev-libs/libgpg-error-1.17[static-libs] + >=dev-libs/libksba-1.0.7[static-libs] + dev-libs/npth[static-libs] + >=net-misc/curl-7.10[static-libs] + sys-libs/zlib[static-libs] + bzip2? ( app-arch/bzip2[static-libs] ) + ) + nls? ( sys-devel/gettext ) + doc? ( sys-apps/texinfo )" + +RDEPEND="!static? ( ${COMMON_DEPEND_LIBS} ) + ${COMMON_DEPEND_BINS} + selinux? ( sec-policy/selinux-gpg ) + nls? ( virtual/libintl )" + +REQUIRED_USE="smartcard? ( !static )" + +S="${WORKDIR}/${MY_P}" + +src_prepare() { + epatch "${FILESDIR}/${P}-tests.patch" + epatch_user +} + +src_configure() { + local myconf=() + + # 'USE=static' support was requested: + # gnupg1: bug #29299 + # gnupg2: bug #159623 + use static && append-ldflags -static + + if use smartcard; then + myconf+=( + --enable-scdaemon + $(use_enable usb ccid-driver) + ) + else + myconf+=( --disable-scdaemon ) + fi + + if use elibc_SunOS || use elibc_AIX; then + myconf+=( --disable-symcryptrun ) + else + myconf+=( --enable-symcryptrun ) + fi + + # glib fails and picks up clang's internal stdint.h causing weird errors + [[ ${CC} == clang ]] && export gl_cv_absolute_stdint_h=/usr/include/stdint.h + + econf \ + --docdir="${EPREFIX}/usr/share/doc/${PF}" \ + --enable-gpg \ + --enable-gpgsm \ + --enable-large-secmem \ + --without-adns \ + "${myconf[@]}" \ + $(use_enable bzip2) \ + $(use_enable gnutls) \ + $(use_with ldap) \ + $(use_enable nls) \ + $(use_with readline) \ + $(use_enable tofu) \ + CC_FOR_BUILD="$(tc-getBUILD_CC)" +} + +src_compile() { + default + + if use doc; then + cd doc + emake html + fi +} + +src_install() { + default + + use tools && dobin tools/{convert-from-106,gpg-check-pattern} \ + tools/{gpg-zip,gpgconf,gpgsplit,lspgpot,mail-signed-keys,make-dns-cert} + + emake DESTDIR="${D}" -f doc/Makefile uninstall-nobase_dist_docDATA + # The help*txt files are read from the datadir by GnuPG directly. + # They do not work if compressed or moved! + #rm "${ED}"/usr/share/gnupg/help* || die + + dodoc ChangeLog NEWS README THANKS TODO VERSION doc/FAQ doc/DETAILS \ + doc/HACKING doc/TRANSLATE doc/OpenPGP doc/KEYSERVER doc/help* + + dosym gpg2 /usr/bin/gpg + dosym gpgv2 /usr/bin/gpgv + echo ".so man1/gpg2.1" > "${ED}"/usr/share/man/man1/gpg.1 + echo ".so man1/gpgv2.1" > "${ED}"/usr/share/man/man1/gpgv.1 + + dodir /etc/env.d + echo "CONFIG_PROTECT=/usr/share/gnupg/qualified.txt" >> "${ED}"/etc/env.d/30gnupg + + if use doc; then + dohtml doc/gnupg.html/* doc/*.png + fi +} + +pkg_postinst() { + elog "If you wish to view images emerge:" + elog "media-gfx/xloadimage, media-gfx/xli or any other viewer" + elog "Remember to use photo-viewer option in configuration file to activate" + elog "the right viewer." + elog + + if use smartcard; then + elog "To use your OpenPGP smartcard (or token) with GnuPG you need one of" + use usb && elog " - a CCID-compatible reader, used directly through libusb;" + elog " - sys-apps/pcsc-lite and a compatible reader device;" + elog " - dev-libs/openct and a compatible reader device;" + elog " - a reader device and drivers exporting either PC/SC or CT-API interfaces." + elog "" + elog "General hint: you probably want to try installing sys-apps/pcsc-lite and" + elog "app-crypt/ccid first." + fi + + ewarn "Please remember to restart gpg-agent if a different version" + ewarn "of the agent is currently used. If you are unsure of the gpg" + ewarn "agent you are using please run 'killall gpg-agent'," + ewarn "and to start a fresh daemon just run 'gpg-agent --daemon'." + + if [[ -n ${REPLACING_VERSIONS} ]]; then + elog "If upgrading from a version prior than 2.1 you might have to re-import" + elog "secret keys after restarting the gpg-agent as the new version is using" + elog "a new storage mechanism." + elog "You can migrate the keys using gpg --import \$HOME/.gnupg/secring.gpg" + fi +} |