1
0
mirror of https://github.com/StackExchange/dnscontrol.git synced 2024-05-11 05:55:12 +00:00

Work around extra whitespace in spf records (#361)

* handle empty spf parts from bad records

* update spf tool
This commit is contained in:
Craig Peterson
2018-05-03 10:03:38 -04:00
committed by GitHub
parent f77f202b65
commit 6c60eac7c7
5 changed files with 45077 additions and 32375 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -21,41 +21,45 @@ type gResp struct {
}
}
func (g gResolver) GetTxt(fqdn string) ([]string, error) {
func (g gResolver) GetSPF(fqdn string) (string, error) {
resp, err := http.Get("https://dns.google.com/resolve?type=txt&name=" + fqdn)
if err != nil {
return nil, err
return "", err
}
defer resp.Body.Close()
dec := json.NewDecoder(resp.Body)
dat := &gResp{}
if err = dec.Decode(dat); err != nil {
return nil, err
return "", err
}
list := []string{}
for _, a := range dat.Answer {
list = append(list, strings.Trim(a.Data, "\""))
val := strings.Trim(a.Data, "\"")
if strings.HasPrefix(val, "v=spf1 ") {
return val, nil
}
}
return list, nil
return "", fmt.Errorf("No spf records found")
}
var jq = jquery.NewJQuery
var parsed *spflib.SPFRecord
var domain string
var resolver = gResolver{}
func main() {
jq(func() {
jq("#lookup_btn").On(jquery.CLICK, func(e jquery.Event) {
go func() {
domain = jq("#domain").Val()
rec, err := spflib.Lookup(domain, gResolver{})
text, err := resolver.GetSPF(domain)
fmt.Println(text)
if err != nil {
panic(err)
}
parsed, err = spflib.Parse(rec, gResolver{})
parsed, err = spflib.Parse(text, resolver)
if err != nil {
// todo: show a better error
panic(err)
}
jq("#results").SetHtml(buildHTML(parsed, domain))

View File

@ -53,6 +53,9 @@ func Parse(text string, dnsres Resolver) (*SPFRecord, error) {
parts := strings.Split(text, " ")
rec := &SPFRecord{}
for _, part := range parts[1:] {
if part == "" {
continue
}
p := &SPFPart{Text: part}
if qualifiers[part[0]] {
part = part[1:]

View File

@ -27,3 +27,15 @@ func TestParse(t *testing.T) {
}
t.Log(rec.Print())
}
func TestParseWithDoubleSpaces(t *testing.T) {
dnsres, err := NewCache("testdata-dns1.json")
if err != nil {
t.Fatal(err)
}
rec, err := Parse("v=spf1 ip4:192.111.0.0/24 ip4:192.111.1.0/24 -all", dnsres)
if err != nil {
t.Fatal(err)
}
t.Log(rec.Print())
}