Class: LogStash::Inputs::LDAPSearch

Inherits:
Base
  • Object
show all
Defined in:
lib/logstash/inputs/LDAPSearch.rb

Overview

Perform an LDAP Search

Example:

 input {
    LDAPSearch {
     host => "myLDAPServer"
     dn => "myDN"
     password => "myPassword"
     filter => "myldapfilter"
     base => "ou=people,dc=univ,dc=fr"
     attrs => ['myattrubteslist']
    }
}

Instance Method Summary collapse

Instance Method Details

#registerObject



39
40
41
42
43
# File 'lib/logstash/inputs/LDAPSearch.rb', line 39

def register
  require 'base64'
  require 'rubygems'
  require 'ldap'
end

#run(queue) ⇒ Object



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
# File 'lib/logstash/inputs/LDAPSearch.rb', line 46

def run(queue)
    
  @host = Socket.gethostbyname(@host).first
  #attrs = ['uid', 'sn', 'cn', 'eduPersonPrimaryAffiliation']
  scope = LDAP::LDAP_SCOPE_SUBTREE #LDAP::LDAP_SCOPE_ONELEVEL
  begin
	conn = ( @usessl == true ) ? LDAP::SSLConn.new(@host,@port) : LDAP::Conn.new(@host, @port)
	conn.bind(@dn, @password.value)
    @logger.debug("Executing LDAP search base='#{@base}' filter='#{@filter}'")
    conn.search(base, scope, filter, attrs) { |entry|
      # print distinguished name
      # p entry.dn
      event = LogStash::Event.new
      decorate(event)
      event["host"] = @host
      entry.get_attributes.each do |attr|
			#values = entry.get_values(attr).first
			values = entry.get_values(attr)
			values = values.map { |value|
          (/[^[:print:]]/ =~ value).nil? ? value : Base64.strict_encode64(value)
			}
			event[attr] = values
		end
		#event["attr"] = entry.attrs
		queue << event
	}
rescue LDAP::Error => ex
	@logger.error("Ldap connect failed: #{ex}\n#{ex.backtrace}")
	exit
rescue LDAP::ResultError => ex
	@logger.error("LDAP search error: #{ex}\n#{ex.backtrace}")
	exit
  end
# no finished in 2.1, instead stop method is called
  # finished
end