directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Norbert Reilly (JIRA)" <>
Subject [jira] Created: (DIREVE-253) escaping problem with custom partition search results
Date Fri, 16 Sep 2005 06:26:55 GMT
escaping problem with custom partition search results

         Key: DIREVE-253
     Project: Directory Server
        Type: Bug
    Versions: 0.9.3    
 Environment: winxp,jdk 1.4.2
    Reporter: Norbert Reilly
 Assigned to: Alex Karasulu 

I have observed a strange problem in implementing a custom partition that proxies to another
remote LDAP server: the results of search() operations have blanks replaced with "%20" so
that JXplorer is unable to explore them. The temporary solution I have in place is to wrap
the original search results returned by the remote server using the following class:

     *   ApacheDS seems to have a bug where SearchResult s with relative DNs
     * have URL encoding applied twice, so blanks come out as %20.
    public static final class AvoidEscapingNamingEnumeration
            implements NamingEnumeration
        private final String                baseDN;
        private final NamingEnumeration     ne;

        public AvoidEscapingNamingEnumeration(final String baseDN,
                final NamingEnumeration ne)
            this.baseDN = baseDN;
   = ne;

        public void close() throws NamingException

        public boolean hasMore() throws NamingException
            return ne.hasMore();

        public Object next() throws NamingException
            final SearchResult      sr = (SearchResult);
            final String            fullDN;
            final SearchResult      sr2;
            final String            name = sr.getName();

            if (!sr.isRelative() || (name == null) || "".equals(name))
                return sr;
            fullDN = name + "," + baseDN;
            return sr;

        public boolean hasMoreElements()
                return hasMore();
            catch (NamingException e)
                        + ": error in hasMoreElements", e);
                return false;

        public Object nextElement()
                return next();
            catch (NamingException e)
                        + ": error in nextElement", e);
                return null;

where the search method itself looks like this:

    public NamingEnumeration search(Name base, final Map env,
            final ExprNode filter, final SearchControls searchControls)
            throws NamingException
        final String        deref = (String)env.get("java.naming.ldap.derefAliases");
        final int           scope = searchControls.getSearchScope();
        String              attrIds[] = searchControls.getReturningAttributes();
        final String        newFilter;
        final StringBuffer  sb;
        final String        baseDn;
        final String[]      attrNames;
        final String        last;

        if (attrIds == null)
            attrIds = BLANK_ATTRS;
        sb = new StringBuffer();
        newFilter = sb.toString();
        baseDn = base.toString();

        last = base.get(0);
        if (! "dc=etadb".equals(last))
                // don't want to change name seen by outside world
            base = (Name)base.clone();

        attrNames = normaliseAttrNames(attrIds);
        final SearchControls sc = new SearchControls();
        final NamingEnumeration ne =, newFilter, sc);
        return new AvoidEscapingNamingEnumeration(baseDn, ne);


so it seems whatever is doing the escaping leaves results with full DNs alone (note that just
setting sr.setRelative(false) has no effect by itself). I'm not familiar enough with the DS
architecture yet to work out where the escaping is occurring and hence come up with a better

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:

View raw message