github.com/teknogeek/dnscontrol/v2@v2.10.1-0.20200227202244-ae299b55ba42/providers/bind/soa.go (about) 1 package bind 2 3 import ( 4 "github.com/StackExchange/dnscontrol/v2/models" 5 ) 6 7 func makeSoa(origin string, defSoa *SoaInfo, existing, desired *models.RecordConfig) (*models.RecordConfig, uint32) { 8 // Create a SOA record. Take data from desired, existing, default, 9 // or hardcoded defaults. 10 soaRec := models.RecordConfig{} 11 soaRec.SetLabel("@", origin) 12 soaRec.TTL = models.DefaultTTL 13 14 if defSoa == nil { 15 defSoa = &SoaInfo{} 16 } 17 if existing == nil { 18 existing = &models.RecordConfig{} 19 } 20 21 if desired == nil { 22 desired = &models.RecordConfig{} 23 } 24 25 soaRec.SetTargetSOA( 26 firstNonNull(desired.GetTargetField(), existing.GetTargetField(), defSoa.Ns, "DEFAULT_NOT_SET."), 27 firstNonNull(desired.SoaMbox, existing.SoaMbox, defSoa.Mbox, "DEFAULT_NOT_SET."), 28 firstNonZero(desired.SoaSerial, existing.SoaSerial, defSoa.Serial, 1), 29 firstNonZero(desired.SoaRefresh, existing.SoaRefresh, defSoa.Refresh, 3600), 30 firstNonZero(desired.SoaRetry, existing.SoaRetry, defSoa.Retry, 600), 31 firstNonZero(desired.SoaExpire, existing.SoaExpire, defSoa.Expire, 604800), 32 firstNonZero(desired.SoaMinttl, existing.SoaMinttl, defSoa.Minttl, 1440), 33 ) 34 35 return &soaRec, generateSerial(soaRec.SoaSerial) 36 } 37 38 func firstNonNull(items ...string) string { 39 for _, item := range items { 40 if item != "" { 41 return item 42 } 43 } 44 return "FAIL" 45 } 46 47 func firstNonZero(items ...uint32) uint32 { 48 for _, item := range items { 49 if item != 0 { 50 return item 51 } 52 } 53 return 999 54 }