From 17e64ca28dab15a9d7c28bfe4602aec8b913b13b Mon Sep 17 00:00:00 2001 From: Craig Peterson <192540+captncraig@users.noreply.github.com> Date: Thu, 26 Apr 2018 14:45:10 -0400 Subject: [PATCH] fix names for internal transformed records (#358) * fix names for internal transformed records * activedirectory use standard messaged * add test for fqdn consistency in final validation pass --- .gitignore | 3 ++- pkg/normalize/validate.go | 16 ++++++++++------ providers/activedir/domains.go | 14 ++++++++------ 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 2fd54a44e..8119cc2c2 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,5 @@ env.sh certs/ spfcache* adzonedump.* -zones/ \ No newline at end of file +zones/ +stack.sh \ No newline at end of file diff --git a/pkg/normalize/validate.go b/pkg/normalize/validate.go index 1d69e89c7..034b011ad 100644 --- a/pkg/normalize/validate.go +++ b/pkg/normalize/validate.go @@ -1,6 +1,7 @@ package normalize import ( + "fmt" "net" "strings" @@ -195,7 +196,7 @@ func importTransform(srcDomain, dstDomain *models.DomainConfig, transforms []tra newRec := func() *models.RecordConfig { rec2, _ := rec.Copy() newlabel := rec2.GetLabelFQDN() - rec2.SetLabelFromFQDN(newlabel, dstDomain.Name) + rec2.SetLabel(newlabel, dstDomain.Name) if ttl != 0 { rec2.TTL = ttl } @@ -357,17 +358,20 @@ func NormalizeAndValidateConfig(config *models.DNSConfig) (errs []error) { } } - // Check that CNAMES don't have to co-exist with any other records for _, d := range config.Domains { + // Check that CNAMES don't have to co-exist with any other records errs = append(errs, checkCNAMEs(d)...) - } - - // Check that if any aliases / ptr / etc.. are used in a domain, every provider for that domain supports them - for _, d := range config.Domains { + // Check that if any advanced record types are used in a domain, every provider for that domain supports them err := checkProviderCapabilities(d) if err != nil { errs = append(errs, err) } + // Validate FQDN consistency + for _, r := range d.Records { + if r.NameFQDN == "" || !strings.HasSuffix(r.NameFQDN, d.Name) { + errs = append(errs, fmt.Errorf("Record named '%s' does not have correct FQDN in domain '%s'. FQDN: %s", r.Name, d.Name, r.NameFQDN)) + } + } } return errs diff --git a/providers/activedir/domains.go b/providers/activedir/domains.go index e76a0beb2..861826e34 100644 --- a/providers/activedir/domains.go +++ b/providers/activedir/domains.go @@ -58,10 +58,10 @@ func (c *adProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*models.Co // Generate changes. corrections := []*models.Correction{} for _, del := range dels { - corrections = append(corrections, c.deleteRec(dc.Name, del.Existing)) + corrections = append(corrections, c.deleteRec(dc.Name, del)) } for _, cre := range creates { - corrections = append(corrections, c.createRec(dc.Name, cre.Desired)...) + corrections = append(corrections, c.createRec(dc.Name, cre)...) } for _, m := range modifications { corrections = append(corrections, c.modifyRec(dc.Name, m)) @@ -280,10 +280,11 @@ func (c *adProvider) generatePowerShellDelete(domainname, recName, recType, cont return fmt.Sprintf(text, c.adServer, domainname, recName, recType, content) } -func (c *adProvider) createRec(domainname string, rec *models.RecordConfig) []*models.Correction { +func (c *adProvider) createRec(domainname string, cre diff.Correlation) []*models.Correction { + rec := cre.Desired arr := []*models.Correction{ { - Msg: fmt.Sprintf("CREATE record: %s %s ttl(%d) %s", rec.GetLabel(), rec.Type, rec.TTL, rec.GetTargetField()), + Msg: cre.String(), F: func() error { return c.powerShellDoCommand(c.generatePowerShellCreate(domainname, rec), true) }}, @@ -301,9 +302,10 @@ func (c *adProvider) modifyRec(domainname string, m diff.Correlation) *models.Co } } -func (c *adProvider) deleteRec(domainname string, rec *models.RecordConfig) *models.Correction { +func (c *adProvider) deleteRec(domainname string, cor diff.Correlation) *models.Correction { + rec := cor.Existing return &models.Correction{ - Msg: fmt.Sprintf("DELETE record: %s %s ttl(%d) %s", rec.GetLabel(), rec.Type, rec.TTL, rec.GetTargetField()), + Msg: cor.String(), F: func() error { return c.powerShellDoCommand(c.generatePowerShellDelete(domainname, rec.GetLabel(), rec.Type, rec.GetTargetField()), true) },