mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-12-09 05:36:27 +08:00
ALIDNS: Fix integration test
This commit is contained in:
parent
7c801c8030
commit
57abadec2e
2 changed files with 21 additions and 10 deletions
|
|
@ -55,5 +55,7 @@ func AuditRecords(records []*models.RecordConfig) []error {
|
||||||
a.Add("TXT", rejectif.TxtHasUnpairedBackslash) // Last verified at 2025-12-03: Alibaba mishandles odd backslashes
|
a.Add("TXT", rejectif.TxtHasUnpairedBackslash) // Last verified at 2025-12-03: Alibaba mishandles odd backslashes
|
||||||
a.Add("*", labelConstraint) // Last verified at 2025-12-03: Alibaba only allows ASCII + Chinese, rejects other Unicode
|
a.Add("*", labelConstraint) // Last verified at 2025-12-03: Alibaba only allows ASCII + Chinese, rejects other Unicode
|
||||||
a.Add("CNAME", targetConstraint) // Last verified at 2025-12-03: CNAME target must be ASCII or Chinese
|
a.Add("CNAME", targetConstraint) // Last verified at 2025-12-03: CNAME target must be ASCII or Chinese
|
||||||
|
a.Add("SRV", rejectif.SrvHasNullTarget) // Last verified at 2025-12-03: SRV target must not be null
|
||||||
|
a.Add("SRV", rejectif.SrvHasEmptyTarget) // Last verified at 2025-12-03: SRV target must not be empty
|
||||||
return a.Audit(records)
|
return a.Audit(records)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,14 +35,26 @@ func nativeToRecord(r *alidns.Record, domain string) (*models.RecordConfig, erro
|
||||||
return nil, fmt.Errorf("unparsable MX record received from ALIDNS: %w", err)
|
return nil, fmt.Errorf("unparsable MX record received from ALIDNS: %w", err)
|
||||||
}
|
}
|
||||||
case "SRV":
|
case "SRV":
|
||||||
// SRV records in Alibaba Cloud: Priority and Weight are in separate fields,
|
// SRV records in Alibaba Cloud: Value contains "priority weight port target"
|
||||||
// Value contains "port target" (e.g., "5060 sipserver.example.com")
|
// e.g., "1 1 5060 www.cloud-example.com."
|
||||||
if err := rc.PopulateFromString(r.Type, fmt.Sprintf("%d %d %s", r.Priority, r.Weight, r.Value), domain); err != nil {
|
// Parse the parts and normalize the target
|
||||||
|
parts := strings.Fields(r.Value)
|
||||||
|
if len(parts) != 4 {
|
||||||
|
return nil, fmt.Errorf("invalid SRV format from ALIDNS: %s", r.Value)
|
||||||
|
}
|
||||||
|
target := parts[3]
|
||||||
|
// Ensure target has trailing dot for FQDN
|
||||||
|
if target != "" && target != "." && !strings.HasSuffix(target, ".") {
|
||||||
|
target = target + "."
|
||||||
|
}
|
||||||
|
// Reconstruct with normalized target and let PopulateFromString handle it
|
||||||
|
srvValue := fmt.Sprintf("%s %s %s %s", parts[0], parts[1], parts[2], target)
|
||||||
|
if err := rc.PopulateFromString(r.Type, srvValue, domain); err != nil {
|
||||||
return nil, fmt.Errorf("unparsable SRV record received from ALIDNS: %w", err)
|
return nil, fmt.Errorf("unparsable SRV record received from ALIDNS: %w", err)
|
||||||
}
|
}
|
||||||
case "CAA":
|
case "CAA":
|
||||||
// CAA format in Alibaba: "0 issue letsencrypt.org"
|
// Alibaba Cloud CAA format: "0 issue \"letsencrypt.org\""
|
||||||
if err := rc.PopulateFromString(r.Type, r.Value, domain); err != nil {
|
if err := rc.SetTargetCAAString(r.Value); err != nil {
|
||||||
return nil, fmt.Errorf("unparsable CAA record received from ALIDNS: %w", err)
|
return nil, fmt.Errorf("unparsable CAA record received from ALIDNS: %w", err)
|
||||||
}
|
}
|
||||||
case "TXT":
|
case "TXT":
|
||||||
|
|
@ -62,13 +74,10 @@ func nativeToRecord(r *alidns.Record, domain string) (*models.RecordConfig, erro
|
||||||
// recordToNativeContent converts a RecordConfig to the Value format expected by Alibaba Cloud DNS API.
|
// recordToNativeContent converts a RecordConfig to the Value format expected by Alibaba Cloud DNS API.
|
||||||
func recordToNativeContent(r *models.RecordConfig) string {
|
func recordToNativeContent(r *models.RecordConfig) string {
|
||||||
switch r.Type {
|
switch r.Type {
|
||||||
case "MX":
|
|
||||||
return r.GetTargetField()
|
|
||||||
case "SRV":
|
case "SRV":
|
||||||
// Alibaba Cloud SRV format: "weight port target"
|
return fmt.Sprintf("%d %d %d %s", r.SrvPriority, r.SrvWeight, r.SrvPort, r.GetTargetField())
|
||||||
return fmt.Sprintf("%d %d %s", r.SrvWeight, r.SrvPort, r.GetTargetField())
|
|
||||||
case "CAA":
|
case "CAA":
|
||||||
return fmt.Sprintf("%d %s %s", r.CaaFlag, r.CaaTag, r.GetTargetField())
|
return fmt.Sprintf("%d %s \"%s\"", r.CaaFlag, r.CaaTag, r.GetTargetField())
|
||||||
case "TXT":
|
case "TXT":
|
||||||
return r.GetTargetTXTJoined()
|
return r.GetTargetTXTJoined()
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue