[git] GnuPG - branch, master, updated. gnupg-2.2.7-306-g05ef628

by Werner Koch cvs at cvs.gnupg.org
Tue Dec 11 13:39:58 CET 2018


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "The GNU Privacy Guard".

The branch, master has been updated
       via  05ef6282784495a77f4faf76c0de5bc85dfecf06 (commit)
       via  dc61f4ecea5c9815cb00aeb25439978337c1fd64 (commit)
      from  e7252ae57f3c9da557f23295268f74dd25fee3a1 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 05ef6282784495a77f4faf76c0de5bc85dfecf06
Author: Werner Koch <wk at gnupg.org>
Date:   Tue Dec 11 13:39:41 2018 +0100

    dirmngr: Retry another server from the pool on 502, 503, 504.
    
    * dirmngr/ks-engine-hkp.c (handle_send_request_error): Add arg
    http_status and handle it.
    (ks_hkp_search): Get http_status froms end_request and pass on to
    handle_send_request_error.
    (ks_hkp_get): Ditto.
    (ks_hkp_put): Ditto.
    --
    
    GnuPG-bug-id: 4175
    Signed-off-by: Werner Koch <wk at gnupg.org>

diff --git a/dirmngr/ks-engine-hkp.c b/dirmngr/ks-engine-hkp.c
index 1b14a2e..149de94 100644
--- a/dirmngr/ks-engine-hkp.c
+++ b/dirmngr/ks-engine-hkp.c
@@ -1352,7 +1352,7 @@ send_request (ctrl_t ctrl, const char *request, const char *hostportstr,
    down to zero. */
 static int
 handle_send_request_error (ctrl_t ctrl, gpg_error_t err, const char *request,
-                           unsigned int *tries_left)
+                           unsigned int http_status, unsigned int *tries_left)
 {
   int retry = 0;
 
@@ -1395,6 +1395,27 @@ handle_send_request_error (ctrl_t ctrl, gpg_error_t err, const char *request,
         }
       break;
 
+    case GPG_ERR_NO_DATA:
+      {
+        switch (http_status)
+          {
+          case 502: /* Bad Gateway  */
+            log_info ("marking host dead due to a %u (%s)\n",
+                      http_status, http_status2string (http_status));
+            if (mark_host_dead (request) && *tries_left)
+              retry = 1;
+            break;
+
+          case 503: /* Service Unavailable */
+          case 504: /* Gateway Timeout    */
+            log_info ("selecting a different host due to a %u (%s)",
+                      http_status, http_status2string (http_status));
+            retry = 1;
+            break;
+          }
+      }
+      break;
+
     default:
       break;
     }
@@ -1423,6 +1444,7 @@ ks_hkp_search (ctrl_t ctrl, parsed_uri_t uri, const char *pattern,
   int reselect;
   unsigned int httpflags;
   char *httphost = NULL;
+  unsigned int http_status;
   unsigned int tries = SEND_REQUEST_RETRIES;
 
   *r_fp = NULL;
@@ -1504,12 +1526,14 @@ ks_hkp_search (ctrl_t ctrl, parsed_uri_t uri, const char *pattern,
 
   /* Send the request.  */
   err = send_request (ctrl, request, hostport, httphost, httpflags,
-                      NULL, NULL, &fp, r_http_status);
-  if (handle_send_request_error (ctrl, err, request, &tries))
+                      NULL, NULL, &fp, &http_status);
+  if (handle_send_request_error (ctrl, err, request, http_status, &tries))
     {
       reselect = 1;
       goto again;
     }
+  if (r_http_status)
+    *r_http_status = http_status;
   if (err)
     {
       if (gpg_err_code (err) == GPG_ERR_NO_DATA)
@@ -1571,6 +1595,7 @@ ks_hkp_get (ctrl_t ctrl, parsed_uri_t uri, const char *keyspec, estream_t *r_fp)
   int reselect;
   char *httphost = NULL;
   unsigned int httpflags;
+  unsigned int http_status;
   unsigned int tries = SEND_REQUEST_RETRIES;
 
   *r_fp = NULL;
@@ -1643,8 +1668,8 @@ ks_hkp_get (ctrl_t ctrl, parsed_uri_t uri, const char *keyspec, estream_t *r_fp)
 
   /* Send the request.  */
   err = send_request (ctrl, request, hostport, httphost, httpflags,
-                      NULL, NULL, &fp, NULL);
-  if (handle_send_request_error (ctrl, err, request, &tries))
+                      NULL, NULL, &fp, &http_status);
+  if (handle_send_request_error (ctrl, err, request, http_status, &tries))
     {
       reselect = 1;
       goto again;
@@ -1718,6 +1743,7 @@ ks_hkp_put (ctrl_t ctrl, parsed_uri_t uri, const void *data, size_t datalen)
   int reselect;
   char *httphost = NULL;
   unsigned int httpflags;
+  unsigned int http_status;
   unsigned int tries = SEND_REQUEST_RETRIES;
 
   parm.datastring = NULL;
@@ -1756,8 +1782,8 @@ ks_hkp_put (ctrl_t ctrl, parsed_uri_t uri, const void *data, size_t datalen)
 
   /* Send the request.  */
   err = send_request (ctrl, request, hostport, httphost, 0,
-                      put_post_cb, &parm, &fp, NULL);
-  if (handle_send_request_error (ctrl, err, request, &tries))
+                      put_post_cb, &parm, &fp, &http_status);
+  if (handle_send_request_error (ctrl, err, request, http_status, &tries))
     {
       reselect = 1;
       goto again;

commit dc61f4ecea5c9815cb00aeb25439978337c1fd64
Author: Werner Koch <wk at gnupg.org>
Date:   Tue Dec 11 13:24:21 2018 +0100

    dirmngr: New function http_status2string.
    
    * dirmngr/http.c (http_status2string): New.
    --
    
    Right now only the standard 5xx codes.
    
    Signed-off-by: Werner Koch <wk at gnupg.org>

diff --git a/dirmngr/http.c b/dirmngr/http.c
index 6c183b2..eb7d99a 100644
--- a/dirmngr/http.c
+++ b/dirmngr/http.c
@@ -3663,3 +3663,27 @@ http_prepare_redirect (http_redir_info_t *info, unsigned int status_code,
   *r_url = newurl;
   return 0;
 }
+
+
+/* Return string describing the http STATUS.  Returns an empty string
+ * for an unknown status.  */
+const char *
+http_status2string (unsigned int status)
+{
+  switch (status)
+    {
+    case 500: return "Internal Server Error";
+    case 501: return "Not Implemented";
+    case 502: return "Bad Gateway";
+    case 503: return "Service Unavailable";
+    case 504: return "Gateway Timeout";
+    case 505: return "HTTP version Not Supported";
+    case 506: return "Variant Also Negation";
+    case 507: return "Insufficient Storage";
+    case 508: return "Loop Detected";
+    case 510: return "Not Extended";
+    case 511: return "Network Authentication Required";
+    }
+
+  return "";
+}
diff --git a/dirmngr/http.h b/dirmngr/http.h
index 4755b92..492e867 100644
--- a/dirmngr/http.h
+++ b/dirmngr/http.h
@@ -197,5 +197,7 @@ gpg_error_t http_prepare_redirect (http_redir_info_t *info,
                                    unsigned int status_code,
                                    const char *location, char **r_url);
 
+const char *http_status2string (unsigned int status);
+
 
 #endif /*GNUPG_COMMON_HTTP_H*/

-----------------------------------------------------------------------

Summary of changes:
 dirmngr/http.c          | 24 ++++++++++++++++++++++++
 dirmngr/http.h          |  2 ++
 dirmngr/ks-engine-hkp.c | 40 +++++++++++++++++++++++++++++++++-------
 3 files changed, 59 insertions(+), 7 deletions(-)


hooks/post-receive
-- 
The GNU Privacy Guard
http://git.gnupg.org




More information about the Gnupg-commits mailing list