You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.6 KiB
73 lines
1.6 KiB
#!/usr/local/bin/ruby -w
|
|
|
|
# Example server that listens on both a port and a UNIX domain socket
|
|
# Try it using:
|
|
# $ ldapsearch -LLL -H ldap://localhost:1389 -D uid=whatever -b ou=Users,dc=mydomain,dc=com
|
|
# $ ldapsearch -LLL -H ldapi://%2ftmp%2frbslapd5.sock -D uid=whatever -b ou=Users,dc=mydomain,dc=com
|
|
|
|
$:.unshift('../lib')
|
|
$debug = true
|
|
|
|
require 'fileutils'
|
|
|
|
require 'ldap/server'
|
|
require 'ldap/server/router'
|
|
|
|
$logger = Logger.new($stderr)
|
|
|
|
class LDAPController
|
|
def self.bind(request, version, dn, password, params)
|
|
$logger.info "Processing bind route for \'#{dn}\' with password \'#{password}\'"
|
|
end
|
|
|
|
def self.search(request, baseObject, scope, deref, filter, params)
|
|
$logger.info "Processing search route for #{baseObject}"
|
|
|
|
h = {
|
|
'uid' => 'jdoe',
|
|
'objectClass' => 'userAccount',
|
|
'givenName' => 'John',
|
|
'sn' => 'Doe'
|
|
}
|
|
request.send_SearchResultEntry("uid=jdoe,#{baseObject}", h)
|
|
end
|
|
end
|
|
|
|
router = LDAP::Server::Router.new($logger) do
|
|
bind nil => "LDAPController#bind"
|
|
|
|
search "ou=Users,dc=mydomain,dc=com" => "LDAPController#search"
|
|
end
|
|
|
|
params = {
|
|
:nodelay => true,
|
|
:listen => 10,
|
|
:router => router
|
|
}
|
|
|
|
# Listen on IP address and port
|
|
|
|
params[:bindaddr] = '127.0.0.1' # Leave this blank to listen on 0.0.0.0
|
|
params[:port] = 1389
|
|
|
|
addr_server = LDAP::Server.new params
|
|
addr_server.run_tcpserver
|
|
|
|
# Listen on socket
|
|
|
|
params.delete :bindaddr
|
|
params.delete :port
|
|
params[:socket] = '/tmp/rbslapd5.sock'
|
|
|
|
FileUtils::rm_f params[:socket]
|
|
|
|
socket_server = LDAP::Server.new params
|
|
socket_server.run_tcpserver
|
|
|
|
trap 'INT' do
|
|
addr_server.stop
|
|
socket_server.stop
|
|
end
|
|
|
|
addr_server.join
|
|
socket_server.join
|