diff options
Diffstat (limited to 'gnu/packages')
-rw-r--r-- | gnu/packages/gnupg.scm | 6 | ||||
-rw-r--r-- | gnu/packages/patches/gnupg-simple-query-ignore-status-messages.patch | 142 |
2 files changed, 2 insertions, 146 deletions
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm index b7c661257c..7bf6566be9 100644 --- a/gnu/packages/gnupg.scm +++ b/gnu/packages/gnupg.scm @@ -208,16 +208,14 @@ compatible to GNU Pth.") (define-public gnupg (package (name "gnupg") - (version "2.1.11") + (version "2.1.12") (source (origin (method url-fetch) (uri (string-append "mirror://gnupg/gnupg/gnupg-" version ".tar.bz2")) (sha256 (base32 - "06mn2viiwsyq991arh5i5fhr9jyxq2bi0jkdj7ndfisxihngpc5p")) - (patches (search-patches - "gnupg-simple-query-ignore-status-messages.patch")))) + "01n5py45x0r97l4dzmd803jpbpbcxr1591k3k4s8m9804jfr4d5c")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) diff --git a/gnu/packages/patches/gnupg-simple-query-ignore-status-messages.patch b/gnu/packages/patches/gnupg-simple-query-ignore-status-messages.patch deleted file mode 100644 index 153f71c38f..0000000000 --- a/gnu/packages/patches/gnupg-simple-query-ignore-status-messages.patch +++ /dev/null @@ -1,142 +0,0 @@ -Copied from upstream: -http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=commitdiff;h=acac103ba5772ae738ce5409d17feab80596cde6 - -Fixes: https://debbugs.gnu.org/22558 -Upstream bug: https://bugs.gnupg.org/gnupg/issue2229 - -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] 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.6.3 - |