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

Re: Using back-meta or back-relay plus slapo-rwm as a proxy to a local database

> Ok, fair warning - this is a little long-winded, but I'd rather give too
> much detail than not enough.  Also, all
> examples are in slapd.conf format, since there is no documentation for
> cn=config, and I'm using slapd with -f and -F to
> make the conversion.
> Anyways, I'm working on implementing some rewrite rules with slapo-rwm,
> using back-relay (or possibly back-meta if that
> doesn't work out) as the backend on top of which slapo-rwm will sit, to
> make available some features that would be
> otherwise not be present with back-ldap, or in the absence of a proxy
> backend altogether.
> In its most basic form, the slapo-rwm overlay can be used without a proxy
> or relay backend, but the feature I'm after
> appears to require either the slapd-meta backend or the slapd-relay
> backend.  For now, I've chosen to try with
> slapd-relay, as my research has indicated it supports the feature I'm
> after.  For reference, this feature I desire is
> the 'searchResult' rewriteContext, as I'm interested in rewriting dynamic
> group membership DN's (i.e., the 'member'
> attribute, as defined in rfc2307bis) as plain uid's, so clients that only
> know about rfc2307 (and thus, look only for
> entries of the same format as memberUid and fail to perform any mappings
> to translate membership DN's to UID's) can make
> use of the dynamic groups I've created in my directory.
> Since my slapd-hdb database's rootDSE is dc=example,dc=com, I really
> couldn't find any way to get around using a virtual
> naming context; creating a back-meta database on the same host with the
> same suffix as the back-hdb database seemed
> ambiguous at best (in terms of how to ensure that clients would always
> speak to the back-meta db first), and using the
> suffix "dc=com" seemed inappropriate, as did creating several relay
> databases, one for each of the entries below the
> slapd-hdb database's rootDSE (e.g., ou=Users,dc=example,dc=com,
> ou=Groups,dc=example,dc=com, etc.).  Creating several
> relay databases in that fashion presents other problems as well, and
> wouldn't do me any good for clients which query for
> entries using dc=example,dc=com as their search base.
> Given that, and the fact that I'm only looking to remap/rewrite data going
> to and from a single local database with a
> single naming context, I decided it was a better idea to create a single
> back-relay database with a bogus "proxy" naming
> context and use a suffixmassage to rewrite it, e.g.:
> database           relay
> suffix             "dc=example-proxy,dc=com"
> relay              "dc=example,dc=com"
> overlay            rwm
> rwm-rewriteEngine  on
> rwm-suffixmassage  "dc=example-proxy,dc=com" "dc=example,dc=com"
> rwm-rewriteContext searchResult
> rwm-rewriteRule    "^uid=([^,]+?),ou=Users,dc=example,dc=com$" "$1"

The result of this mapping does not yield a valid DN; as such, this
rewriting is incorrect.  Also, I don't see how it could be useful, as LDAP
clients usually expect DNs to be DN-valued.

> For reference, here is the back-meta database configuration I was going to
> use before I discovered that back-relay
> supported the searchResult rewriteContext:
> database           meta
> suffix             "dc=example-proxy,dc=com"
> overlay            rwm
> rwm-rewriteEngine  on
> uri                "ldap://localhost/dc=example-proxy,dc=com";
> rwm-suffixmassage  "dc=example-proxy,dc=com" "dc=example,dc=com"
> rwm-rewriteContext searchResult
> rwm-rewriteRule    "^uid=([^,]+?),ou=Users,dc=example,dc=com$" "$1"
> In either case, I have a few questions going forward from this point:
> 1. Is it legal to rewrite the search result DN's as described in the
> example above?  I'm hoping that since the data
> being manipulated is going from server -> client and is not being stored
> in the directory, the attributes I'm rewriting
> would not be subjected to the syntax requirements of the entry that holds
> them.
> 2. Are there any benefits or drawbacks to using a rewriteMap to accomplish
> this task?  In my mind, it just seems like
> another means to the same end, at least based on the following
> configuration I came up with:
> rwm-rewriteMap     ldap dn2uid
> "ldap://localhost/ou=Users,dc=example,dc=com?uid?sub";
> rwm-rewriteContext searchResult
> rwm-rewriteRule    "^uid=([^,]+?),ou=Users,dc=example,dc=com$"
> "${dn2uid($1)}"

Same as above.  You're performing an internal search to obtain information
you already have, and cast it in invalid form.

> 3. Is there a better way to go about doing this that I've failed to see or
> consider?

Consider why you need it: broken client?  Fix the client.  Anything else? 
Perhaps LDAP is not what you need; in any case, move such mangling into
the client.

> 4. Considering the slapd-meta man page, which mentions that some of its
> features could potentially result in excessive
> overhead for some installations, are the features used in the
> aforementioned configuration(s) efficient enough to scale
> well in a very busy environment?  I'm aware that's a pretty vague and
> loaded question with lots of variables, so I'm
> just looking for an educated opinion from a 10,000 foot view, assuming
> excellent hardware, high network capacity, and
> heavy - say, 5k, 10k, 15k queries per second - traffic.  Performance will
> obviously be tested before implementing this,
> but it'd still be nice to have a rough idea of what to expect going in.

Pure rewriting may not impact too much; rewriteMaps that rewuire further
internal lookups may yield significant overhead.  Of course, if you setup
things like ACL checking that involves significant internal searches on a
database that makes extensive use of rewriting, things can get even worse.

> Lastly, on a somewhat tangential note, given that there's no documentation
> with respect to cn=config for setting up
> slapo-rwm (or doing it in conjunction with a proxy backend), is there any
> way to discover the cn=config attributes and
> objectclasses for those backend and overlays that's better or more
> efficient than creating a standard slapd.conf
> configuration and converting it with slapd using -f and -F?  Perhaps an
> official or unofficial bit of documentation
> floating around out there other than a few miscellaneous postings on the
> mailing lists and some ITS contents?  On a
> similar note in the same vein, as far as I can tell, none of the man
> pages, admin guide sections, or FAQ-O-Matic entries
> on slapd-relay mention which rewrite contexts are available with it, and I
> didn't realize that slapd-relay accepted the
> searchResult rewrite context until I read the
> servers/slapd/back-relay/README file (while searching for code that might
> reveal slapo-rwm's cn=config attribute equivalents).  Would it be
> objectionable to update these reference points with
> said information?  I'd be happy to file an ITS and submit patches and/or
> content for updating the documentation, if
> Gavin is too busy, unavailable, or would like some help.

None that I'm aware of.  The FAQ is interactive; if by extensive
experimenting, or by looking at the code, you want to contribute, it'd be
more than welcome.  Please note that 2.4.22 contains some improvements to
slapo-rwm cn=config handling; you may want to stick with that release.