models

package
v4.13.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 3, 2024 License: MIT Imports: 15 Imported by: 7

Documentation

Index

Constants

View Source
const (
	// DomainUniqueName is the full `example.com!tag` name`
	DomainUniqueName = "dnscontrol_uniquename"
	// DomainTag is the tag part of `example.com!tag` name
	DomainTag = "dnscontrol_tag"
)
View Source
const DefaultTTL = uint32(300)

DefaultTTL is applied to any DNS record without an explicit TTL.

Variables

This section is empty.

Functions

func CanonicalizeTargets added in v4.1.1

func CanonicalizeTargets(recs []*RecordConfig, origin string)

CanonicalizeTargets turns Targets into FQDNs

func Downcase

func Downcase(recs []*RecordConfig)

Downcase converts all labels and targets to lowercase in a list of RecordConfig.

func MakeUnknown added in v4.8.1

func MakeUnknown(rc *RecordConfig, rtype string, contents string, origin string) error

MakeUnknown turns an RecordConfig into an UNKNOWN type.

func NameserversToStrings

func NameserversToStrings(nss []*Nameserver) (s []string)

NameserversToStrings constructs a list of strings from *Nameserver structs

func ParseQuotedFields

func ParseQuotedFields(s string) ([]string, error)

ParseQuotedFields is like strings.Fields except individual fields might be quoted using `"`.

func ParseQuotedTxt

func ParseQuotedTxt(s string) []string

ParseQuotedTxt returns the individual strings of a combined quoted string.

`foo`  -> []string{"foo"}
`"foo"` -> []string{"foo"}
`"foo" "bar"` -> []string{"foo", "bar"}
`"f"oo" "bar"` -> []string{`f"oo`, "bar"}

NOTE: It is assumed there is exactly one space between the quotes. NOTE: This doesn't handle escaped quotes. NOTE: You probably want to use ParseQuotedFields() for RFC 1035-compliant quoting.

func PostProcessRecords

func PostProcessRecords(recs []*RecordConfig)

PostProcessRecords does any post-processing of the downloaded DNS records. Deprecated. zonerecords.CorrectZoneRecords() calls Downcase directly.

func StripQuotes

func StripQuotes(s string) string

StripQuotes returns the string with the starting and ending quotes removed. If it is not quoted, the original string is returned.

func WarnNameserverDot

func WarnNameserverDot(p, w string)

WarnNameserverDot prints a warning about issue 491 never more than once.

Types

type CloudflareSingleRedirectConfig added in v4.12.0

type CloudflareSingleRedirectConfig struct {
	//
	Code uint16 `json:"code,omitempty"` // 301 or 302
	// PR == PageRule
	PRWhen     string `json:"pr_when,omitempty"`
	PRThen     string `json:"pr_then,omitempty"`
	PRPriority int    `json:"pr_priority,omitempty"` // Really an identifier for the rule.
	PRDisplay  string `json:"pr_display,omitempty"`  // How is this displayed to the user (SetTarget) for CF_REDIRECT/CF_TEMP_REDIRECT
	//
	// SR == SingleRedirect
	SRName           string `json:"sr_name,omitempty"` // How is this displayed to the user
	SRWhen           string `json:"sr_when,omitempty"`
	SRThen           string `json:"sr_then,omitempty"`
	SRRRulesetID     string `json:"sr_rulesetid,omitempty"`
	SRRRulesetRuleID string `json:"sr_rulesetruleid,omitempty"`
	SRDisplay        string `json:"sr_display,omitempty"` // How is this displayed to the user (SetTarget) for CF_SINGLE_REDIRECT
}

CloudflareSingleRedirectConfig contains info about a Cloudflare Single Redirect.

When these are used, .target is set to a human-readable version (only to be used for display purposes).

type Correction

type Correction struct {
	F   func() error `json:"-"`
	Msg string
}

Correction is anything that can be run. Implementation is up to the specific provider.

type DNSConfig

type DNSConfig struct {
	Registrars         []*RegistrarConfig            `json:"registrars"`
	DNSProviders       []*DNSProviderConfig          `json:"dns_providers"`
	Domains            []*DomainConfig               `json:"domains"`
	RegistrarsByName   map[string]*RegistrarConfig   `json:"-"`
	DNSProvidersByName map[string]*DNSProviderConfig `json:"-"`
	SkipRecordAudit    bool                          `json:"skiprecordaudit,omitempty"`
}

DNSConfig describes the desired DNS configuration, usually loaded from dnsconfig.js.

func (*DNSConfig) DomainContainingFQDN

func (config *DNSConfig) DomainContainingFQDN(fqdn string) *DomainConfig

DomainContainingFQDN finds the best domain from the dns config for the given record fqdn. It will chose the domain whose name is the longest suffix match for the fqdn.

