http: drop support for curl < 7.19.4

In the last commit we dropped support for curl < 7.16.0, let's
continue that and drop support for versions older than 7.19.3. This
allows us to simplify the code by getting rid of some "#ifdef"'s.

Git was broken with vanilla curl < 7.19.4 from v2.12.0 until
v2.15.0. Compiling with it was broken by using CURLPROTO_* outside any
"#ifdef" in aeae4db174 (http: create function to get curl allowed
protocols, 2016-12-14), and fixed in v2.15.0 in f18777ba6e (http: fix
handling of missing CURLPROTO_*, 2017-08-11).

It's unclear how much anyone was impacted by that in practice, since
as noted in [1] RHEL versions using curl older than that still
compiled, because RedHat backported some features. Perhaps other
vendors did the same.

Still, it's one datapoint indicating that it wasn't in active use at
the time. That (the v2.12.0 release) was in Feb 24, 2017, with v2.15.0
on Oct 30, 2017, it's now mid-2021.

1. http://lore.kernel.org/git/c8a2716d-76ac-735c-57f9-175ca3acbcb0@jupiterrise.com;
   followed-up by f18777ba6e (http: fix handling of missing CURLPROTO_*,
   2017-08-11)

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King 2021-07-30 19:59:44 +02:00 committed by Junio C Hamano
parent 013c7e2b07
commit 644de29e22
2 changed files with 0 additions and 54 deletions

50
http.c
View File

