diff options
author | Matthew Holt <[email protected]> | 2019-10-14 12:09:43 -0600 |
---|---|---|
committer | Matthew Holt <[email protected]> | 2019-10-14 12:09:43 -0600 |
commit | acf7dea68fe6ace110221faa26c2503a1ea432ce (patch) | |
tree | 7be6cea0e3e62a2e42a8b141517164e8dc4f3b9c | |
parent | bc738991b6234bf334855e1396919e79ef9791b8 (diff) | |
download | caddy-acf7dea68fe6ace110221faa26c2503a1ea432ce.tar.gz caddy-acf7dea68fe6ace110221faa26c2503a1ea432ce.zip |
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)
-rw-r--r-- | modules/caddyhttp/replacer.go | 10 | ||||
-rw-r--r-- | modules/caddyhttp/replacer_test.go | 12 |
2 files changed, 17 insertions, 5 deletions
diff --git a/modules/caddyhttp/replacer.go b/modules/caddyhttp/replacer.go index 205e4ed5f..db329be52 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 d10c74f93..b355c7fc3 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, "<empty>") if actual != tc.expect { |