Class: ActiveLdap::Adapter::JndiConnection

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

Defined Under Namespace

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
NamingException =
naming.NamingException
NameNotFoundException =
naming.NameNotFoundException

Instance Method Summary collapse

Constructor Details

#initialize(host, port, method) ⇒ JndiConnection

Returns a new instance of JndiConnection.



68
69
70
71
72
73
74
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 68

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

Instance Method Details

#add(dn, records) ⇒ Object



124
125
126
127
128
129
130
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 124

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



97
98
99
100
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 97

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

#bound?Boolean

Returns:

  • (Boolean)


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

def bound?
  not @context.nil?
end

#delete(dn) ⇒ Object



146
147
148
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 146

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

#modify(dn, records) ⇒ Object



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

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



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

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



87
88
89
90
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 87

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

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



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 102

def search(base, scope, filter, attrs, limit, callback, &block)
  controls = SearchControls.new
  controls.search_scope = scope

  if attrs && !attrs.empty?
    controls.returning_attributes = attrs.to_java(:string)
  end

  i = 0
  @context.search(base, filter, controls).each do |result|
    i += 1
    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
    callback.call([result.name_in_namespace, attributes], block)
    break if limit and limit <= i
  end
end

#simple_bind(bind_dn, password) ⇒ Object



92
93
94
95
# File 'lib/active_ldap/adapter/jndi_connection.rb', line 92

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

#unbindObject



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

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