@ -28,9 +28,7 @@ static int min_curl_sessions = 1;
static int curl_session_count; static int curl_session_count;
static int max_requests = -1; static int max_requests = -1;
static CURLM *curlm; static CURLM *curlm;
#ifndef NO_CURL_EASY_DUPHANDLE
static CURL *curl_default; static CURL *curl_default;
#endif
#define PREV_BUF_SIZE 4096 #define PREV_BUF_SIZE 4096
@ -440,24 +438,8 @@ static void init_curl_http_auth(CURL *result)
credential_fill(&http_auth); credential_fill(&http_auth);
#if LIBCURL_VERSION_NUM >= 0x071301
curl_easy_setopt(result, CURLOPT_USERNAME, http_auth.username); curl_easy_setopt(result, CURLOPT_USERNAME, http_auth.username);
curl_easy_setopt(result, CURLOPT_PASSWORD, http_auth.password); curl_easy_setopt(result, CURLOPT_PASSWORD, http_auth.password);
#else
{
static struct strbuf up = STRBUF_INIT;
/*
* Note that we assume we only ever have a single set of
* credentials in a given program run, so we do not have
* to worry about updating this buffer, only setting its
* initial value.
*/
if (!up.len)
strbuf_addf(&up, "%s:%s",
http_auth.username, http_auth.password);
curl_easy_setopt(result, CURLOPT_USERPWD, up.buf);
}
#endif
} }
/* *var must be free-able */ /* *var must be free-able */
@ -471,22 +453,10 @@ static void var_override(const char **var, char *value)
static void set_proxyauth_name_password(CURL *result) static void set_proxyauth_name_password(CURL *result)
{ {
#if LIBCURL_VERSION_NUM >= 0x071301
curl_easy_setopt(result, CURLOPT_PROXYUSERNAME, curl_easy_setopt(result, CURLOPT_PROXYUSERNAME,
proxy_auth.username); proxy_auth.username);
curl_easy_setopt(result, CURLOPT_PROXYPASSWORD, curl_easy_setopt(result, CURLOPT_PROXYPASSWORD,
proxy_auth.password); proxy_auth.password);
#else
struct strbuf s = STRBUF_INIT;
strbuf_addstr_urlencode(&s, proxy_auth.username,
is_rfc3986_unreserved);
strbuf_addch(&s, ':');
strbuf_addstr_urlencode(&s, proxy_auth.password,
is_rfc3986_unreserved);
curl_proxyuserpwd = strbuf_detach(&s, NULL);
curl_easy_setopt(result, CURLOPT_PROXYUSERPWD, curl_proxyuserpwd);
#endif
} }
static void init_curl_proxy_auth(CURL *result) static void init_curl_proxy_auth(CURL *result)
@ -748,7 +718,6 @@ void setup_curl_trace(CURL *handle)
curl_easy_setopt(handle, CURLOPT_DEBUGDATA, NULL); curl_easy_setopt(handle, CURLOPT_DEBUGDATA, NULL);
} }
#ifdef CURLPROTO_HTTP
static long get_curl_allowed_protocols(int from_user) static long get_curl_allowed_protocols(int from_user)
{ {
long allowed_protocols = 0; long allowed_protocols = 0;
@ -764,7 +733,6 @@ static long get_curl_allowed_protocols(int from_user)
return allowed_protocols; return allowed_protocols;
} }
#endif
#if LIBCURL_VERSION_NUM >=0x072f00 #if LIBCURL_VERSION_NUM >=0x072f00
static int get_curl_http_version_opt(const char *version_string, long *opt) static int get_curl_http_version_opt(const char *version_string, long *opt)
@ -906,19 +874,11 @@ static CURL *get_curl_handle(void)
} }
curl_easy_setopt(result, CURLOPT_MAXREDIRS, 20); curl_easy_setopt(result, CURLOPT_MAXREDIRS, 20);
#if LIBCURL_VERSION_NUM >= 0x071301
curl_easy_setopt(result, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL); curl_easy_setopt(result, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);
#elif LIBCURL_VERSION_NUM >= 0x071101
curl_easy_setopt(result, CURLOPT_POST301, 1);
#endif
#ifdef CURLPROTO_HTTP
curl_easy_setopt(result, CURLOPT_REDIR_PROTOCOLS, curl_easy_setopt(result, CURLOPT_REDIR_PROTOCOLS,
get_curl_allowed_protocols(0)); get_curl_allowed_protocols(0));
curl_easy_setopt(result, CURLOPT_PROTOCOLS, curl_easy_setopt(result, CURLOPT_PROTOCOLS,
get_curl_allowed_protocols(-1)); get_curl_allowed_protocols(-1));
#else
warning(_("Protocol restrictions not supported with cURL < 7.19.4"));
#endif
if (getenv("GIT_CURL_VERBOSE")) if (getenv("GIT_CURL_VERBOSE"))
http_trace_curl_no_data(); http_trace_curl_no_data();
setup_curl_trace(result); setup_curl_trace(result);
@ -1012,11 +972,9 @@ static CURL *get_curl_handle(void)
die("Invalid proxy URL '%s'", curl_http_proxy); die("Invalid proxy URL '%s'", curl_http_proxy);
curl_easy_setopt(result, CURLOPT_PROXY, proxy_auth.host); curl_easy_setopt(result, CURLOPT_PROXY, proxy_auth.host);
#if LIBCURL_VERSION_NUM >= 0x071304
var_override(&curl_no_proxy, getenv("NO_PROXY")); var_override(&curl_no_proxy, getenv("NO_PROXY"));
var_override(&curl_no_proxy, getenv("no_proxy")); var_override(&curl_no_proxy, getenv("no_proxy"));
curl_easy_setopt(result, CURLOPT_NOPROXY, curl_no_proxy); curl_easy_setopt(result, CURLOPT_NOPROXY, curl_no_proxy);
#endif
} }
init_curl_proxy_auth(result); init_curl_proxy_auth(result);
@ -1147,9 +1105,7 @@ void http_init(struct remote *remote, const char *url, int proactive_auth)
ssl_cert_password_required = 1; ssl_cert_password_required = 1;
} }
#ifndef NO_CURL_EASY_DUPHANDLE
curl_default = get_curl_handle(); curl_default = get_curl_handle();
#endif
} }
void http_cleanup(void) void http_cleanup(void)
@ -1167,9 +1123,7 @@ void http_cleanup(void)
} }
active_queue_head = NULL; active_queue_head = NULL;
#ifndef NO_CURL_EASY_DUPHANDLE
curl_easy_cleanup(curl_default); curl_easy_cleanup(curl_default);
#endif
curl_multi_cleanup(curlm); curl_multi_cleanup(curlm);
curl_global_cleanup(); curl_global_cleanup();
@ -1248,11 +1202,7 @@ struct active_request_slot *get_active_slot(void)
} }
if (slot->curl == NULL) { if (slot->curl == NULL) {
#ifdef NO_CURL_EASY_DUPHANDLE
slot->curl = get_curl_handle();
#else
slot->curl = curl_easy_duphandle(curl_default); slot->curl = curl_easy_duphandle(curl_default);
#endif
curl_session_count++; curl_session_count++;
} }

4
http.h
View File

@ -12,10 +12,6 @@
#define DEFAULT_MAX_REQUESTS 5 #define DEFAULT_MAX_REQUESTS 5
#if LIBCURL_VERSION_NUM == 0x071000
#define NO_CURL_EASY_DUPHANDLE
#endif
/* /*
* CURLOPT_USE_SSL was known as CURLOPT_FTP_SSL up to 7.16.4, * CURLOPT_USE_SSL was known as CURLOPT_FTP_SSL up to 7.16.4,
* and the constants were known as CURLFTPSSL_* * and the constants were known as CURLFTPSSL_*