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

Instance Method Summary collapse

Constructor Details

#initialize(host, port, method) ⇒ JndiConnection

Returns a new instance of JndiConnection.



74
75
76
77
78
79
80
# 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

Instance Method Details

#add(dn, records) ⇒ Object



128
129
130
131
132
133
134
# 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_anonymousObject



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

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

#bound?Boolean

Returns:

  • (Boolean)


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

def bound?
  not @context.nil?
end

#delete(dn) ⇒ Object



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

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

#modify(dn, records) ⇒ Object



136
137
138
139
# 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) ⇒ Object



141
142
143
144
145
146
147
148
# 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) ⇒ Object



93
94
95
96
# 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) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# 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) ⇒ Object



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

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

#unbindObject



82
83
84
85
86
87
# 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