The question in my Subject is what all this boils down to, so if you
have no time to read a long explanation, feel free to answer it as
asked...
Background: I'm working on my first attempt at doing the grand
architecture for a new LDAP instance, although I've been working with
LDAP as an admin for years: doing housekeeping on existing servers,
setting up simple small environments, and managing other systems
using LDAP as a utility data/auth source. I'm not a newbie to LDAP
(or to OpenLDAP, which I'm using for this project) but I haven't
previously had any reason to depart from fairly tame "cookbook" work.
I now have to build a single directory to serve dozens of small to
medium businesses to authenticate users for a small collection of
mostly web-based applications that my employer provides for them. To
avoid complexity on the application side, we want to have a common
auth interface for all clients rather than proliferating a bunch of
per-client vhosts for little real purpose. Because we manage mail
systems for most of these companies, we have hard knowledge of user
email addresses, and those make the perfect globally-unique
identifiers for each user: we can enforce correctness and
uniqueness, and the users should have no trouble remembering what
their login ID's are.
Because we already have some facilities using Apple's "Open
Directory" environment, which integrates OpenLDAP, Kerberos, and
some of their own facilities, we're hoping to piggyback on the
existing LDAP it uses, which uses a domain-based suffix: the FQDN of
the server split into dc components. The obvious way to add in our
clients to that without putting them into the part of the directory
tree managed by Open Directory is to build out the logical
domain-based tree with our clients having their own branches, i.e.
"dc=hostname,dc=oursite,dc=ourdomain,dc=net" already exists and is
where the Open Directory DIT lives, and I was hoping to create
"dc=client1,dc=com" and "dc=client2,dc=net" and so on for our
clients. This way, we could (in principle) have the authentication
layer search for [EMAIL PROTECTED] with a null search base
across the whole DIT and find
"uid=username,cn=users,dc=client1,dc=com" which apps could use as a
way to identify which client organization the user is part of.
However, I am finding that actually setting up a server to handle a
pure domain-based tree that can be searched in full from a null base
is a battle against the prevailing models. I have a working system
from the standpoint of searches: ldapsearch finds user records
wherever they are in the tree, and the DSE object has a single empty
namingContexts attribute. However, the effect of this has also been
to completely confuse other more user-friendly tools (Apple's
Workgroup Manager, JXplorer, Apache Directory Studio) and that's not
going to fly because while I can handle the fact that client records
cannot be seen in Apple's tools, I cannot break those tools for their
existing user or hand the front-line support staff a system that can
only be administered with command-line tools and LDIF files. Even
when I populate the logical nodes between the root and the domains
that have real content, browsing tools don't see them, apparently
because they don't like the null naming context as a naming context.
So, I am looking here for an answer from the broad LDAP community to
the question in my Subject. I am concerned that while I may be trying
to do something that seems "right" based on my reading of RFC2247, I
may have missed something in my research and this may be conceptually
broken. While clearly I am doing something that is harder to get
working than I expected it to be, I am trying to not keep pounding
away at trying to get something to work that never will work or if I
manage it, *shouldn't* work.
--
Bill Cole
[EMAIL PROTECTED]