@@ -20,11 +20,6 @@ type dnsTXT struct {
20
20
plugin * dnsPlugin
21
21
}
22
22
23
- type relTXT struct {
24
- txt * dbt.Entity
25
- target * dbt.Entity
26
- }
27
-
28
23
func (d * dnsTXT ) check (e * et.Event ) error {
29
24
_ , ok := e .Entity .Asset .(* oamdns.FQDN )
30
25
if ! ok {
@@ -36,93 +31,62 @@ func (d *dnsTXT) check(e *et.Event) error {
36
31
return err
37
32
}
38
33
39
- var txtRecords []* relTXT
34
+ var txtRecords []* resolve. ExtractedAnswer
40
35
src := d .plugin .source
41
36
if support .AssetMonitoredWithinTTL (e .Session , e .Entity , src , since ) {
42
- txtRecords = append ( txtRecords , d .lookup (e , e .Entity , since ) ... )
37
+ txtRecords = d .lookup (e , e .Entity , since )
43
38
} else {
44
- txtRecords = append ( txtRecords , d .query (e , e .Entity ) ... )
39
+ txtRecords = d .query (e , e .Entity )
45
40
}
46
41
47
42
if len (txtRecords ) > 0 {
48
- d .process (e , txtRecords )
43
+ d .process (e , e . Entity , txtRecords )
49
44
}
50
45
return nil
51
46
}
52
47
53
- func (d * dnsTXT ) lookup (e * et.Event , fqdn * dbt.Entity , since time.Time ) []* relTXT {
54
- var txtRecords []* relTXT
48
+ func (d * dnsTXT ) lookup (e * et.Event , fqdn * dbt.Entity , since time.Time ) []* resolve. ExtractedAnswer {
49
+ var txtRecords []* resolve. ExtractedAnswer
55
50
56
51
n , ok := fqdn .Asset .(* oamdns.FQDN )
57
52
if ! ok || n == nil {
58
53
return txtRecords
59
54
}
60
55
61
- if assets := d .plugin .lookupWithinTTL (e .Session , n .Name , oam .FQDN , since , oam .BasicDNSRelation , 5 ); len (assets ) > 0 {
56
+ if assets := d .plugin .lookupWithinTTL (e .Session , n .Name , oam .FQDN , since , oam .BasicDNSRelation , dns . TypeTXT ); len (assets ) > 0 {
62
57
for _ , a := range assets {
63
- txtRecords = append (txtRecords , & relTXT {txt : fqdn , target : a })
58
+ txtRecords = append (txtRecords , & resolve.ExtractedAnswer {
59
+ Type : dns .TypeTXT ,
60
+ Data : a .Asset .(* oamdns.FQDN ).Name ,
61
+ })
64
62
}
65
63
}
66
64
return txtRecords
67
65
}
68
66
69
- func (d * dnsTXT ) query (e * et.Event , name * dbt.Entity ) []* relTXT {
70
- var txtRecords []* relTXT
67
+ func (d * dnsTXT ) query (e * et.Event , name * dbt.Entity ) []* resolve. ExtractedAnswer {
68
+ var txtRecords []* resolve. ExtractedAnswer
71
69
72
70
fqdn := name .Asset .(* oamdns.FQDN )
73
71
if rr , err := support .PerformQuery (fqdn .Name , dns .TypeTXT ); err == nil {
74
- if records := d .store (e , name , rr ); len (records ) > 0 {
75
- txtRecords = append (txtRecords , records ... )
76
- support .MarkAssetMonitored (e .Session , name , d .plugin .source )
77
- }
72
+ txtRecords = append (txtRecords , rr ... )
73
+ support .MarkAssetMonitored (e .Session , name , d .plugin .source )
78
74
}
79
75
80
76
return txtRecords
81
77
}
82
78
83
- func (d * dnsTXT ) store (e * et.Event , fqdn * dbt.Entity , rr []* resolve.ExtractedAnswer ) []* relTXT {
84
- var txtRecords []* relTXT
85
-
86
- for _ , record := range rr {
79
+ func (d * dnsTXT ) process (e * et.Event , fqdn * dbt.Entity , txtRecords []* resolve.ExtractedAnswer ) {
80
+ for _ , record := range txtRecords {
87
81
if record .Type != dns .TypeTXT {
88
82
continue
89
83
}
90
84
91
- if txt , err := e .Session .Cache ().CreateAsset (& oamdns.FQDN {Name : record .Data }); err == nil && txt != nil {
92
- if edge , err := e .Session .Cache ().CreateEdge (& dbt.Edge {
93
- Relation : & oamdns.BasicDNSRelation {
94
- Name : "dns_record" ,
95
- Header : oamdns.RRHeader {
96
- RRType : int (record .Type ),
97
- Class : 1 ,
98
- },
99
- },
100
- FromEntity : fqdn ,
101
- ToEntity : txt ,
102
- }); err == nil && edge != nil {
103
- txtRecords = append (txtRecords , & relTXT {txt : fqdn , target : txt })
104
- _ , _ = e .Session .Cache ().CreateEdgeProperty (edge , & general.SourceProperty {
105
- Source : d .plugin .source .Name ,
106
- Confidence : d .plugin .source .Confidence ,
107
- })
108
- }
109
- }
110
- }
111
-
112
- return txtRecords
113
- }
114
-
115
- func (d * dnsTXT ) process (e * et.Event , txtRecords []* relTXT ) {
116
- for _ , a := range txtRecords {
117
- target := a .target .Asset .(* oamdns.FQDN )
118
-
119
- _ = e .Dispatcher .DispatchEvent (& et.Event {
120
- Name : target .Name ,
121
- Entity : a .target ,
122
- Session : e .Session ,
85
+ _ , _ = e .Session .Cache ().CreateEntityProperty (fqdn , & oamdns.DNSProperty {
86
+ Name : "TXT" ,
87
+ Value : record .Data ,
123
88
})
124
89
125
- e .Session .Log ().Info ("relationship discovered" , "from" , d .plugin .source .Name , "relation" ,
126
- "txt_record" , "to" , target .Name , slog .Group ("plugin" , "name" , d .plugin .name , "handler" , d .name ))
90
+ e .Session .Log ().Info ("TXT record discovered" , "fqdn" , fqdn .Asset .(* oamdns.FQDN ).Name , "txt" , record .Data , slog .Group ("plugin" , "name" , d .plugin .name , "handler" , d .name ))
127
91
}
128
92
}
0 commit comments