From c654398981efb6e82e50ff0c6b9ba6f990e9872f Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Mon, 11 Nov 2024 15:29:51 +0700 Subject: [PATCH] cmd/cli: make widcard rules match case-insensitively Domain name comparisons are done in case-insensitive manner. See: https://datatracker.ietf.org/doc/html/rfc1034#section-3.1 --- cmd/cli/dns_proxy.go | 5 +++-- cmd/cli/dns_proxy_test.go | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cmd/cli/dns_proxy.go b/cmd/cli/dns_proxy.go index 0da0b1d..6611975 100644 --- a/cmd/cli/dns_proxy.go +++ b/cmd/cli/dns_proxy.go @@ -630,14 +630,15 @@ func canonicalName(fqdn string) string { return q } -// wildcardMatches reports whether string str matches the wildcard pattern. +// wildcardMatches reports whether string str matches the wildcard pattern in case-insensitive manner. func wildcardMatches(wildcard, str string) bool { // Wildcard match. - wildCardParts := strings.Split(wildcard, "*") + wildCardParts := strings.Split(strings.ToLower(wildcard), "*") if len(wildCardParts) != 2 { return false } + str = strings.ToLower(str) switch { case len(wildCardParts[0]) > 0 && len(wildCardParts[1]) > 0: // Domain must match both prefix and suffix. diff --git a/cmd/cli/dns_proxy_test.go b/cmd/cli/dns_proxy_test.go index cb2e459..877fb71 100644 --- a/cmd/cli/dns_proxy_test.go +++ b/cmd/cli/dns_proxy_test.go @@ -30,6 +30,7 @@ func Test_wildcardMatches(t *testing.T) { {"domain - suffix not match other", "suffix.*", "suffix1.windscribe.com", false}, {"domain - both", "suffix.*.windscribe.com", "suffix.anything.windscribe.com", true}, {"domain - both not match", "suffix.*.windscribe.com", "suffix1.suffix.windscribe.com", false}, + {"domain - case-insensitive", "*.WINDSCRIBE.com", "anything.windscribe.com", true}, {"mac - prefix", "*:98:05:b4:2b", "d4:67:98:05:b4:2b", true}, {"mac - prefix not match other s", "*:98:05:b4:2b", "0d:ba:54:09:94:2c", false}, {"mac - prefix not match s in name", "*:98:05:b4:2b", "e4:67:97:05:b4:2b", false},