Module: NewRelic::Security::Instrumentation::IO::Chain

Defined in:
lib/newrelic_security/instrumentation-security/io/chain.rb

Class Method Summary collapse

Class Method Details

.instrument!Object



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