Allow quotes backslashes in names
This commit is contained in:
parent
99d2040a29
commit
a61018d628
|
@ -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))
|
||||
}
|
||||
|
|
19
labels.go
19
labels.go
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue