Add a the 'redirect' parameter to 'is_transport_allowed' which allows callers to query if a transport protocol can be used on a redirect. Signed-off-by: Brandon Williams <bmwill@xxxxxxxxxx> --- http.c | 8 ++++---- transport.c | 6 +++--- transport.h | 7 ++++--- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/http.c b/http.c index fee128b..d31ded8 100644 --- a/http.c +++ b/http.c @@ -725,13 +725,13 @@ static CURL *get_curl_handle(void) curl_easy_setopt(result, CURLOPT_POST301, 1); #endif #if LIBCURL_VERSION_NUM >= 0x071304 - if (is_transport_allowed("http")) + if (is_transport_allowed("http", 1)) allowed_protocols |= CURLPROTO_HTTP; - if (is_transport_allowed("https")) + if (is_transport_allowed("https", 1)) allowed_protocols |= CURLPROTO_HTTPS; - if (is_transport_allowed("ftp")) + if (is_transport_allowed("ftp", 1)) allowed_protocols |= CURLPROTO_FTP; - if (is_transport_allowed("ftps")) + if (is_transport_allowed("ftps", 1)) allowed_protocols |= CURLPROTO_FTPS; curl_easy_setopt(result, CURLOPT_REDIR_PROTOCOLS, allowed_protocols); #else diff --git a/transport.c b/transport.c index 186de9a..7c4a757 100644 --- a/transport.c +++ b/transport.c @@ -723,7 +723,7 @@ static enum protocol_allow_config get_protocol_config(const char *type) return PROTOCOL_ALLOW_USER_ONLY; } -int is_transport_allowed(const char *type) +int is_transport_allowed(const char *type, int redirect) { const struct string_list *whitelist = protocol_whitelist(); if (whitelist) @@ -735,7 +735,7 @@ int is_transport_allowed(const char *type) case PROTOCOL_ALLOW_NEVER: return 0; case PROTOCOL_ALLOW_USER_ONLY: - return git_env_bool("GIT_PROTOCOL_FROM_USER", 1); + return redirect ? 0 : git_env_bool("GIT_PROTOCOL_FROM_USER", 1); } die("BUG: invalid protocol_allow_config type"); @@ -743,7 +743,7 @@ int is_transport_allowed(const char *type) void transport_check_allowed(const char *type) { - if (!is_transport_allowed(type)) + if (!is_transport_allowed(type, 0)) die("transport '%s' not allowed", type); } diff --git a/transport.h b/transport.h index f4998bc..4bcf5d3 100644 --- a/transport.h +++ b/transport.h @@ -153,10 +153,11 @@ extern int transport_summary_width(const struct ref *refs); struct transport *transport_get(struct remote *, const char *); /* - * Check whether a transport is allowed by the environment. Type should - * generally be the URL scheme, as described in Documentation/git.txt + * Check whether a transport is allowed by the environment. Setting 'redirect' + * can be used to query if the transport can be used in a redirect. Type + * should generally be the URL scheme, as described in Documentation/git.txt */ -int is_transport_allowed(const char *type); +int is_transport_allowed(const char *type, int redirect); /* * Check whether a transport is allowed by the environment, -- 2.8.0.rc3.226.g39d4020