func (*DNSConfig) FindDomain

func (config *DNSConfig) FindDomain(query string) *DomainConfig

FindDomain returns the *DomainConfig for domain query in config.

type DNSProvider

type DNSProvider interface {
	GetNameservers(domain string) ([]*Nameserver, error)
	GetZoneRecords(domain string, meta map[string]string) (Records, error)
	GetZoneRecordsCorrections(dc *DomainConfig, existing Records) ([]*Correction, error)
}

DNSProvider is an interface for DNS Provider plug-ins.

type DNSProviderConfig

type DNSProviderConfig struct {
	Name     string          `json:"name"`
	Type     string          `json:"type"`
	Metadata json.RawMessage `json:"meta,omitempty"`
}

DNSProviderConfig describes a DNS service provider.

type DNSProviderInstance

type DNSProviderInstance struct {
	ProviderBase
	Driver              DNSProvider
	NumberOfNameservers int
}

DNSProviderInstance is a single DNS provider.

type DomainConfig

type DomainConfig struct {
	Name             string         `json:"name"` // NO trailing "."
	RegistrarName    string         `json:"registrar"`
	DNSProviderNames map[string]int `json:"dnsProviders"`

	// Metadata[DomainUniqueName] // .Name + "!" + .Tag
	// Metadata[DomainTag] // split horizon tag
	Metadata         map[string]string `json:"meta,omitempty"`
	Records          Records           `json:"records"`
	Nameservers      []*Nameserver     `json:"nameservers,omitempty"`
	NameserversMutex sync.Mutex        `json:"-"`

	EnsureAbsent Records `json:"recordsabsent,omitempty"` // ENSURE_ABSENT
	KeepUnknown  bool    `json:"keepunknown,omitempty"`   // NO_PURGE

	Unmanaged       []*UnmanagedConfig `json:"unmanaged,omitempty"`                      // IGNORE()
	UnmanagedUnsafe bool               `json:"unmanaged_disable_safety_check,omitempty"` // DISABLE_IGNORE_SAFETY_CHECK

	AutoDNSSEC string `json:"auto_dnssec,omitempty"` // "", "on", "off"

	// These fields contain instantiated provider instances once everything is linked up.
	// This linking is in two phases:
	// 1. Metadata (name/type) is available just from the dnsconfig. Validation can use that.
	// 2. Final driver instances are loaded after we load credentials. Any actual provider interaction requires that.
	RegistrarInstance    *RegistrarInstance     `json:"-"`
	DNSProviderInstances []*DNSProviderInstance `json:"-"`

	// Raw user-input from dnsconfig.js that will be processed into RecordConfigs later:
	RawRecords []RawRecordConfig `json:"rawrecords,omitempty"`
	// contains filtered or unexported fields
}

DomainConfig describes a DNS domain (technically a DNS zone).

func (*DomainConfig) Copy

func (dc *DomainConfig) Copy() (*DomainConfig, error)

Copy returns a deep copy of the DomainConfig.

func (*DomainConfig) Filter

func (dc *DomainConfig) Filter(f func(r *RecordConfig) bool)

Filter removes all records that don't match the filter f.

func (*DomainConfig) GetCorrections added in v4.9.0

func (dc *DomainConfig) GetCorrections(providerName string) []*Correction

GetCorrections returns the accumulated corrections for providerName.

func (*DomainConfig) GetSplitHorizonNames

func (dc *DomainConfig) GetSplitHorizonNames() (name, uniquename, tag string)

GetSplitHorizonNames returns the domain's name, uniquename, and tag.

func (*DomainConfig) GetUniqueName

func (dc *DomainConfig) GetUniqueName() (uniquename string)

GetUniqueName returns the domain's uniquename.

func (*DomainConfig) Punycode

func (dc *DomainConfig) Punycode() error

Punycode will convert all records to punycode format. It will encode: - Name - NameFQDN - Target (CNAME and MX only)

func (*DomainConfig) StoreCorrections added in v4.9.0

func (dc *DomainConfig) StoreCorrections(providerName string, corrections []*Correction)

StoreCorrections accumulates corrections in a thread-safe way.

func (*DomainConfig) UpdateSplitHorizonNames

func (dc *DomainConfig) UpdateSplitHorizonNames()

UpdateSplitHorizonNames updates the split horizon fields (uniquename and tag) based on name.

type Nameserver

type Nameserver struct {
	Name string `json:"name"` // Normalized to a FQDN with NO trailing "."

}

Nameserver describes a nameserver.

func ToNameservers

func ToNameservers(nss []string) ([]*Nameserver, error)

ToNameservers turns a list of strings into a list of Nameservers. It is an error if any string has a trailing dot. Either remove the trailing dot before you call this or (much preferred) use ToNameserversStripTD.

