@@ -20,6 +20,7 @@ type SpamData struct {
20
20
IP string
21
21
Dmarc []dns.RR
22
22
Spf []dns.RR
23
+ BIMI []dns.RR
23
24
Error string
24
25
}
25
26
@@ -35,6 +36,7 @@ func NewSpam(s *scan.Scan, ns []structs.NSData) *SpamCheck {
35
36
func (c * SpamCheck ) Scan (domain string ) {
36
37
c .ScanDmarc (domain )
37
38
c .ScanSpf (domain )
39
+ c .ScanBIMI (domain )
38
40
}
39
41
40
42
func (c * SpamCheck ) ScanDmarc (domain string ) {
@@ -54,6 +56,23 @@ func (c *SpamCheck) ScanDmarc(domain string) {
54
56
}
55
57
}
56
58
59
+ func (c * SpamCheck ) ScanBIMI (domain string ) {
60
+ log .Debugf ("Spam: scanbimi" )
61
+ defer log .Debugf ("Spam: scanbimi exit" )
62
+
63
+ for _ , ns := range c .NS {
64
+ for _ , nsip := range ns .IP {
65
+ data := SpamData {Name : ns .Name , IP : nsip .String ()}
66
+
67
+ bimi , _ , err := scan .QueryRRset ("default._bimi." + domain , dns .TypeTXT , nsip .String (), true )
68
+ if ! c .Report .scanError ("BIMI scan" , ns .Name , nsip .String (), domain , bimi , err ) {
69
+ data .BIMI = bimi
70
+ c .Spam = append (c .Spam , data )
71
+ }
72
+ }
73
+ }
74
+ }
75
+
57
76
func (c * SpamCheck ) ScanSpf (domain string ) {
58
77
log .Debugf ("Spam: scanspf" )
59
78
defer log .Debugf ("Spam: scanspf exit" )
@@ -182,6 +201,26 @@ func (c *SpamCheck) Values() []ReportResult {
182
201
}
183
202
}
184
203
204
+ rrset = nil
205
+ for _ , ns := range c .Spam {
206
+ if ns .BIMI != nil {
207
+ rrset = ns .BIMI
208
+ break
209
+ }
210
+ }
211
+
212
+ if len (rrset ) > 0 {
213
+ records := []string {}
214
+ for _ , rr := range rrset {
215
+ records = append (records , rr .String ())
216
+ }
217
+
218
+ results = append (results , ReportResult {
219
+ Result : "INFO: BIMI records found." ,
220
+ Status : true , Records : records , Name : "BIMI" ,
221
+ })
222
+ }
223
+
185
224
// TODO
186
225
// dmarc: p=none recommendation?
187
226
// spf: further recommendations ?
0 commit comments