5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
# File 'lib/newrelic_security/instrumentation-security/io/chain.rb', line 5
def self.instrument!
::IO.class_eval do
class << self
include NewRelic::Security::Instrumentation::IO
alias_method :open_without_security, :open
if RUBY_VERSION < '2.7.0'
def open(var1, var2 = "r", *var3, &var4)
return open_without_security(var1, var2, *var3, &var4) if var1.to_s.include?(LOG_FILE_NAME)
retval = nil
event = open_on_enter(var1, var2) { retval = open_without_security(var1, var2, *var3, &var4) }
open_on_exit(event) { return retval }
end
else
def open(*args, **kwargs, &block)
return open_without_security(*args, **kwargs, &block) if args[0].to_s.include?(LOG_FILE_NAME)
retval = nil
event = open_on_enter(*args) { retval = open_without_security(*args, **kwargs, &block) }
open_on_exit(event) { return retval }
end
end
alias_method :read_without_security, :read
def read(*var, **kwargs)
retval = nil
event = read_on_enter(*var) { retval = read_without_security(*var, **kwargs) }
read_on_exit(event, retval) { return retval }
end
alias_method :binread_without_security, :binread
def binread(*var)
retval = nil
event = binread_on_enter(*var) { retval = binread_without_security(*var) }
binread_on_exit(event, retval) { return retval }
end
alias_method :readlines_without_security, :readlines
def readlines(*var, **kwargs)
retval = nil
event = readlines_on_enter(*var) { retval = readlines_without_security(*var, **kwargs) }
readlines_on_exit(event, retval) { return retval }
end
alias_method :new_without_security, :new
if RUBY_VERSION < '2.7.0'
def new(*var)
retval = nil
event = new_on_enter(*var) { retval = new_without_security(*var) }
new_on_exit(event) { return retval }
end
else
def new(*var, **kwargs)
retval = nil
event = new_on_enter(*var) { retval = new_without_security(*var, **kwargs) }
new_on_exit(event) { return retval }
end
end
alias_method :sysopen_without_security, :sysopen
def sysopen(*var)
retval = nil
event = sysopen_on_enter(*var) { retval = sysopen_without_security(*var) }
sysopen_on_exit(event, retval, *var) { return retval }
end
alias_method :foreach_without_security, :foreach
def foreach(*var)
retval = nil
event = foreach_on_enter(*var) { retval = foreach_without_security(*var) }
foreach_on_exit(event, retval) { return retval }
end
alias_method :write_without_security, :write
def write(*var, **kwargs)
retval = nil
event = write_on_enter(*var, **kwargs) { retval = write_without_security(*var) }
write_on_exit(event, retval) { return retval }
end
alias_method :binwrite_without_security, :binwrite
def binwrite(*var)
retval = nil
event = binwrite_on_enter(*var) { retval = binwrite_without_security(*var) }
binwrite_on_exit(event, retval) { return retval }
end
alias_method :popen_without_security, :popen
def popen(*var, &block)
retval = nil
event = popen_on_enter(*var) { retval = popen_without_security(*var, &block) }
popen_on_exit(event) { return retval }
end
end
end
end
|