From 42ef9f4b9e9d3b9813dcde7091a5521a053a597a Mon Sep 17 00:00:00 2001 From: Craig Peterson Date: Thu, 25 May 2017 14:25:39 -0400 Subject: [PATCH] moving a bunch of packages under pkg (#124) * moving a bunch of packages under pkg * fix gen * fix tst * oops * fix test fo real * parse mx/a --- build/generate/generate.go | 7 +- {misc => cmd}/convertzone/README.md | 0 {misc => cmd}/convertzone/main.go | 0 cmd/spftest/main.go | 20 +++--- cmd/spftest/spf-store.json | 12 ++++ cmd/spftest/spf-store2.json | 69 +++++++++++++++++++ integrationTest/integration_test.go | 2 +- js/parse_tests/008-import.js | 2 - main.go | 6 +- models/dns.go | 2 +- {dnsresolver => pkg/dnsresolver}/dnscache.go | 0 .../dnsresolver}/dnscache_test.go | 0 {dnsresolver => pkg/dnsresolver}/resolver.go | 0 {js => pkg/js}/helpers.js | 0 {js => pkg/js}/js.go | 0 {js => pkg/js}/js_test.go | 6 +- {js => pkg/js}/parse_tests/001-basic.js | 0 {js => pkg/js}/parse_tests/001-basic.json | 0 {js => pkg/js}/parse_tests/002-ttl.js | 0 {js => pkg/js}/parse_tests/002-ttl.json | 0 {js => pkg/js}/parse_tests/003-meta.js | 0 {js => pkg/js}/parse_tests/003-meta.json | 0 {js => pkg/js}/parse_tests/004-ips.js | 0 {js => pkg/js}/parse_tests/004-ips.json | 0 .../js}/parse_tests/005-multipleDomains.js | 0 .../js}/parse_tests/005-multipleDomains.json | 0 {js => pkg/js}/parse_tests/006-transforms.js | 0 .../js}/parse_tests/006-transforms.json | 0 .../js}/parse_tests/007-importTransformTTL.js | 0 .../parse_tests/007-importTransformTTL.json | 0 pkg/js/parse_tests/008-import.js | 2 + {js => pkg/js}/parse_tests/008-import.json | 0 {js => pkg/js}/parse_tests/010-alias.js | 0 {js => pkg/js}/parse_tests/010-alias.json | 0 {js => pkg/js}/parse_tests/011-cfRedirect.js | 0 .../js}/parse_tests/011-cfRedirect.json | 0 {js => pkg/js}/parse_tests/import.js | 0 {js => pkg/js}/static.go | 4 +- .../nameservers}/nameservers.go | 0 .../normalize}/importTransform_test.go | 0 {normalize => pkg/normalize}/validate.go | 2 +- {normalize => pkg/normalize}/validate_test.go | 0 {spflib => pkg/spflib}/parse.go | 49 +++++++------ {spflib => pkg/spflib}/parse_test.go | 2 +- {spflib => pkg/spflib}/testdata-dns1.json | 0 {transform => pkg/transform}/transform.go | 0 .../transform}/transform_test.go | 0 providers/cloudflare/cloudflareProvider.go | 2 +- providers/cloudflare/preprocess_test.go | 2 +- 49 files changed, 140 insertions(+), 49 deletions(-) rename {misc => cmd}/convertzone/README.md (100%) rename {misc => cmd}/convertzone/main.go (100%) create mode 100644 cmd/spftest/spf-store.json create mode 100644 cmd/spftest/spf-store2.json delete mode 100644 js/parse_tests/008-import.js rename {dnsresolver => pkg/dnsresolver}/dnscache.go (100%) rename {dnsresolver => pkg/dnsresolver}/dnscache_test.go (100%) rename {dnsresolver => pkg/dnsresolver}/resolver.go (100%) rename {js => pkg/js}/helpers.js (100%) rename {js => pkg/js}/js.go (100%) rename {js => pkg/js}/js_test.go (93%) rename {js => pkg/js}/parse_tests/001-basic.js (100%) rename {js => pkg/js}/parse_tests/001-basic.json (100%) rename {js => pkg/js}/parse_tests/002-ttl.js (100%) rename {js => pkg/js}/parse_tests/002-ttl.json (100%) rename {js => pkg/js}/parse_tests/003-meta.js (100%) rename {js => pkg/js}/parse_tests/003-meta.json (100%) rename {js => pkg/js}/parse_tests/004-ips.js (100%) rename {js => pkg/js}/parse_tests/004-ips.json (100%) rename {js => pkg/js}/parse_tests/005-multipleDomains.js (100%) rename {js => pkg/js}/parse_tests/005-multipleDomains.json (100%) rename {js => pkg/js}/parse_tests/006-transforms.js (100%) rename {js => pkg/js}/parse_tests/006-transforms.json (100%) rename {js => pkg/js}/parse_tests/007-importTransformTTL.js (100%) rename {js => pkg/js}/parse_tests/007-importTransformTTL.json (100%) create mode 100644 pkg/js/parse_tests/008-import.js rename {js => pkg/js}/parse_tests/008-import.json (100%) rename {js => pkg/js}/parse_tests/010-alias.js (100%) rename {js => pkg/js}/parse_tests/010-alias.json (100%) rename {js => pkg/js}/parse_tests/011-cfRedirect.js (100%) rename {js => pkg/js}/parse_tests/011-cfRedirect.json (100%) rename {js => pkg/js}/parse_tests/import.js (100%) rename {js => pkg/js}/static.go (99%) rename {nameservers => pkg/nameservers}/nameservers.go (100%) rename {normalize => pkg/normalize}/importTransform_test.go (100%) rename {normalize => pkg/normalize}/validate.go (99%) rename {normalize => pkg/normalize}/validate_test.go (100%) rename {spflib => pkg/spflib}/parse.go (71%) rename {spflib => pkg/spflib}/parse_test.go (91%) rename {spflib => pkg/spflib}/testdata-dns1.json (100%) rename {transform => pkg/transform}/transform.go (100%) rename {transform => pkg/transform}/transform_test.go (100%) diff --git a/build/generate/generate.go b/build/generate/generate.go index c2743851a..764e7d7c0 100644 --- a/build/generate/generate.go +++ b/build/generate/generate.go @@ -5,14 +5,13 @@ import ( ) func main() { - //go:generate esc -modtime 0 -o js/static.go -pkg js -include helpers\.js -ignore go -prefix js js conf := &embed.Config{ ModTime: "0", - OutputFile: "js/static.go", + OutputFile: "pkg/js/static.go", Package: "js", - Prefix: "js", + Prefix: "pkg/js", Private: true, - Files: []string{`js/helpers.js`}, + Files: []string{`pkg/js/helpers.js`}, } embed.Run(conf) } diff --git a/misc/convertzone/README.md b/cmd/convertzone/README.md similarity index 100% rename from misc/convertzone/README.md rename to cmd/convertzone/README.md diff --git a/misc/convertzone/main.go b/cmd/convertzone/main.go similarity index 100% rename from misc/convertzone/main.go rename to cmd/convertzone/main.go diff --git a/cmd/spftest/main.go b/cmd/spftest/main.go index df3a86c96..2e698621c 100644 --- a/cmd/spftest/main.go +++ b/cmd/spftest/main.go @@ -4,8 +4,8 @@ import ( "fmt" "strings" - "github.com/StackExchange/dnscontrol/dnsresolver" - "github.com/StackExchange/dnscontrol/spflib" + "github.com/StackExchange/dnscontrol/pkg/dnsresolver" + "github.com/StackExchange/dnscontrol/pkg/spflib" ) func main() { @@ -27,9 +27,11 @@ func main() { fmt.Println("---------------------") fmt.Println() - res := dnsresolver.NewResolverLive("preload-dns.json") - //res := dnsresolver.NewResolverPreloaded("preload-dns.json") - + //res := dnsresolver.NewResolverLive("spf-store2.json") + res, err := dnsresolver.NewResolverPreloaded("spf-store2.json") + if err != nil { + panic(err) + } rec, err := spflib.Parse(strings.Join([]string{"v=spf1", "ip4:198.252.206.0/24", "ip4:192.111.0.0/24", @@ -50,15 +52,15 @@ func main() { fmt.Println("---------------------") fmt.Println() - var spfs []string - spfs, err = spflib.Lookup("stackex.com", res) + var spf string + spf, err = spflib.Lookup("whatexit.org", res) if err != nil { panic(err) } - rec, err = spflib.Parse(strings.Join(spfs, " "), res) + rec, err = spflib.Parse(spf, res) if err != nil { panic(err) } spflib.DumpSPF(rec, "") - + //res.Close() } diff --git a/cmd/spftest/spf-store.json b/cmd/spftest/spf-store.json new file mode 100644 index 000000000..d1e1eaa81 --- /dev/null +++ b/cmd/spftest/spf-store.json @@ -0,0 +1,12 @@ +{ + "_spf.google.com": { + "txt": [ + "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all" + ] + }, + "spf-basic.fogcreek.com": { + "txt": [ + "v=spf1 ip4:64.34.80.172 -all" + ] + } +} diff --git a/cmd/spftest/spf-store2.json b/cmd/spftest/spf-store2.json new file mode 100644 index 000000000..8cddaa5a3 --- /dev/null +++ b/cmd/spftest/spf-store2.json @@ -0,0 +1,69 @@ +{ + "_netblocks.google.com": { + "txt": [ + "v=spf1 ip4:64.18.0.0/20 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:207.126.144.0/20 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all" + ] + }, + "_netblocks2.google.com": { + "txt": [ + "v=spf1 ip6:2001:4860:4000::/36 ip6:2404:6800:4000::/36 ip6:2607:f8b0:4000::/36 ip6:2800:3f0:4000::/36 ip6:2a00:1450:4000::/36 ip6:2c0f:fb50:4000::/36 ~all" + ] + }, + "_netblocks3.google.com": { + "txt": [ + "v=spf1 ip4:172.217.0.0/19 ip4:108.177.96.0/19 ~all" + ] + }, + "_spf.google.com": { + "txt": [ + "v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all" + ] + }, + "mail.zendesk.com": { + "txt": [ + "v=spf1 ip4:192.161.144.0/20 ip4:185.12.80.0/22 ip4:96.46.150.192/27 ip4:174.137.46.0/24 ip4:188.172.128.0/20 ip4:216.198.0.0/18 ~all" + ] + }, + "mailgun.org": { + "txt": [ + "google-site-verification=FIGVOKZm6lQFDBJaiC2DdwvBy8TInunoGCt-1gnL4PA", + "v=spf1 include:spf1.mailgun.org include:spf2.mailgun.org ~all" + ] + }, + "sendgrid.net": { + "txt": [ + "v=spf1 ip4:167.89.0.0/17 ip4:208.117.48.0/20 ip4:50.31.32.0/19 ip4:198.37.144.0/20 ip4:198.21.0.0/21 ip4:192.254.112.0/20 ip4:168.245.0.0/17 ~all", + "google-site-verification=NxyooVvVaIgddVa23KTlOEuVPuhffcDqJFV8RzWrAys" + ] + }, + "servers.mcsv.net": { + "txt": [ + "v=spf1 ip4:205.201.128.0/20 ip4:198.2.128.0/18 ip4:148.105.8.0/21 ?all" + ] + }, + "spf-basic.fogcreek.com": { + "txt": [ + "v=spf1 ip4:64.34.80.172 -all" + ] + }, + "spf.mtasv.net": { + "txt": [ + "v=spf1 ip4:50.31.156.96/27 ip4:104.245.209.192/26 ~all" + ] + }, + "spf1.mailgun.org": { + "txt": [ + "v=spf1 ip4:173.193.210.32/27 ip4:50.23.218.192/27 ip4:174.37.226.64/27 ip4:208.43.239.136/30 ip4:184.173.105.0/24 ip4:184.173.153.0/24 ip4:104.130.122.0/23 ip4:146.20.112.0/26 ~all" + ] + }, + "spf2.mailgun.org": { + "txt": [ + "v=spf1 ip4:209.61.151.0/24 ip4:166.78.68.0/22 ip4:198.61.254.0/23 ip4:192.237.158.0/23 ip4:23.253.182.0/23 ip4:104.130.96.0/28 ip4:146.20.113.0/24 ip4:146.20.191.0/24 ~all" + ] + }, + "whatexit.org": { + "txt": [ + "v=spf1 ip6:2607:f2f8:a9c0::3 ip4:174.136.107.195 include:servers.mcsv.net include:_spf.google.com mx:evite.com -all" + ] + } +} diff --git a/integrationTest/integration_test.go b/integrationTest/integration_test.go index 6428abf94..ad6ba9f14 100644 --- a/integrationTest/integration_test.go +++ b/integrationTest/integration_test.go @@ -10,7 +10,7 @@ import ( "strings" "github.com/StackExchange/dnscontrol/models" - "github.com/StackExchange/dnscontrol/nameservers" + "github.com/StackExchange/dnscontrol/pkg/nameservers" "github.com/StackExchange/dnscontrol/providers" _ "github.com/StackExchange/dnscontrol/providers/_all" "github.com/StackExchange/dnscontrol/providers/config" diff --git a/js/parse_tests/008-import.js b/js/parse_tests/008-import.js deleted file mode 100644 index 99e27afef..000000000 --- a/js/parse_tests/008-import.js +++ /dev/null @@ -1,2 +0,0 @@ - -require("js/parse_tests/import.js") diff --git a/main.go b/main.go index d530cce1f..78f28783f 100644 --- a/main.go +++ b/main.go @@ -12,10 +12,10 @@ import ( "strings" "time" - "github.com/StackExchange/dnscontrol/js" "github.com/StackExchange/dnscontrol/models" - "github.com/StackExchange/dnscontrol/nameservers" - "github.com/StackExchange/dnscontrol/normalize" + "github.com/StackExchange/dnscontrol/pkg/js" + "github.com/StackExchange/dnscontrol/pkg/nameservers" + "github.com/StackExchange/dnscontrol/pkg/normalize" "github.com/StackExchange/dnscontrol/providers" _ "github.com/StackExchange/dnscontrol/providers/_all" "github.com/StackExchange/dnscontrol/providers/config" diff --git a/models/dns.go b/models/dns.go index 47c0bbb7b..7d95cb740 100644 --- a/models/dns.go +++ b/models/dns.go @@ -10,7 +10,7 @@ import ( "reflect" "strconv" - "github.com/StackExchange/dnscontrol/transform" + "github.com/StackExchange/dnscontrol/pkg/transform" "github.com/miekg/dns" "golang.org/x/net/idna" ) diff --git a/dnsresolver/dnscache.go b/pkg/dnsresolver/dnscache.go similarity index 100% rename from dnsresolver/dnscache.go rename to pkg/dnsresolver/dnscache.go diff --git a/dnsresolver/dnscache_test.go b/pkg/dnsresolver/dnscache_test.go similarity index 100% rename from dnsresolver/dnscache_test.go rename to pkg/dnsresolver/dnscache_test.go diff --git a/dnsresolver/resolver.go b/pkg/dnsresolver/resolver.go similarity index 100% rename from dnsresolver/resolver.go rename to pkg/dnsresolver/resolver.go diff --git a/js/helpers.js b/pkg/js/helpers.js similarity index 100% rename from js/helpers.js rename to pkg/js/helpers.js diff --git a/js/js.go b/pkg/js/js.go similarity index 100% rename from js/js.go rename to pkg/js/js.go diff --git a/js/js_test.go b/pkg/js/js_test.go similarity index 93% rename from js/js_test.go rename to pkg/js/js_test.go index 17f67a678..a2432011b 100644 --- a/js/js_test.go +++ b/pkg/js/js_test.go @@ -12,12 +12,12 @@ import ( ) const ( - testDir = "js/parse_tests" - errorDir = "js/error_tests" + testDir = "pkg/js/parse_tests" + errorDir = "pkg/js/error_tests" ) func init() { - os.Chdir("..") // go up a directory so we helpers.js is in a consistent place. + os.Chdir("../..") // go up a directory so we helpers.js is in a consistent place. } func TestParsedFiles(t *testing.T) { diff --git a/js/parse_tests/001-basic.js b/pkg/js/parse_tests/001-basic.js similarity index 100% rename from js/parse_tests/001-basic.js rename to pkg/js/parse_tests/001-basic.js diff --git a/js/parse_tests/001-basic.json b/pkg/js/parse_tests/001-basic.json similarity index 100% rename from js/parse_tests/001-basic.json rename to pkg/js/parse_tests/001-basic.json diff --git a/js/parse_tests/002-ttl.js b/pkg/js/parse_tests/002-ttl.js similarity index 100% rename from js/parse_tests/002-ttl.js rename to pkg/js/parse_tests/002-ttl.js diff --git a/js/parse_tests/002-ttl.json b/pkg/js/parse_tests/002-ttl.json similarity index 100% rename from js/parse_tests/002-ttl.json rename to pkg/js/parse_tests/002-ttl.json diff --git a/js/parse_tests/003-meta.js b/pkg/js/parse_tests/003-meta.js similarity index 100% rename from js/parse_tests/003-meta.js rename to pkg/js/parse_tests/003-meta.js diff --git a/js/parse_tests/003-meta.json b/pkg/js/parse_tests/003-meta.json similarity index 100% rename from js/parse_tests/003-meta.json rename to pkg/js/parse_tests/003-meta.json diff --git a/js/parse_tests/004-ips.js b/pkg/js/parse_tests/004-ips.js similarity index 100% rename from js/parse_tests/004-ips.js rename to pkg/js/parse_tests/004-ips.js diff --git a/js/parse_tests/004-ips.json b/pkg/js/parse_tests/004-ips.json similarity index 100% rename from js/parse_tests/004-ips.json rename to pkg/js/parse_tests/004-ips.json diff --git a/js/parse_tests/005-multipleDomains.js b/pkg/js/parse_tests/005-multipleDomains.js similarity index 100% rename from js/parse_tests/005-multipleDomains.js rename to pkg/js/parse_tests/005-multipleDomains.js diff --git a/js/parse_tests/005-multipleDomains.json b/pkg/js/parse_tests/005-multipleDomains.json similarity index 100% rename from js/parse_tests/005-multipleDomains.json rename to pkg/js/parse_tests/005-multipleDomains.json diff --git a/js/parse_tests/006-transforms.js b/pkg/js/parse_tests/006-transforms.js similarity index 100% rename from js/parse_tests/006-transforms.js rename to pkg/js/parse_tests/006-transforms.js diff --git a/js/parse_tests/006-transforms.json b/pkg/js/parse_tests/006-transforms.json similarity index 100% rename from js/parse_tests/006-transforms.json rename to pkg/js/parse_tests/006-transforms.json diff --git a/js/parse_tests/007-importTransformTTL.js b/pkg/js/parse_tests/007-importTransformTTL.js similarity index 100% rename from js/parse_tests/007-importTransformTTL.js rename to pkg/js/parse_tests/007-importTransformTTL.js diff --git a/js/parse_tests/007-importTransformTTL.json b/pkg/js/parse_tests/007-importTransformTTL.json similarity index 100% rename from js/parse_tests/007-importTransformTTL.json rename to pkg/js/parse_tests/007-importTransformTTL.json diff --git a/pkg/js/parse_tests/008-import.js b/pkg/js/parse_tests/008-import.js new file mode 100644 index 000000000..d1c689a5f --- /dev/null +++ b/pkg/js/parse_tests/008-import.js @@ -0,0 +1,2 @@ + +require("pkg/js/parse_tests/import.js") diff --git a/js/parse_tests/008-import.json b/pkg/js/parse_tests/008-import.json similarity index 100% rename from js/parse_tests/008-import.json rename to pkg/js/parse_tests/008-import.json diff --git a/js/parse_tests/010-alias.js b/pkg/js/parse_tests/010-alias.js similarity index 100% rename from js/parse_tests/010-alias.js rename to pkg/js/parse_tests/010-alias.js diff --git a/js/parse_tests/010-alias.json b/pkg/js/parse_tests/010-alias.json similarity index 100% rename from js/parse_tests/010-alias.json rename to pkg/js/parse_tests/010-alias.json diff --git a/js/parse_tests/011-cfRedirect.js b/pkg/js/parse_tests/011-cfRedirect.js similarity index 100% rename from js/parse_tests/011-cfRedirect.js rename to pkg/js/parse_tests/011-cfRedirect.js diff --git a/js/parse_tests/011-cfRedirect.json b/pkg/js/parse_tests/011-cfRedirect.json similarity index 100% rename from js/parse_tests/011-cfRedirect.json rename to pkg/js/parse_tests/011-cfRedirect.json diff --git a/js/parse_tests/import.js b/pkg/js/parse_tests/import.js similarity index 100% rename from js/parse_tests/import.js rename to pkg/js/parse_tests/import.js diff --git a/js/static.go b/pkg/js/static.go similarity index 99% rename from js/static.go rename to pkg/js/static.go index 4e15971dd..3391ec786 100644 --- a/js/static.go +++ b/pkg/js/static.go @@ -189,7 +189,7 @@ func _escFSMustString(useLocal bool, name string) string { var _escData = map[string]*_escFile{ "/helpers.js": { - local: "js/helpers.js", + local: "pkg/js/helpers.js", size: 8320, modtime: 0, compressed: ` @@ -240,6 +240,6 @@ juGPPwSZXUc736wWxSGRz1JGA/lBJGQc4pypseoabTAEaRwj1nqyQmvwU+ljuaLdYjToWa7VE3qVnY+p "/": { isDir: true, - local: "js", + local: "pkg/js", }, } diff --git a/nameservers/nameservers.go b/pkg/nameservers/nameservers.go similarity index 100% rename from nameservers/nameservers.go rename to pkg/nameservers/nameservers.go diff --git a/normalize/importTransform_test.go b/pkg/normalize/importTransform_test.go similarity index 100% rename from normalize/importTransform_test.go rename to pkg/normalize/importTransform_test.go diff --git a/normalize/validate.go b/pkg/normalize/validate.go similarity index 99% rename from normalize/validate.go rename to pkg/normalize/validate.go index a9b4a06b8..6d917cdd6 100644 --- a/normalize/validate.go +++ b/pkg/normalize/validate.go @@ -6,8 +6,8 @@ import ( "strings" "github.com/StackExchange/dnscontrol/models" + "github.com/StackExchange/dnscontrol/pkg/transform" "github.com/StackExchange/dnscontrol/providers" - "github.com/StackExchange/dnscontrol/transform" "github.com/miekg/dns" "github.com/miekg/dns/dnsutil" ) diff --git a/normalize/validate_test.go b/pkg/normalize/validate_test.go similarity index 100% rename from normalize/validate_test.go rename to pkg/normalize/validate_test.go diff --git a/spflib/parse.go b/pkg/spflib/parse.go similarity index 71% rename from spflib/parse.go rename to pkg/spflib/parse.go index 37cb61a4c..52a3c5ee4 100644 --- a/spflib/parse.go +++ b/pkg/spflib/parse.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - "github.com/StackExchange/dnscontrol/dnsresolver" + "github.com/StackExchange/dnscontrol/pkg/dnsresolver" ) type SPFRecord struct { @@ -18,10 +18,10 @@ type SPFPart struct { IncludeRecord *SPFRecord } -func Lookup(target string, dnsres dnsresolver.DnsResolver) ([]string, error) { +func Lookup(target string, dnsres dnsresolver.DnsResolver) (string, error) { txts, err := dnsres.GetTxt(target) if err != nil { - return nil, err + return "", err } var result []string for _, txt := range txts { @@ -29,7 +29,20 @@ func Lookup(target string, dnsres dnsresolver.DnsResolver) ([]string, error) { result = append(result, txt) } } - return result, nil + if len(result) == 0 { + return "", fmt.Errorf("%s has no spf TXT records", target) + } + if len(result) != 1 { + return "", fmt.Errorf("%s has multiple spf TXT records", target) + } + return result[0], nil +} + +var qualifiers = map[byte]bool{ + '?': true, + '~': true, + '-': true, + '+': true, } func Parse(text string, dnsres dnsresolver.DnsResolver) (*SPFRecord, error) { @@ -40,17 +53,23 @@ func Parse(text string, dnsres dnsresolver.DnsResolver) (*SPFRecord, error) { rec := &SPFRecord{} for _, part := range parts[1:] { p := &SPFPart{Text: part} + if qualifiers[part[0]] { + part = part[1:] + } rec.Parts = append(rec.Parts, p) - if part == "~all" || part == "-all" || part == "?all" { + if part == "all" { //all. nothing else matters. break + } else if strings.HasPrefix(part, "a") || strings.HasPrefix(part, "mx") { + rec.Lookups++ + p.Lookups = 1 } else if strings.HasPrefix(part, "ip4:") || strings.HasPrefix(part, "ip6:") { //ip address, 0 lookups continue } else if strings.HasPrefix(part, "include:") { rec.Lookups++ includeTarget := strings.TrimPrefix(part, "include:") - subRecord, err := resolveSPF(includeTarget, dnsres) + subRecord, err := Lookup(includeTarget, dnsres) if err != nil { return nil, err } @@ -59,6 +78,7 @@ func Parse(text string, dnsres dnsresolver.DnsResolver) (*SPFRecord, error) { return nil, fmt.Errorf("In included spf: %s", err) } rec.Lookups += p.IncludeRecord.Lookups + p.Lookups = p.IncludeRecord.Lookups + 1 } else { return nil, fmt.Errorf("Unsupported spf part %s", part) } @@ -77,22 +97,11 @@ func DumpSPF(rec *SPFRecord, indent string) { fmt.Println() indent += "\t" for _, p := range rec.Parts { - if p.IncludeRecord != nil { + if p.Lookups > 0 { fmt.Println(indent + p.Text) + } + if p.IncludeRecord != nil { DumpSPF(p.IncludeRecord, indent+"\t") } } } - -func resolveSPF(target string, dnsres dnsresolver.DnsResolver) (string, error) { - recs, err := dnsres.GetTxt(target) - if err != nil { - return "", err - } - for _, r := range recs { - if strings.HasPrefix(r, "v=spf1 ") { - return r, nil - } - } - return "", fmt.Errorf("No SPF records found for %s", target) -} diff --git a/spflib/parse_test.go b/pkg/spflib/parse_test.go similarity index 91% rename from spflib/parse_test.go rename to pkg/spflib/parse_test.go index aee030509..b6c1513ee 100644 --- a/spflib/parse_test.go +++ b/pkg/spflib/parse_test.go @@ -4,7 +4,7 @@ import ( "strings" "testing" - "github.com/StackExchange/dnscontrol/dnsresolver" + "github.com/StackExchange/dnscontrol/pkg/dnsresolver" ) func TestParse(t *testing.T) { diff --git a/spflib/testdata-dns1.json b/pkg/spflib/testdata-dns1.json similarity index 100% rename from spflib/testdata-dns1.json rename to pkg/spflib/testdata-dns1.json diff --git a/transform/transform.go b/pkg/transform/transform.go similarity index 100% rename from transform/transform.go rename to pkg/transform/transform.go diff --git a/transform/transform_test.go b/pkg/transform/transform_test.go similarity index 100% rename from transform/transform_test.go rename to pkg/transform/transform_test.go diff --git a/providers/cloudflare/cloudflareProvider.go b/providers/cloudflare/cloudflareProvider.go index 5794f46e1..a847cf592 100644 --- a/providers/cloudflare/cloudflareProvider.go +++ b/providers/cloudflare/cloudflareProvider.go @@ -9,9 +9,9 @@ import ( "time" "github.com/StackExchange/dnscontrol/models" + "github.com/StackExchange/dnscontrol/pkg/transform" "github.com/StackExchange/dnscontrol/providers" "github.com/StackExchange/dnscontrol/providers/diff" - "github.com/StackExchange/dnscontrol/transform" "github.com/miekg/dns/dnsutil" ) diff --git a/providers/cloudflare/preprocess_test.go b/providers/cloudflare/preprocess_test.go index b30396ef4..f23e458c0 100644 --- a/providers/cloudflare/preprocess_test.go +++ b/providers/cloudflare/preprocess_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/StackExchange/dnscontrol/models" - "github.com/StackExchange/dnscontrol/transform" + "github.com/StackExchange/dnscontrol/pkg/transform" ) func newDomainConfig() *models.DomainConfig {