Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Ruby
branch: master
Failed to load latest commit information.
bin - Added tests
conf Cleaned up example configuration file.
lib debugging
test debugging
README.rdoc Deprecate without a replacement. How Rails-esque.
Rakefile - Added tests

README.rdoc

DEPRECATED

This plugin is no longer maintained. It was last tested against Rails from 2007.

ldap-activerecord-gateway

This is an implementation of an LDAP server which uses active record as the data source. The server is read-only, and can serve information from any AR model that implements the #search(string) class method and the #to_ldap_entry instance method.

To use, configure the server by creating a conf/ldap-server.yml file (see ldap-server.example.yml). The important bits are rails_dir, active_record_model, basedn, and port. Once that's done, run “./bin/ldap-server.rb start”, wait for it to daemonize, and check the log file under $RAILS_ROOT/log/ for errors. To stop, run “./bin/ldap-server.rb”, and if you reconfigure the server or change the underlying AR model, restart it with “./bin/ldap-server.rb restart”.

To test, point your addressbook (ie: Thunderbird or OS X Address Book) at the server and run a search.

Example AR class:

class Person < ActiveRecord::Base
  def fullname
    "#{firstname} #{lastname}"
  end

  def to_ldap_entry
		{	
		  "objectclass"     => ["top", "person", "organizationalPerson", "inetOrgPerson", "mozillaOrgPerson"],
			"uid"             => ["tbotter-#{id}"],
 			"sn"              => [lastname],
  		"givenName"       => [firstname],
			"cn"              => [fullname],
  		"title"           => [title],
  		"o"               => [company], 
  		"mail"            => [email],
  		"telephonenumber" => [work_phone], 
  		"homephone"       => [home_phone],
  		"fax"             => [fax],
  		"mobile"          => [mobile],
  		"street"          => [address],
  		"l"               => [city],
  		"st"              => [state], 
  		"postalcode"      => [zip], 
		}
	end

  def self.search(query)
    Person.find(:all, 
                :conditions => ["(email LIKE ?) OR (firstname LIKE ?) OR (lastname LIKE ?)", 
                                "#{query}%", "#{query}%", "#{query}%"])
  end
end

Have fun.

Something went wrong with that request. Please try again.