Class: ActiveLdap::Adapter::JndiConnection

Inherits:
Object
  • Object
show all
Defined in:
lib/active_ldap/adapter/jndi_connection.rb

Defined Under Namespace

Modules: Scope Classes: ModifyRecord

Constant Summary collapse

HashTable =
java.util.Hashtable
InitialDirContext =
directory.InitialDirContext
InitialLdapContext =
ldap.InitialLdapContext
SearchControls =
directory.SearchControls
ModificationItem =
directory.ModificationItem
BasicAttributes =
directory.BasicAttributes
Context =
naming.Context
StartTlsRequest =
ldap.StartTlsRequest
Control =
ldap.Control
CommunicationException =
naming.CommunicationException
NamingException =
naming.NamingException
NameNotFoundException =
naming.NameNotFoundException

Instance Method Summary collapse

Constructor Details

#initialize(host, port, method) ⇒ JndiConnection

Returns a new instance of JndiConnection.



75
76
77
78
79
80
81
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 75

def initialize(host, port, method)
  @host = host
  @port = port
  @method = method
  @context = nil
  @tls = nil
end

Instance Method Details

#add(dn, records) ⇒ Object



129
130
131
132
133
134
135
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 129

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_anonymousObject



104
105
106
107
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 104

def bind_as_anonymous
  setup_context(nil, nil, "none")
  bound?
end

#bound?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 90

def bound?
  not @context.nil?
end

#delete(dn) ⇒ Object



151
152
153
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 151

def delete(dn)
  @context.destroy_subcontext(dn)
end

#modify(dn, records) ⇒ Object



137
138
139
140
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 137

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) ⇒ Object



142
143
144
145
146
147
148
149
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 142

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) ⇒ Object



94
95
96
97
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 94

def sasl_bind(bind_dn, mechanism, quiet)
  setup_context(bind_dn, password, mechanism)
  bound?
end

#search(base, scope, filter, attrs, limit) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 109

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) ⇒ Object



99
100
101
102
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 99

def simple_bind(bind_dn, password)
  setup_context(bind_dn, password, "simple")
  bound?
end

#unbindObject



83
84
85
86
87
88
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 83

def unbind
  @tls.close if @tls
  @tls = nil
  @context.close if @context
  @context = nil
end