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