func ToNameserversStripTD

func ToNameserversStripTD(nss []string) ([]*Nameserver, error)

ToNameserversStripTD is like ToNameservers but strips the trailing dot from each item. It is an error if there is no trailing dot.

func (*Nameserver) String

func (n *Nameserver) String() string

type ProviderBase

type ProviderBase struct {
	Name         string
	IsDefault    bool
	ProviderType string
}

ProviderBase describes providers.

type RawRecordConfig added in v4.12.3

type RawRecordConfig struct {
	Type  string           `json:"type"`
	Args  []any            `json:"args,omitempty"`
	Metas []map[string]any `json:"metas,omitempty"`
	TTL   uint32           `json:"ttl,omitempty"`
}

RawRecordConfig stores the user-input from dnsconfig.js for a DNS Record. This is later processed (in Go) to become a RecordConfig. NOTE: Only newer rtypes are processed this way. Eventually the legacy types will be converted.

type RecordConfig

type RecordConfig struct {
	Type      string `json:"type"` // All caps rtype name.
	Name      string `json:"name"` // The short name. See above.
	NameFQDN  string `json:"-"`    // Must end with ".$origin". See above.
	SubDomain string `json:"subdomain,omitempty"`

	TTL      uint32            `json:"ttl,omitempty"`
	Metadata map[string]string `json:"meta,omitempty"`
	Original interface{}       `json:"-"` // Store pointer to provider-specific record object. Used in diffing.

	// If you add a field to this struct, also add it to the list in the UnmarshalJSON function.
	MxPreference     uint16            `json:"mxpreference,omitempty"`
	SrvPriority      uint16            `json:"srvpriority,omitempty"`
	SrvWeight        uint16            `json:"srvweight,omitempty"`
	SrvPort          uint16            `json:"srvport,omitempty"`
	CaaTag           string            `json:"caatag,omitempty"`
	CaaFlag          uint8             `json:"caaflag,omitempty"`
	DsKeyTag         uint16            `json:"dskeytag,omitempty"`
	DsAlgorithm      uint8             `json:"dsalgorithm,omitempty"`
	DsDigestType     uint8             `json:"dsdigesttype,omitempty"`
	DsDigest         string            `json:"dsdigest,omitempty"`
	DnskeyFlags      uint16            `json:"dnskeyflags,omitempty"`
	DnskeyProtocol   uint8             `json:"dnskeyprotocol,omitempty"`
	DnskeyAlgorithm  uint8             `json:"dnskeyalgorithm,omitempty"`
	DnskeyPublicKey  string            `json:"dnskeypublickey,omitempty"`
	LocVersion       uint8             `json:"locversion,omitempty"`
	LocSize          uint8             `json:"locsize,omitempty"`
	LocHorizPre      uint8             `json:"lochorizpre,omitempty"`
	LocVertPre       uint8             `json:"locvertpre,omitempty"`
	LocLatitude      uint32            `json:"loclatitude,omitempty"`
	LocLongitude     uint32            `json:"loclongitude,omitempty"`
	LocAltitude      uint32            `json:"localtitude,omitempty"`
	NaptrOrder       uint16            `json:"naptrorder,omitempty"`
	NaptrPreference  uint16            `json:"naptrpreference,omitempty"`
	NaptrFlags       string            `json:"naptrflags,omitempty"`
	NaptrService     string            `json:"naptrservice,omitempty"`
	NaptrRegexp      string            `json:"naptrregexp,omitempty"`
	SshfpAlgorithm   uint8             `json:"sshfpalgorithm,omitempty"`
	SshfpFingerprint uint8             `json:"sshfpfingerprint,omitempty"`
	SoaMbox          string            `json:"soambox,omitempty"`
	SoaSerial        uint32            `json:"soaserial,omitempty"`
	SoaRefresh       uint32            `json:"soarefresh,omitempty"`
	SoaRetry         uint32            `json:"soaretry,omitempty"`
	SoaExpire        uint32            `json:"soaexpire,omitempty"`
	SoaMinttl        uint32            `json:"soaminttl,omitempty"`
	SvcPriority      uint16            `json:"svcpriority,omitempty"`
	SvcParams        string            `json:"svcparams,omitempty"`
	TlsaUsage        uint8             `json:"tlsausage,omitempty"`
	TlsaSelector     uint8             `json:"tlsaselector,omitempty"`
	TlsaMatchingType uint8             `json:"tlsamatchingtype,omitempty"`
	R53Alias         map[string]string `json:"r53_alias,omitempty"`
	AzureAlias       map[string]string `json:"azure_alias,omitempty"`
	UnknownTypeName  string            `json:"unknown_type_name,omitempty"`

	// Cloudflare-specific fields:
	// When these are used, .target is set to a human-readable version (only to be used for display purposes).
	CloudflareRedirect *CloudflareSingleRedirectConfig `json:"cloudflareapi_redirect,omitempty"`
	// contains filtered or unexported fields
}

