mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-11-10 17:26:10 +08:00
059b58ed9e
* Simply mark DS as supported, let existing tests handle it. * Fix trivial typo in diagnostic feedback from model SetTargetDSString() * The support matrix includes more changes because it was stale.
52 lines
1.4 KiB
Go
52 lines
1.4 KiB
Go
package models
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// SetTargetDS sets the DS fields.
|
|
func (rc *RecordConfig) SetTargetDS(keytag uint16, algorithm, digesttype uint8, digest string) error {
|
|
rc.DsKeyTag = keytag
|
|
rc.DsAlgorithm = algorithm
|
|
rc.DsDigestType = digesttype
|
|
rc.DsDigest = digest
|
|
|
|
if rc.Type == "" {
|
|
rc.Type = "DS"
|
|
}
|
|
if rc.Type != "DS" {
|
|
panic("assertion failed: SetTargetDS called when .Type is not DS")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// SetTargetDSStrings is like SetTargetDS but accepts strings.
|
|
func (rc *RecordConfig) SetTargetDSStrings(keytag, algorithm, digesttype, digest string) error {
|
|
u16keytag, err := strconv.ParseUint(keytag, 10, 16)
|
|
if err != nil {
|
|
return errors.Wrap(err, "DS KeyTag can't fit in 16 bits")
|
|
}
|
|
u8algorithm, err := strconv.ParseUint(algorithm, 10, 8)
|
|
if err != nil {
|
|
return errors.Wrap(err, "DS Algorithm can't fit in 8 bits")
|
|
}
|
|
u8digesttype, err := strconv.ParseUint(digesttype, 10, 8)
|
|
if err != nil {
|
|
return errors.Wrap(err, "DS DigestType can't fit in 8 bits")
|
|
}
|
|
|
|
return rc.SetTargetDS(uint16(u16keytag), uint8(u8algorithm), uint8(u8digesttype), digest)
|
|
}
|
|
|
|
// SetTargetDSString is like SetTargetDS but accepts one big string.
|
|
func (rc *RecordConfig) SetTargetDSString(s string) error {
|
|
part := strings.Fields(s)
|
|
if len(part) != 4 {
|
|
return errors.Errorf("DS value does not contain 4 fields: (%#v)", s)
|
|
}
|
|
return rc.SetTargetDSStrings(part[0], part[1], part[2], part[3])
|
|
}
|