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).Pref = uint16(num[0])
|
||||||
r.(*RR_MX).Mx = txt[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;
|
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)
|
cs, p, pe, eof := 0, 0, len(data), len(data)
|
||||||
j := 0; j = j // Needed for compile.
|
j := 0; j = j // Needed for compile.
|
||||||
k := 0; k = k // "
|
k := 0; k = k // "
|
||||||
mark := 0
|
mark := 0
|
||||||
hdr := new(RR_Header)
|
hdr := new(RR_Header)
|
||||||
txt := make([]string, 10)
|
txt := make([]string, 7)
|
||||||
num := make([]int, 10)
|
num := make([]int, 7)
|
||||||
|
|
||||||
%%{
|
%%{
|
||||||
action mark { mark = p }
|
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;
|
qclass = ('IN'i|'CS'i|'CH'i|'HS'i|'ANY'i|'NONE'i) %qclass;
|
||||||
ttl = digit+ >mark;
|
ttl = digit+ >mark;
|
||||||
blank = [ \t]+ %mark;
|
b = [ \t]+ %mark;
|
||||||
qname = [a-zA-Z0-9.\\]+ %qname;
|
qname = [a-zA-Z0-9.\\]+ %qname;
|
||||||
textblank = [a-zA-Z0-9.\\ ]+ $1 %0 %textblank;
|
tb = [a-zA-Z0-9.\\ ]+ $1 %0 %textblank;
|
||||||
text = [a-zA-Z0-9.\\]+ $1 %0 %text;
|
t = [a-zA-Z0-9.\\]+ $1 %0 %text;
|
||||||
number = [0-9]+ $1 %0 %number;
|
n = [0-9]+ $1 %0 %number;
|
||||||
|
|
||||||
lhs = qname? blank %defTtl (
|
lhs = qname? b %defTtl (
|
||||||
(ttl %setTtl blank (qclass blank)?)
|
(ttl %setTtl b (qclass b)?)
|
||||||
| (qclass blank (ttl %setTtl blank)?)
|
| (qclass b (ttl %setTtl b)?)
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
# RDATA definitions
|
# RDATA definitions
|
||||||
|
@ -62,11 +62,14 @@ func zparse(data string) (r RR, err os.Error) {
|
||||||
|
|
||||||
# RR definitions
|
# RR definitions
|
||||||
rhs = (
|
rhs = (
|
||||||
('A'i %qtype blank text) %rdata_a
|
('A'i %qtype b t) %rdata_a
|
||||||
| ('NS'i %qtype blank text) %rdata_ns
|
| ('NS'i %qtype b t) %rdata_ns
|
||||||
| ('CNAME'i %qtype blank text) %rdata_cname
|
| ('CNAME'i %qtype b t) %rdata_cname
|
||||||
| ('SOA'i %qtype blank text blank text blank number blank number blank number blank number blank number) %rdata_soa
|
| ('SOA'i %qtype b tb t b n b n b n b n b n) %rdata_soa
|
||||||
| ('MX'i %qtype blank number blank text) %rdata_mx
|
| ('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;
|
rr = lhs rhs;
|
||||||
|
|
Loading…
Reference in New Issue