Parse dynamic update RR in presentation format
Don't panic when encountering dynamic update RRs in zonefiles. There are some other failure cases when parsing, those will be fixed in subsequent commits. Closes #110
This commit is contained in:
parent
a2ad8f8ac5
commit
cbb9881e96
|
@ -1173,6 +1173,7 @@ func TestTxtLong(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Basically, don't crash.
|
||||||
func TestMalformedPackets(t *testing.T) {
|
func TestMalformedPackets(t *testing.T) {
|
||||||
var packets = []string{
|
var packets = []string{
|
||||||
"0021641c0000000100000000000078787878787878787878787303636f6d0000100001",
|
"0021641c0000000100000000000078787878787878787878787303636f6d0000100001",
|
||||||
|
@ -1192,9 +1193,7 @@ func TestMalformedPackets(t *testing.T) {
|
||||||
|
|
||||||
func TestDynamicUpdateParsing(t *testing.T) {
|
func TestDynamicUpdateParsing(t *testing.T) {
|
||||||
prefix := "example.com. IN "
|
prefix := "example.com. IN "
|
||||||
// TODO(miek): extend to all types.
|
for _, typ := range TypeToString {
|
||||||
//for _, typ := range TypeToString {
|
|
||||||
for _, typ := range []string{"PTR", "A"} {
|
|
||||||
r, e := NewRR(prefix + typ)
|
r, e := NewRR(prefix + typ)
|
||||||
if e != nil {
|
if e != nil {
|
||||||
t.Log("failure to parse: " + prefix + typ)
|
t.Log("failure to parse: " + prefix + typ)
|
||||||
|
|
48
zscan_rr.go
48
zscan_rr.go
|
@ -296,6 +296,9 @@ func setNS(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
|
|
||||||
l := <-c
|
l := <-c
|
||||||
rr.Ns = l.token
|
rr.Ns = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.Ns = o
|
rr.Ns = o
|
||||||
return rr, nil
|
return rr, nil
|
||||||
|
@ -339,6 +342,9 @@ func setNSAPPTR(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
|
|
||||||
l := <-c
|
l := <-c
|
||||||
rr.Ptr = l.token
|
rr.Ptr = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.Ptr = o
|
rr.Ptr = o
|
||||||
return rr, nil
|
return rr, nil
|
||||||
|
@ -359,6 +365,9 @@ func setRP(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
|
|
||||||
l := <-c
|
l := <-c
|
||||||
rr.Mbox = l.token
|
rr.Mbox = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.Mbox = o
|
rr.Mbox = o
|
||||||
} else {
|
} else {
|
||||||
|
@ -393,6 +402,9 @@ func setMR(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
|
|
||||||
l := <-c
|
l := <-c
|
||||||
rr.Mr = l.token
|
rr.Mr = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.Mr = o
|
rr.Mr = o
|
||||||
return rr, nil
|
return rr, nil
|
||||||
|
@ -413,6 +425,9 @@ func setMB(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
|
|
||||||
l := <-c
|
l := <-c
|
||||||
rr.Mb = l.token
|
rr.Mb = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.Mb = o
|
rr.Mb = o
|
||||||
return rr, nil
|
return rr, nil
|
||||||
|
@ -433,6 +448,9 @@ func setMG(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
|
|
||||||
l := <-c
|
l := <-c
|
||||||
rr.Mg = l.token
|
rr.Mg = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.Mg = o
|
rr.Mg = o
|
||||||
return rr, nil
|
return rr, nil
|
||||||
|
@ -466,6 +484,9 @@ func setMINFO(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
|
|
||||||
l := <-c
|
l := <-c
|
||||||
rr.Rmail = l.token
|
rr.Rmail = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.Rmail = o
|
rr.Rmail = o
|
||||||
} else {
|
} else {
|
||||||
|
@ -500,6 +521,9 @@ func setMF(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
|
|
||||||
l := <-c
|
l := <-c
|
||||||
rr.Mf = l.token
|
rr.Mf = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.Mf = o
|
rr.Mf = o
|
||||||
return rr, nil
|
return rr, nil
|
||||||
|
@ -520,6 +544,9 @@ func setMD(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
|
|
||||||
l := <-c
|
l := <-c
|
||||||
rr.Md = l.token
|
rr.Md = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.Md = o
|
rr.Md = o
|
||||||
return rr, nil
|
return rr, nil
|
||||||
|
@ -657,6 +684,9 @@ func setCNAME(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
|
|
||||||
l := <-c
|
l := <-c
|
||||||
rr.Target = l.token
|
rr.Target = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.Target = o
|
rr.Target = o
|
||||||
return rr, nil
|
return rr, nil
|
||||||
|
@ -677,6 +707,9 @@ func setDNAME(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
|
|
||||||
l := <-c
|
l := <-c
|
||||||
rr.Target = l.token
|
rr.Target = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.Target = o
|
rr.Target = o
|
||||||
return rr, nil
|
return rr, nil
|
||||||
|
@ -697,6 +730,9 @@ func setSOA(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
|
|
||||||
l := <-c
|
l := <-c
|
||||||
rr.Ns = l.token
|
rr.Ns = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
<-c // _BLANK
|
<-c // _BLANK
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.Ns = o
|
rr.Ns = o
|
||||||
|
@ -901,6 +937,9 @@ func setTALINK(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
|
|
||||||
l := <-c
|
l := <-c
|
||||||
rr.PreviousName = l.token
|
rr.PreviousName = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.PreviousName = o
|
rr.PreviousName = o
|
||||||
} else {
|
} else {
|
||||||
|
@ -1247,6 +1286,9 @@ func setNSEC(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
|
||||||
|
|
||||||
l := <-c
|
l := <-c
|
||||||
rr.NextDomain = l.token
|
rr.NextDomain = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil, l.comment
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.NextDomain = o
|
rr.NextDomain = o
|
||||||
} else {
|
} else {
|
||||||
|
@ -2004,6 +2046,9 @@ func setLP(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
<-c // _BLANK
|
<-c // _BLANK
|
||||||
l = <-c // _STRING
|
l = <-c // _STRING
|
||||||
rr.Fqdn = l.token
|
rr.Fqdn = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.Fqdn = o
|
rr.Fqdn = o
|
||||||
return rr, nil
|
return rr, nil
|
||||||
|
@ -2086,6 +2131,9 @@ func setPX(h RR_Header, c chan lex, o, f string) (RR, *ParseError) {
|
||||||
<-c // _BLANK
|
<-c // _BLANK
|
||||||
l = <-c // _STRING
|
l = <-c // _STRING
|
||||||
rr.Map822 = l.token
|
rr.Map822 = l.token
|
||||||
|
if l.length == 0 {
|
||||||
|
return rr, nil
|
||||||
|
}
|
||||||
if l.token == "@" {
|
if l.token == "@" {
|
||||||
rr.Map822 = o
|
rr.Map822 = o
|
||||||
return rr, nil
|
return rr, nil
|
||||||
|
|
Loading…
Reference in New Issue