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