mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-05-11 05:55:12 +00:00
dnsimple: bug-fix SSHFP, add multi TXT support (#639)
* dnsimple: bug-fix SSHFP, add multi TXT support The default logic for encoding SSHFP records was dropping the key and hash algorithms and just posting the content, the `Can` check didn't stop attempts to use SSHFP. So, implement SSHFP support. DNSimple support multiple DNS strings in a TXT record, by representing the payload as quoted strings already. This doesn't appear to be documented, but it does actually work. * Update docs support matrix too * fix go fmt missing upstream Tests failing on my branch for something broken upstream * fix typo in error message
This commit is contained in:
@ -33,8 +33,8 @@ var _ = cmd(catDebug, &cli.Command{
|
||||
Name: "version",
|
||||
Usage: "Print version information",
|
||||
Action: func(c *cli.Context) error {
|
||||
_, err := fmt.Println(version)
|
||||
return err
|
||||
_, err := fmt.Println(version)
|
||||
return err
|
||||
},
|
||||
})
|
||||
|
||||
|
@ -549,7 +549,9 @@
|
||||
<i class="fa fa-check text-success" aria-hidden="true"></i>
|
||||
</td>
|
||||
<td><i class="fa fa-minus dim"></i></td>
|
||||
<td><i class="fa fa-minus dim"></i></td>
|
||||
<td class="success">
|
||||
<i class="fa fa-check text-success" aria-hidden="true"></i>
|
||||
</td>
|
||||
<td><i class="fa fa-minus dim"></i></td>
|
||||
<td><i class="fa fa-minus dim"></i></td>
|
||||
<td><i class="fa fa-minus dim"></i></td>
|
||||
@ -631,7 +633,9 @@
|
||||
<td><i class="fa fa-minus dim"></i></td>
|
||||
<td><i class="fa fa-minus dim"></i></td>
|
||||
<td><i class="fa fa-minus dim"></i></td>
|
||||
<td><i class="fa fa-minus dim"></i></td>
|
||||
<td class="success">
|
||||
<i class="fa fa-check text-success" aria-hidden="true"></i>
|
||||
</td>
|
||||
<td><i class="fa fa-minus dim"></i></td>
|
||||
<td><i class="fa fa-minus dim"></i></td>
|
||||
<td class="success">
|
||||
|
@ -20,7 +20,9 @@ var features = providers.DocumentationNotes{
|
||||
providers.CanUseAlias: providers.Can(),
|
||||
providers.CanUseCAA: providers.Can(),
|
||||
providers.CanUsePTR: providers.Can(),
|
||||
providers.CanUseSSHFP: providers.Can(),
|
||||
providers.CanUseSRV: providers.Can(),
|
||||
providers.CanUseTXTMulti: providers.Can(),
|
||||
providers.CanUseTLSA: providers.Cannot(),
|
||||
providers.DocCreateDomains: providers.Cannot(),
|
||||
providers.DocDualHost: providers.Cannot("DNSimple does not allow sufficient control over the apex NS records"),
|
||||
@ -453,8 +455,16 @@ func getTargetRecordContent(rc *models.RecordConfig) string {
|
||||
switch rtype := rc.Type; rtype {
|
||||
case "CAA":
|
||||
return rc.GetTargetCombined()
|
||||
case "SSHFP":
|
||||
return fmt.Sprintf("%d %d %s", rc.SshfpAlgorithm, rc.SshfpFingerprint, rc.GetTargetField())
|
||||
case "SRV":
|
||||
return fmt.Sprintf("%d %d %s", rc.SrvWeight, rc.SrvPort, rc.GetTargetField())
|
||||
case "TXT":
|
||||
quoted := make([]string, len(rc.TxtStrings))
|
||||
for i := range rc.TxtStrings {
|
||||
quoted[i] = quoteDNSString(rc.TxtStrings[i])
|
||||
}
|
||||
return strings.Join(quoted, " ")
|
||||
default:
|
||||
return rc.GetTargetField()
|
||||
}
|
||||
@ -471,3 +481,21 @@ func getTargetRecordPriority(rc *models.RecordConfig) int {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
// Return a DNS string appropriately escaped for DNSimple.
|
||||
// Should include the surrounding quotes.
|
||||
//
|
||||
// Warning: the DNSimple API is severely underdocumented in this area.
|
||||
// I know that it takes multiple quoted strings just fine, and constructs the
|
||||
// DNS multiple quoted items.
|
||||
// I'm not 100% on the escaping, but since it's a JSON API, JSON escaping seems
|
||||
// reasonable.
|
||||
// I do know that DNSimple have their own checks, so anything too crazy will
|
||||
// get a "400 Validation failed" HTTP response.
|
||||
func quoteDNSString(unquoted string) string {
|
||||
b, err := json.Marshal(unquoted)
|
||||
if err != nil {
|
||||
panic(fmt.Errorf("unable to marshal to JSON: %q", unquoted))
|
||||
}
|
||||
return string(b)
|
||||
}
|
||||
|
Reference in New Issue
Block a user