RecordConfig stores a DNS record. Valid types:

Official: (alphabetical)
  A
  AAAA
  ANAME  // Technically not an official rtype yet.
  CAA
  CNAME
  HTTPS
  LOC
  MX
  NAPTR
  NS
  PTR
  SOA
  SRV
  SSHFP
  SVCB
  TLSA
  TXT
Pseudo-Types: (alphabetical)
  ALIAS
  CF_REDIRECT
  CF_TEMP_REDIRECT
  CF_WORKER_ROUTE
  CLOUDFLAREAPI_SINGLE_REDIRECT
  CLOUDNS_WR
  FRAME
  IMPORT_TRANSFORM
  NAMESERVER
  NO_PURGE
  NS1_URLFWD
  PAGE_RULE
  PORKBUN_URLFWD
  PURGE
  URL
  URL301
  WORKER_ROUTE

NOTE: All NEW record types should be prefixed with the provider name (Correct: CLOUDFLAREAPI_SINGLE_REDIRECT. Wrong: CF_REDIRECT)

Notes about the fields:

Name:

This is the shortname i.e. the NameFQDN without the origin suffix. It should never have a trailing "." It should never be null. The apex (naked domain) is stored as "@". If the origin is "foo.com." and Name is "foo.com", this means the intended FQDN is "foo.com.foo.com." (which may look odd)

NameFQDN:

This is the FQDN version of Name. It should never have a trailing ".".

NOTE: Eventually we will unexport Name/NameFQDN. Please start using the setters (SetLabel/SetLabelFromFQDN) and getters (GetLabel/GetLabelFQDN). as they will always work.

target:

This is the host or IP address of the record, with the other related parameters (weight, priority, etc.) stored in individual fields.

NOTE: Eventually we will unexport Target. Please start using the setters (SetTarget*) and getters (GetTarget*) as they will always work.

SubDomain:

This is the subdomain path, if any, imported from the configuration. If present at the time of canonicalization it is inserted between the Name and origin when constructing a canonical (FQDN) target.

Idioms:

rec.Label() == "@"   // Is this record at the apex?

func RRtoRC

func RRtoRC(rr dns.RR, origin string) (RecordConfig, error)

RRtoRC converts dns.RR to RecordConfig

func RRtoRCTxtBug added in v4.7.0

func RRtoRCTxtBug(rr dns.RR, origin string) (RecordConfig, error)

RRtoRCTxtBug converts dns.RR to RecordConfig. Compensates for the backslash bug in github.com/miekg/dns/issues/1384.

func (*RecordConfig) Copy

func (rc *RecordConfig) Copy() (*RecordConfig, error)

Copy returns a deep copy of a RecordConfig.

func (*RecordConfig) GetDependencies added in v4.3.0

func (rc *RecordConfig) GetDependencies() []string

GetDependencies returns the FQDNs on which this record dependents

func (*RecordConfig) GetLabel

func (rc *RecordConfig) GetLabel() string

GetLabel returns the shortname of the label associated with this RecordConfig. It will never end with ".". It does not need further shortening (i.e. if it returns "foo.com" and the domain is "foo.com" then the FQDN is actually "foo.com.foo.com"). It will never be "" (the apex is returned as "@").

func (*RecordConfig) GetLabelFQDN

func (rc *RecordConfig) GetLabelFQDN() string

GetLabelFQDN returns the FQDN of the label associated with this RecordConfig. It will not end with ".".

func (*RecordConfig) GetSVCBValue added in v4.10.0

func (rc *RecordConfig) GetSVCBValue() []dns.SVCBKeyValue

GetSVCBValue returns the SVCB Key/Values as a list of Key/Values.

func (*RecordConfig) GetTargetCombined

func (rc *RecordConfig) GetTargetCombined() string

GetTargetCombined returns a string with the various fields combined. For example, an MX record might output `10 mx10.example.tld`. WARNING: How TXT records are handled is buggy but we can't change it because code depends on the bugs. Use Get GetTargetCombinedFunc() instead.

func (*RecordConfig) GetTargetCombinedFunc added in v4.7.0

func (rc *RecordConfig) GetTargetCombinedFunc(encodeFn func(s string) string) string

GetTargetCombinedFunc returns all the rdata fields of a RecordConfig as one string. How TXT records are encoded is defined by encodeFn. If encodeFn is nil the TXT data is returned unaltered.

func (*RecordConfig) GetTargetDebug

func (rc *RecordConfig) GetTargetDebug() string

GetTargetDebug returns a string with the various fields spelled out.

func (*RecordConfig) GetTargetField

func (rc *RecordConfig) GetTargetField() string

