Add SRV and NAPTR record support
This commit is contained in:
parent
4ef90d2c62
commit
74796c8672
1
TODO
1
TODO
|
@ -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
6
dns.go
|
@ -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
|
||||
//
|
||||
|
|
1
install
1
install
|
@ -3,3 +3,4 @@
|
|||
make
|
||||
make -C resolver install
|
||||
make -C responder install
|
||||
make _examples
|
||||
|
|
|
@ -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
3
msg.go
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
73
types.go
73
types.go
|
@ -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) },
|
||||
|
|
Loading…
Reference in New Issue