From 06e3205787bb74962ecfcef4072424d02098eb7e Mon Sep 17 00:00:00 2001 From: Jay McCarthy Date: Fri, 20 Oct 2017 11:08:13 -0400 Subject: [PATCH] Fix PR1859 --- pkgs/net-test/tests/net/url.rkt | 8 +++++ racket/collects/net/url.rkt | 56 +++++++++++++++++++-------------- 2 files changed, 40 insertions(+), 24 deletions(-) diff --git a/pkgs/net-test/tests/net/url.rkt b/pkgs/net-test/tests/net/url.rkt index d98f8dbbc3..6d6994bb20 100644 --- a/pkgs/net-test/tests/net/url.rkt +++ b/pkgs/net-test/tests/net/url.rkt @@ -35,6 +35,14 @@ ("http_proxy" . ,http-proxy) ("https_proxy" . ,https-proxy) ("git_proxy" . ,git-proxy) + + ("PLT_HTTP_PROXY" . ,plt-http-proxy) + ("PLT_HTTPS_PROXY" . ,plt-https-proxy) + ("PLT_GIT_PROXY" . ,plt-git-proxy) + ("HTTP_PROXY" . ,http-proxy) + ("HTTPS_PROXY" . ,https-proxy) + ("GIT_PROXY" . ,git-proxy) + ("plt_no_proxy" . ,plt-no-proxy) ("no_proxy" . ,no-proxy))))) (put! (car var.val) (cdr var.val))) diff --git a/racket/collects/net/url.rkt b/racket/collects/net/url.rkt index 3b393e2a70..9d3466568c 100644 --- a/racket/collects/net/url.rkt +++ b/racket/collects/net/url.rkt @@ -37,32 +37,40 @@ ;; proxying-scheme is therefore always "http" (no "s") -- although the meaning thereof depends on the ;; proxied-scheme (define (env->c-p-s-entries . envarses) - (define (inr envars) - (if (null? envars) - null - (let ((proxied-scheme (match (car envars) - [(regexp #rx"plt_(.*)_proxy" (list _ scm)) scm] - [(regexp #rx"(.*)_proxy" (list _ scm)) scm]))) - (match (getenv (car envars)) - [#f (env->c-p-s-entries (cdr envars))] - ["" null] - [(app string->url - (url (and proxying-scheme "http") #f (? string? host) (? integer? port) - _ (list) (list) #f)) - (list (list proxied-scheme host port))] - [(app string->url - (url (and proxying-scheme "http") _ (? string? host) (? integer? port) - _ _ _ _)) - (log-net/url-warning "~s contains somewhat invalid proxy URL format" (car envars)) - (list (list proxied-scheme host port))] - [inv (log-net/url-error "~s contained invalid proxy URL format: ~s" (car envars) inv) - null])))) - (apply append (map inr envarses))) + (define (in1 proxied-scheme envvar) + (match (getenv envvar) + [#f #f] + ["" null] + [(app string->url + (url (and proxying-scheme "http") #f (? string? host) (? integer? port) + _ (list) (list) #f)) + (list (list proxied-scheme host port))] + [(app string->url + (url (and proxying-scheme "http") _ (? string? host) (? integer? port) + _ _ _ _)) + (log-net/url-warning "~s contains somewhat invalid proxy URL format" envvar) + (list (list proxied-scheme host port))] + [inv + (log-net/url-error "~s contained invalid proxy URL format: ~s" envvar inv) + null])) + (define (inr proxied-scheme envars) + (match envars + ['() null] + [(cons envvar more-envars) + (or (in1 proxied-scheme envvar) + (in1 proxied-scheme (string-upcase envvar)) + (inr proxied-scheme more-envars))])) + (define (inrs spec) + (inr (first spec) (rest spec))) + (append-map inrs envarses)) (define current-proxy-servers-promise - (make-parameter (delay/sync (env->c-p-s-entries '("plt_http_proxy" "http_proxy") - '("plt_https_proxy" "https_proxy") - '("plt_git_proxy" "git_proxy"))))) + (make-parameter + (delay/sync + (env->c-p-s-entries + '("http" "plt_http_proxy" "http_proxy" "all_proxy") + '("https" "plt_https_proxy" "https_proxy" "all_proxy") + '("git" "plt_git_proxy" "git_proxy" "all_proxy"))))) (define (proxy-servers-guard v) (unless (and (list? v)