Add DNSSEC parsing
This commit is contained in:
parent
6c4045c3a0
commit
f759f6f8d9
26
types.rl
26
types.rl
|
@ -28,4 +28,30 @@
|
|||
r.(*RR_MX).Pref = uint16(num[0])
|
||||
r.(*RR_MX).Mx = txt[0]
|
||||
}
|
||||
action rdata_ds {
|
||||
r.(*RR_DS).Hdr = *hdr;
|
||||
r.(*RR_DS).KeyTag = uint16(num[0])
|
||||
r.(*RR_DS).Algorithm = uint8(num[1])
|
||||
r.(*RR_DS).DigestType = uint8(num[2])
|
||||
r.(*RR_DS).Digest = txt[0]
|
||||
}
|
||||
action rdata_dnskey {
|
||||
r.(*RR_DNSKEY).Hdr = *hdr;
|
||||
r.(*RR_DNSKEY).Flags = uint16(num[0])
|
||||
r.(*RR_DNSKEY).Protocol = uint8(num[1])
|
||||
r.(*RR_DNSKEY).Algorithm = uint8(num[2])
|
||||
r.(*RR_DNSKEY).PublicKey = txt[0]
|
||||
}
|
||||
action rdata_rrsig {
|
||||
r.(*RR_RRSIG).Hdr = *hdr;
|
||||
r.(*RR_RRSIG).TypeCovered = uint16(num[0])
|
||||
r.(*RR_RRSIG).Algorithm = uint8(num[1])
|
||||
r.(*RR_RRSIG).Labels = uint8(num[2])
|
||||
r.(*RR_RRSIG).OrigTtl = uint32(num[3])
|
||||
r.(*RR_RRSIG).Expiration = uint32(num[4])
|
||||
r.(*RR_RRSIG).Inception = uint32(num[5])
|
||||
r.(*RR_RRSIG).KeyTag = uint16(num[6])
|
||||
r.(*RR_RRSIG).SignerName = txt[0]
|
||||
r.(*RR_RRSIG).Signature = txt[1]
|
||||
}
|
||||
}%%
|
||||
|
|
33
zparse.rl
33
zparse.rl
|
@ -15,14 +15,14 @@ import (
|
|||
write data;
|
||||
}%%
|
||||
|
||||
func zparse(data string) (r RR, err os.Error) {
|
||||
func Zparse(data string) (r RR, err os.Error) {
|
||||
cs, p, pe, eof := 0, 0, len(data), len(data)
|
||||
j := 0; j = j // Needed for compile.
|
||||
k := 0; k = k // "
|
||||
mark := 0
|
||||
hdr := new(RR_Header)
|
||||
txt := make([]string, 10)
|
||||
num := make([]int, 10)
|
||||
txt := make([]string, 7)
|
||||
num := make([]int, 7)
|
||||
|
||||
%%{
|
||||
action mark { mark = p }
|
||||
|
@ -46,15 +46,15 @@ func zparse(data string) (r RR, err os.Error) {
|
|||
|
||||
qclass = ('IN'i|'CS'i|'CH'i|'HS'i|'ANY'i|'NONE'i) %qclass;
|
||||
ttl = digit+ >mark;
|
||||
blank = [ \t]+ %mark;
|
||||
b = [ \t]+ %mark;
|
||||
qname = [a-zA-Z0-9.\\]+ %qname;
|
||||
textblank = [a-zA-Z0-9.\\ ]+ $1 %0 %textblank;
|
||||
text = [a-zA-Z0-9.\\]+ $1 %0 %text;
|
||||
number = [0-9]+ $1 %0 %number;
|
||||
tb = [a-zA-Z0-9.\\ ]+ $1 %0 %textblank;
|
||||
t = [a-zA-Z0-9.\\]+ $1 %0 %text;
|
||||
n = [0-9]+ $1 %0 %number;
|
||||
|
||||
lhs = qname? blank %defTtl (
|
||||
(ttl %setTtl blank (qclass blank)?)
|
||||
| (qclass blank (ttl %setTtl blank)?)
|
||||
lhs = qname? b %defTtl (
|
||||
(ttl %setTtl b (qclass b)?)
|
||||
| (qclass b (ttl %setTtl b)?)
|
||||
)?;
|
||||
|
||||
# RDATA definitions
|
||||
|
@ -62,11 +62,14 @@ func zparse(data string) (r RR, err os.Error) {
|
|||
|
||||
# RR definitions
|
||||
rhs = (
|
||||
('A'i %qtype blank text) %rdata_a
|
||||
| ('NS'i %qtype blank text) %rdata_ns
|
||||
| ('CNAME'i %qtype blank text) %rdata_cname
|
||||
| ('SOA'i %qtype blank text blank text blank number blank number blank number blank number blank number) %rdata_soa
|
||||
| ('MX'i %qtype blank number blank text) %rdata_mx
|
||||
('A'i %qtype b t) %rdata_a
|
||||
| ('NS'i %qtype b t) %rdata_ns
|
||||
| ('CNAME'i %qtype b t) %rdata_cname
|
||||
| ('SOA'i %qtype b tb t b n b n b n b n b n) %rdata_soa
|
||||
| ('MX'i %qtype b n b t) %rdata_mx
|
||||
| ('DS'i %qtype b n b n b n b tb) %rdata_ds
|
||||
| ('DNSKEY'i %qtype b n b n b n b tb) %rdata_dnskey
|
||||
| ('RRSIG'i %qtype b n b n b n b n b n b n b n b t b tb) %rdata_rrsig
|
||||
);
|
||||
|
||||
rr = lhs rhs;
|
||||
|
|
Loading…
Reference in New Issue