testserver/ldapserver.rb in net-ldap-0.16.2 vs testserver/ldapserver.rb in net-ldap-0.16.3

- old
+ new

@@ -13,11 +13,10 @@ # #------------------------------------------------ module LdapServer - LdapServerAsnSyntax = { :application => { :constructed => { 0 => :array, # LDAP BindRequest 3 => :array # LDAP SearchRequest @@ -44,11 +43,11 @@ def receive_data data @data ||= ""; @data << data while pdu = @data.read_ber!(LdapServerAsnSyntax) begin - handle_ldap_pdu pdu + handle_ldap_pdu pdu rescue $logger.error "closing connection due to error #{$!}" close_connection end end @@ -85,13 +84,11 @@ @authenticated = true send_ldap_response 1, pdu[0].to_i, 0, pdu[1][1], "I'll take it" end end - - - #-- + # -- # Search Response ::= # CHOICE { # entry [APPLICATION 4] SEQUENCE { # objectName LDAPDN, # attributes SEQUENCE OF SEQUENCE { @@ -117,29 +114,29 @@ msgid = pdu[0].to_i.to_ber # pdu[1][7] is the list of requested attributes. # If it's an empty array, that means that *all* attributes were requested. requested_attrs = if pdu[1][7].length > 0 - pdu[1][7].map(&:downcase) - else - :all + pdu[1][7].map(&:downcase) + else + :all end filters = pdu[1][6] if filters.length == 0 # NOTE, early exit. send_ldap_response 5, pdu[0].to_i, 53, "", "No filter specified" end # TODO, what if this returns nil? - filter = Net::LDAP::Filter.parse_ldap_filter( filters ) + filter = Net::LDAP::Filter.parse_ldap_filter(filters) $ldif.each do |dn, entry| - if filter.match( entry ) + if filter.match(entry) attrs = [] entry.each do |k, v| - if requested_attrs == :all or requested_attrs.include?(k.downcase) + if requested_attrs == :all || requested_attrs.include?(k.downcase) attrvals = v.map(&:to_ber).to_ber_set attrs << [k.to_ber, attrvals].to_ber_sequence end end @@ -147,45 +144,39 @@ pkt = [msgid.to_ber, appseq].to_ber_sequence send_data pkt end end - send_ldap_response 5, pdu[0].to_i, 0, "", "Was that what you wanted?" end - - def send_ldap_response pkt_tag, msgid, code, dn, text - send_data( [msgid.to_ber, [code.to_ber, dn.to_ber, text.to_ber].to_ber_appsequence(pkt_tag)].to_ber ) + send_data([msgid.to_ber, [code.to_ber, dn.to_ber, text.to_ber].to_ber_appsequence(pkt_tag)].to_ber) end - end - #------------------------------------------------ # Rather bogus, a global method, which reads a HARDCODED filename # parses out LDIF data. It will be used to serve LDAP queries out of this server. # def load_test_data - ary = File.readlines( "./testdata.ldif" ) + ary = File.readlines("./testdata.ldif") hash = {} - while line = ary.shift and line.chomp! + while (line = ary.shift) && line.chomp! if line =~ /^dn:[\s]*/i dn = $' hash[dn] = {} - while attr = ary.shift and attr.chomp! and attr =~ /^([\w]+)[\s]*:[\s]*/ + while (attr = ary.shift) && attr.chomp! && attr =~ /^([\w]+)[\s]*:[\s]*/ hash[dn][$1.downcase] ||= [] hash[dn][$1.downcase] << $' end end end hash end - #------------------------------------------------ if __FILE__ == $0 require 'rubygems' @@ -202,8 +193,8 @@ require 'net/ldap' EventMachine.run do $logger.info "starting LDAP server on 127.0.0.1 port 3890" EventMachine.start_server "127.0.0.1", 3890, LdapServer - EventMachine.add_periodic_timer 60, proc {$logger.info "heartbeat"} + EventMachine.add_periodic_timer 60, proc { $logger.info "heartbeat" } end end