[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: DN with semicolon does not work
> I think what we really need to do is to make sure that
> DN_SEPARATOR()
> NDN_SEPARATOR()
> are only called with normalized DNs. Once that is done, then
> the difference between these macros is moot.
>
> I don't think a semi should appear in either a pretty nor a normalized
> DN. And if truely an arbitrary DN string, then neither macro is safe to
> use.
>
> Maybe we need to add
> assert( (c) != ';' )
> in a few places to figure out how ';' are getting through to
> {N}DN_SEPARATOR calls.
I exactly know how they end up there: it is definitely intended; see macro
LDAP_DN_WILLESCAPE_CHAR() in libraries/libldap/getdn.c. Escaped semis
remain as such in both pretty and normalized form because they were
considered to be harmless if the appropriate DN parsing was to be used.
In fact, a normalized/pretty DN will never contain a semi as rdn separator
(we don't rebuild DNs that way!). I vaguely recall there was some debate
at that time, and I was in favour of hexpair escaping ALL the special
chars in normalized DNs, but someone objected that, besides those that
have a special meaning in LDAPv3 for DN structure (',', '+', '\'),
escaping all would have required to make DNs unnecessarily longer and
awkward to read (I was in favour of hexpair escaping non-ascii UTF-8 as
well :) My point is that it appears that few DN parsing macros in slap.h
are not in sync with the corresponding macros used in DN parsing/string
representation.
Actually, there should be no need to assert (c) != ';', because a ';' in a
DN, no matter if pretty or normalized, can only be escaped and takes no
special meaning. DN_SEPARATOR() really should on test for ',', and
NDN_SEPARATOR() should not be really used at all.
p.
--
Pierangelo Masarati
mailto:pierangelo.masarati@sys-net.it
SysNet - via Dossi,8 27100 Pavia Tel: +390382573859 Fax: +390382476497