Added configuration option to force paged searches off
This commit is contained in:
parent
c46c93777e
commit
9a9d5f0742
1 changed files with 12 additions and 0 deletions
|
@ -308,6 +308,7 @@ class Net::LDAP
|
||||||
DefaultPort = 389
|
DefaultPort = 389
|
||||||
DefaultAuth = { :method => :anonymous }
|
DefaultAuth = { :method => :anonymous }
|
||||||
DefaultTreebase = "dc=com"
|
DefaultTreebase = "dc=com"
|
||||||
|
DefaultForceNoPage = false
|
||||||
|
|
||||||
StartTlsOid = "1.3.6.1.4.1.1466.20037"
|
StartTlsOid = "1.3.6.1.4.1.1466.20037"
|
||||||
|
|
||||||
|
@ -370,6 +371,8 @@ class Net::LDAP
|
||||||
# specifying the Hash {:method => :simple_tls}. There is a fairly large
|
# specifying the Hash {:method => :simple_tls}. There is a fairly large
|
||||||
# range of potential values that may be given for this parameter. See
|
# range of potential values that may be given for this parameter. See
|
||||||
# #encryption for details.
|
# #encryption for details.
|
||||||
|
# * :force_no_page => Set to true to prevent paged results even if your
|
||||||
|
# server says it supports them. This is a fix for MS Active Directory
|
||||||
#
|
#
|
||||||
# Instantiating a Net::LDAP object does <i>not</i> result in network
|
# Instantiating a Net::LDAP object does <i>not</i> result in network
|
||||||
# traffic to the LDAP server. It simply stores the connection and binding
|
# traffic to the LDAP server. It simply stores the connection and binding
|
||||||
|
@ -380,6 +383,7 @@ class Net::LDAP
|
||||||
@verbose = false # Make this configurable with a switch on the class.
|
@verbose = false # Make this configurable with a switch on the class.
|
||||||
@auth = args[:auth] || DefaultAuth
|
@auth = args[:auth] || DefaultAuth
|
||||||
@base = args[:base] || DefaultTreebase
|
@base = args[:base] || DefaultTreebase
|
||||||
|
@force_no_page = args[:force_no_page] || DefaultForceNoPage
|
||||||
encryption args[:encryption] # may be nil
|
encryption args[:encryption] # may be nil
|
||||||
|
|
||||||
if pr = @auth[:password] and pr.respond_to?(:call)
|
if pr = @auth[:password] and pr.respond_to?(:call)
|
||||||
|
@ -1092,6 +1096,10 @@ class Net::LDAP
|
||||||
# MUST refactor the root_dse call out.
|
# MUST refactor the root_dse call out.
|
||||||
#++
|
#++
|
||||||
def paged_searches_supported?
|
def paged_searches_supported?
|
||||||
|
# active directory returns that it supports paged results. However
|
||||||
|
# it returns binary data in the rfc2696_cookie which throws an
|
||||||
|
# encoding exception breaking searching.
|
||||||
|
return false if @force_no_page
|
||||||
@server_caps ||= search_root_dse
|
@server_caps ||= search_root_dse
|
||||||
@server_caps[:supportedcontrol].include?(Net::LDAP::LdapControls::PagedResults)
|
@server_caps[:supportedcontrol].include?(Net::LDAP::LdapControls::PagedResults)
|
||||||
end
|
end
|
||||||
|
@ -1387,6 +1395,10 @@ class Net::LDAP::Connection #:nodoc:
|
||||||
search_attributes.to_ber_sequence
|
search_attributes.to_ber_sequence
|
||||||
].to_ber_appsequence(3)
|
].to_ber_appsequence(3)
|
||||||
|
|
||||||
|
# rfc2696_cookie sometimes contains binary data from Microsoft Active Directory
|
||||||
|
# this breaks when calling to_ber. (Can't force binary data to UTF-8)
|
||||||
|
# we have to disable paging (even though server supports it) to get around this...
|
||||||
|
|
||||||
controls = []
|
controls = []
|
||||||
controls <<
|
controls <<
|
||||||
[
|
[
|
||||||
|
|
Loading…
Reference in a new issue