Skip to content

Commit 418bcc9

Browse files
author
Rory O'Connell
committed
Merge pull request #49 from ngwilson/master
Alias dereferencing for search
2 parents 8a18267 + 9ab84a0 commit 418bcc9

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

lib/net/ldap.rb

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,12 @@ class LdapError < StandardError; end
251251
SearchScopes = [ SearchScope_BaseObject, SearchScope_SingleLevel,
252252
SearchScope_WholeSubtree ]
253253

254+
DerefAliases_Never = 0
255+
DerefAliases_Search = 1
256+
DerefAliases_Find = 2
257+
DerefAliases_Always = 3
258+
DerefAliasesArray = [ DerefAliases_Never, DerefAliases_Search, DerefAliases_Find, DerefAliases_Always ]
259+
254260
primitive = { 2 => :null } # UnbindRequest body
255261
constructed = {
256262
0 => :array, # BindRequest
@@ -592,6 +598,8 @@ def open
592598
# Net::LDAP::SearchScope_WholeSubtree. Default is WholeSubtree.)
593599
# * :size (an integer indicating the maximum number of search entries to
594600
# return. Default is zero, which signifies no limit.)
601+
# * :deref (one of: Net::LDAP::DerefAliases_Never, Net::LDAP::DerefAliases_Search,
602+
# Net::LDAP::DerefAliases_Find, Net::LDAP::DerefAliases_Always. Default is Never.)
595603
#
596604
# #search queries the LDAP server and passes <i>each entry</i> to the
597605
# caller-supplied block, as an object of type Net::LDAP::Entry. If the
@@ -1397,6 +1405,11 @@ def search(args = {})
13971405
raise Net::LDAP::LdapError, "invalid search scope" unless Net::LDAP::SearchScopes.include?(scope)
13981406

13991407
sort_control = encode_sort_controls(args.fetch(:sort_controls){ false })
1408+
1409+
deref = args[:deref] || Net::LDAP::DerefAliases_Never
1410+
raise Net::LDAP::LdapError.new( "invalid alias dereferencing value" ) unless Net::LDAP::DerefAliasesArray.include?(deref)
1411+
1412+
14001413
# An interesting value for the size limit would be close to A/D's
14011414
# built-in page limit of 1000 records, but openLDAP newer than version
14021415
# 2.2.0 chokes on anything bigger than 126. You get a silent error that
@@ -1436,7 +1449,7 @@ def search(args = {})
14361449
request = [
14371450
search_base.to_ber,
14381451
scope.to_ber_enumerated,
1439-
0.to_ber_enumerated,
1452+
deref.to_ber_enumerated,
14401453
query_limit.to_ber, # size limit
14411454
0.to_ber,
14421455
attributes_only.to_ber,

0 commit comments

Comments
 (0)