GetTargetField returns the target. There may be other fields, but they are not included. For example, the .MxPreference field of an MX record isn't included.

func (*RecordConfig) GetTargetIP

func (rc *RecordConfig) GetTargetIP() net.IP

GetTargetIP returns the net.IP stored in .target.

func (*RecordConfig) GetTargetRFC1035Quoted

func (rc *RecordConfig) GetTargetRFC1035Quoted() string

GetTargetRFC1035Quoted returns the target as it would be in an RFC1035-style zonefile. Do not use this function if RecordConfig might be a pseudo-rtype such as R53_ALIAS. Use GetTargetCombined() instead.

func (*RecordConfig) GetTargetTXTJoined

func (rc *RecordConfig) GetTargetTXTJoined() string

GetTargetTXTJoined returns the TXT target as one string.

func (*RecordConfig) GetTargetTXTSegmentCount added in v4.6.1

func (rc *RecordConfig) GetTargetTXTSegmentCount() int

GetTargetTXTSegmentCount returns the number of 255-octet segments required to store TXT target.

func (*RecordConfig) GetTargetTXTSegmented added in v4.6.1

func (rc *RecordConfig) GetTargetTXTSegmented() []string

GetTargetTXTSegmented returns the TXT target as 255-octet segments, with the remainder in the last segment.

func (*RecordConfig) HasFormatIdenticalToTXT

func (rc *RecordConfig) HasFormatIdenticalToTXT() bool

HasFormatIdenticalToTXT returns if a RecordConfig has a format which is identical to TXT, such as SPF. For more details, read https://tools.ietf.org/html/rfc4408#section-3.1.1

func (*RecordConfig) Key

func (rc *RecordConfig) Key() RecordKey

Key converts a RecordConfig into a RecordKey.

func (*RecordConfig) MarshalJSON

func (rc *RecordConfig) MarshalJSON() ([]byte, error)

MarshalJSON marshals RecordConfig.

func (*RecordConfig) PopulateFromString

func (rc *RecordConfig) PopulateFromString(rtype, contents, origin string) error

PopulateFromString populates a RecordConfig given a type and string. Many providers give all the parameters of a resource record in one big string. This helper function lets you not re-invent the wheel.

NOTE: You almost always want to special-case TXT records. Every provider seems to quote them differently.

Recommended calling convention: Process the exceptions first, then use the PopulateFromString function for everything else.

 rtype := FILL_IN_TYPE
	var err error
 rc := &models.RecordConfig{Type: rtype}
 rc.SetLabelFromFQDN(FILL_IN_NAME, origin)
 rc.TTL = uint32(FILL_IN_TTL)
 rc.Original = FILL_IN_ORIGINAL // The raw data received from provider (if needed later)
	switch rtype {
	case "MX":
		// MX priority in a separate field.
		err = rc.SetTargetMX(cr.Priority, target)
	case "TXT":
		// TXT records are stored verbatim; no quoting/escaping to parse.
		err = rc.SetTargetTXT(target)
	default:
		err = rc.PopulateFromString(rtype, target, origin)
	}
	if err != nil {
		return nil, fmt.Errorf("unparsable record type=%q received from PROVDER_NAME: %w", rtype, err)
	}
	return rc, nil

func (*RecordConfig) PopulateFromStringFunc added in v4.7.0

func (rc *RecordConfig) PopulateFromStringFunc(rtype, contents, origin string, txtFn func(s string) (string, error)) error

PopulateFromStringFunc populates a RecordConfig by parsing a common RFC1035-like format.

rtype: the resource record type (rtype)
contents: a string that contains all parameters of the record's rdata (see below)
txtFn: If rtype == "TXT", this function is used to parse contents, or nil if no parsing is needed.

The "contents" field is the format used in RFC1035 zonefiles. It is the text after the rtype. For example, in the line: foo IN MX 10 mx.example.com. contents stores everything after the "MX" (not including the space).

Typical values for txtFn include:

nil:  no parsing required.
txtutil.ParseQuoted: Parse via Tom's interpretation of RFC1035.
txtutil.ParseCombined: Backwards compatible with Parse via miekg's interpretation of RFC1035.

Many providers deliver record data in this format or something close to it. This function is provided to reduce the amount of duplicate code across providers. If a particular rtype is not handled as a particular provider expects, simply handle it beforehand as a special case.

Example 1: Normal use.

rtype := FILL_IN_RTYPE
rc := &models.RecordConfig{Type: rtype, TTL: FILL_IN_TTL}
rc.SetLabelFromFQDN(FILL_IN_NAME, origin)
rc.Original = FILL_IN_ORIGINAL // The raw data received from provider (if needed later)
if err = rc.PopulateFromStringFunc(rtype, target, origin, nil); err != nil {
	return nil, fmt.Errorf("unparsable record type=%q received from PROVDER_NAME: %w", rtype, err)
}
return rc, nil

