logstash-codec-cef 4.0.0-java → 4.1.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/lib/logstash/codecs/cef.rb +41 -5
- data/logstash-codec-cef.gemspec +1 -1
- data/spec/codecs/cef_spec.rb +42 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f01e9a10dba1242f1db5e742622aa2b919a4e611
|
4
|
+
data.tar.gz: 0381084bd82fe355d71ee4b09da90042cc5d35b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8eb490d24e26857673c34e6deb1b99a8b3be90ed168b015024aa4ad80d9f2565f1cd2b7f99fd761b5a300cf3de616af8d1fb75f2fb5c620930b7136ede4542d4
|
7
|
+
data.tar.gz: 3d64f1093864b14fc3a58f15cc19a3e5ab1942b286d7f35dda70071efd1a992db5a362595bad6fa1345a92bda367e3a43b812dc4af16b4012d2d639bdb534a70
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
## 4.1.0
|
2
|
+
- Add `delimiter` setting. This allows the decoder to be used with inputs like the TCP input where event delimiters are used.
|
3
|
+
|
1
4
|
## 4.0.0
|
2
5
|
- Implements the dictionary translation for abbreviated CEF field names from chapter Chapter 2: ArcSight Extension Dictionary page 3 of 39 [CEF specification](https://protect724.hp.com/docs/DOC-1072).
|
3
6
|
- add `_cefparsefailure` tag on failed decode
|
data/lib/logstash/codecs/cef.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
require "logstash/util/buftok"
|
2
3
|
require "logstash/codecs/base"
|
3
4
|
require "json"
|
4
5
|
|
@@ -39,7 +40,7 @@ class LogStash::Codecs::CEF < LogStash::Codecs::Base
|
|
39
40
|
# Defined as field of type string to allow sprintf. The value will be validated
|
40
41
|
# to be an integer in the range from 0 to 10 (including).
|
41
42
|
# All invalid values will be mapped to the default of 6.
|
42
|
-
config :sev, :validate => :string, :
|
43
|
+
config :sev, :validate => :string, :deprecated => "This setting is being deprecated, use :severity instead."
|
43
44
|
|
44
45
|
# Severity field in CEF header. The new value can include `%{foo}` strings
|
45
46
|
# to help you build a new value from other parts of the event.
|
@@ -55,7 +56,25 @@ class LogStash::Codecs::CEF < LogStash::Codecs::Base
|
|
55
56
|
# Set this flag if you want to have both v1 and v2 fields indexed at the same time. Note that this option will increase
|
56
57
|
# the index size and data stored in outputs like Elasticsearch
|
57
58
|
# This option is available to ease transition to new schema
|
58
|
-
config :deprecated_v1_fields, :validate => :boolean, :
|
59
|
+
config :deprecated_v1_fields, :validate => :boolean, :deprecated => "This setting is being deprecated"
|
60
|
+
|
61
|
+
# If your input puts a delimiter between each CEF event, you'll want to set
|
62
|
+
# this to be that delimiter.
|
63
|
+
#
|
64
|
+
# For example, with the TCP input, you probably want to put this:
|
65
|
+
#
|
66
|
+
# input {
|
67
|
+
# tcp {
|
68
|
+
# codec => cef { delimiter => "\r\n" }
|
69
|
+
# # ...
|
70
|
+
# }
|
71
|
+
# }
|
72
|
+
#
|
73
|
+
# This setting allows the following character sequences to have special meaning:
|
74
|
+
#
|
75
|
+
# * `\\r` (backslash "r") - means carriage return (ASCII 0x0D)
|
76
|
+
# * `\\n` (backslash "n") - means newline (ASCII 0x0A)
|
77
|
+
config :delimiter, :validate => :string
|
59
78
|
|
60
79
|
HEADER_FIELDS = ['cefVersion','deviceVendor','deviceProduct','deviceVersion','deviceEventClassId','name','severity']
|
61
80
|
|
@@ -67,6 +86,13 @@ class LogStash::Codecs::CEF < LogStash::Codecs::Base
|
|
67
86
|
public
|
68
87
|
def initialize(params={})
|
69
88
|
super(params)
|
89
|
+
if @delimiter
|
90
|
+
# Logstash configuration doesn't have built-in support for escaping,
|
91
|
+
# so we implement it here. Feature discussion for escaping is here:
|
92
|
+
# https://github.com/elastic/logstash/issues/1645
|
93
|
+
@delimiter = @delimiter.gsub("\\r", "\r").gsub("\\n", "\n")
|
94
|
+
@buffer = FileWatch::BufferedTokenizer.new(@delimiter)
|
95
|
+
end
|
70
96
|
end
|
71
97
|
|
72
98
|
private
|
@@ -76,7 +102,17 @@ class LogStash::Codecs::CEF < LogStash::Codecs::Base
|
|
76
102
|
end
|
77
103
|
|
78
104
|
public
|
79
|
-
def decode(data)
|
105
|
+
def decode(data, &block)
|
106
|
+
if @delimiter
|
107
|
+
@buffer.extract(data).each do |line|
|
108
|
+
handle(line, &block)
|
109
|
+
end
|
110
|
+
else
|
111
|
+
handle(data, &block)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def handle(data, &block)
|
80
116
|
# Strip any quotations at the start and end, flex connectors seem to send this
|
81
117
|
if data[0] == "\""
|
82
118
|
data = data[1..-2]
|
@@ -172,7 +208,7 @@ class LogStash::Codecs::CEF < LogStash::Codecs::Base
|
|
172
208
|
|
173
209
|
# :sev is deprecated and therefore only considered if :severity equals the default setting or is invalid
|
174
210
|
severity = sanitize_severity(event, @severity)
|
175
|
-
if severity == self.class.get_config["severity"][:default]
|
211
|
+
if severity == self.class.get_config["severity"][:default] && @sev
|
176
212
|
# Use deprecated setting sev
|
177
213
|
severity = sanitize_severity(event, @sev)
|
178
214
|
end
|
@@ -181,7 +217,7 @@ class LogStash::Codecs::CEF < LogStash::Codecs::Base
|
|
181
217
|
header = ["CEF:0", vendor, product, version, signature, name, severity].join("|")
|
182
218
|
values = @fields.map {|fieldname| get_value(fieldname, event)}.compact.join(" ")
|
183
219
|
|
184
|
-
@on_event.call(event, "#{header}|#{values}
|
220
|
+
@on_event.call(event, "#{header}|#{values}#{@delimiter}")
|
185
221
|
end
|
186
222
|
|
187
223
|
private
|
data/logstash-codec-cef.gemspec
CHANGED
data/spec/codecs/cef_spec.rb
CHANGED
@@ -14,6 +14,22 @@ describe LogStash::Codecs::CEF do
|
|
14
14
|
|
15
15
|
let(:results) { [] }
|
16
16
|
|
17
|
+
context "with delimiter set" do
|
18
|
+
# '\r\n' in single quotes to simulate the real input from a config
|
19
|
+
# containing \r\n as 4-character sequence in the config:
|
20
|
+
#
|
21
|
+
# delimiter => "\r\n"
|
22
|
+
#
|
23
|
+
# Related: https://github.com/elastic/logstash/issues/1645
|
24
|
+
subject(:codec) { LogStash::Codecs::CEF.new("delimiter" => '\r\n') }
|
25
|
+
|
26
|
+
it "should append the delimiter to the result" do
|
27
|
+
codec.on_event { |data, newdata| results << newdata }
|
28
|
+
codec.encode(LogStash::Event.new({}))
|
29
|
+
expect(results.first).to end_with("\r\n")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
17
33
|
it "should not fail if fields is nil" do
|
18
34
|
codec.on_event{|data, newdata| results << newdata}
|
19
35
|
event = LogStash::Event.new("foo" => "bar")
|
@@ -328,6 +344,32 @@ describe LogStash::Codecs::CEF do
|
|
328
344
|
insist { e.get('severity') } == "10"
|
329
345
|
end
|
330
346
|
|
347
|
+
context "with delimiter set" do
|
348
|
+
# '\r\n' in single quotes to simulate the real input from a config
|
349
|
+
# containing \r\n as 4-character sequence in the config:
|
350
|
+
#
|
351
|
+
# delimiter => "\r\n"
|
352
|
+
#
|
353
|
+
# Related: https://github.com/elastic/logstash/issues/1645
|
354
|
+
subject(:codec) { LogStash::Codecs::CEF.new("delimiter" => '\r\n') }
|
355
|
+
|
356
|
+
it "should parse on the delimiter " do
|
357
|
+
subject.decode(message) do |e|
|
358
|
+
raise Exception.new("Should not get here. If we do, it means the decoder emitted an event before the delimiter was seen?")
|
359
|
+
end
|
360
|
+
|
361
|
+
event = false;
|
362
|
+
subject.decode("\r\n") do |e|
|
363
|
+
validate(e)
|
364
|
+
insist { e.get("deviceVendor") } == "security"
|
365
|
+
insist { e.get("deviceProduct") } == "threatmanager"
|
366
|
+
event = true
|
367
|
+
end
|
368
|
+
|
369
|
+
expect(event).to be_truthy
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
331
373
|
it "should parse the cef headers" do
|
332
374
|
subject.decode(message) do |e|
|
333
375
|
validate(e)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-codec-cef
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.1.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|