Parent

Class/Module Index [+]

Quicksearch

ActiveLdap::Adapter::JndiConnection

Public Class Methods

new(host, port, method) click to toggle source
# File lib/active_ldap/adapter/jndi_connection.rb, line 74
def initialize(host, port, method)
  @host = host
  @port = port
  @method = method
  @context = nil
  @tls = nil
end

Public Instance Methods

add(dn, records) click to toggle source
# File lib/active_ldap/adapter/jndi_connection.rb, line 128
def add(dn, records)
  attributes = BasicAttributes.new
  records.each do |record|
    attributes.put(record.to_java_attribute)
  end
  @context.create_subcontext(dn, attributes)
end
bind_as_anonymous() click to toggle source
# File lib/active_ldap/adapter/jndi_connection.rb, line 103
def bind_as_anonymous
  setup_context(nil, nil, "none")
  bound?
end
bound?() click to toggle source
# File lib/active_ldap/adapter/jndi_connection.rb, line 89
def bound?
  not @context.nil?
end
delete(dn) click to toggle source
# File lib/active_ldap/adapter/jndi_connection.rb, line 150
def delete(dn)
  @context.destroy_subcontext(dn)
end
modify(dn, records) click to toggle source
# File lib/active_ldap/adapter/jndi_connection.rb, line 136
def modify(dn, records)
  items = records.collect(&:to_java_modification_item)
  @context.modify_attributes(dn, items.to_java(ModificationItem))
end
modify_rdn(dn, new_rdn, delete_old_rdn) click to toggle source
# File lib/active_ldap/adapter/jndi_connection.rb, line 141
def modify_rdn(dn, new_rdn, delete_old_rdn)
  # should use mutex
  delete_rdn_key = "java.naming.ldap.deleteRDN"
  @context.add_to_environment(delete_rdn_key, delete_old_rdn.to_s)
  @context.rename(dn, new_rdn)
ensure
  @context.remove_from_environment(delete_rdn_key)
end
sasl_bind(bind_dn, mechanism, quiet) click to toggle source
# File lib/active_ldap/adapter/jndi_connection.rb, line 93
def sasl_bind(bind_dn, mechanism, quiet)
  setup_context(bind_dn, password, mechanism)
  bound?
end
search(base, scope, filter, attrs, limit) click to toggle source
# File lib/active_ldap/adapter/jndi_connection.rb, line 108
def search(base, scope, filter, attrs, limit)
  controls = SearchControls.new
  controls.search_scope = scope

  controls.count_limit = limit if limit
  unless attrs.blank?
    controls.returning_attributes = attrs.to_java(:string)
  end

  @context.search(base, filter, controls).each do |result|
    attributes = {}
    result.attributes.get_all.each do |attribute|
      attributes[attribute.get_id] = attribute.get_all.collect do |value|
        value.is_a?(String) ? value : String.from_java_bytes(value)
      end
    end
    yield([result.name_in_namespace, attributes])
  end
end
simple_bind(bind_dn, password) click to toggle source
# File lib/active_ldap/adapter/jndi_connection.rb, line 98
def simple_bind(bind_dn, password)
  setup_context(bind_dn, password, "simple")
  bound?
end
unbind() click to toggle source
# File lib/active_ldap/adapter/jndi_connection.rb, line 82
def unbind
  @tls.close if @tls
  @tls = nil
  @context.close if @context
  @context = nil
end

Private Instance Methods

ldap_uri() click to toggle source
# File lib/active_ldap/adapter/jndi_connection.rb, line 179
def ldap_uri
  protocol = @method == :ssl ? "ldaps" : "ldap"
  "#{protocol}://#{@host}:#{@port}/"
end
setup_context(bind_dn, password, authentication) click to toggle source
# File lib/active_ldap/adapter/jndi_connection.rb, line 155
def setup_context(bind_dn, password, authentication)
  unbind
  environment = {
    Context::INITIAL_CONTEXT_FACTORY => "com.sun.jndi.ldap.LdapCtxFactory",
    Context::PROVIDER_URL => ldap_uri,
  }
  environment = HashTable.new(environment)
  context = InitialLdapContext.new(environment, nil)
  if @method == :start_tls
    @tls = context.extended_operation(StartTlsRequest.new)
    @tls.negotiate
  end
  context.add_to_environment(Context::SECURITY_AUTHENTICATION,
                             authentication)
  if bind_dn
    context.add_to_environment(Context::SECURITY_PRINCIPAL, bind_dn)
  end
  if password
    context.add_to_environment(Context::SECURITY_CREDENTIALS, password)
  end
  context.reconnect(nil)
  @context = context
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.