mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-12-09 13:46:07 +08:00
63 lines
1.9 KiB
Go
63 lines
1.9 KiB
Go
package fortigate
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/StackExchange/dnscontrol/v4/models"
|
|
"strings"
|
|
)
|
|
|
|
// AuditRecords performs basic validation and returns warnings for known limitations.
|
|
func AuditRecords(records []*models.RecordConfig) []error {
|
|
var problems []error
|
|
|
|
for _, rc := range records {
|
|
switch rc.Type {
|
|
case "A", "AAAA", "CNAME", "NS", "MX":
|
|
// Supported
|
|
case "PTR":
|
|
// FortiGate limitations: these record types are not fully supported.
|
|
problems = append(problems,
|
|
fmt.Errorf("record type %s is not supported by FortiGate provider (name: %s)", rc.Type, rc.GetLabelFQDN()))
|
|
default:
|
|
problems = append(problems,
|
|
fmt.Errorf("record type %s is not supported by FortiGate provider (name: %s)", rc.Type, rc.GetLabelFQDN()))
|
|
}
|
|
|
|
//Handle CNAME Records limitations
|
|
if rc.Type == "CNAME" && rc.GetLabel() == "@" {
|
|
problems = append(problems,
|
|
fmt.Errorf("CNAME at apex (@) is not allowed (name: %s)", rc.GetLabelFQDN()))
|
|
}
|
|
|
|
//Handle NS Records limitations
|
|
if rc.Type == "NS" && rc.GetLabel() != "@" && rc.GetLabel() != "" {
|
|
problems = append(problems,
|
|
fmt.Errorf("NS records are only supported at the zone apex (@): %s", rc.GetLabelFQDN()))
|
|
}
|
|
|
|
//Handle MX Records limitations
|
|
if rc.Type == "MX" {
|
|
|
|
// MX only supported at zone apex
|
|
if rc.GetLabel() != "@" && rc.GetLabel() != "" {
|
|
problems = append(problems,
|
|
fmt.Errorf("MX records are only supported at the zone apex (@): %s", rc.GetLabelFQDN()))
|
|
}
|
|
|
|
// FortiGate does not accept "." as target (it's not a valid DNS name)
|
|
target := rc.GetTargetField()
|
|
if target == "." {
|
|
problems = append(problems,
|
|
fmt.Errorf("FortiGate does not accept '.' as an MX target: %s", rc.GetLabelFQDN()))
|
|
}
|
|
}
|
|
|
|
// Wildcard support
|
|
if strings.Contains(rc.GetLabelFQDN(), "*") {
|
|
problems = append(problems,
|
|
fmt.Errorf("wildcard record %s is not supported by FortiGate", rc.GetLabelFQDN()))
|
|
}
|
|
}
|
|
|
|
return problems
|
|
}
|