[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: Multiple Schema



Michael Ströder wrote:
Howard Chu wrote:
Suhel Momin wrote:
I am planning to have multiple DIT's.
These DIT's may use different customised Schema.
Now my problem is to store these schema such that DIT's will use their
respective schema definition.
This is because the attributetype or objectclass in these different
schemas
might overlap.
Hence I want to keep them seperate and use them for a particular
DIT.   Is
this possible?
Not in the current versions.
[..]
Use multiple slapd instances. Use proxies and subordinate to glue them
together if necessary.

Note that in such a scenario with back-ldap/meta and glue a schema-aware LDAPv3 client does not have a chance to do the right thing. (And yes, web2ldap asks for the relevant subschema subentry for each part of the DIT all the time.)

Eh? With appropriate rewrite rules a set of glued slapds would be totally equivalent to multiple schemas within a single slapd.


E.g, you have 3 administrative domains, each with their own schema
	dc=com
	dc=foo,dc=com
	dc=bar,dc=com

You set up 3 slapds, each with separate databases, and their own schema:
  database hdb
  suffix "" (the dc=foo server)
  ...

  database hdb
  suffix "" (the dc=bar server)
  ...

In the top level slapd you set up the glue:
  database meta
  suffix dc=foo,dc=com
  suffix dc=bar,dc=com
  subordinate

  database hdb
  suffix dc=com

You set the meta rewrite rules so that all queries that affect the "dc=foo,dc=com" branch are targeted at the first server, and "dc=foo,dc=com" is appended to all DNs returned from that server. So that server's "cn=subschema" becomes "cn=subschema,dc=foo,dc=com" and so on. Likewise for the other branch.

Any schema-aware LDAP client will work properly and will not be able to distinguish this from a single-server installation.

Back in the OpenLDAP 2.0 days we (Symas) had a module that did this sort of gluing. The extra trick that it did, that is missing here, is to allow a stub entry for the glue points (e.g., the "dc=foo,dc=com" entry must exist in the parent) and merged it with the target, so you could still maintain it as a real entry and also see the operational attributes of the rootDSE of the target if you needed them.
--
-- Howard Chu
Chief Architect, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc/
Chief Architect, OpenLDAP http://www.openldap.org/project/