NSEC and NSEC3 parsing support
Needs some work, but it is working
This commit is contained in:
parent
412a3a3f3e
commit
b03994e257
1
types.go
1
types.go
|
@ -552,7 +552,6 @@ func (rr *RR_LOC) String() string {
|
|||
return rr.Hdr.String() + "TODO"
|
||||
}
|
||||
|
||||
// DNSSEC types
|
||||
type RR_RRSIG struct {
|
||||
Hdr RR_Header
|
||||
TypeCovered uint16
|
||||
|
|
83
types.rl
83
types.rl
|
@ -75,6 +75,30 @@
|
|||
z.Push(rr)
|
||||
}
|
||||
|
||||
action setDLV {
|
||||
rdf := fields(data[mark:p], 4)
|
||||
rr := new(RR_DLV)
|
||||
rr.Hdr = *hdr
|
||||
rr.Hdr.Rrtype = TypeDLV
|
||||
rr.KeyTag = uint16(atoi(rdf[0]))
|
||||
rr.Algorithm = uint8(atoi(rdf[1]))
|
||||
rr.DigestType = uint8(atoi(rdf[2]))
|
||||
rr.Digest = rdf[3]
|
||||
z.Push(rr)
|
||||
}
|
||||
|
||||
action setTA {
|
||||
rdf := fields(data[mark:p], 4)
|
||||
rr := new(RR_TA)
|
||||
rr.Hdr = *hdr
|
||||
rr.Hdr.Rrtype = TypeTA
|
||||
rr.KeyTag = uint16(atoi(rdf[0]))
|
||||
rr.Algorithm = uint8(atoi(rdf[1]))
|
||||
rr.DigestType = uint8(atoi(rdf[2]))
|
||||
rr.Digest = rdf[3]
|
||||
z.Push(rr)
|
||||
}
|
||||
|
||||
action setDNSKEY {
|
||||
rdf := fields(data[mark:p], 4)
|
||||
rr := new(RR_DNSKEY)
|
||||
|
@ -104,4 +128,63 @@
|
|||
z.Push(rr)
|
||||
}
|
||||
|
||||
action setNSEC {
|
||||
rdf := fields(data[mark:p], 0)
|
||||
rr := new(RR_NSEC)
|
||||
rr.Hdr = *hdr
|
||||
rr.Hdr.Rrtype = TypeNSEC
|
||||
rr.NextDomain = rdf[0]
|
||||
rr.TypeBitMap = make([]uint16, len(rdf)-1)
|
||||
// Fill the Type Bit Map
|
||||
for i := 1; i < len(rdf); i++ {
|
||||
// Check if its there in the map TODO
|
||||
rr.TypeBitMap[i-1] = Str_rr[rdf[i]]
|
||||
}
|
||||
z.Push(rr)
|
||||
}
|
||||
|
||||
action setNSEC3 {
|
||||
rdf := fields(data[mark:p], 0)
|
||||
rr := new(RR_NSEC3)
|
||||
rr.Hdr = *hdr
|
||||
rr.Hdr.Rrtype = TypeNSEC3
|
||||
rr.Hash = uint8(atoi(rdf[0]))
|
||||
rr.Flags = uint8(atoi(rdf[1]))
|
||||
rr.Iterations = uint16(atoi(rdf[2]))
|
||||
rr.SaltLength = uint8(atoi(rdf[3]))
|
||||
rr.Salt = rdf[4]
|
||||
rr.HashLength = uint8(atoi(rdf[4]))
|
||||
rr.NextDomain = rdf[5]
|
||||
rr.TypeBitMap = make([]uint16, len(rdf)-6)
|
||||
// Fill the Type Bit Map
|
||||
for i := 6; i < len(rdf); i++ {
|
||||
// Check if its there in the map TODO
|
||||
rr.TypeBitMap[i-6] = Str_rr[rdf[i]]
|
||||
}
|
||||
z.Push(rr)
|
||||
}
|
||||
|
||||
action setNSEC3PARAM {
|
||||
}
|
||||
|
||||
action setPRT {
|
||||
}
|
||||
|
||||
action setTXT {
|
||||
}
|
||||
|
||||
action setSRV {
|
||||
}
|
||||
|
||||
action setCERT {
|
||||
}
|
||||
|
||||
action setPTR {
|
||||
}
|
||||
|
||||
action setDNAME {
|
||||
}
|
||||
|
||||
action setNAPTR {
|
||||
}
|
||||
}%%
|
||||
|
|
14
zparse.rl
14
zparse.rl
|
@ -16,12 +16,13 @@ const _IOBUF = 3e7
|
|||
|
||||
// Return the rdata fields as a string slice.
|
||||
// All starting whitespace is deleted.
|
||||
// If i is 0 no space are deleted from the final rdfs
|
||||
func fields(s string, i int) (rdf []string) {
|
||||
rdf = strings.Fields(strings.TrimSpace(s))
|
||||
for i, _ := range rdf {
|
||||
rdf[i] = strings.TrimSpace(rdf[i])
|
||||
}
|
||||
if len(rdf) > i {
|
||||
if i > 0 && len(rdf) > i {
|
||||
// The last rdf contained embedded spaces, glue it back together.
|
||||
for j := i; j < len(rdf); j++ {
|
||||
rdf[i-1] += rdf[j]
|
||||
|
@ -104,14 +105,25 @@ func Zparse(q io.Reader) (z *Zone, err os.Error) {
|
|||
|
||||
rhs = (
|
||||
( 'A'i rdata ) %setA
|
||||
| ( 'PTR'i rdata ) %setPTR
|
||||
| ( 'TXT'i rdata ) %setTXT
|
||||
| ( 'SRV'i rdata ) %setSRV
|
||||
| ( 'CERT'i rdata ) %setCERT
|
||||
| ( 'NAPTR'i rdata ) %setNAPTR
|
||||
| ( 'AAAA'i rdata ) %setAAAA
|
||||
| ( 'SOA'i rdata ) %setSOA
|
||||
| ( 'CNAME'i rdata ) %setCNAME
|
||||
| ( 'DNAME'i rdata ) %setDNAME
|
||||
| ( 'NS'i rdata ) %setNS
|
||||
| ( 'MX'i rdata ) %setMX
|
||||
| ( 'DS'i rdata ) %setDS
|
||||
| ( 'DLV'i rdata ) %setDLV
|
||||
| ( 'TA'i rdata ) %setTA
|
||||
| ( 'DNSKEY'i rdata ) %setDNSKEY
|
||||
| ( 'RRSIG'i rdata ) %setRRSIG
|
||||
| ( 'NSEC'i rdata ) %setNSEC
|
||||
| ( 'NSEC3'i rdata ) %setNSEC3
|
||||
| ( 'NSEC3PARAM'i rdata ) %setNSEC3PARAM
|
||||
);
|
||||
|
||||
rr = lhs rhs;
|
||||
|
|
Loading…
Reference in New Issue