logstash-filter-dns 3.1.2 → 3.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/lib/logstash/filters/dns.rb +45 -13
- data/logstash-filter-dns.gemspec +1 -1
- data/spec/filters/dns_spec.rb +11 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 42e105e5fc1ecf91266bcd1497c8ea82ac0b0224b26980c9c4cce814b1f2ec14
|
4
|
+
data.tar.gz: 96585aa3899ec180dc844cd4b9e4197e42052fd6054de5e206d1c9c11e2efc1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61b22319a08350fb1c33199332217bf54cee91989e1a2bfc03cf80c7c2a5e785056da4d0f0a2dafdcd2821147982f5c50e638e79478f1b8f7b1a0ff507dfdd33
|
7
|
+
data.tar.gz: bb8fa5118a9a2ee2f32f736ecc7fccbea4362dc2966edb36f50e40eb8eb1569af33a1df9945c027a6a5cefae8ec718b3ae98acf7bca772dbf220ff7bf1ff01cb
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
## 3.1.3
|
2
|
+
- Fixed an issue where each missed lookup could result in unreclaimed memory ([jruby bug](https://github.com/jruby/jruby/issues/6015)) by handling lookup misses without raising exceptions [#61](https://github.com/logstash-plugins/logstash-filter-dns/pull/61)
|
3
|
+
|
1
4
|
## 3.1.2
|
2
5
|
- Added restriction on JRuby resolv.rb patch to versions prior to 9.2.9.0 [#58](https://github.com/logstash-plugins/logstash-filter-dns/pull/58)
|
3
6
|
|
data/lib/logstash/filters/dns.rb
CHANGED
@@ -195,11 +195,12 @@ class LogStash::Filters::DNS < LogStash::Filters::Base
|
|
195
195
|
else
|
196
196
|
address = retriable_getaddress(raw)
|
197
197
|
end
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
198
|
+
if address.nil?
|
199
|
+
@failed_cache[raw] = true if @failed_cache
|
200
|
+
@logger.debug("DNS: couldn't resolve the hostname.",
|
201
|
+
:field => field, :value => raw)
|
202
|
+
return
|
203
|
+
end
|
203
204
|
rescue Resolv::ResolvTimeout, Timeout::Error
|
204
205
|
@failed_cache[raw] = true if @failed_cache
|
205
206
|
@logger.warn("DNS: timeout on resolving the hostname.",
|
@@ -275,11 +276,12 @@ class LogStash::Filters::DNS < LogStash::Filters::Base
|
|
275
276
|
else
|
276
277
|
hostname = retriable_getname(raw)
|
277
278
|
end
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
279
|
+
if hostname.nil?
|
280
|
+
@failed_cache[raw] = true if @failed_cache
|
281
|
+
@logger.debug("DNS: couldn't resolve the address.",
|
282
|
+
:field => field, :value => raw)
|
283
|
+
return
|
284
|
+
end
|
283
285
|
rescue Resolv::ResolvTimeout, Timeout::Error
|
284
286
|
@failed_cache[raw] = true if @failed_cache
|
285
287
|
@logger.warn("DNS: timeout on resolving address.",
|
@@ -350,13 +352,43 @@ class LogStash::Filters::DNS < LogStash::Filters::Base
|
|
350
352
|
|
351
353
|
private
|
352
354
|
def getname(address)
|
353
|
-
name = @resolv
|
354
|
-
|
355
|
+
name = resolv_getname_or_nil(@resolv, address)
|
356
|
+
name && name.force_encoding(Encoding::UTF_8)
|
357
|
+
name && IDN.toUnicode(name)
|
355
358
|
end
|
356
359
|
|
357
360
|
private
|
358
361
|
def getaddress(name)
|
359
362
|
idn = IDN.toASCII(name)
|
360
|
-
@resolv
|
363
|
+
address = resolv_getaddress_or_nil(@resolv, idn)
|
364
|
+
address && address.force_encoding(Encoding::UTF_8)
|
365
|
+
end
|
366
|
+
|
367
|
+
private
|
368
|
+
def resolv_getname_or_nil(resolver, address)
|
369
|
+
# `Resolv#each_name` yields to the provided block zero or more times;
|
370
|
+
# to prevent it from yielding multiple times when more than one match
|
371
|
+
# is found, we return directly in the block.
|
372
|
+
# See also `Resolv#getname`
|
373
|
+
resolver.each_name(address) do |name|
|
374
|
+
return name
|
375
|
+
end
|
376
|
+
|
377
|
+
# If no match was found, we return nil.
|
378
|
+
return nil
|
379
|
+
end
|
380
|
+
|
381
|
+
private
|
382
|
+
def resolv_getaddress_or_nil(resolver, name)
|
383
|
+
# `Resolv#each_address` yields to the provided block zero or more times;
|
384
|
+
# to prevent it from yielding multiple times when more than one match
|
385
|
+
# is found, we return directly in the block.
|
386
|
+
# See also `Resolv#getaddress`
|
387
|
+
resolver.each_address(name) do |address|
|
388
|
+
return address
|
389
|
+
end
|
390
|
+
|
391
|
+
# If no match was found, we return nil.
|
392
|
+
return nil
|
361
393
|
end
|
362
394
|
end # class LogStash::Filters::DNS
|
data/logstash-filter-dns.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-filter-dns'
|
4
|
-
s.version = '3.1.
|
4
|
+
s.version = '3.1.3'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "Performs a standard or reverse DNS lookup"
|
7
7
|
s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
|
data/spec/filters/dns_spec.rb
CHANGED
@@ -6,13 +6,16 @@ require "resolv"
|
|
6
6
|
describe LogStash::Filters::DNS do
|
7
7
|
describe "with stubbed Resolv" do
|
8
8
|
before(:each) do
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
allow_any_instance_of(Resolv).to receive(:
|
13
|
-
allow_any_instance_of(Resolv).to receive(:
|
14
|
-
allow_any_instance_of(Resolv).to receive(:
|
15
|
-
allow_any_instance_of(Resolv).to receive(:
|
9
|
+
# We use `Resolv#each_address` and `Resolv#each_name`, which have
|
10
|
+
# undefined return values but _yield_ once per result, so our stubs
|
11
|
+
# need to either yield a result or not yield at all if there is no result.
|
12
|
+
allow_any_instance_of(Resolv).to receive(:each_address).with("carrera.databits.net").and_yield("199.192.228.250")
|
13
|
+
allow_any_instance_of(Resolv).to receive(:each_address).with("does.not.exist") # no yield
|
14
|
+
allow_any_instance_of(Resolv).to receive(:each_address).with("nonexistanthostname###.net") # no yield
|
15
|
+
allow_any_instance_of(Resolv).to receive(:each_name).with("199.192.228.250").and_yield("carrera.databits.net")
|
16
|
+
allow_any_instance_of(Resolv).to receive(:each_name).with("127.0.0.1").and_yield("localhost")
|
17
|
+
allow_any_instance_of(Resolv).to receive(:each_name).with("128.0.0.1") # no yield
|
18
|
+
allow_any_instance_of(Resolv).to receive(:each_name).with("199.192.228.250").and_yield("carrera.databits.net")
|
16
19
|
end
|
17
20
|
|
18
21
|
describe "dns reverse lookup, replace (on a field)" do
|
@@ -305,7 +308,7 @@ describe LogStash::Filters::DNS do
|
|
305
308
|
let(:event2) { LogStash::Event.new("message" => "unkownhost") }
|
306
309
|
|
307
310
|
before(:each) do
|
308
|
-
allow(subject).to receive(:getaddress).
|
311
|
+
allow(subject).to receive(:getaddress).and_return(nil)
|
309
312
|
subject.register
|
310
313
|
end
|
311
314
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-filter-dns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|