I'm trying to proxy an AD and an OpenLDAP server on a
separate machine to get a 'combined' view.
First problem (or the primary one?) is that the DN doesn't
match.
AD: cn=turbo,ou=Office,ou=Users,ou=org1,dc=org2,dc=company,dc=tld
OL: uid=turbo,ou=People,dc=org3,dc=company,dc=tld
We have absolutely no write/modify access to the AD (we
barely got search/compare access to parts of the AD!
And the OL server... There's way to much work to modify
(as in massaging the DB and reload it) that (at the moment).
It's also running 2.3 at the moment, and we don't want to
upgrade that any time soon.
The theory is/was to:
1. Setup a LDAP/META proxy to the AD to act as the
'local' DB.
2. Rewrite the AD DNs to match the OL DB
3. Cache some common queries
4. Glue the OL DB with the AD DB, the OL acting as
the 'remote' DB.
Unfortunately, I can't get step four to work. Any queries
seem to loop to the localhost.
I guess I could use rwm on the OL server to massage the
DN (before it's presented to clients and the proxy), but
I much rather do any rewrite etc on my new proxy server
if possible.
OR
Setup a second OL server on the current OL server, but
on a different port (hidden), which proxies the main
OL and rewrites the DN to match the AD. This hidden server
could then be proxied by the new LDAP proxy, cached etc...
But either of the alternative solution isn't pretty :).
I'll have to maintain and support THREE LDAP servers
(one DB and two proxies), which seems a little to much
work.
And besides, the OL have all the UNIX (posixAccount etc)
stuff (only), with very few users (most of the organization
don't need UNIX accounts) and most of the clients is configured
to use that when searching etc. There's also other reasons
why we would like to keep the OL server layout...
Parts of my slapd.conf:
#######################################################################
database ldap
suffix "dc=company,dc=tld"
rootdn "cn=Manager,dc=company,dc=tld"
rootpw "secret"
#
---------------------------------------------------------------------
##### Active Directory Server (will act as LOCAL DB)
uri ldap://ad.company.tld
idassert-bind bindmethod=simple
binddn
="cn=unixldap,ou=service,ou=users,ou=selud,dc=rd,dc=company,dc=tld"
credentials="Secret1"
mode=none
idassert-authzFrom "*"
#
---------------------------------------------------------------------
#### Rewrite/Remap
#
http://www.openldap.org/its/index.cgi/Software%20Bugs?id=5941#followup7
overlay rwm
rwm-rewriteEngine yes
rwm-normalize-mapped-attrs yes
rwm-map attribute uid sAMAccountName
rwm-map attribute gecos displayName
rwm-map attribute workPhone telephoneNumber
rwm-map attribute address1 streetAddress
rwm-map attribute city l
rwm-map attribute state st
rwm-map attribute zip postalCode
rwm-map attribute country co
rwm-map attribute c country
rwm-map attribute distinguishedName entryDN
rwm-map objectclass inetOrgPerson user
rwm-map objectclass groupOfNames group
rwm-rewriteContext searchEntryDN
rwm-rewriteRule "cn=(.*)?ou=Office,ou=Users,ou=ORG1,dc=ORG2,(.*)"
"uid=$1ou=People,dc=ORG3,$2" ":@"
rwm-rewriteContext searchAttrDN alias searchEntryDN
rwm-rewriteContext matchedDN alias searchEntryDN
#
---------------------------------------------------------------------
#### Proxy Cache
overlay pcache
pcache hdb 2500 3 1 300
pcacheAttrset 0 uid uidNumber gidNumber cn sn givenName
distinguishedName
pcacheAttrset 1 c physicalDeliveryOfficeName streetAddress mail
pcacheAttrset 2 uid uidNumber gidNumber cn sn givenName
distinguishedName c physicalDeliveryOfficeName streetAddress mail
pcacheTemplate (uid=) 0 3600
pcacheTemplate (cn=) 0 3600
pcacheTemplate (|(uid=)(cn=)) 0 3600
pcacheTemplate (|(cn=)(uid=)) 0 3600
pcacheTemplate (objectClass=) 2 3600
pcacheTemplate (|(objectClass=)(cn=)) 2 3600
pcacheTemplate (gecos=) 1 3600
pcacheTemplate (&(sn=)(givenName=)) 1 3600
cachesize 20
directory /usr/local/turbo/var/openldap-data
index objectClass eq
index cn,sn,uid,mail pres,eq,sub
#
---------------------------------------------------------------------
#### Translucent Proxy
overlay translucent
translucent_strict yes
#translucent_local
uid,uidNumber,gidNumber,cn,sn,givenName,distinguishedName,mail
#translucent_remote
uid,uidNumber,gidNumber,cn,sn,givenName,distinguishedName,mail
### OpenLDAP Server (will act as REMOTE DB)
uri "ldap://ol.company.tld/"
network-timeout 3
chase-referrals no
acl-bind binddn="cn=Manager,dc=company,dc=tld" credentials="secret"
idassert-bind bindmethod=simple
binddn="cn=Manager,dc=company,dc=tld"
credentials="Secret2"
mode=none
idassert-authzFrom "*"
#######################################################################
Disclaimer: Much of this haven't been optimized yet. I'll
fine tune and tweak stuff once I could get it to work...
--
Life sucks and then you die