Parsings works - clean up the tests
RR_DNSKEY has now a * Read (to read an RR) * ReadPrivateKey (to read an private key file) Together you have enough data to sign and verify DNSSEC data. I'm thinking about a better API, but I think one will emerge whenever I complete the zone parsin.
This commit is contained in:
parent
8c595abe56
commit
fd0064c805
|
@ -340,7 +340,7 @@ func (s *RR_RRSIG) Verify(k *RR_DNSKEY, rrset RRset) bool {
|
|||
case ECC:
|
||||
case ECCGOST:
|
||||
default:
|
||||
// Unknown Alg
|
||||
// Unknown alg
|
||||
return false
|
||||
}
|
||||
return err == nil
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package dns
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
"strings"
|
||||
)
|
||||
|
@ -109,7 +108,6 @@ func TestSignVerify(t *testing.T) {
|
|||
sig.SignerName = key.Hdr.Name
|
||||
sig.Algorithm = RSASHA256
|
||||
|
||||
// zal wel goed zijn
|
||||
if !sig.Sign(privkey, []RR{soa}) {
|
||||
t.Log("Failure to sign the SOA record")
|
||||
t.Fail()
|
||||
|
@ -120,30 +118,25 @@ func TestSignVerify(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestKeyGenRSA(t *testing.T) {
|
||||
key := new(RR_DNSKEY)
|
||||
key.Hdr.Name = "miek.nl."
|
||||
key.Hdr.Rrtype = TypeDNSKEY
|
||||
key.Hdr.Class = ClassINET
|
||||
key.Hdr.Ttl = 3600
|
||||
key.Flags = 256
|
||||
key.Protocol = 3
|
||||
key.Algorithm = RSASHA256
|
||||
key.Generate(1024)
|
||||
fmt.Printf("%v\n", key)
|
||||
}
|
||||
func TestKeyGen(t *testing.T) {
|
||||
algs := []uint8{RSASHA256, ECDSAP256SHA256}
|
||||
bits := []int{1024, 256}
|
||||
|
||||
func TestKeyGenCurve(t *testing.T) {
|
||||
i := 0
|
||||
key := new(RR_DNSKEY)
|
||||
key.Hdr.Name = "miek.nl."
|
||||
key.Hdr.Name = "keygen.miek.nl."
|
||||
key.Hdr.Rrtype = TypeDNSKEY
|
||||
key.Hdr.Class = ClassINET
|
||||
key.Hdr.Ttl = 3600
|
||||
key.Flags = 256
|
||||
key.Protocol = 3
|
||||
key.Algorithm = ECDSAP256SHA256
|
||||
key.Generate(0)
|
||||
fmt.Printf("%v\n", key)
|
||||
for _, v := range algs {
|
||||
key.Algorithm = v
|
||||
key.Generate(bits[i])
|
||||
i++
|
||||
t.Logf("%s\n", key)
|
||||
}
|
||||
//Really hard to figure out what to check here... Parse it back to a proper key?
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -207,8 +200,7 @@ func TestTag(t *testing.T) {
|
|||
|
||||
tag := key.KeyTag()
|
||||
if tag != 12051 {
|
||||
t.Logf("%v\n", key)
|
||||
t.Logf("Wrong key tag: %d\n", tag)
|
||||
t.Logf("Wrong key tag: %d for key %v\n", tag, key)
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
|
36
keygen.go
36
keygen.go
|
@ -112,6 +112,23 @@ func (r *RR_DNSKEY) PrivateKeyString(p PrivateKey) (s string) {
|
|||
return
|
||||
}
|
||||
|
||||
func (k *RR_DNSKEY) Read(q io.Reader) os.Error {
|
||||
r, e := Zparse(q)
|
||||
if e != nil || r == nil {
|
||||
return e
|
||||
}
|
||||
if _, ok := r.(*RR_DNSKEY); !ok {
|
||||
panic("did not read a DNSKEY")
|
||||
}
|
||||
k1 := r.(*RR_DNSKEY)
|
||||
k.Hdr = k1.Hdr
|
||||
k.Flags = k1.Flags
|
||||
k.Protocol = k1.Protocol
|
||||
k.Algorithm = k1.Algorithm
|
||||
k.PublicKey = k1.PublicKey
|
||||
return nil
|
||||
}
|
||||
|
||||
func (k *RR_DNSKEY) ReadPrivateKey(q io.Reader) (PrivateKey, os.Error) {
|
||||
kv, _ := Kparse(q)
|
||||
if _, ok := kv["private-key-format"]; !ok {
|
||||
|
@ -120,14 +137,13 @@ func (k *RR_DNSKEY) ReadPrivateKey(q io.Reader) (PrivateKey, os.Error) {
|
|||
if kv["private-key-format"] != "v1.2" && kv["private-key-format"] != "v1.3" {
|
||||
return nil, ErrPrivKey
|
||||
}
|
||||
switch kv["algorithm"] {
|
||||
switch kv["algorithm"] {
|
||||
case "RSAMD5", "RSASHA1", "RSASHA256", "RSASHA512":
|
||||
return k.readPrivateKeyRSA(kv)
|
||||
case "ECDSAP256SHA256", "ECDSAP384SHA384":
|
||||
return k.readPrivateKeyECDSA(kv)
|
||||
}
|
||||
println("SOMETHING WRONG\n\n")
|
||||
return nil, ErrKey
|
||||
return nil, ErrPrivKey
|
||||
}
|
||||
|
||||
// Read a private key (file) string and create a public key. Return the private key.
|
||||
|
@ -145,12 +161,10 @@ func (k *RR_DNSKEY) readPrivateKeyRSA(kv map[string]string) (PrivateKey, os.Erro
|
|||
case "modulus":
|
||||
p.PublicKey.N = big.NewInt(0)
|
||||
p.PublicKey.N.SetBytes(v1)
|
||||
println("modulus",v)
|
||||
case "publicexponent":
|
||||
i := big.NewInt(0)
|
||||
i.SetBytes(v1)
|
||||
p.PublicKey.E = int(i.Int64()) // int64 should be large enough
|
||||
println("publicexponent",v)
|
||||
case "privateexponent":
|
||||
p.D = big.NewInt(0)
|
||||
p.D.SetBytes(v1)
|
||||
|
@ -165,20 +179,15 @@ func (k *RR_DNSKEY) readPrivateKeyRSA(kv map[string]string) (PrivateKey, os.Erro
|
|||
// not used in Go (yet)
|
||||
case "created", "publish", "activate":
|
||||
// not used in Go (yet)
|
||||
default:
|
||||
return nil, ErrKey
|
||||
}
|
||||
}
|
||||
if ! k.setPublicKeyRSA(p.PublicKey.E, p.PublicKey.N) {
|
||||
println("Failure to set")
|
||||
return nil, ErrKey
|
||||
}
|
||||
return p, nil
|
||||
}
|
||||
|
||||
func (k *RR_DNSKEY) readPrivateKeyECDSA(kv map[string]string) (PrivateKey, os.Error) {
|
||||
p := new(ecdsa.PrivateKey)
|
||||
p.D = big.NewInt(0)
|
||||
// Need to check if we have everything
|
||||
for k, v := range kv {
|
||||
switch k {
|
||||
case "privatekey:":
|
||||
|
@ -189,12 +198,7 @@ func (k *RR_DNSKEY) readPrivateKeyECDSA(kv map[string]string) (PrivateKey, os.Er
|
|||
p.D.SetBytes(v1)
|
||||
case "created:", "publish:", "activate:":
|
||||
/* not used in Go (yet) */
|
||||
default:
|
||||
return nil, ErrKey
|
||||
}
|
||||
}
|
||||
//if ! k.setPublicKeyRSA(p.PublicKey.E, p.PublicKey.N) {
|
||||
// return nil, ErrKey
|
||||
//}
|
||||
return p, nil
|
||||
}
|
||||
|
|
131
parse_test.go
131
parse_test.go
|
@ -1,77 +1,51 @@
|
|||
package dns
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"strings"
|
||||
"testing"
|
||||
"crypto/rsa"
|
||||
)
|
||||
|
||||
func TestPrivateKeyRead1(t *testing.T) {
|
||||
a := `Private-key-format: v1.3
|
||||
func TestSign(t *testing.T) {
|
||||
pub := "miek.nl. IN DNSKEY 256 3 5 AwEAAb+8lGNCxJgLS8rYVer6EnHVuIkQDghdjdtewDzU3G5R7PbMbKVRvH2Ma7pQyYceoaqWZQirSj72euPWfPxQnMy9ucCylA+FuH9cSjIcPf4PqJfdupHk9X6EBYjxrCLY4p1/yBwgyBIRJtZtAqM3ceAH2WovEJD6rTtOuHo5AluJ"
|
||||
|
||||
priv := `Private-key-format: v1.3
|
||||
Algorithm: 5 (RSASHA1)
|
||||
Modulus: vyVjCzz87g3rg9vDj1NJ1tlFP7lEY2pEQLkWGXAFuZM6Fw/bNmEH/z3ybDfsJqx4QQ6YZXN8V2kbzY7oX+tExf6AMiMIcKYzEGwg5xBYFh33du4G+6kE/VzG906ubpaIEnrZOMTdGqE7OwptAqrqXe4uGXY99ZqNdqutOKQyIzs=
|
||||
Modulus: v7yUY0LEmAtLythV6voScdW4iRAOCF2N217APNTcblHs9sxspVG8fYxrulDJhx6hqpZlCKtKPvZ649Z8/FCczL25wLKUD4W4f1xKMhw9/g+ol926keT1foQFiPGsItjinX/IHCDIEhEm1m0Cozdx4AfZai8QkPqtO064ejkCW4k=
|
||||
PublicExponent: AQAB
|
||||
PrivateExponent: PFg/RoMAjt8SJVSyDoOK4itBs3Z34rLfzVchZPJ6vDWAt1soJ6jGb4xNBmE5SpRUeqVy80RcUvQ59NFTB0UtNo/zAXhC1RfKiFCNRFTyV3k6a9CMLPAU9g4peW91lw87HXnYALTC9bTiTAoMU3vKvNx80F5qfK7qY/N28S1PMeE=
|
||||
Prime1: +vPWyp37iUa7/LbhejOX/KdkhfwECUCdJF0uEePjaBCSf85xceEBzU89JFk9dCojtVqcI8xLKnRKRixg07Rc+Q==
|
||||
Prime2: wv2aVWr13Cq2vRkKiHlqqP9vihGuDN/kWfmXb7slJH3s2i9+yI7vepAlow9SY8lNHOqXibEaAFsP3aj5OAAS0w==
|
||||
Exponent1: sChCenBzhWV1yGvH0zQsWFpYogTKAISuyjvufvhtRTt82uJbmAjObwRUcxOBo+2Aq2kzeZ2Klf6TtLaqMXHGYQ==
|
||||
Exponent2: hXiKeAWrHXWveGj3qMtTkzKl6uCHPxDSgjQy0KxNlFkOE5uHMUmF62NYH/GQ9/UG79A0wm+T2MJ8bcIINaj3OQ==
|
||||
Coefficient: xzZBvs2/IT7+iRQdn9I4slRTg9ryIecx7oKEKYTOEeyL2qq7rfY/FwZGy3EqyA/3lrkfFLx76qOeqAmCTUaU4w==
|
||||
Created: 20101221142359
|
||||
Publish: 20101221142359
|
||||
Activate: 20101221142359`
|
||||
PrivateExponent: YPwEmwjk5HuiROKU4xzHQ6l1hG8Iiha4cKRG3P5W2b66/EN/GUh07ZSf0UiYB67o257jUDVEgwCuPJz776zfApcCB4oGV+YDyEu7Hp/rL8KcSN0la0k2r9scKwxTp4BTJT23zyBFXsV/1wRDK1A5NxsHPDMYi2SoK63Enm/1ptk=
|
||||
Prime1: /wjOG+fD0ybNoSRn7nQ79udGeR1b0YhUA5mNjDx/x2fxtIXzygYk0Rhx9QFfDy6LOBvz92gbNQlzCLz3DJt5hw==
|
||||
Prime2: wHZsJ8OGhkp5p3mrJFZXMDc2mbYusDVTA+t+iRPdS797Tj0pjvU2HN4vTnTj8KBQp6hmnY7dLp9Y1qserySGbw==
|
||||
Exponent1: N0A7FsSRIg+IAN8YPQqlawoTtG1t1OkJ+nWrurPootScApX6iMvn8fyvw3p2k51rv84efnzpWAYiC8SUaQDNxQ==
|
||||
Exponent2: SvuYRaGyvo0zemE3oS+WRm2scxR8eiA8WJGeOc+obwOKCcBgeZblXzfdHGcEC1KaOcetOwNW/vwMA46lpLzJNw==
|
||||
Coefficient: 8+7ZN/JgByqv0NfULiFKTjtyegUcijRuyij7yNxYbCBneDvZGxJwKNi4YYXWx743pcAj4Oi4Oh86gcmxLs+hGw==
|
||||
Created: 20110302104537
|
||||
Publish: 20110302104537
|
||||
Activate: 20110302104537`
|
||||
|
||||
k := new(RR_DNSKEY)
|
||||
p, _ := k.ReadPrivateKey(strings.NewReader(a))
|
||||
p = p
|
||||
}
|
||||
|
||||
func TestPrivateKeyRead2(t *testing.T) {
|
||||
/* b:=`; This is a zone-signing key, keyid 41946, for miek.nl.
|
||||
; Created: 20110109154937 (Sun Jan 9 16:49:37 2011)
|
||||
; Publish: 20110109154937 (Sun Jan 9 16:49:37 2011)
|
||||
; Activate: 20110109154937 (Sun Jan 9 16:49:37 2011)
|
||||
miek.nl. IN DNSKEY 256 3 5 AwEAAeETsGZdYlTsHK8wc1yo9Zcj4dMEpPWRTYuTmGD3e4Qsk4/uyKf5jhsNZhp8no7GKHTEe7+K1prC4iXo3X5oQyDDmx76hDo5u6fblu/XaQw16wqMDQDPiURUKkzobJlmY6fYNKRz7A01J73V6qDMCvlk+8p+fb0a+LiJ2NJDACln`
|
||||
*/
|
||||
|
||||
a := `Private-key-format: v1.3
|
||||
Algorithm: 5 (RSASHA1)
|
||||
Modulus: 4ROwZl1iVOwcrzBzXKj1lyPh0wSk9ZFNi5OYYPd7hCyTj+7Ip/mOGw1mGnyejsYodMR7v4rWmsLiJejdfmhDIMObHvqEOjm7p9uW79dpDDXrCowNAM+JRFQqTOhsmWZjp9g0pHPsDTUnvdXqoMwK+WT7yn59vRr4uInY0kMAKWc=
|
||||
PublicExponent: AQAB
|
||||
PrivateExponent: CYYAv8QRxhAbgpolN3V6tsNw6bHXnQBh7Jb5KpkuI8CTGdL7sIfRqHlfqZ0+REJEMfSiW89vFytJ0FrTDGcy99qesJujW/tlfsThRTwFSXdCNv0Df25CNNNeskMg3r86is8MmHJc+dAjN3P0ArAF2yZd9gS7C4TGKDDR3bZ9SYk=
|
||||
Prime1: 8EO3P0cYdR8FISxLaUVfVJVIVAWux7tptnqZlzAmomPGEipXr2bAYf637hAAoD8xEUXbI6FIkXUk5vIjxfUjRQ==
|
||||
Prime2: 79FWWF5PNh6ykof9NsrR2YRy/P30iLbzfSRVQrrYH15SEip5LUN15W/G7bg5Uyp8U/o3HXaaxhrj9LC330Uuuw==
|
||||
Exponent1: mtOIKoauBAtRSuc4UUYbAG6ShVKEJsFmhejLQNoOi2awJNSUXLtiDcQO0qINRTZzcCYL6RHtqY5LkWdIFjC54Q==
|
||||
Exponent2: ZpsiXly7d2Ra8ubMKA1PC8nniOb/IR9lvj01XX+jyIgKhUs23W7nmmrgqgUQQc0DtMpxmmGMhwYqUh7qDNUE0Q==
|
||||
Coefficient: 2wn6uW28qM6B68m1ADcLmzjwIQn9Xyc/JMydrJUSzwG7Fr08bc1aa1+K/K0pVy82vU5emDKdVXPP4+WtqXnUNA==
|
||||
Created: 20110109154937
|
||||
Publish: 20110109154937
|
||||
Activate: 20110109154937`
|
||||
|
||||
k := new(RR_DNSKEY)
|
||||
k.Hdr.Rrtype = TypeDNSKEY
|
||||
k.Hdr.Class = ClassINET
|
||||
k.Hdr.Name = "miek.nl."
|
||||
k.Hdr.Ttl = 3600
|
||||
k.Protocol = 3
|
||||
k.Flags = 256
|
||||
k.Algorithm = RSASHA1
|
||||
p, _ := k.ReadPrivateKey(strings.NewReader(a))
|
||||
k.Read(strings.NewReader(pub))
|
||||
p, err := k.ReadPrivateKey(strings.NewReader(priv))
|
||||
if err != nil {
|
||||
t.Logf("%v\n", err)
|
||||
t.Fail()
|
||||
}
|
||||
switch priv := p.(type) {
|
||||
case *rsa.PrivateKey:
|
||||
if 65537 != priv.PublicKey.E {
|
||||
t.Log("Exponenent should be 65537")
|
||||
t.Fail()
|
||||
}
|
||||
default:
|
||||
t.Logf("We should have read an RSA key: %v", priv)
|
||||
t.Fail()
|
||||
}
|
||||
if k.KeyTag() != 41946 {
|
||||
if k.KeyTag() != 37350 {
|
||||
t.Logf("%d %v\n", k.KeyTag(), k)
|
||||
t.Log("Keytag should be 41946")
|
||||
t.Log("Keytag should be 37350")
|
||||
t.Fail()
|
||||
}
|
||||
println(k.String())
|
||||
|
||||
soa := new(RR_SOA)
|
||||
soa.Hdr = RR_Header{"miek.nl.", TypeSOA, ClassINET, 14400, 0}
|
||||
|
@ -92,7 +66,11 @@ Activate: 20110109154937`
|
|||
sig.Algorithm = k.Algorithm
|
||||
|
||||
sig.Sign(p, []RR{soa})
|
||||
fmt.Printf("%v\n%v\n%v\n", k, soa, sig)
|
||||
if sig.Signature != "D5zsobpQcmMmYsUMLxCVEtgAdCvTu8V/IEeP4EyLBjqPJmjt96bwM9kqihsccofA5LIJ7DN91qkCORjWSTwNhzCv7bMyr2o5vBZElrlpnRzlvsFIoAZCD9xg6ZY7ZyzUJmU6IcTwG4v3xEYajcpbJJiyaw/RqR90MuRdKPiBzSo=" {
|
||||
t.Log("Signature is not correct")
|
||||
t.Logf("%v\n", sig)
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
func TestA(t *testing.T) {
|
||||
|
@ -141,37 +119,22 @@ func TestDotInName(t *testing.T) {
|
|||
// Make this a decend test case. For now, good enough
|
||||
// New style (Ragel) parsing
|
||||
func TestParse(t *testing.T) {
|
||||
rr, _ := Zparse(strings.NewReader("miek.nl. 3600 IN A 127.0.0.1"))
|
||||
fmt.Printf("Seen a:\n%v\n", rr)
|
||||
rr, _ = Zparse(strings.NewReader("miek.nl. 3600 IN MX 10 elektron.atoom.net."))
|
||||
fmt.Printf("Seen a:\n%v\n", rr)
|
||||
rr, _ = Zparse(strings.NewReader("nlnetlabs.nl. 3175 IN DNSKEY 256 3 8 AwEAAdR7XR95OaAN9Rz7TbtPalQ9guQk7zfxTHYNKhsiwTZA9z+F16nD0VeBlk7dNik3ETpT2GLAwr9sntG898JwurCDe353wHPvjZtMCdiTVp3cRCrjuCEvoFpmZNN82H0gaH/4v8mkv/QBDAkDSncYjz/FqHKAeYy3cMcjY6RyVweh"))
|
||||
fmt.Printf("Seen a:\n%v\n", rr)
|
||||
rr, _ = Zparse(strings.NewReader("miek.nl. IN A 127.0.0.1"))
|
||||
fmt.Printf("Seen a:\n%v\n", rr)
|
||||
rr, _ = Zparse(strings.NewReader("miek.nl. IN 3600 A 127.0.0.1"))
|
||||
fmt.Printf("Seen a:\n%v\n", rr)
|
||||
rr, _ = Zparse(strings.NewReader("miek.nl. A 127.0.0.1"))
|
||||
fmt.Printf("Seen a:\n%v\n", rr)
|
||||
}
|
||||
|
||||
func TestParseK(t *testing.T) {
|
||||
a := `Private-key-format: v1.3
|
||||
Algorithm: 5 (RSASHA1)
|
||||
Modulus: v7yUY0LEmAtLythV6voScdW4iRAOCF2N217APNTcblHs9sxspVG8fYxrulDJhx6hqpZlCKtKPvZ649Z8/FCczL25wLKUD4W4f1xKMhw9/g+ol926keT1foQFiPGsItjinX/IHCDIEhEm1m0Cozdx4AfZai8QkPqtO064ejkCW4k=
|
||||
PublicExponent: AQAB
|
||||
PrivateExponent: YPwEmwjk5HuiROKU4xzHQ6l1hG8Iiha4cKRG3P5W2b66/EN/GUh07ZSf0UiYB67o257jUDVEgwCuPJz776zfApcCB4oGV+YDyEu7Hp/rL8KcSN0la0k2r9scKwxTp4BTJT23zyBFXsV/1wRDK1A5NxsHPDMYi2SoK63Enm/1ptk=
|
||||
Prime1: /wjOG+fD0ybNoSRn7nQ79udGeR1b0YhUA5mNjDx/x2fxtIXzygYk0Rhx9QFfDy6LOBvz92gbNQlzCLz3DJt5hw==
|
||||
Prime2: wHZsJ8OGhkp5p3mrJFZXMDc2mbYusDVTA+t+iRPdS797Tj0pjvU2HN4vTnTj8KBQp6hmnY7dLp9Y1qserySGbw==
|
||||
Exponent1: N0A7FsSRIg+IAN8YPQqlawoTtG1t1OkJ+nWrurPootScApX6iMvn8fyvw3p2k51rv84efnzpWAYiC8SUaQDNxQ==
|
||||
Exponent2: SvuYRaGyvo0zemE3oS+WRm2scxR8eiA8WJGeOc+obwOKCcBgeZblXzfdHGcEC1KaOcetOwNW/vwMA46lpLzJNw==
|
||||
Coefficient: 8+7ZN/JgByqv0NfULiFKTjtyegUcijRuyij7yNxYbCBneDvZGxJwKNi4YYXWx743pcAj4Oi4Oh86gcmxLs+hGw==
|
||||
Created: 20110302104537
|
||||
Publish: 20110302104537
|
||||
Activate: 20110302104537
|
||||
`
|
||||
m, _ := Kparse(strings.NewReader(a))
|
||||
for k, v := range m {
|
||||
fmt.Printf("{%s}={%s}\n", k, v)
|
||||
tests := map[string]string{
|
||||
"miek.nl. 3600 IN A 127.0.0.1": "miek.nl.\t3600\tIN\tA\t127.0.0.1",
|
||||
"miek.nl. 3600 IN MX 10 elektron.atoom.net.": "miek.nl.\t3600\tIN\tMX\t10 elektron.atoom.net.",
|
||||
"miek.nl. IN 3600 A 127.0.0.1": "miek.nl.\t3600\tIN\tA\t127.0.0.1",
|
||||
"miek.nl. A 127.0.0.1": "miek.nl.\t0\tCLASS0\tA\t127.0.0.1",
|
||||
"miek.nl. IN A 127.0.0.1": "miek.nl.\t0\tIN\tA\t127.0.0.1",
|
||||
"miek.nl. IN DNSKEY 256 3 5 AwEAAb+8lGNCxJgLS8rYVer6EnHVuIkQDghdjdtewDzU3G5R7PbMbKVRvH2Ma7pQyYceoaqWZQirSj72euPWfPxQnMy9ucCylA+FuH9cSjIcPf4PqJfdupHk9X6EBYjxrCLY4p1/yBwgyBIRJtZtAqM3ceAH2WovEJD6rTtOuHo5AluJ":
|
||||
"miek.nl.\t0\tIN\tDNSKEY\t256 3 5 AwEAAb+8lGNCxJgLS8rYVer6EnHVuIkQDghdjdtewDzU3G5R7PbMbKVRvH2Ma7pQyYceoaqWZQirSj72euPWfPxQnMy9ucCylA+FuH9cSjIcPf4PqJfdupHk9X6EBYjxrCLY4p1/yBwgyBIRJtZtAqM3ceAH2WovEJD6rTtOuHo5AluJ",
|
||||
"nlnetlabs.nl. 3175 IN DNSKEY 256 3 8 AwEAAdR7XR95OaAN9Rz7TbtPalQ9guQk7zfxTHYNKhsiwTZA9z+F16nD0VeBlk7dNik3ETpT2GLAwr9sntG898JwurCDe353wHPvjZtMCdiTVp3cRCrjuCEvoFpmZNN82H0gaH/4v8mkv/QBDAkDSncYjz/FqHKAeYy3cMcjY6RyVweh":
|
||||
"nlnetlabs.nl.\t3175\tIN\tDNSKEY\t256 3 8 AwEAAdR7XR95OaAN9Rz7TbtPalQ9guQk7zfxTHYNKhsiwTZA9z+F16nD0VeBlk7dNik3ETpT2GLAwr9sntG898JwurCDe353wHPvjZtMCdiTVp3cRCrjuCEvoFpmZNN82H0gaH/4v8mkv/QBDAkDSncYjz/FqHKAeYy3cMcjY6RyVweh",
|
||||
}
|
||||
for test, result := range tests {
|
||||
r, _ := Zparse(strings.NewReader(test))
|
||||
if r.String() != result {
|
||||
t.Logf("\"%s\" should be equal to\n\"%s\"\n", r, result)
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
228
zparse.go
228
zparse.go
|
@ -117,11 +117,11 @@ st0:
|
|||
cs = 0;
|
||||
goto _out;
|
||||
tr158:
|
||||
// line 84 "zparse.rl"
|
||||
// line 85 "zparse.rl"
|
||||
{ hdr.Name = data[mark:p] }
|
||||
goto st2
|
||||
tr170:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
// line 4 "types.rl"
|
||||
{
|
||||
|
@ -130,7 +130,7 @@ tr170:
|
|||
}
|
||||
goto st2
|
||||
tr172:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
// line 12 "types.rl"
|
||||
{
|
||||
|
@ -139,7 +139,7 @@ tr172:
|
|||
}
|
||||
goto st2
|
||||
tr174:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
// line 38 "types.rl"
|
||||
{
|
||||
|
@ -151,7 +151,7 @@ tr174:
|
|||
}
|
||||
goto st2
|
||||
tr176:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
// line 31 "types.rl"
|
||||
{
|
||||
|
@ -163,7 +163,7 @@ tr176:
|
|||
}
|
||||
goto st2
|
||||
tr178:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
// line 26 "types.rl"
|
||||
{
|
||||
|
@ -173,7 +173,7 @@ tr178:
|
|||
}
|
||||
goto st2
|
||||
tr180:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
// line 8 "types.rl"
|
||||
{
|
||||
|
@ -182,7 +182,7 @@ tr180:
|
|||
}
|
||||
goto st2
|
||||
tr182:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
// line 45 "types.rl"
|
||||
{
|
||||
|
@ -199,7 +199,7 @@ tr182:
|
|||
}
|
||||
goto st2
|
||||
tr184:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
// line 16 "types.rl"
|
||||
{
|
||||
|
@ -244,9 +244,9 @@ case 2:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr3 }
|
||||
goto st0
|
||||
tr3:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
// line 86 "zparse.rl"
|
||||
// line 87 "zparse.rl"
|
||||
{ /* ... */ }
|
||||
goto st3
|
||||
st3:
|
||||
|
@ -262,7 +262,7 @@ case 3:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st3 }
|
||||
goto st0
|
||||
tr13:
|
||||
// line 87 "zparse.rl"
|
||||
// line 88 "zparse.rl"
|
||||
{ ttl, _ := strconv.Atoi(data[mark:p]); hdr.Ttl = uint32(ttl) }
|
||||
goto st4
|
||||
st4:
|
||||
|
@ -295,7 +295,7 @@ case 4:
|
|||
}
|
||||
goto st0
|
||||
tr16:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st5
|
||||
st5:
|
||||
|
@ -312,7 +312,7 @@ case 5:
|
|||
}
|
||||
goto st0
|
||||
tr25:
|
||||
// line 92 "zparse.rl"
|
||||
// line 93 "zparse.rl"
|
||||
{
|
||||
i := Str_rr[data[mark:p]]
|
||||
mk, known := rr_mk[int(i)]
|
||||
|
@ -345,7 +345,7 @@ case 6:
|
|||
}
|
||||
goto st0
|
||||
tr28:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st102
|
||||
st102:
|
||||
|
@ -390,11 +390,11 @@ case 8:
|
|||
}
|
||||
goto st0
|
||||
tr166:
|
||||
// line 87 "zparse.rl"
|
||||
// line 88 "zparse.rl"
|
||||
{ ttl, _ := strconv.Atoi(data[mark:p]); hdr.Ttl = uint32(ttl) }
|
||||
goto st9
|
||||
tr30:
|
||||
// line 85 "zparse.rl"
|
||||
// line 86 "zparse.rl"
|
||||
{ hdr.Class = Str_class[data[mark:p]] }
|
||||
goto st9
|
||||
st9:
|
||||
|
@ -423,7 +423,7 @@ case 9:
|
|||
}
|
||||
goto st0
|
||||
tr32:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st10
|
||||
st10:
|
||||
|
@ -438,7 +438,7 @@ case 10:
|
|||
}
|
||||
goto st0
|
||||
tr33:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st11
|
||||
st11:
|
||||
|
@ -493,7 +493,7 @@ case 15:
|
|||
}
|
||||
goto st0
|
||||
tr39:
|
||||
// line 92 "zparse.rl"
|
||||
// line 93 "zparse.rl"
|
||||
{
|
||||
i := Str_rr[data[mark:p]]
|
||||
mk, known := rr_mk[int(i)]
|
||||
|
@ -526,7 +526,7 @@ case 16:
|
|||
}
|
||||
goto st0
|
||||
tr41:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st103
|
||||
st103:
|
||||
|
@ -551,13 +551,13 @@ case 103:
|
|||
}
|
||||
goto st0
|
||||
tr6:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
// line 86 "zparse.rl"
|
||||
// line 87 "zparse.rl"
|
||||
{ /* ... */ }
|
||||
goto st17
|
||||
tr18:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st17
|
||||
st17:
|
||||
|
@ -624,7 +624,7 @@ case 22:
|
|||
}
|
||||
goto st0
|
||||
tr48:
|
||||
// line 92 "zparse.rl"
|
||||
// line 93 "zparse.rl"
|
||||
{
|
||||
i := Str_rr[data[mark:p]]
|
||||
mk, known := rr_mk[int(i)]
|
||||
|
@ -648,7 +648,7 @@ case 23:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr50 }
|
||||
goto st0
|
||||
tr50:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st24
|
||||
st24:
|
||||
|
@ -664,7 +664,7 @@ case 24:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st24 }
|
||||
goto st0
|
||||
tr51:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st25
|
||||
st25:
|
||||
|
@ -680,7 +680,7 @@ case 25:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr54 }
|
||||
goto st0
|
||||
tr54:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st26
|
||||
st26:
|
||||
|
@ -696,7 +696,7 @@ case 26:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st26 }
|
||||
goto st0
|
||||
tr55:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st27
|
||||
st27:
|
||||
|
@ -712,7 +712,7 @@ case 27:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr58 }
|
||||
goto st0
|
||||
tr58:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st28
|
||||
st28:
|
||||
|
@ -728,7 +728,7 @@ case 28:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st28 }
|
||||
goto st0
|
||||
tr59:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st29
|
||||
st29:
|
||||
|
@ -753,7 +753,7 @@ case 29:
|
|||
}
|
||||
goto st0
|
||||
tr62:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st104
|
||||
st104:
|
||||
|
@ -788,7 +788,7 @@ case 30:
|
|||
}
|
||||
goto st0
|
||||
tr63:
|
||||
// line 92 "zparse.rl"
|
||||
// line 93 "zparse.rl"
|
||||
{
|
||||
i := Str_rr[data[mark:p]]
|
||||
mk, known := rr_mk[int(i)]
|
||||
|
@ -812,7 +812,7 @@ case 31:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr65 }
|
||||
goto st0
|
||||
tr65:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st32
|
||||
st32:
|
||||
|
@ -828,7 +828,7 @@ case 32:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st32 }
|
||||
goto st0
|
||||
tr66:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st33
|
||||
st33:
|
||||
|
@ -844,7 +844,7 @@ case 33:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr69 }
|
||||
goto st0
|
||||
tr69:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st34
|
||||
st34:
|
||||
|
@ -860,7 +860,7 @@ case 34:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st34 }
|
||||
goto st0
|
||||
tr70:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st35
|
||||
st35:
|
||||
|
@ -876,7 +876,7 @@ case 35:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr73 }
|
||||
goto st0
|
||||
tr73:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st36
|
||||
st36:
|
||||
|
@ -892,7 +892,7 @@ case 36:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st36 }
|
||||
goto st0
|
||||
tr74:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st37
|
||||
st37:
|
||||
|
@ -917,7 +917,7 @@ case 37:
|
|||
}
|
||||
goto st0
|
||||
tr77:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st105
|
||||
st105:
|
||||
|
@ -942,13 +942,13 @@ case 105:
|
|||
}
|
||||
goto st0
|
||||
tr9:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
// line 86 "zparse.rl"
|
||||
// line 87 "zparse.rl"
|
||||
{ /* ... */ }
|
||||
goto st38
|
||||
tr21:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st38
|
||||
st38:
|
||||
|
@ -973,7 +973,7 @@ case 39:
|
|||
}
|
||||
goto st0
|
||||
tr79:
|
||||
// line 92 "zparse.rl"
|
||||
// line 93 "zparse.rl"
|
||||
{
|
||||
i := Str_rr[data[mark:p]]
|
||||
mk, known := rr_mk[int(i)]
|
||||
|
@ -997,7 +997,7 @@ case 40:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr81 }
|
||||
goto st0
|
||||
tr81:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st41
|
||||
st41:
|
||||
|
@ -1013,7 +1013,7 @@ case 41:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st41 }
|
||||
goto st0
|
||||
tr82:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st42
|
||||
st42:
|
||||
|
@ -1038,7 +1038,7 @@ case 42:
|
|||
}
|
||||
goto st0
|
||||
tr85:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st106
|
||||
st106:
|
||||
|
@ -1063,7 +1063,7 @@ case 106:
|
|||
}
|
||||
goto st0
|
||||
tr34:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st43
|
||||
st43:
|
||||
|
@ -1088,7 +1088,7 @@ case 44:
|
|||
}
|
||||
goto st0
|
||||
tr87:
|
||||
// line 92 "zparse.rl"
|
||||
// line 93 "zparse.rl"
|
||||
{
|
||||
i := Str_rr[data[mark:p]]
|
||||
mk, known := rr_mk[int(i)]
|
||||
|
@ -1121,7 +1121,7 @@ case 45:
|
|||
}
|
||||
goto st0
|
||||
tr89:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st107
|
||||
st107:
|
||||
|
@ -1146,13 +1146,13 @@ case 107:
|
|||
}
|
||||
goto st0
|
||||
tr11:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
// line 86 "zparse.rl"
|
||||
// line 87 "zparse.rl"
|
||||
{ /* ... */ }
|
||||
goto st46
|
||||
tr23:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st46
|
||||
st46:
|
||||
|
@ -1207,7 +1207,7 @@ case 50:
|
|||
}
|
||||
goto st0
|
||||
tr94:
|
||||
// line 92 "zparse.rl"
|
||||
// line 93 "zparse.rl"
|
||||
{
|
||||
i := Str_rr[data[mark:p]]
|
||||
mk, known := rr_mk[int(i)]
|
||||
|
@ -1231,7 +1231,7 @@ case 51:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr96 }
|
||||
goto st0
|
||||
tr96:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st52
|
||||
st52:
|
||||
|
@ -1247,7 +1247,7 @@ case 52:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st52 }
|
||||
goto st0
|
||||
tr97:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st53
|
||||
st53:
|
||||
|
@ -1263,7 +1263,7 @@ case 53:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr100 }
|
||||
goto st0
|
||||
tr100:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st54
|
||||
st54:
|
||||
|
@ -1279,7 +1279,7 @@ case 54:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st54 }
|
||||
goto st0
|
||||
tr101:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st55
|
||||
st55:
|
||||
|
@ -1295,7 +1295,7 @@ case 55:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr104 }
|
||||
goto st0
|
||||
tr104:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st56
|
||||
st56:
|
||||
|
@ -1311,7 +1311,7 @@ case 56:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st56 }
|
||||
goto st0
|
||||
tr105:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st57
|
||||
st57:
|
||||
|
@ -1327,7 +1327,7 @@ case 57:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr108 }
|
||||
goto st0
|
||||
tr108:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st58
|
||||
st58:
|
||||
|
@ -1343,7 +1343,7 @@ case 58:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st58 }
|
||||
goto st0
|
||||
tr109:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st59
|
||||
st59:
|
||||
|
@ -1359,7 +1359,7 @@ case 59:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr112 }
|
||||
goto st0
|
||||
tr112:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st60
|
||||
st60:
|
||||
|
@ -1375,7 +1375,7 @@ case 60:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st60 }
|
||||
goto st0
|
||||
tr113:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st61
|
||||
st61:
|
||||
|
@ -1391,7 +1391,7 @@ case 61:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr116 }
|
||||
goto st0
|
||||
tr116:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st62
|
||||
st62:
|
||||
|
@ -1407,7 +1407,7 @@ case 62:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st62 }
|
||||
goto st0
|
||||
tr117:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st63
|
||||
st63:
|
||||
|
@ -1423,7 +1423,7 @@ case 63:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr120 }
|
||||
goto st0
|
||||
tr120:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st64
|
||||
st64:
|
||||
|
@ -1439,7 +1439,7 @@ case 64:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st64 }
|
||||
goto st0
|
||||
tr121:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st65
|
||||
st65:
|
||||
|
@ -1464,7 +1464,7 @@ case 65:
|
|||
}
|
||||
goto st0
|
||||
tr124:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st66
|
||||
st66:
|
||||
|
@ -1489,7 +1489,7 @@ case 66:
|
|||
}
|
||||
goto st0
|
||||
tr125:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
goto st67
|
||||
st67:
|
||||
|
@ -1514,7 +1514,7 @@ case 67:
|
|||
}
|
||||
goto st0
|
||||
tr128:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st108
|
||||
st108:
|
||||
|
@ -1539,13 +1539,13 @@ case 108:
|
|||
}
|
||||
goto st0
|
||||
tr12:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
// line 86 "zparse.rl"
|
||||
// line 87 "zparse.rl"
|
||||
{ /* ... */ }
|
||||
goto st68
|
||||
tr24:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st68
|
||||
st68:
|
||||
|
@ -1580,7 +1580,7 @@ case 70:
|
|||
}
|
||||
goto st0
|
||||
tr131:
|
||||
// line 92 "zparse.rl"
|
||||
// line 93 "zparse.rl"
|
||||
{
|
||||
i := Str_rr[data[mark:p]]
|
||||
mk, known := rr_mk[int(i)]
|
||||
|
@ -1613,7 +1613,7 @@ case 71:
|
|||
}
|
||||
goto st0
|
||||
tr133:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st72
|
||||
st72:
|
||||
|
@ -1638,7 +1638,7 @@ case 72:
|
|||
}
|
||||
goto st0
|
||||
tr134:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
goto st73
|
||||
st73:
|
||||
|
@ -1663,7 +1663,7 @@ case 73:
|
|||
}
|
||||
goto st0
|
||||
tr137:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st74
|
||||
st74:
|
||||
|
@ -1688,7 +1688,7 @@ case 74:
|
|||
}
|
||||
goto st0
|
||||
tr138:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
goto st75
|
||||
st75:
|
||||
|
@ -1704,7 +1704,7 @@ case 75:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr141 }
|
||||
goto st0
|
||||
tr141:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st76
|
||||
st76:
|
||||
|
@ -1720,7 +1720,7 @@ case 76:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st76 }
|
||||
goto st0
|
||||
tr142:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st77
|
||||
st77:
|
||||
|
@ -1736,7 +1736,7 @@ case 77:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr145 }
|
||||
goto st0
|
||||
tr145:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st78
|
||||
st78:
|
||||
|
@ -1752,7 +1752,7 @@ case 78:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st78 }
|
||||
goto st0
|
||||
tr146:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st79
|
||||
st79:
|
||||
|
@ -1768,7 +1768,7 @@ case 79:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr149 }
|
||||
goto st0
|
||||
tr149:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st80
|
||||
st80:
|
||||
|
@ -1784,7 +1784,7 @@ case 80:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st80 }
|
||||
goto st0
|
||||
tr150:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st81
|
||||
st81:
|
||||
|
@ -1800,7 +1800,7 @@ case 81:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr153 }
|
||||
goto st0
|
||||
tr153:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st82
|
||||
st82:
|
||||
|
@ -1816,7 +1816,7 @@ case 82:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st82 }
|
||||
goto st0
|
||||
tr154:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
goto st83
|
||||
st83:
|
||||
|
@ -1832,7 +1832,7 @@ case 83:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr157 }
|
||||
goto st0
|
||||
tr157:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st109
|
||||
st109:
|
||||
|
@ -1856,7 +1856,7 @@ case 109:
|
|||
}
|
||||
goto st0
|
||||
tr185:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
// line 16 "types.rl"
|
||||
{
|
||||
|
@ -1891,7 +1891,7 @@ case 84:
|
|||
}
|
||||
goto st0
|
||||
tr17:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st85
|
||||
st85:
|
||||
|
@ -1910,7 +1910,7 @@ case 85:
|
|||
}
|
||||
goto st0
|
||||
tr19:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st86
|
||||
st86:
|
||||
|
@ -1925,7 +1925,7 @@ case 86:
|
|||
}
|
||||
goto st0
|
||||
tr20:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st87
|
||||
st87:
|
||||
|
@ -1940,7 +1940,7 @@ case 87:
|
|||
}
|
||||
goto st0
|
||||
tr22:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st88
|
||||
st88:
|
||||
|
@ -1977,9 +1977,9 @@ case 90:
|
|||
}
|
||||
goto st0
|
||||
tr4:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
// line 86 "zparse.rl"
|
||||
// line 87 "zparse.rl"
|
||||
{ /* ... */ }
|
||||
goto st91
|
||||
st91:
|
||||
|
@ -2016,7 +2016,7 @@ case 93:
|
|||
}
|
||||
goto st0
|
||||
tr163:
|
||||
// line 85 "zparse.rl"
|
||||
// line 86 "zparse.rl"
|
||||
{ hdr.Class = Str_class[data[mark:p]] }
|
||||
goto st94
|
||||
st94:
|
||||
|
@ -2046,7 +2046,7 @@ case 94:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto tr165 }
|
||||
goto st0
|
||||
tr165:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
goto st95
|
||||
st95:
|
||||
|
@ -2062,9 +2062,9 @@ case 95:
|
|||
if 48 <= data[p] && data[p] <= 57 { goto st95 }
|
||||
goto st0
|
||||
tr5:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
// line 86 "zparse.rl"
|
||||
// line 87 "zparse.rl"
|
||||
{ /* ... */ }
|
||||
goto st96
|
||||
st96:
|
||||
|
@ -2083,9 +2083,9 @@ case 96:
|
|||
}
|
||||
goto st0
|
||||
tr7:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
// line 86 "zparse.rl"
|
||||
// line 87 "zparse.rl"
|
||||
{ /* ... */ }
|
||||
goto st97
|
||||
st97:
|
||||
|
@ -2100,9 +2100,9 @@ case 97:
|
|||
}
|
||||
goto st0
|
||||
tr8:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
// line 86 "zparse.rl"
|
||||
// line 87 "zparse.rl"
|
||||
{ /* ... */ }
|
||||
goto st98
|
||||
st98:
|
||||
|
@ -2117,9 +2117,9 @@ case 98:
|
|||
}
|
||||
goto st0
|
||||
tr10:
|
||||
// line 83 "zparse.rl"
|
||||
// line 84 "zparse.rl"
|
||||
{ mark = p }
|
||||
// line 86 "zparse.rl"
|
||||
// line 87 "zparse.rl"
|
||||
{ /* ... */ }
|
||||
goto st99
|
||||
st99:
|
||||
|
@ -2269,7 +2269,7 @@ case 101:
|
|||
if p == eof {
|
||||
switch cs {
|
||||
case 109:
|
||||
// line 88 "zparse.rl"
|
||||
// line 89 "zparse.rl"
|
||||
{ tok.pushInt(data[mark:p]) }
|
||||
// line 16 "types.rl"
|
||||
{
|
||||
|
@ -2284,7 +2284,7 @@ case 101:
|
|||
}
|
||||
break
|
||||
case 102:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
// line 4 "types.rl"
|
||||
{
|
||||
|
@ -2293,7 +2293,7 @@ case 101:
|
|||
}
|
||||
break
|
||||
case 107:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
// line 8 "types.rl"
|
||||
{
|
||||
|
@ -2302,7 +2302,7 @@ case 101:
|
|||
}
|
||||
break
|
||||
case 103:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
// line 12 "types.rl"
|
||||
{
|
||||
|
@ -2311,7 +2311,7 @@ case 101:
|
|||
}
|
||||
break
|
||||
case 106:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
// line 26 "types.rl"
|
||||
{
|
||||
|
@ -2321,7 +2321,7 @@ case 101:
|
|||
}
|
||||
break
|
||||
case 105:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
// line 31 "types.rl"
|
||||
{
|
||||
|
@ -2333,7 +2333,7 @@ case 101:
|
|||
}
|
||||
break
|
||||
case 104:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
// line 38 "types.rl"
|
||||
{
|
||||
|
@ -2345,7 +2345,7 @@ case 101:
|
|||
}
|
||||
break
|
||||
case 108:
|
||||
// line 89 "zparse.rl"
|
||||
// line 90 "zparse.rl"
|
||||
{ tok.pushString(data[mark:p]) }
|
||||
// line 45 "types.rl"
|
||||
{
|
||||
|
@ -2368,7 +2368,7 @@ case 101:
|
|||
_out: {}
|
||||
}
|
||||
|
||||
// line 137 "zparse.rl"
|
||||
// line 139 "zparse.rl"
|
||||
|
||||
|
||||
if cs < z_first_final {
|
||||
|
|
|
@ -80,6 +80,7 @@ func Zparse(q io.Reader) (rr RR, err os.Error) {
|
|||
tok := newToken()
|
||||
|
||||
%%{
|
||||
# can't do comments yet
|
||||
action mark { mark = p }
|
||||
action qname { hdr.Name = data[mark:p] }
|
||||
action qclass { hdr.Class = Str_class[data[mark:p]] }
|
||||
|
@ -108,6 +109,7 @@ func Zparse(q io.Reader) (rr RR, err os.Error) {
|
|||
# t = [a-zA-Z0-9.\\]+ $1 %0 %text;
|
||||
t = [a-zA-Z0-9.\\/+=]+ $1 %0 %text;
|
||||
n = [0-9]+ $1 %0 %number;
|
||||
comment = /^;/;
|
||||
|
||||
lhs = qname? bl %defTtl (
|
||||
(ttl %setTtl bl (qclass bl)?)
|
||||
|
|
Loading…
Reference in New Issue