Class | ActiveLdap::Adapter::Jndi |
In: |
lib/active_ldap/adapter/jndi.rb
|
Parent: | Base |
METHOD | = | { :ssl => :ssl, :tls => :start_tls, :plain => nil, } |
# File lib/active_ldap/adapter/jndi.rb, line 61 61: def add(dn, entries, options={}) 62: super do |_dn, _entries| 63: info = {:dn => _dn, :attributes => _entries} 64: execute(:add, info, _dn, parse_entries(_entries)) 65: end 66: end
# File lib/active_ldap/adapter/jndi.rb, line 37 37: def bind_as_anonymous(options={}) 38: super do 39: execute(:bind_as_anonymous, :name => "bind: anonymous") 40: true 41: end 42: end
# File lib/active_ldap/adapter/jndi.rb, line 21 21: def connect(options={}) 22: super do |host, port, method| 23: uri = construct_uri(host, port, method == :ssl) 24: with_start_tls = method == :start_tls 25: info = {:uri => uri, :with_start_tls => with_start_tls} 26: [log("connect", info) {JndiConnection.new(host, port, method)}, 27: uri, with_start_tls] 28: end 29: end
# File lib/active_ldap/adapter/jndi.rb, line 55 55: def delete(targets, options={}) 56: super do |target| 57: execute(:delete, {:dn => target}, target) 58: end 59: end
# File lib/active_ldap/adapter/jndi.rb, line 68 68: def modify(dn, entries, options={}) 69: super do |_dn, _entries| 70: info = {:dn => _dn, :attributes => _entries} 71: execute(:modify, info, _dn, parse_entries(_entries)) 72: end 73: end
# File lib/active_ldap/adapter/jndi.rb, line 75 75: def modify_rdn(dn, new_rdn, delete_old_rdn, new_superior, options={}) 76: super do |_dn, _new_rdn, _delete_old_rdn, _new_superior| 77: info = { 78: :name => "modify: RDN", 79: :dn => _dn, 80: :new_rdn => _new_rdn, 81: :new_superior => _new_superior, 82: :delete_old_rdn => _delete_old_rdn 83: } 84: _new_rdn = "#{_new_rdn},#{_new_superior}" if _new_superior 85: execute(:modify_rdn, info, _dn, _new_rdn, _delete_old_rdn) 86: end 87: end
# File lib/active_ldap/adapter/jndi.rb, line 44 44: def search(options={}, &block) 45: super(options) do |base, scope, filter, attrs, limit, callback| 46: info = { 47: :base => base, :scope => scope_name(scope), :filter => filter, 48: :attributes => attrs, :limit => limit, 49: } 50: execute(:search, info, 51: base, scope, filter, attrs, limit, callback, &block) 52: end 53: end
# File lib/active_ldap/adapter/jndi.rb, line 31 31: def unbind(options={}) 32: super do 33: execute(:unbind) 34: end 35: end
# File lib/active_ldap/adapter/jndi.rb, line 103 103: def ensure_method(method) 104: method ||= "plain" 105: normalized_method = method.to_s.downcase.to_sym 106: return METHOD[normalized_method] if METHOD.has_key?(normalized_method) 107: 108: available_methods = METHOD.keys.collect {|m| m.inspect}.join(", ") 109: format = _("%s is not one of the available connect methods: %s") 110: raise ConfigurationError, format % [method.inspect, available_methods] 111: end
# File lib/active_ldap/adapter/jndi.rb, line 173 173: def ensure_mod_type(type) 174: case type 175: when :replace, :add 176: type 177: when :delete 178: :remove 179: else 180: raise ArgumentError, _("unknown type: %s") % type 181: end 182: end
# File lib/active_ldap/adapter/jndi.rb, line 113 113: def ensure_scope(scope) 114: scope_map = { 115: :base => JndiConnection::Scope::OBJECT, 116: :one => JndiConnection::Scope::ONE_LEVEL, 117: :sub => JndiConnection::Scope::SUBTREE, 118: } 119: value = scope_map[scope || :sub] 120: if value.nil? 121: available_scopes = scope_map.keys.inspect 122: format = _("%s is not one of the available LDAP scope: %s") 123: raise ArgumentError, format % [scope.inspect, available_scopes] 124: end 125: value 126: end
# File lib/active_ldap/adapter/jndi.rb, line 90 90: def execute(method, info=nil, *args, &block) 91: name = (info || {}).delete(:name) || method 92: log(name, info) {@connection.send(method, *args, &block)} 93: rescue JndiConnection::NamingException 94: if /\[LDAP: error code (\d+) - ([^\]]+)\]/ =~ $!.to_s 95: message = $2 96: klass = LdapError::ERRORS[Integer($1)] 97: klass ||= ActiveLdap::LdapError 98: raise klass, message 99: end 100: raise 101: end
# File lib/active_ldap/adapter/jndi.rb, line 156 156: def parse_entries(entries) 157: result = [] 158: entries.each do |type, key, attributes| 159: mod_type = ensure_mod_type(type) 160: binary = schema.attribute(key).binary? 161: attributes.each do |name, values| 162: real_binary = binary 163: if values.any? {|value| Ldif::Attribute.binary_value?(value)} 164: real_binary = true 165: end 166: result << JndiConnection::ModifyRecord.new(mod_type, name, 167: values, real_binary) 168: end 169: end 170: result 171: end
# File lib/active_ldap/adapter/jndi.rb, line 136 136: def sasl_bind(bind_dn, options={}) 137: super do |_bind_dn, mechanism, quiet| 138: info = { 139: :name => "bind: SASL", 140: :dn => _bind_dn, 141: :mechanism => mechanism 142: } 143: execute(:sasl_bind, info, _bind_dn, mechanism, quiet) 144: true 145: end 146: end
# File lib/active_ldap/adapter/jndi.rb, line 128 128: def scope_name(scope) 129: { 130: JndiConnection::Scope::OBJECT => :base, 131: JndiConnection::Scope::ONE_LEVEL => :one, 132: JndiConnection::Scope::SUBTREE => :sub, 133: }[scope] 134: end