logstash-input-tcp 4.0.3 → 4.1.0
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/inputs/tcp.rb +30 -1
- data/logstash-input-tcp.gemspec +1 -1
- data/spec/inputs/tcp_spec.rb +36 -0
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 3e9170fef8955f298473d6ab8d0fb0a5301f915c
         | 
| 4 | 
            +
              data.tar.gz: e82dbe475f4d1c4928da2fd73a5e1e82009a038c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 202ff3f0feeb6017794bcfd1f9cdc6775066560fffc658fc3429b6064bf2ee5d1cd02f60087d4ce46149e2e52642e7cfe20439a5d1a905a2f09dab1f4e4387c3
         | 
| 7 | 
            +
              data.tar.gz: 7491b4f37c8b2b2ff90e8d11922143ae75da7c4cb35d78e487f906219829f941bee949f7b3fc666c1cd06cfd80c88a4eb88bda167df9534e3f3b67635860b389
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/lib/logstash/inputs/tcp.rb
    CHANGED
    
    | @@ -30,6 +30,10 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base | |
| 30 30 | 
             
              # `client` connects to a server.
         | 
| 31 31 | 
             
              config :mode, :validate => ["server", "client"], :default => "server"
         | 
| 32 32 |  | 
| 33 | 
            +
              # Proxy protocol support, only v1 is supported at this time
         | 
| 34 | 
            +
              # http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt
         | 
| 35 | 
            +
              config :proxy_protocol, :validate => :boolean, :default => false
         | 
| 36 | 
            +
             | 
| 33 37 | 
             
              # Enable SSL (must be set for other `ssl_` options to take effect).
         | 
| 34 38 | 
             
              config :ssl_enable, :validate => :boolean, :default => false
         | 
| 35 39 |  | 
| @@ -55,6 +59,8 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base | |
| 55 59 |  | 
| 56 60 | 
             
              HOST_FIELD = "host".freeze
         | 
| 57 61 | 
             
              PORT_FIELD = "port".freeze
         | 
| 62 | 
            +
              PROXY_HOST_FIELD = "proxy_host".freeze
         | 
| 63 | 
            +
              PROXY_PORT_FIELD = "proxy_port".freeze
         | 
| 58 64 | 
             
              SSLSUBJECT_FIELD = "sslsubject".freeze
         | 
| 59 65 |  | 
| 60 66 | 
             
              def initialize(*args)
         | 
| @@ -153,8 +159,31 @@ class LogStash::Inputs::Tcp < LogStash::Inputs::Base | |
| 153 159 |  | 
| 154 160 | 
             
              def handle_socket(socket, client_address, client_port, output_queue, codec)
         | 
| 155 161 | 
             
                peer = "#{client_address}:#{client_port}"
         | 
| 162 | 
            +
                first_read = true
         | 
| 156 163 | 
             
                while !stop?
         | 
| 157 | 
            -
                   | 
| 164 | 
            +
                  tbuf = read(socket)
         | 
| 165 | 
            +
                  if @proxy_protocol && first_read
         | 
| 166 | 
            +
                    first_read = false
         | 
| 167 | 
            +
                    orig_buf = tbuf
         | 
| 168 | 
            +
                    pp_hdr, tbuf = tbuf.split("\r\n", 2)
         | 
| 169 | 
            +
             | 
| 170 | 
            +
                    pp_info = pp_hdr.split(/\s/)
         | 
| 171 | 
            +
                    # PROXY proto clientip proxyip clientport proxyport
         | 
| 172 | 
            +
                    if pp_info[0] != "PROXY"
         | 
| 173 | 
            +
                      @logger.error("invalid proxy protocol header label", :hdr => pp_hdr)
         | 
| 174 | 
            +
                      raise IOError
         | 
| 175 | 
            +
                    else
         | 
| 176 | 
            +
                      proxy_address = pp_info[3]
         | 
| 177 | 
            +
                      proxy_port = pp_info[5]
         | 
| 178 | 
            +
                      client_address = pp_info[2]
         | 
| 179 | 
            +
                      client_port = pp_info[4]
         | 
| 180 | 
            +
                    end
         | 
| 181 | 
            +
                  end
         | 
| 182 | 
            +
                  codec.decode(tbuf) do |event|
         | 
| 183 | 
            +
                    if @proxy_protocol
         | 
| 184 | 
            +
                      event.set(PROXY_HOST_FIELD, proxy_address) unless event.get(PROXY_HOST_FIELD)
         | 
