fixes based on comments for pull request

This commit is contained in:
Chris Dwan 2011-11-17 14:23:41 -08:00
parent 463ac436a8
commit b6b7985d6e
4 changed files with 30 additions and 13 deletions

View file

@ -86,9 +86,11 @@ module Net::BER::Extensions::Array
# [['1.2.840.113556.1.4.805',true]] # [['1.2.840.113556.1.4.805',true]]
# #
def to_ber_control def to_ber_control
ary = self.collect do |control_sequence| #if our array does not contain at least one array then wrap it in an array before going forward
control_sequence.collect{|element| element.to_ber}.to_ber_sequence ary = self[0].kind_of?(Array) ? self : [self]
ary = ary.collect do |control_sequence|
control_sequence.collect{|element| element.to_ber}.to_ber_sequence.reject_empty_ber_arrays
end end
ary.to_ber_sequence #putting this on a new line to make it more readable. ary.to_ber_sequence.reject_empty_ber_arrays
end end
end end

View file

@ -57,4 +57,8 @@ module Net::BER::Extensions::String
return result return result
end end
def reject_empty_ber_arrays
self.gsub(/0\000/n,'')
end
end end

View file

@ -334,8 +334,9 @@ class Net::LDAP
68 => "Entry Already Exists" 68 => "Entry Already Exists"
} }
module LdapControls module LDAPControls
PagedResults = "1.2.840.113556.1.4.319" # Microsoft evil from RFC 2696 PAGED_RESULTS = "1.2.840.113556.1.4.319" # Microsoft evil from RFC 2696
DELETE_TREE = "1.2.840.113556.1.4.805"
end end
def self.result2string(code) #:nodoc: def self.result2string(code) #:nodoc:
@ -552,7 +553,7 @@ class Net::LDAP
# anything with the bind results. We then pass self to the caller's # anything with the bind results. We then pass self to the caller's
# block, where he will execute his LDAP operations. Of course they will # block, where he will execute his LDAP operations. Of course they will
# all generate auth failures if the bind was unsuccessful. # all generate auth failures if the bind was unsuccessful.
raise Net::LDAP::LdapError, "Open already in progress" if @open_connection raise LdapError, "Open already in progress" if @open_connection
begin begin
@open_connection = Net::LDAP::Connection.new(:host => @host, @open_connection = Net::LDAP::Connection.new(:host => @host,
@ -1033,7 +1034,7 @@ class Net::LDAP
# dn = "mail=deleteme@example.com, ou=people, dc=example, dc=com" # dn = "mail=deleteme@example.com, ou=people, dc=example, dc=com"
# ldap.delete_tree :dn => dn # ldap.delete_tree :dn => dn
def delete_tree(args) def delete_tree(args)
delete(args.merge(:control_codes => [['1.2.840.113556.1.4.805',true]])) delete(args.merge(:control_codes => [[LDAPControls::DELETE_TREE, true]]))
end end
# This method is experimental and subject to change. Return the rootDSE # This method is experimental and subject to change. Return the rootDSE
# record from the LDAP server as a Net::LDAP::Entry, or an empty Entry if # record from the LDAP server as a Net::LDAP::Entry, or an empty Entry if
@ -1105,7 +1106,7 @@ class Net::LDAP
#++ #++
def paged_searches_supported? def paged_searches_supported?
@server_caps ||= search_root_dse @server_caps ||= search_root_dse
@server_caps[:supportedcontrol].include?(Net::LDAP::LdapControls::PagedResults) @server_caps[:supportedcontrol].include?(LDAPControls::PAGED_RESULTS)
end end
end # class LDAP end # class LDAP
@ -1402,7 +1403,7 @@ class Net::LDAP::Connection #:nodoc:
controls = [] controls = []
controls << controls <<
[ [
Net::LDAP::LdapControls::PagedResults.to_ber, LDAPControls::PAGED_RESULTS.to_ber,
# Criticality MUST be false to interoperate with normal LDAPs. # Criticality MUST be false to interoperate with normal LDAPs.
false.to_ber, false.to_ber,
rfc2696_cookie.map{ |v| v.to_ber}.to_ber_sequence.to_s.to_ber rfc2696_cookie.map{ |v| v.to_ber}.to_ber_sequence.to_s.to_ber
@ -1450,7 +1451,7 @@ class Net::LDAP::Connection #:nodoc:
more_pages = false more_pages = false
if result_code == 0 and controls if result_code == 0 and controls
controls.each do |c| controls.each do |c|
if c.oid == Net::LDAP::LdapControls::PagedResults if c.oid == LDAPControls::PAGED_RESULTS
# just in case some bogus server sends us more than 1 of these. # just in case some bogus server sends us more than 1 of these.
more_pages = false more_pages = false
if c.value and c.value.length > 0 if c.value and c.value.length > 0

View file

@ -11,4 +11,14 @@ describe Array, "when extended with BER core extensions" do
res = [['1.2.3', true],['1.7.9',false]].to_ber_control res = [['1.2.3', true],['1.7.9',false]].to_ber_control
res.should eq(control_codes) res.should eq(control_codes)
end end
it "should wrap the array in another array if a nested array is not passed" do
result1 = ['1.2.3', true].to_ber_control
result2 = [['1.2.3', true]].to_ber_control
result1.should eq(result2)
end
it "should return an empty string if an empty array is passed" do
[].to_ber_control.should be_empty
end
end end