Allow quotes backslashes in names

This commit is contained in:
Miek Gieben 2012-01-27 23:37:57 +01:00
parent 99d2040a29
commit a61018d628
2 changed files with 26 additions and 10 deletions

View File

@ -1,6 +1,7 @@
package dns
import (
"fmt"
"testing"
)
@ -28,3 +29,19 @@ func TestCompareLabels(t *testing.T) {
t.Fail()
}
}
func TestSplitLabels(t *testing.T) {
s1 := "www.miek.nl."
s2 := "www.miek.nl"
s3 := `www\.miek.nl.`
s4 := `www\\.miek.nl.`
println(len(SplitLabels(s1)))
fmt.Printf("%v\n", SplitLabels(s1))
println(len(SplitLabels(s2)))
fmt.Printf("%v\n", SplitLabels(s2))
println(len(SplitLabels(s3)))
fmt.Printf("%v\n", SplitLabels(s3))
println(len(SplitLabels(s4)))
fmt.Printf("%v\n", SplitLabels(s4))
}

View File

@ -4,25 +4,24 @@ package dns
// SplitLabels splits a domainname string into its labels.
func SplitLabels(s string) []string {
last := byte('.')
k := 0
labels := make([]string, 0)
escape := false
last := byte('.')
lastlast := byte('.')
s = Fqdn(s) // Make fully qualified
for i := 0; i < len(s); i++ {
escape = false
if s[i] == '\\' {
escape = true
}
if s[i] == '.' {
if last == '\\' && !escape {
// do nothing
break
if last == '\\' {
if lastlast != '\\' {
// do nothing
continue
}
}
labels = append(labels, s[k:i])
k = i + 1 // + dot
}
last = s[i]
lastlast = last
last = s[i]
}
return labels
}