| 185 | 
            +
                      event.set(PROXY_PORT_FIELD, proxy_port) unless event.get(PROXY_PORT_FIELD)
         | 
| 186 | 
            +
                    end
         | 
| 158 187 | 
             
                    event.set(HOST_FIELD, client_address) unless event.get(HOST_FIELD)
         | 
| 159 188 | 
             
                    event.set(PORT_FIELD, client_port) unless event.get(PORT_FIELD)
         | 
| 160 189 | 
             
                    event.set(SSLSUBJECT_FIELD, socket.peer_cert.subject.to_s) if @ssl_enable && @ssl_verify && event.get(SSLSUBJECT_FIELD).nil?
         | 
    
        data/logstash-input-tcp.gemspec
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            Gem::Specification.new do |s|
         | 
| 2 2 | 
             
              s.name          = 'logstash-input-tcp'
         | 
| 3 | 
            -
              s.version         = '4.0 | 
| 3 | 
            +
              s.version         = '4.1.0'
         | 
| 4 4 | 
             
              s.licenses      = ['Apache License (2.0)']
         | 
| 5 5 | 
             
              s.summary       = "Read events over a TCP socket."
         | 
| 6 6 | 
             
              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/inputs/tcp_spec.rb
    CHANGED
    
    | @@ -63,6 +63,42 @@ describe LogStash::Inputs::Tcp do | |
| 63 63 | 
             
                end
         | 
| 64 64 | 
             
              end
         | 
| 65 65 |  | 
| 66 | 
            +
              it "should handle PROXY protocol v1 connections" do
         | 
| 67 | 
            +
                event_count = 10
         | 
| 68 | 
            +
                port = rand(1024..65535)
         | 
| 69 | 
            +
                conf = <<-CONFIG
         | 
| 70 | 
            +
                  input {
         | 
| 71 | 
            +
                    tcp {
         | 
| 72 | 
            +
                      port => #{port}
         | 
| 73 | 
            +
                      proxy_protocol => true
         | 
| 74 | 
            +
                    }
         | 
| 75 | 
            +
                  }
         | 
| 76 | 
            +
                CONFIG
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                events = input(conf) do |pipeline, queue|
         | 
| 79 | 
            +
                  socket = Stud::try(5.times) { TCPSocket.new("127.0.0.1", port) }
         | 
| 80 | 
            +
                  socket.puts("PROXY TCP4 1.2.3.4 5.6.7.8 1234 5678\r");
         | 
| 81 | 
            +
                  socket.flush
         | 
| 82 | 
            +
                  event_count.times do |i|
         | 
| 83 | 
            +
                    # unicode smiley for testing unicode support!
         | 
| 84 | 
            +
                    socket.puts("#{i} ☹")
         | 
| 85 | 
            +
                    socket.flush
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
                  socket.close
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                  event_count.times.collect {queue.pop}
         | 
| 90 | 
            +
                end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                insist { events.length } == event_count
         | 
| 93 | 
            +
                event_count.times do |i|
         | 
| 94 | 
            +
                  insist { events[i].get("message") } == "#{i} ☹"
         | 
| 95 | 
            +
                  insist { events[i].get("host") } == "1.2.3.4"
         | 
| 96 | 
            +
                  insist { events[i].get("port") } == "1234"
         | 
| 97 | 
            +
                  insist { events[i].get("proxy_host") } == "5.6.7.8"
         | 
| 98 | 
            +
                  insist { events[i].get("proxy_port") } == "5678"
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
              end
         | 
| 101 | 
            +
             | 
| 66 102 | 
             
              it "should read events with plain codec and ISO-8859-1 charset" do
         | 
| 67 103 | 
             
                port = rand(1024..65535)
         | 
| 68 104 | 
             
                charset = "ISO-8859-1"
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: logstash-input-tcp
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 4.0 | 
| 4 | 
            +
              version: 4.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Elastic
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016- | 
| 11 | 
            +
            date: 2016-11-21 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -166,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 166 166 | 
             
                  version: '0'
         | 
| 167 167 | 
             
            requirements: []
         | 
| 168 168 | 
             
            rubyforge_project:
         | 
| 169 | 
            -
            rubygems_version: 2. | 
| 169 | 
            +
            rubygems_version: 2.4.8
         | 
| 170 170 | 
             
            signing_key:
         | 
| 171 171 | 
             
            specification_version: 4
         | 
| 172 172 | 
             
            summary: Read events over a TCP socket.
         |