Example 2: Use your own MX parser.

rtype := FILL_IN_RTYPE
rc := &models.RecordConfig{Type: rtype, TTL: FILL_IN_TTL}
rc.SetLabelFromFQDN(FILL_IN_NAME, origin)
rc.Original = FILL_IN_ORIGINAL // The raw data received from provider (if needed later)
switch rtype {
case "MX":
	// MX priority in a separate field.
	err = rc.SetTargetMX(cr.Priority, target)
default:
	err = rc.PopulateFromString(rtype, target, origin)
}
if err != nil {
	return nil, fmt.Errorf("unparsable record type=%q received from PROVDER_NAME: %w", rtype, err)
}
return rc, nil

func (*RecordConfig) SetLOCParams

func (rc *RecordConfig) SetLOCParams(d1 uint8, m1 uint8, s1 float32, ns string,
	d2 uint8, m2 uint8, s2 float32, ew string, al int32, sz float32, hp float32, vp float32) error

SetLOCParams is an intermediate function which passes the 12 input parameters for further processing to the LOC native 7 input binary format: LocVersion (0), LocLatitude, LocLongitude, LocAltitude, LocSize, LocVertPre, LocHorizPre

func (*RecordConfig) SetLabel

func (rc *RecordConfig) SetLabel(short, origin string)

SetLabel sets the .Name/.NameFQDN fields given a short name and origin. origin must not have a trailing dot: The entire code base maintains dc.Name without the trailig dot. Finding a dot here means something is very wrong.

short must not have a training dot: That would mean you have a FQDN, and shouldn't be using SetLabel(). Maybe SetLabelFromFQDN()?

func (*RecordConfig) SetLabelFromFQDN

func (rc *RecordConfig) SetLabelFromFQDN(fqdn, origin string)

SetLabelFromFQDN sets the .Name/.NameFQDN fields given a FQDN and origin. fqdn may have a trailing "." but it is not required. origin may not have a trailing dot.

func (*RecordConfig) SetTarget

func (rc *RecordConfig) SetTarget(target string) error

SetTarget sets the target, assuming that the rtype is appropriate.

func (*RecordConfig) SetTargetCAA

func (rc *RecordConfig) SetTargetCAA(flag uint8, tag string, target string) error

SetTargetCAA sets the CAA fields.

func (*RecordConfig) SetTargetCAAString

func (rc *RecordConfig) SetTargetCAAString(s string) error

SetTargetCAAString is like SetTargetCAA but accepts one big string. Ex: `0 issue "letsencrypt.org"`

func (*RecordConfig) SetTargetCAAStrings

func (rc *RecordConfig) SetTargetCAAStrings(flag, tag, target string) error

SetTargetCAAStrings is like SetTargetCAA but accepts strings.

func (*RecordConfig) SetTargetDNSKEY added in v4.10.0

func (rc *RecordConfig) SetTargetDNSKEY(flags uint16, protocol, algorithm uint8, publicKey string) error

SetTargetDNSKEY sets the DNSKEY fields.

func (*RecordConfig) SetTargetDNSKEYString added in v4.10.0

func (rc *RecordConfig) SetTargetDNSKEYString(s string) error

SetTargetDNSKEYString is like SetTargetDNSKEY but accepts one big string.

func (*RecordConfig) SetTargetDNSKEYStrings added in v4.10.0

func (rc *RecordConfig) SetTargetDNSKEYStrings(flags, protocol, algorithm, publicKey string) error

SetTargetDNSKEYStrings is like SetTargetDNSKEY but accepts strings.

func (*RecordConfig) SetTargetDS

func (rc *RecordConfig) SetTargetDS(keytag uint16, algorithm, digesttype uint8, digest string) error

SetTargetDS sets the DS fields.

func (*RecordConfig) SetTargetDSString

func (rc *RecordConfig) SetTargetDSString(s string) error

SetTargetDSString is like SetTargetDS but accepts one big string.

func (*RecordConfig) SetTargetDSStrings

func (rc *RecordConfig) SetTargetDSStrings(keytag, algorithm, digesttype, digest string) error

SetTargetDSStrings is like SetTargetDS but accepts strings.

func (*RecordConfig) SetTargetIP

func (rc *RecordConfig) SetTargetIP(ip net.IP) error

SetTargetIP sets the target to an IP, verifying this is an appropriate rtype.

func (*RecordConfig) SetTargetLOC

func (rc *RecordConfig) SetTargetLOC(ver uint8, lat uint32, lon uint32, alt uint32, siz uint8, hzp uint8, vtp uint8) error

SetTargetLOC sets the LOC fields from the rr.LOC type properties.

