From b417c42bc2d9d3aebb64012763810337025d39ae Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Sun, 8 Jan 2012 14:53:55 +0100 Subject: [PATCH] Fix handling of dnames Add support for escaped dots. Only thing to fix is the fqdn-ness of user defined names. --- defaults.go | 9 ++++++++- parse_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/defaults.go b/defaults.go index 9fdc8fad..540f41ea 100644 --- a/defaults.go +++ b/defaults.go @@ -198,7 +198,7 @@ func (dns *Msg) IsEdns0() (ok bool) { // IsDomainName checks if s is a valid domainname, it returns // true and a length, when a domain name is valid. When false -// is return the length isn't specified. +// ithe returned length isn't specified. func IsDomainName(s string) (bool, int) { // copied from net package. // See RFC 1035, RFC 3696. if len(s) == 0 { @@ -224,6 +224,8 @@ func IsDomainName(s string) (bool, int) { // copied from net package. ok = true partlen++ n++ + case c == '\\': + // Ok case '0' <= c && c <= '9': // fine partlen++ @@ -239,6 +241,11 @@ func IsDomainName(s string) (bool, int) { // copied from net package. if last == '.' || last == '-' { return false, 0 } + if last == '\\' { // Ok, escaped dot. + partlen++ + n++ + break + } if partlen > 63 || partlen == 0 { return false, 0 } diff --git a/parse_test.go b/parse_test.go index 5fa138ab..18eb9592 100644 --- a/parse_test.go +++ b/parse_test.go @@ -130,6 +130,30 @@ z3.miek.nl. IN NSEC miek.nl. TXT RRSIG NSEC` } } +func TestDomainName(t *testing.T) { + tests := []string{"r\\.gieben.miek.nl."} + dbuff := make([]byte, 40) + + + for _, ts := range tests { + if _, ok := PackDomainName(ts, dbuff, 0); !ok { + t.Log("Not a valid domain name") + t.Fail() + continue + } + n, _, ok := UnpackDomainName(dbuff, 0) + if !ok { + t.Log("Failed to unpack packed domain name") + t.Fail() + continue; + } + if ts != n { + t.Logf("Must be equal: in: %s, out: %s\n", ts, n) + t.Fail() + } + } +} + func TestParseBrace(t *testing.T) { tests := map[string]string{ "(miek.nl.) 3600 IN A 127.0.0.1": "miek.nl.\t3600\tIN\tA\t127.0.0.1",