Class | ActiveLdap::Adapter::Ldap |
In: |
lib/active_ldap/adapter/ldap.rb
|
Parent: | Base |
# File lib/active_ldap/adapter/ldap.rb, line 136 136: def add(dn, entries, options={}) 137: super do |dn, entries| 138: controls = options[:controls] 139: attributes = parse_entries(entries) 140: info = {:dn => dn, :attributes => entries} 141: if controls 142: info.merge!(:name => :add, :controls => controls) 143: execute(:add_ext, info, dn, attributes, controls, []) 144: else 145: execute(:add, info, dn, attributes) 146: end 147: end 148: end
# File lib/active_ldap/adapter/ldap.rb, line 70 70: def bind(options={}) 71: super do 72: @connection.error_message 73: end 74: end
# File lib/active_ldap/adapter/ldap.rb, line 76 76: def bind_as_anonymous(options={}) 77: super do 78: execute(:bind, :name => "bind: anonymous") 79: true 80: end 81: end
# File lib/active_ldap/adapter/ldap.rb, line 83 83: def bound? 84: connecting? and @connection.bound? 85: end
# File lib/active_ldap/adapter/ldap.rb, line 53 53: def connect(options={}) 54: super do |host, port, method| 55: uri = construct_uri(host, port, method.ssl?) 56: with_start_tls = method.start_tls? 57: info = {:uri => uri, :with_start_tls => with_start_tls} 58: [log("connect", info) {method.connect(host, port)}, 59: uri, with_start_tls] 60: end 61: end
# File lib/active_ldap/adapter/ldap.rb, line 122 122: def delete(targets, options={}) 123: super do |target| 124: controls = options[:controls] 125: info = {:dn => target} 126: if controls 127: info.merge!(:name => :delete, :controls => controls) 128: execute(:delete_ext, info, 129: target, controls, []) 130: else 131: execute(:delete, info, target) 132: end 133: end 134: end
# File lib/active_ldap/adapter/ldap.rb, line 150 150: def modify(dn, entries, options={}) 151: super do |dn, entries| 152: controls = options[:controls] 153: attributes = parse_entries(entries) 154: info = {:dn => dn, :attributes => entries} 155: if controls 156: info.merge!(:name => :modify, :controls => controls) 157: execute(:modify_ext, info, dn, attributes, controls, []) 158: else 159: execute(:modify, info, dn, attributes) 160: end 161: end 162: end
# File lib/active_ldap/adapter/ldap.rb, line 164 164: def modify_rdn(dn, new_rdn, delete_old_rdn, new_superior, options={}) 165: super do |dn, new_rdn, delete_old_rdn, new_superior| 166: info = { 167: :name => "modify: RDN", 168: :dn => dn, :new_rdn => new_rdn, :delete_old_rdn => delete_old_rdn 169: } 170: execute(:modrdn, info, dn, new_rdn, delete_old_rdn) 171: end 172: end
# File lib/active_ldap/adapter/ldap.rb, line 87 87: def search(options={}, &block) 88: super(options) do |base, scope, filter, attrs, limit, callback| 89: begin 90: i = 0 91: info = { 92: :base => base, :scope => scope_name(scope), 93: :filter => filter, :attributes => attrs, 94: } 95: execute(:search, info, base, scope, filter, attrs) do |entry| 96: i += 1 97: attributes = {} 98: entry.attrs.each do |attr| 99: attributes[attr] = entry.vals(attr) 100: end 101: callback.call([entry.dn, attributes], block) 102: break if limit and limit <= i 103: end 104: rescue RuntimeError 105: begin 106: @connection.assert_error_code 107: rescue LDAP::ServerDown 108: raise ConnectionError, $!.message 109: end 110: if $!.message == "no result returned by search" 111: @logger.debug do 112: args = [filter, attrs.inspect] 113: _("No matches: filter: %s: attributes: %s") % args 114: end 115: else 116: raise 117: end 118: end 119: end 120: end
# File lib/active_ldap/adapter/ldap.rb, line 63 63: def unbind(options={}) 64: return unless bound? 65: operation(options) do 66: execute(:unbind) 67: end 68: end
# File lib/active_ldap/adapter/ldap.rb, line 191 191: def ensure_method(method) 192: Method.constants.each do |name| 193: if method.to_s.downcase == name.downcase 194: return Method.const_get(name).new 195: end 196: end 197: 198: available_methods = Method.constants.collect do |name| 199: name.downcase.to_sym.inspect 200: end.join(", ") 201: format = _("%s is not one of the available connect methods: %s") 202: raise ConfigurationError, format % [method.inspect, available_methods] 203: end
# File lib/active_ldap/adapter/ldap.rb, line 266 266: def ensure_mod_type(type) 267: case type 268: when :replace, :add, :delete 269: LDAP.const_get("LDAP_MOD_#{type.to_s.upcase}") 270: else 271: raise ArgumentError, _("unknown type: %s") % type 272: end 273: end
# File lib/active_ldap/adapter/ldap.rb, line 205 205: def ensure_scope(scope) 206: scope_map = { 207: :base => LDAP::LDAP_SCOPE_BASE, 208: :sub => LDAP::LDAP_SCOPE_SUBTREE, 209: :one => LDAP::LDAP_SCOPE_ONELEVEL, 210: } 211: value = scope_map[scope || :sub] 212: if value.nil? 213: available_scopes = scope_map.keys.inspect 214: format = _("%s is not one of the available LDAP scope: %s") 215: raise ArgumentError, format % [scope.inspect, available_scopes] 216: end 217: value 218: end
# File lib/active_ldap/adapter/ldap.rb, line 181 181: def execute(method, info=nil, *args, &block) 182: begin 183: name = (info || {}).delete(:name) || method 184: log(name, info) {@connection.send(method, *args, &block)} 185: rescue LDAP::ResultError 186: @connection.assert_error_code 187: raise $!.message 188: end 189: end
# File lib/active_ldap/adapter/ldap.rb, line 253 253: def parse_entries(entries) 254: result = [] 255: entries.each do |type, key, attributes| 256: mod_type = ensure_mod_type(type) 257: binary = schema.attribute(key).binary? 258: mod_type |= LDAP::LDAP_MOD_BVALUES if binary 259: attributes.each do |name, values| 260: result << LDAP.mod(mod_type, name, values) 261: end 262: end 263: result 264: end
# File lib/active_ldap/adapter/ldap.rb, line 175 175: def prepare_connection(options={}) 176: operation(options) do 177: @connection.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3) 178: end 179: end
# File lib/active_ldap/adapter/ldap.rb, line 228 228: def sasl_bind(bind_dn, options={}) 229: super do |bind_dn, mechanism, quiet| 230: begin 231: sasl_quiet = @connection.sasl_quiet 232: @connection.sasl_quiet = quiet unless quiet.nil? 233: args = [bind_dn, mechanism] 234: if need_credential_sasl_mechanism?(mechanism) 235: args << password(bind_dn, options) 236: end 237: info = { 238: :name => "bind: SASL", :dn => bind_dn, :mechanism => mechanism 239: } 240: execute(:sasl_bind, info, *args) 241: ensure 242: @connection.sasl_quiet = sasl_quiet 243: end 244: end 245: end
# File lib/active_ldap/adapter/ldap.rb, line 220 220: def scope_name(scope) 221: { 222: LDAP::LDAP_SCOPE_BASE => :base, 223: LDAP::LDAP_SCOPE_SUBTREE => :sub, 224: LDAP::LDAP_SCOPE_ONELEVEL => :one, 225: }[scope] 226: end