func (*RecordConfig) SetTargetLOCString

func (rc *RecordConfig) SetTargetLOCString(origin string, contents string) error

SetTargetLOCString is like SetTargetLOC but accepts one big string and origin Normally this is used when we receive a record string from provider records because e.g. the provider API passed rc.PopulateFromString()

func (*RecordConfig) SetTargetMX

func (rc *RecordConfig) SetTargetMX(pref uint16, target string) error

SetTargetMX sets the MX fields.

func (*RecordConfig) SetTargetMXString

func (rc *RecordConfig) SetTargetMXString(s string) error

SetTargetMXString is like SetTargetMX but accepts one big string.

func (*RecordConfig) SetTargetMXStrings

func (rc *RecordConfig) SetTargetMXStrings(pref, target string) error

SetTargetMXStrings is like SetTargetMX but accepts strings.

func (*RecordConfig) SetTargetNAPTR

func (rc *RecordConfig) SetTargetNAPTR(order uint16, preference uint16, flags string, service string, regexp string, target string) error

SetTargetNAPTR sets the NAPTR fields.

func (*RecordConfig) SetTargetNAPTRString

func (rc *RecordConfig) SetTargetNAPTRString(s string) error

SetTargetNAPTRString is like SetTargetNAPTR but accepts one big string.

func (*RecordConfig) SetTargetNAPTRStrings

func (rc *RecordConfig) SetTargetNAPTRStrings(order, preference, flags string, service string, regexp string, target string) error

SetTargetNAPTRStrings is like SetTargetNAPTR but accepts strings.

func (*RecordConfig) SetTargetSOA

func (rc *RecordConfig) SetTargetSOA(ns, mbox string, serial, refresh, retry, expire, minttl uint32) error

SetTargetSOA sets the SOA fields.

func (*RecordConfig) SetTargetSOAString

func (rc *RecordConfig) SetTargetSOAString(s string) error

SetTargetSOAString is like SetTargetSOA but accepts one big string.

func (*RecordConfig) SetTargetSOAStrings

func (rc *RecordConfig) SetTargetSOAStrings(ns, mbox, serial, refresh, retry, expire, minttl string) error

SetTargetSOAStrings is like SetTargetSOA but accepts strings.

func (*RecordConfig) SetTargetSRV

func (rc *RecordConfig) SetTargetSRV(priority, weight, port uint16, target string) error

SetTargetSRV sets the SRV fields.

func (*RecordConfig) SetTargetSRVPriorityString

func (rc *RecordConfig) SetTargetSRVPriorityString(priority uint16, s string) error

SetTargetSRVPriorityString is like SetTargetSRV but accepts priority as an uint16 and the rest of the values joined in a string that needs to be parsed. This is a helper function that comes in handy when a provider re-uses the MX preference field as the SRV priority.

func (*RecordConfig) SetTargetSRVString

func (rc *RecordConfig) SetTargetSRVString(s string) error

SetTargetSRVString is like SetTargetSRV but accepts one big string to be parsed.

func (*RecordConfig) SetTargetSRVStrings

func (rc *RecordConfig) SetTargetSRVStrings(priority, weight, port, target string) (err error)

SetTargetSRVStrings is like SetTargetSRV but accepts all parameters as strings.

func (*RecordConfig) SetTargetSSHFP

func (rc *RecordConfig) SetTargetSSHFP(algorithm uint8, fingerprint uint8, target string) error

SetTargetSSHFP sets the SSHFP fields.

func (*RecordConfig) SetTargetSSHFPString

func (rc *RecordConfig) SetTargetSSHFPString(s string) error

SetTargetSSHFPString is like SetTargetSSHFP but accepts one big string.

func (*RecordConfig) SetTargetSSHFPStrings

func (rc *RecordConfig) SetTargetSSHFPStrings(algorithm, fingerprint, target string) error

SetTargetSSHFPStrings is like SetTargetSSHFP but accepts strings.

func (*RecordConfig) SetTargetSVCB added in v4.10.0

func (rc *RecordConfig) SetTargetSVCB(priority uint16, target string, params []dns.SVCBKeyValue) error

SetTargetSVCB sets the SVCB fields.

func (*RecordConfig) SetTargetSVCBString added in v4.10.0

func (rc *RecordConfig) SetTargetSVCBString(origin, contents string) error

SetTargetSVCBString is like SetTargetSVCB but accepts one big string and the origin so parsing can be done using miekg/dns.

func (*RecordConfig) SetTargetTLSA

func (rc *RecordConfig) SetTargetTLSA(usage, selector, matchingtype uint8, target string) error

SetTargetTLSA sets the TLSA fields.

func (*RecordConfig) SetTargetTLSAString

func (rc *RecordConfig) SetTargetTLSAString(s string) error

