From acf7dea68fe6ace110221faa26c2503a1ea432ce Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Mon, 14 Oct 2019 12:09:43 -0600 Subject: caddyhttp: host labels placeholders endianness from right->left https://caddy.community/t/labeln-placeholder-endian-issue/5366 (I thought we had this before but it must have gotten lost somewhere) --- modules/caddyhttp/replacer.go | 10 +++++++--- modules/caddyhttp/replacer_test.go | 12 ++++++++++-- 2 files changed, 17 insertions(+), 5 deletions(-) (limited to 'modules') diff --git a/modules/caddyhttp/replacer.go b/modules/caddyhttp/replacer.go index 205e4ed..db329be 100644 --- a/modules/caddyhttp/replacer.go +++ b/modules/caddyhttp/replacer.go @@ -146,14 +146,18 @@ func addHTTPVarsToReplacer(repl caddy.Replacer, req *http.Request, w http.Respon if err != nil { return "", false } - hostLabels := strings.Split(req.Host, ".") + reqHost, _, err := net.SplitHostPort(req.Host) + if err != nil { + reqHost = req.Host // OK; assume there was no port + } + hostLabels := strings.Split(reqHost, ".") if idx < 0 { return "", false } - if idx >= len(hostLabels) { + if idx > len(hostLabels) { return "", true } - return hostLabels[idx], true + return hostLabels[len(hostLabels)-idx-1], true } // path parts diff --git a/modules/caddyhttp/replacer_test.go b/modules/caddyhttp/replacer_test.go index d10c74f..b355c7f 100644 --- a/modules/caddyhttp/replacer_test.go +++ b/modules/caddyhttp/replacer_test.go @@ -34,8 +34,8 @@ func TestHTTPVarReplacement(t *testing.T) { addHTTPVarsToReplacer(repl, req, res) for i, tc := range []struct { - input string - expect string + input string + expect string }{ { input: "{http.request.scheme}", @@ -61,6 +61,14 @@ func TestHTTPVarReplacement(t *testing.T) { input: "{http.request.remote.port}", expect: "1234", }, + { + input: "{http.request.host.labels.0}", + expect: "com", + }, + { + input: "{http.request.host.labels.1}", + expect: "example", + }, } { actual := repl.ReplaceAll(tc.input, "") if actual != tc.expect { -- cgit v1.2.3