aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2023-09-19 14:14:01 +0000
committerWerner Koch <[email protected]>2023-09-19 14:14:01 +0000
commit9fe73df21a6c0172a01a5728644f07d27fb8f28b (patch)
tree87975f88404b8dfbcc48a8a084aa3df88c27c339
parentdirmngr: Implement automatic proxy detection on Windows. (diff)
downloadgnupg-9fe73df21a6c0172a01a5728644f07d27fb8f28b.tar.gz
gnupg-9fe73df21a6c0172a01a5728644f07d27fb8f28b.zip
dirmngr: Improve error codes returned from http fetching.
* dirmngr/ks-engine-http.c (ks_http_fetch): Return better error codes. * dirmngr/ks-engine-hkp.c (send_request): Ditto. * dirmngr/t-http.c (main): New option --try-proxy.
-rw-r--r--dirmngr/ks-engine-hkp.c17
-rw-r--r--dirmngr/ks-engine-http.c12
-rw-r--r--dirmngr/t-http.c5
3 files changed, 20 insertions, 14 deletions
diff --git a/dirmngr/ks-engine-hkp.c b/dirmngr/ks-engine-hkp.c
index ef7a71700..79bcc3e60 100644
--- a/dirmngr/ks-engine-hkp.c
+++ b/dirmngr/ks-engine-hkp.c
@@ -1294,18 +1294,17 @@ send_request (ctrl_t ctrl, const char *request, const char *hostportstr,
}
goto once_more;
- case 501:
- err = gpg_error (GPG_ERR_NOT_IMPLEMENTED);
- goto leave;
-
- case 413: /* Payload too large */
- err = gpg_error (GPG_ERR_TOO_LARGE);
- goto leave;
-
default:
log_error (_("error accessing '%s': http status %u\n"),
request, http_get_status_code (http));
- err = gpg_error (GPG_ERR_NO_DATA);
+ switch (http_get_status_code (http))
+ {
+ case 401: err = gpg_error (GPG_ERR_NO_AUTH); break;
+ case 407: err = gpg_error (GPG_ERR_BAD_AUTH); break;
+ case 413: err = gpg_error (GPG_ERR_TOO_LARGE); break;
+ case 501: err = gpg_error (GPG_ERR_NOT_IMPLEMENTED); break;
+ default: err = gpg_error (GPG_ERR_NO_DATA); break;
+ }
goto leave;
}
diff --git a/dirmngr/ks-engine-http.c b/dirmngr/ks-engine-http.c
index c96625d1f..f5a6e4625 100644
--- a/dirmngr/ks-engine-http.c
+++ b/dirmngr/ks-engine-http.c
@@ -192,14 +192,16 @@ ks_http_fetch (ctrl_t ctrl, const char *url, unsigned int flags,
}
goto once_more;
- case 413: /* Payload too large */
- err = gpg_error (GPG_ERR_TOO_LARGE);
- goto leave;
-
default:
log_error (_("error accessing '%s': http status %u\n"),
url, http_get_status_code (http));
- err = gpg_error (GPG_ERR_NO_DATA);
+ switch (http_get_status_code (http))
+ {
+ case 401: err = gpg_error (GPG_ERR_NO_AUTH); break;
+ case 407: err = gpg_error (GPG_ERR_BAD_AUTH); break;
+ case 413: err = gpg_error (GPG_ERR_TOO_LARGE); break;
+ default: err = gpg_error (GPG_ERR_NO_DATA); break;
+ }
goto leave;
}
diff --git a/dirmngr/t-http.c b/dirmngr/t-http.c
index 75874df37..985ab8100 100644
--- a/dirmngr/t-http.c
+++ b/dirmngr/t-http.c
@@ -288,6 +288,11 @@ main (int argc, char **argv)
my_http_flags |= HTTP_FLAG_FORCE_TOR;
argc--; argv++;
}
+ else if (!strcmp (*argv, "--try-proxy"))
+ {
+ my_http_flags |= HTTP_FLAG_TRY_PROXY;
+ argc--; argv++;
+ }
else if (!strcmp (*argv, "--no-out"))
{
no_out = 1;