Sha256: b2aa17ede84e608e589823e76524ca0a38175c0cff06dbf62b839d28f3adad03

Contents?: true

Size: 1.55 KB

Versions: 32

Compression:

Stored size: 1.55 KB

Contents

module Dap
module Filter

require 'openssl'

require 'dap/proto/ldap'

#
# Decode an LDAP SearchRequest probe response
#
class FilterDecodeLdapSearchResult
  include BaseDecoder

  #
  # Decode an LDAP SearchRequest probe response
  #
  # @param data [String] Binary string containing raw response from server
  # @return [Hash] Hash containing all LDAP responses
  #
  def decode(data)
    info = {}

    # RFC 4511 - 4.5.2 SearchResult contains zero or more SearchResultEntry or
    # SearchResultReference messages followed by a single SearchResultDone
    # message.  OpenSSL::ASN1.decode doesn't handle the back to back Sequences
    # well, so identify the lengths and split them into individual ASN1 elements
    messages = Dap::Proto::LDAP.split_messages(data)

    if messages.empty?
      err_msg = 'FilterDecodeLdapSearchResult - Unable to parse response'
      info['Error'] = { 'errorMessage' => err_msg }
    end


    messages.each do |element|
      begin
        elem_decoded = OpenSSL::ASN1.decode(element)
      rescue Exception => e
        err_msg = 'FilterDecodeLdapSearchResult - Unable to decode ASN.1 element'
        $stderr.puts "#{err_msg}: #{e}"
        $stderr.puts e.backtrace
        $stderr.puts "Element:\n\t#{element.inspect}"
        $stderr.puts "Element hex:\n\t#{element.unpack('H*')}\n\n"
        info['Error'] = { 'errorMessage' => err_msg }
        next
      end
      parsed_type, parsed_data = Dap::Proto::LDAP.parse_message(elem_decoded)
      info[parsed_type] = parsed_data if parsed_type && parsed_data
    end

    info
  end

end

end
end

Version data entries

32 entries across 32 versions & 1 rubygems

Version Path
dap-0.1.21 lib/dap/filter/ldap.rb
dap-0.1.20 lib/dap/filter/ldap.rb
dap-0.1.18 lib/dap/filter/ldap.rb
dap-0.1.17 lib/dap/filter/ldap.rb
dap-0.1.16 lib/dap/filter/ldap.rb
dap-0.1.15 lib/dap/filter/ldap.rb
dap-0.1.14 lib/dap/filter/ldap.rb
dap-0.1.13 lib/dap/filter/ldap.rb
dap-0.1.12 lib/dap/filter/ldap.rb
dap-0.1.11 lib/dap/filter/ldap.rb
dap-0.1.10 lib/dap/filter/ldap.rb
dap-0.1.9 lib/dap/filter/ldap.rb
dap-0.1.8 lib/dap/filter/ldap.rb
dap-0.1.7 lib/dap/filter/ldap.rb
dap-0.1.6 lib/dap/filter/ldap.rb
dap-0.1.5 lib/dap/filter/ldap.rb
dap-0.1.4 lib/dap/filter/ldap.rb
dap-0.1.3 lib/dap/filter/ldap.rb
dap-0.1.2 lib/dap/filter/ldap.rb
dap-0.1.1 lib/dap/filter/ldap.rb