Add SRV and NAPTR record support

This commit is contained in:
Miek Gieben 2011-01-17 10:30:20 +01:00
parent 4ef90d2c62
commit 74796c8672
7 changed files with 59 additions and 29 deletions

1
TODO
View File

@ -1,6 +1,7 @@
Todo:
* NSEC3 - need base32 for Nsec3
* Cleanup the code
* Cleanup the API
* Tsig testing
* Private key file parsing, exponent 65536 does not work
* Parsing from /etc/resolv.conf - clean up the code

6
dns.go
View File

@ -14,12 +14,14 @@
// * 2537 - RSAMD5 DNS keys
// * 2065 - DNSSEC (updated in later RFCs)
// * 2671 - EDNS
// * 2782 - SRV record
// * 2845 - TSIG
// * 2915 - NAPTR record (incomplete)
// * 2915 - NAPTR record
// * 3110 - RSASHA1 DNS keys
// * 3225 - DO bit (DNSSEC OK)
// * 4033/4034/4035 - DNSSEC + validation functions
// * 5011 - NSID
// * 4255 - SSHFP record
// * 5011 - NSID
// * 5936 - AXFR
// * IP6 support
//

View File

@ -3,3 +3,4 @@
make
make -C resolver install
make -C responder install
make _examples

View File

@ -168,7 +168,6 @@ func (k *RR_DNSKEY) PrivateKeySetString(s string) (PrivateKey, os.Error) {
}
line, _ = r.ReadBytes('\n')
}
println(p.PublicKey.N)
k.setPubKeyRSA(p.PublicKey.E, p.PublicKey.N)
return p, nil
}

3
msg.go
View File

@ -82,6 +82,7 @@ var Rr_str = map[uint16]string{
TypeLOC: "LOC",
TypeOPT: "OPT",
TypeDS: "DS",
TypeSSHFP: "SSHFP",
TypeRRSIG: "RRSIG",
TypeNSEC: "NSEC",
TypeDNSKEY: "DNSKEY",
@ -539,6 +540,8 @@ func unpackStructValue(val *reflect.StructValue, msg []byte, off int) (off1 int,
switch val.Type().Name() {
case "RR_DS":
consumed = 4 // KeyTag(2) + Algorithm(1) + DigestType(1)
case "RR_SSHFP":
consumed = 2 // Algorithm(1) + Type(1)
default:
consumed = 0 // TODO
}

View File

@ -40,8 +40,7 @@ Publish: 20101221142359
Activate: 20101221142359`
k := new(RR_DNSKEY)
p,err := k.PrivateKeySetString(a)
println(err)
p,_ := k.PrivateKeySetString(a)
p = p
fmt.Printf("%v\n", k)
}

View File

@ -47,12 +47,11 @@ const (
// EDNS
TypeOPT = 41
// Old DNSSEC
TypeSIG = 24
TypeKEY = 25
TypeNXT = 30
// DNSSEC
TypeSIG = 24
TypeKEY = 25
TypeNXT = 30
TypeDS = 43
TypeSSHFP = 44
TypeRRSIG = 46
TypeNSEC = 47
TypeDNSKEY = 48
@ -322,7 +321,7 @@ type RR_NAPTR struct {
Flags string
Service string
Regexp string
Replacement string
Replacement string "domain-name"
}
func (rr *RR_NAPTR) Header() *RR_Header {
@ -330,7 +329,13 @@ func (rr *RR_NAPTR) Header() *RR_Header {
}
func (rr *RR_NAPTR) String() string {
return rr.Hdr.String() + "TODO"
return rr.Hdr.String() + " " +
strconv.Itoa(int(rr.Order)) + " " +
strconv.Itoa(int(rr.Preference)) + " " +
"\"" + rr.Flags + "\" " +
"\"" + rr.Service + "\" " +
"\"" + rr.Regexp + "\" " +
rr.Replacement
}
type RR_A struct {
@ -420,12 +425,12 @@ func (rr *RR_NSEC) Header() *RR_Header {
}
func (rr *RR_NSEC) String() string {
s := rr.Hdr.String() + " " + rr.NextDomain
for i:=0; i < len(rr.TypeBitMap); i++ {
// Check if map exists, otherwise "TYPE" + strcov.Itoa(int(rr.TypeBitMap[i]))
s = s + " " + Rr_str[rr.TypeBitMap[i]]
}
return s
s := rr.Hdr.String() + " " + rr.NextDomain
for i := 0; i < len(rr.TypeBitMap); i++ {
// Check if map exists, otherwise "TYPE" + strcov.Itoa(int(rr.TypeBitMap[i]))
s = s + " " + Rr_str[rr.TypeBitMap[i]]
}
return s
}
type RR_DS struct {
@ -448,6 +453,25 @@ func (rr *RR_DS) String() string {
" " + strings.ToUpper(rr.Digest)
}
type RR_SSHFP struct {
Hdr RR_Header
Algorithm uint8
Type uint8
FingerPrint string "hex"
}
func (rr *RR_SSHFP) Header() *RR_Header {
return &rr.Hdr
}
func (rr *RR_SSHFP) String() string {
return rr.Hdr.String() +
" " + strconv.Itoa(int(rr.Algorithm)) +
" " + strconv.Itoa(int(rr.Type)) +
" " + strings.ToUpper(rr.FingerPrint)
}
type RR_DNSKEY struct {
Hdr RR_Header
Flags uint16
@ -485,17 +509,17 @@ func (rr *RR_NSEC3) Header() *RR_Header {
}
func (rr *RR_NSEC3) String() string {
s := rr.Hdr.String()
s += " " + strconv.Itoa(int(rr.Hash)) +
" " + strconv.Itoa(int(rr.Flags)) +
" " + strconv.Itoa(int(rr.Iterations)) +
" " + strings.ToUpper(rr.Salt) +
" " + rr.NextDomain // must base32?
for i:=0; i < len(rr.TypeBitMap); i++ {
// Check if map exists, otherwise "TYPE" + strcov.Itoa(int(rr.TypeBitMap[i]))
s = s + " " + Rr_str[rr.TypeBitMap[i]]
}
return s
s := rr.Hdr.String()
s += " " + strconv.Itoa(int(rr.Hash)) +
" " + strconv.Itoa(int(rr.Flags)) +
" " + strconv.Itoa(int(rr.Iterations)) +
" " + strings.ToUpper(rr.Salt) +
" " + rr.NextDomain // must base32?
for i := 0; i < len(rr.TypeBitMap); i++ {
// Check if map exists, otherwise "TYPE" + strcov.Itoa(int(rr.TypeBitMap[i]))
s = s + " " + Rr_str[rr.TypeBitMap[i]]
}
return s
}
type RR_NSEC3PARAM struct {
@ -577,6 +601,7 @@ var rr_mk = map[int]func() RR{
TypeLOC: func() RR { return new(RR_LOC) },
TypeOPT: func() RR { return new(RR_OPT) },
TypeDS: func() RR { return new(RR_DS) },
TypeSSHFP: func() RR { return new(RR_SSHFP) },
TypeRRSIG: func() RR { return new(RR_RRSIG) },
TypeNSEC: func() RR { return new(RR_NSEC) },
TypeDNSKEY: func() RR { return new(RR_DNSKEY) },