RRSIGs: parse epoch timestamp too
According to RFC4034 the timestamp in RRSIG may also be an EPOCH. Check for this when parsing. Knot DNS zone dumps contain timestamp RRSIG, this makes those parseable by Go DNS.
This commit is contained in:
parent
c174304212
commit
ef732d1050
|
@ -817,7 +817,7 @@ func TestDigit(t *testing.T) {
|
|||
func TestParseRRSIGTimestamp(t *testing.T) {
|
||||
tests := map[string]bool{
|
||||
`miek.nl. IN RRSIG SOA 8 2 43200 20140210031301 20140111031301 12051 miek.nl. MVZUyrYwq0iZhMFDDnVXD2BvuNiUJjSYlJAgzyAE6CF875BMvvZa+Sb0 RlSCL7WODQSQHhCx/fegHhVVF+Iz8N8kOLrmXD1+jO3Bm6Prl5UhcsPx WTBsg/kmxbp8sR1kvH4oZJtVfakG3iDerrxNaf0sQwhZzyfJQAqpC7pcBoc=`: true,
|
||||
// `miek.nl. IN RRSIG SOA 8 2 43200 315565800 4102477800 12051 miek.nl. MVZUyrYwq0iZhMFDDnVXD2BvuNiUJjSYlJAgzyAE6CF875BMvvZa+Sb0 RlSCL7WODQSQHhCx/fegHhVVF+Iz8N8kOLrmXD1+jO3Bm6Prl5UhcsPx WTBsg/kmxbp8sR1kvH4oZJtVfakG3iDerrxNaf0sQwhZzyfJQAqpC7pcBoc=`:true,
|
||||
`miek.nl. IN RRSIG SOA 8 2 43200 315565800 4102477800 12051 miek.nl. MVZUyrYwq0iZhMFDDnVXD2BvuNiUJjSYlJAgzyAE6CF875BMvvZa+Sb0 RlSCL7WODQSQHhCx/fegHhVVF+Iz8N8kOLrmXD1+jO3Bm6Prl5UhcsPx WTBsg/kmxbp8sR1kvH4oZJtVfakG3iDerrxNaf0sQwhZzyfJQAqpC7pcBoc=`: true,
|
||||
}
|
||||
for r, _ := range tests {
|
||||
_, e := NewRR(r)
|
||||
|
@ -827,4 +827,3 @@ func TestParseRRSIGTimestamp(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
10
zscan_rr.go
10
zscan_rr.go
|
@ -1168,14 +1168,24 @@ func setRRSIG(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) {
|
|||
<-c // _BLANK
|
||||
l = <-c
|
||||
if i, err := StringToTime(l.token); err != nil {
|
||||
// Try to see if all numeric and use it as epoch
|
||||
if i, err := strconv.ParseInt(l.token, 10, 64); err == nil {
|
||||
// TODO(miek): error out on > MAX_UINT32, same below
|
||||
rr.Expiration = uint32(i)
|
||||
} else {
|
||||
return nil, &ParseError{f, "bad RRSIG Expiration", l}, ""
|
||||
}
|
||||
} else {
|
||||
rr.Expiration = i
|
||||
}
|
||||
<-c // _BLANK
|
||||
l = <-c
|
||||
if i, err := StringToTime(l.token); err != nil {
|
||||
if i, err := strconv.ParseInt(l.token, 10, 64); err == nil {
|
||||
rr.Inception = uint32(i)
|
||||
} else {
|
||||
return nil, &ParseError{f, "bad RRSIG Inception", l}, ""
|
||||
}
|
||||
} else {
|
||||
rr.Inception = i
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue