Skip to content

Commit 9b67a46

Browse files
committed
Add header validation regexp
1 parent 88c98af commit 9b67a46

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

lib/logstash/filters/sip.rb

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ class LogStash::Filters::SIP < LogStash::Filters::Base
4646
# An array specifying the headers/values to not add to the event
4747
config :exclude_keys, :validate => :array, :default => []
4848

49+
# A regex to validate headers
50+
config :header_regex, :validate => :string, :default => '.*'
51+
4952
class InvalidURIError < StandardError; end
5053

5154
public
@@ -97,7 +100,7 @@ def parse_uri(name, text)
97100
return parts
98101
end
99102

100-
def parse(text, fields)
103+
def parse(event_id, text, fields)
101104
# replace "\r\n" for new-lines, and strip leading whitespace
102105
text = text.gsub("\r\n", "\n")
103106
# replace ^M for new-lines, and strip leading whitespace
@@ -131,13 +134,14 @@ def parse(text, fields)
131134
end
132135

133136
# process the headers (name : value)
137+
header_regex = Regexp.new(@header_regex)
134138
if parts.length > 1
135139
fields['headers'] = parts[1]
136140
headers = parts[1].split("\n")
137141
headers.each do |header|
138142
name, value = header.split(':', 2)
139-
if name.nil? || value.nil?
140-
@logger.debug? and @logger.debug("invalid header: <#{header}>")
143+
if !(header_regex.match(header)) || name.nil? || value.nil?
144+
@logger.warn("invalid header in #{event_id}: <#{header}>")
141145
next
142146
end
143147
name = name.strip.downcase.gsub('-', '_')
@@ -156,20 +160,21 @@ def parse(text, fields)
156160
end
157161
end
158162
#print "SIP fields: ", fields, "\n"
159-
@logger.debug? and @logger.debug("SIP fields ", fields)
163+
@logger.debug? and @logger.debug("SIP fields for #{event_id}", fields)
160164
end
161165

162166
public
163167
def filter(event)
164168
fields = Hash.new
165169
value = event.get(@source)
170+
event_id = event.get('_id')
166171

167172
case value
168173
when nil
169174
# Nothing to do
170175
when String
171176
begin
172-
parse(value, fields)
177+
parse(event_id, value, fields)
173178
rescue => e
174179
event.tag("_sipparsefailure")
175180
@logger.error("Failed to parse SIP message (#{e.backtrace.first}: #{e.message} / #{e.class})", :value => value)

0 commit comments

Comments
 (0)