SetTargetTLSAString is like SetTargetTLSA but accepts one big string.

func (*RecordConfig) SetTargetTLSAStrings

func (rc *RecordConfig) SetTargetTLSAStrings(usage, selector, matchingtype, target string) (err error)

SetTargetTLSAStrings is like SetTargetTLSA but accepts strings.

func (*RecordConfig) SetTargetTXT

func (rc *RecordConfig) SetTargetTXT(s string) error

SetTargetTXT sets the TXT fields when there is 1 string.

func (*RecordConfig) SetTargetTXTs

func (rc *RecordConfig) SetTargetTXTs(s []string) error

SetTargetTXTs sets the TXT fields when there are many strings. They are stored concatenated.

func (*RecordConfig) String

func (rc *RecordConfig) String() string

String returns the text representation of the resource record.

func (*RecordConfig) ToComparableNoTTL

func (rc *RecordConfig) ToComparableNoTTL() string

ToComparableNoTTL returns a comparison string. If you need to compare two RecordConfigs, you can simply compare the string returned by this function. The comparison includes all fields except TTL and any provider-specific metafields. Provider-specific metafields like CF_PROXY are not the same as pseudo-records like ANAME or R53_ALIAS

func (*RecordConfig) ToRR

func (rc *RecordConfig) ToRR() dns.RR

ToRR converts a RecordConfig to a dns.RR.

func (*RecordConfig) UnmarshalJSON

func (rc *RecordConfig) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshals RecordConfig.

type RecordDB

type RecordDB struct {
	// contains filtered or unexported fields
}

RecordDB is a container of many RecordConfig, queryable by various methods. The first to be implemented is as a hash with label:type as the index.

func NewRecordDBFromRecords

func NewRecordDBFromRecords(recs Records, zone string) *RecordDB

NewRecordDBFromRecords creates a RecordDB from a list of RecordConfig.

func (*RecordDB) ContainsLT

func (recdb *RecordDB) ContainsLT(rec *RecordConfig) bool

ContainsLT returns true if recdb contains rec. Matching is done on the record's label and type (i.e. the RecordKey)

type RecordKey

type RecordKey struct {
	NameFQDN string
	Type     string
}

RecordKey represents a resource record in a format used by some systems.

func (*RecordKey) String

func (rk *RecordKey) String() string

type Records

type Records []*RecordConfig

Records is a list of *RecordConfig.

func (Records) GetAllDependencies added in v4.3.0

func (recs Records) GetAllDependencies() []string

GetAllDependencies concatinates all dependencies of all records

func (Records) GetByType

func (recs Records) GetByType(typeName string) Records

GetByType returns the records that match rtype typeName.

func (Records) GroupedByFQDN

func (recs Records) GroupedByFQDN() ([]string, map[string]Records)

GroupedByFQDN returns a map of keys to records, grouped by FQDN.

func (Records) GroupedByKey

func (recs Records) GroupedByKey() map[RecordKey]Records

GroupedByKey returns a map of keys to records.

func (Records) HasRecordTypeName

func (recs Records) HasRecordTypeName(rtype, name string) bool

HasRecordTypeName returns True if there is a record with this rtype and name.

type Registrar

type Registrar interface {
	GetRegistrarCorrections(dc *DomainConfig) ([]*Correction, error)
}

Registrar is an interface for Registrar plug-ins.

type RegistrarConfig

type RegistrarConfig struct {
	Name     string          `json:"name"`
	Type     string          `json:"type"`
	Metadata json.RawMessage `json:"meta,omitempty"`
}

RegistrarConfig describes a registrar.

type RegistrarInstance

type RegistrarInstance struct {
	ProviderBase
	Driver Registrar
}

RegistrarInstance is a single registrar.

type UnmanagedConfig

type UnmanagedConfig struct {
	// Glob pattern for matching labels.
	LabelPattern string    `json:"label_pattern,omitempty"`
	LabelGlob    glob.Glob `json:"-"` // Compiled version

	// Comma-separated list of DNS Resource Types.
	RTypePattern string              `json:"rType_pattern,omitempty"`
	RTypeMap     map[string]struct{} `json:"-"` // map of RTypes or len()=0 for all

	// Glob pattern for matching targets.
	TargetPattern string    `json:"target_pattern,omitempty"`
	TargetGlob    glob.Glob `json:"-"` // Compiled version
}

UnmanagedConfig describes an IGNORE() rule. NB(tlim): This is called "Unmanaged" because the original design was to call this function UNMANAGED(). However we then realized that we could repurpose IGNORE() without any compatibility issues. NB(tlim): TechDebt: UnmanagedConfig and DebugUnmanagedConfig should be moved to pkg/diff2/handsoff.go and the following fields could be unexported: LabelGlob, RTypeMap, and TargetGlob

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL