Adds the support for IPv6 in the TCP HostSNI matcher
This commit is contained in:
parent
e053eb6f17
commit
1a6dfe1f6b
3 changed files with 28 additions and 4 deletions
|
@ -63,6 +63,20 @@ func Test_addRoute(t *testing.T) {
|
||||||
"http://localhost/foo": http.StatusOK,
|
"http://localhost/foo": http.StatusOK,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
desc: "Host IPv4",
|
||||||
|
rule: "Host(`127.0.0.1`)",
|
||||||
|
expected: map[string]int{
|
||||||
|
"http://127.0.0.1/foo": http.StatusOK,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Host IPv6",
|
||||||
|
rule: "Host(`10::10`)",
|
||||||
|
expected: map[string]int{
|
||||||
|
"http://10::10/foo": http.StatusOK,
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
desc: "Non-ASCII Host",
|
desc: "Non-ASCII Host",
|
||||||
rule: "Host(`locàlhost`)",
|
rule: "Host(`locàlhost`)",
|
||||||
|
|
|
@ -315,7 +315,7 @@ func alpn(tree *matchersTree, protos ...string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var almostFQDN = regexp.MustCompile(`^[[:alnum:]\.-]+$`)
|
var hostOrIP = regexp.MustCompile(`^[[:alnum:]\.\-\:]+$`)
|
||||||
|
|
||||||
// hostSNI checks if the SNI Host of the connection match the matcher host.
|
// hostSNI checks if the SNI Host of the connection match the matcher host.
|
||||||
func hostSNI(tree *matchersTree, hosts ...string) error {
|
func hostSNI(tree *matchersTree, hosts ...string) error {
|
||||||
|
@ -329,8 +329,8 @@ func hostSNI(tree *matchersTree, hosts ...string) error {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if !almostFQDN.MatchString(host) {
|
if !hostOrIP.MatchString(host) {
|
||||||
return fmt.Errorf("invalid value for \"HostSNI\" matcher, %q is not a valid hostname", host)
|
return fmt.Errorf("invalid value for \"HostSNI\" matcher, %q is not a valid hostname or IP", host)
|
||||||
}
|
}
|
||||||
|
|
||||||
hosts[i] = strings.ToLower(host)
|
hosts[i] = strings.ToLower(host)
|
||||||
|
|
|
@ -740,7 +740,7 @@ func Test_HostSNI(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
desc: "Matching hosts",
|
desc: "Matching hosts",
|
||||||
ruleHosts: []string{"foobar"},
|
ruleHosts: []string{"foobar", "foo-bar.baz"},
|
||||||
serverName: "foobar",
|
serverName: "foobar",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -748,6 +748,16 @@ func Test_HostSNI(t *testing.T) {
|
||||||
ruleHosts: []string{"foo.bar"},
|
ruleHosts: []string{"foo.bar"},
|
||||||
serverName: "foo.bar",
|
serverName: "foo.bar",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
desc: "Matching IPv4",
|
||||||
|
ruleHosts: []string{"127.0.0.1"},
|
||||||
|
serverName: "127.0.0.1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "Matching IPv6",
|
||||||
|
ruleHosts: []string{"10::10"},
|
||||||
|
serverName: "10::10",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range testCases {
|
for _, test := range testCases {
|
||||||
|
|
Loading…
Reference in a new issue