| Class | ActiveLdap::Adapter::Ldap |
| In: |
lib/active_ldap/adapter/ldap.rb
|
| Parent: | Base |
# File lib/active_ldap/adapter/ldap.rb, line 113
113: def add(dn, entries, options={})
114: super do |dn, entries|
115: execute(:add, dn, parse_entries(entries))
116: end
117: end
# File lib/active_ldap/adapter/ldap.rb, line 48
48: def bind(options={})
49: super do
50: @connection.error_message
51: end
52: end
# File lib/active_ldap/adapter/ldap.rb, line 54
54: def bind_as_anonymous(options={})
55: super do
56: execute(:bind)
57: true
58: end
59: end
# File lib/active_ldap/adapter/ldap.rb, line 61
61: def bound?
62: connecting? and @connection.bound?
63: end
# File lib/active_ldap/adapter/ldap.rb, line 35
35: def connect(options={})
36: super do |host, port, method|
37: method.connect(host, port)
38: end
39: end
# File lib/active_ldap/adapter/ldap.rb, line 107
107: def delete(targets, options={})
108: super do |target|
109: execute(:delete, target)
110: end
111: end
# File lib/active_ldap/adapter/ldap.rb, line 101
101: def load(ldifs, options={})
102: super do |ldif|
103: LDAP::LDIF.parse_entry(ldif).send(@connection)
104: end
105: end
# File lib/active_ldap/adapter/ldap.rb, line 119
119: def modify(dn, entries, options={})
120: super do |dn, entries|
121: execute(:modify, dn, parse_entries(entries))
122: end
123: end
# File lib/active_ldap/adapter/ldap.rb, line 65
65: def search(options={}, &block)
66: super(options) do |base, scope, filter, attrs, limit, callback|
67: begin
68: i = 0
69: execute(:search, base, scope, filter, attrs) do |entry|
70: i += 1
71: attributes = {}
72: entry.attrs.each do |attr|
73: attributes[attr] = entry.vals(attr)
74: end
75: callback.call([entry.dn, attributes], block)
76: break if limit and limit <= i
77: end
78: rescue RuntimeError
79: if $!.message == "no result returned by search"
80: @logger.debug do
81: args = [filter, attrs.inspect]
82: _("No matches: filter: %s: attributes: %s") % args
83: end
84: else
85: raise
86: end
87: end
88: end
89: end
# File lib/active_ldap/adapter/ldap.rb, line 91
91: def to_ldif(dn, attributes)
92: ldif = LDAP::LDIF.to_ldif("dn", [dn.dup])
93: attributes.sort_by do |key, value|
94: key
95: end.each do |key, values|
96: ldif << LDAP::LDIF.to_ldif(key, values)
97: end
98: ldif
99: end
# File lib/active_ldap/adapter/ldap.rb, line 41
41: def unbind(options={})
42: return unless bound?
43: operation(options) do
44: execute(:unbind)
45: end
46: end
# File lib/active_ldap/adapter/ldap.rb, line 157
157: def ensure_method(method)
158: Method.constants.each do |name|
159: if method.to_s.downcase == name.downcase
160: return Method.const_get(name).new
161: end
162: end
163:
164: available_methods = Method.constants.collect do |name|
165: name.downcase.to_sym.inspect
166: end.join(", ")
167: format = _("%s is not one of the available connect methods: %s")
168: raise ConfigurationError, format % [method.inspect, available_methods]
169: end
# File lib/active_ldap/adapter/ldap.rb, line 221
221: def ensure_mod_type(type)
222: case type
223: when :replace, :add
224: LDAP.const_get("LDAP_MOD_#{type.to_s.upcase}")
225: else
226: raise ArgumentError, _("unknown type: %s") % type
227: end
228: end
# File lib/active_ldap/adapter/ldap.rb, line 171
171: def ensure_scope(scope)
172: scope_map = {
173: :base => LDAP::LDAP_SCOPE_BASE,
174: :sub => LDAP::LDAP_SCOPE_SUBTREE,
175: :one => LDAP::LDAP_SCOPE_ONELEVEL,
176: }
177: value = scope_map[scope || :sub]
178: if value.nil?
179: available_scopes = scope_map.keys.inspect
180: format = _("%s is not one of the available LDAP scope: %s")
181: raise ArgumentError, format % [scope.inspect, available_scopes]
182: end
183: value
184: end
# File lib/active_ldap/adapter/ldap.rb, line 138
138: def execute(method, *args, &block)
139: begin
140: @connection.send(method, *args, &block)
141: rescue LDAP::ResultError
142: @connection.assert_error_code
143: raise $!.message
144: end
145: end
# File lib/active_ldap/adapter/ldap.rb, line 208
208: def parse_entries(entries)
209: result = []
210: entries.each do |type, key, attributes|
211: mod_type = ensure_mod_type(type)
212: binary = schema.attribute(key).binary?
213: mod_type |= LDAP::LDAP_MOD_BVALUES if binary
214: attributes.each do |name, values|
215: result << LDAP.mod(mod_type, name, values)
216: end
217: end
218: result
219: end
# File lib/active_ldap/adapter/ldap.rb, line 126
126: def prepare_connection(options={})
127: operation(options) do
128: @connection.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3)
129: end
130: end
# File lib/active_ldap/adapter/ldap.rb, line 132
132: def root_dse(attributes, options={})
133: sec = options[:sec] || 0
134: usec = options[:usec] || 0
135: @connection.root_dse(attributes, sec, usec)
136: end
# File lib/active_ldap/adapter/ldap.rb, line 186
186: def sasl_bind(bind_dn, options={})
187: super do |bind_dn, mechanism, quiet|
188: begin
189: sasl_quiet = @connection.sasl_quiet
190: @connection.sasl_quiet = quiet unless quiet.nil?
191: args = [bind_dn, mechanism]
192: if need_credential_sasl_mechanism?(mechanism)
193: args << password(bind_dn, options)
194: end
195: execute(:sasl_bind, *args)
196: ensure
197: @connection.sasl_quiet = sasl_quiet
198: end
199: end
200: end
# File lib/active_ldap/adapter/ldap.rb, line 202
202: def simple_bind(bind_dn, options={})
203: super do |bind_dn, passwd|
204: execute(:bind, bind_dn, passwd)
205: end
206: end
# File lib/active_ldap/adapter/ldap.rb, line 147
147: def with_timeout(try_reconnect=true, options={}, &block)
148: begin
149: super
150: rescue LDAP::ServerDown => e
151: @logger.error {_("LDAP server is down: %s") % e.message}
152: retry if try_reconnect and reconnect(options)
153: raise ConnectionError.new(e.message)
154: end
155: end