diff --git a/plugin/rewrite/cname_target.go b/plugin/rewrite/cname_target.go index 73a28190e..5623e3a2b 100644 --- a/plugin/rewrite/cname_target.go +++ b/plugin/rewrite/cname_target.go @@ -7,6 +7,7 @@ import ( "strconv" "strings" + "github.com/coredns/coredns/plugin" "github.com/coredns/coredns/plugin/pkg/log" "github.com/coredns/coredns/plugin/pkg/upstream" "github.com/coredns/coredns/request" @@ -139,6 +140,10 @@ func newCNAMERule(nextAction string, args ...string) (Rule, error) { } else { return nil, fmt.Errorf("too few (%d) arguments for a cname rule", len(args)) } + if rewriteType == ExactMatch { + paramFromTarget = plugin.Name(paramFromTarget).Normalize() + paramToTarget = plugin.Name(paramToTarget).Normalize() + } rule := cnameTargetRule{ rewriteType: rewriteType, paramFromTarget: paramFromTarget, diff --git a/plugin/rewrite/cname_target_test.go b/plugin/rewrite/cname_target_test.go index c656a6bd8..543fc40fb 100644 --- a/plugin/rewrite/cname_target_test.go +++ b/plugin/rewrite/cname_target_test.go @@ -76,7 +76,7 @@ func TestCNameTargetRewrite(t *testing.T) { args []string expectedType reflect.Type }{ - {[]string{"continue", "cname", "exact", "def.example.com.", "xyz.example.com."}, reflect.TypeFor[*cnameTargetRule]()}, + {[]string{"continue", "cname", "exact", "def.example.com", "xyz.example.com"}, reflect.TypeFor[*cnameTargetRule]()}, {[]string{"continue", "cname", "prefix", "chat.openai.com", "bard.google.com"}, reflect.TypeFor[*cnameTargetRule]()}, {[]string{"continue", "cname", "suffix", "uvw.", "xyz."}, reflect.TypeFor[*cnameTargetRule]()}, {[]string{"continue", "cname", "substring", "efgh", "zzzz.www"}, reflect.TypeFor[*cnameTargetRule]()}, @@ -297,3 +297,20 @@ func TestNewCNAMERuleLargeRegex(t *testing.T) { t.Errorf("Expected 'too long' error, got: %v", err) } } + +func TestNewCNAMERuleNormalization(t *testing.T) { + rule, err := newCNAMERule("stop", "exact", "newyork.foo.com", "vpce-123.amazonaws.com") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + cnameRule, ok := rule.(*cnameTargetRule) + if !ok { + t.Fatalf("expected *cnameTargetRule, got %T", rule) + } + if cnameRule.paramFromTarget != "newyork.foo.com." { + t.Errorf("expected fromTarget to be normalized to 'newyork.foo.com.', got %q", cnameRule.paramFromTarget) + } + if cnameRule.paramToTarget != "vpce-123.amazonaws.com." { + t.Errorf("expected toTarget to be normalized to 'vpce-123.amazonaws.com.', got %q", cnameRule.paramToTarget) + } +}