mirror of
https://github.com/kubernetes-sigs/external-dns.git
synced 2025-08-06 09:36:58 +02:00
fix: IDNA awareness in the zone finder (#5705)
Signed-off-by: Hiroki Hanada <hiroki-hanada@cybozu.co.jp>
This commit is contained in:
parent
468fb66758
commit
498bb87623
@ -20,7 +20,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"golang.org/x/net/idna"
|
|
||||||
|
"sigs.k8s.io/external-dns/internal/idna"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ZoneIDName map[string]string
|
type ZoneIDName map[string]string
|
||||||
@ -48,7 +49,7 @@ func (z ZoneIDName) FindZone(hostname string) (string, string) {
|
|||||||
if strings.Contains(label, "_") {
|
if strings.Contains(label, "_") {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
convertedLabel, err := idna.Lookup.ToUnicode(label)
|
convertedLabel, err := idna.Profile.ToUnicode(label)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("Failed to convert label %q of hostname %q to its Unicode form: %v", label, hostname, err)
|
log.Warnf("Failed to convert label %q of hostname %q to its Unicode form: %v", label, hostname, err)
|
||||||
convertedLabel = label
|
convertedLabel = label
|
||||||
|
@ -34,6 +34,7 @@ func TestZoneIDName(t *testing.T) {
|
|||||||
z.Add("123123", "_metadata.example.com")
|
z.Add("123123", "_metadata.example.com")
|
||||||
z.Add("1231231", "_foo._metadata.example.com")
|
z.Add("1231231", "_foo._metadata.example.com")
|
||||||
z.Add("456456", "_metadata.エイミー.みんな")
|
z.Add("456456", "_metadata.エイミー.みんな")
|
||||||
|
z.Add("123412", "*.example.com")
|
||||||
|
|
||||||
assert.Equal(t, ZoneIDName{
|
assert.Equal(t, ZoneIDName{
|
||||||
"123456": "qux.baz",
|
"123456": "qux.baz",
|
||||||
@ -42,6 +43,7 @@ func TestZoneIDName(t *testing.T) {
|
|||||||
"123123": "_metadata.example.com",
|
"123123": "_metadata.example.com",
|
||||||
"1231231": "_foo._metadata.example.com",
|
"1231231": "_foo._metadata.example.com",
|
||||||
"456456": "_metadata.エイミー.みんな",
|
"456456": "_metadata.エイミー.みんな",
|
||||||
|
"123412": "*.example.com",
|
||||||
}, z)
|
}, z)
|
||||||
|
|
||||||
// simple entry in a domain
|
// simple entry in a domain
|
||||||
@ -83,8 +85,12 @@ func TestZoneIDName(t *testing.T) {
|
|||||||
assert.Equal(t, "_foo._metadata.example.com", zoneName)
|
assert.Equal(t, "_foo._metadata.example.com", zoneName)
|
||||||
assert.Equal(t, "1231231", zoneID)
|
assert.Equal(t, "1231231", zoneID)
|
||||||
|
|
||||||
hook := testutils.LogsUnderTestWithLogLevel(log.WarnLevel, t)
|
zoneID, zoneName = z.FindZone("*.example.com")
|
||||||
_, _ = z.FindZone("???")
|
assert.Equal(t, "*.example.com", zoneName)
|
||||||
|
assert.Equal(t, "123412", zoneID)
|
||||||
|
|
||||||
testutils.TestHelperLogContains("Failed to convert label \"???\" of hostname \"???\" to its Unicode form: idna: disallowed rune U+003F", hook, t)
|
hook := testutils.LogsUnderTestWithLogLevel(log.WarnLevel, t)
|
||||||
|
_, _ = z.FindZone("xn--not-a-valid-punycode")
|
||||||
|
|
||||||
|
testutils.TestHelperLogContains("Failed to convert label \"xn--not-a-valid-punycode\" of hostname \"xn--not-a-valid-punycode\" to its Unicode form: idna: invalid label", hook, t)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user