http: add custom hostname to IP address resolutions
Libcurl has a CURLOPT_RESOLVE easy option that allows
the result of hostname resolution in the following
format to be passed:
[+]HOST:PORT:ADDRESS[,ADDRESS]
This way, redirects and everything operating against the
HOST+PORT will use the provided ADDRESS(s).
The following format is also allowed to stop using
hostname resolutions that have already been passed:
-HOST:PORT
See https://curl.se/libcurl/c/CURLOPT_RESOLVE.html for
more details.
Let's add a corresponding "http.curloptResolve" config
option that takes advantage of CURLOPT_RESOLVE.
Each value configured for the "http.curloptResolve" key
is passed "as is" to libcurl through CURLOPT_RESOLVE, so
it should be in one of the above 2 formats. This keeps
the implementation simple and makes us consistent with
libcurl's CURLOPT_RESOLVE, and with curl's corresponding
`--resolve` command line option.
The implementation uses CURLOPT_RESOLVE only in
get_active_slot() which is called by all the HTTP
request sending functions.
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Christian Couder committedMay 16, 2022 at 10:38 UTC511cfd3bffa685fda0e7c25bfa08082aa0de3a30
3 files changed+41
Documentation/config/http.txt
+16
index 7003661c0d..179d03e57b 100644--- a/Documentation/config/http.txt+++ b/Documentation/config/http.txt@@ -98,6 +98,22 @@ http.version:: - HTTP/2 - HTTP/1.1+http.curloptResolve::+ Hostname resolution information that will be used first by+ libcurl when sending HTTP requests. This information should+ be in one of the following formats:++ - [+]HOST:PORT:ADDRESS[,ADDRESS]+ - -HOST:PORT++++The first format redirects all requests to the given `HOST:PORT`+to the provided `ADDRESS`(s). The second format clears all+previous config values for that `HOST:PORT` combination. To+allow easy overriding of all the settings inherited from the+system config, an empty value will reset all resolution+information to the empty list.+ http.sslVersion:: The SSL version to use when negotiating an SSL connection, if you want to force the default. The available and default version