Uploaded image for project: 'Directory ApacheDS'
  1. Directory ApacheDS
  2. DIRSERVER-169

Incorrect SearchResult name and "compare" failure using CoreContextFactory

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Later
    • pre-1.0, 1.0-RC1, 1.0-RC2, 1.0-RC3, 1.0-RC4, 1.0, 1.0.1, 1.0.2, 1.5.0
    • 1.5.1
    • core
    • None
    • OS X,
      java version "1.5.0_05"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_05-83)
      Java HotSpot(TM) Client VM (build 1.5.0_05-48, mixed mode, sharing)

    Description

      Attached is a test case following on from my post a while back to the mailing list, viz:

      My setup is like this:

      I have a simple DIT with a root "dc=acegisecurity,dc=org". This has two subcontexts "ou=people" and "ou=groups" for my users and roles respectively. When the test base class instantiated, I create a
      MutableStartupConfiguration and add a partition to it with the suffix "dc=acegisecurity,dc=org". I then create a context with this configuration as follows:

      env.setProperty( Context.PROVIDER_URL, "dc=acegisecurity,dc=org" );
      env.setProperty( Context.INITIAL_CONTEXT_FACTORY,
      CoreContextFactory.class.getName());
      env.putAll( cfg.toJndiEnvironment() );

      serverContext = new InitialDirContext( env );

      When I need a context in my tests it is created the same way.

      Bind authentication works fine in both scenarios. I have problems with two things when trying to use CoreContextFactory :

      1. The name returned by a search. When I do a search for a user in the directory, I get back the full DN rather than the name relative to the context I search in. So if I call

      ctx.search("ou=people", "(uid=

      {0})", new String[] {"bob"}, ctls);

      on a context obtained as above, I get back a SearchResult with name

      "uid=bob,ou=people,dc=acegisecurity,dc=org"

      whereas with the full server (or OpenLDAP) I get

      "uid=bob"

      as expected. This then unfortunately leads to an attempt to bind with an an unknown DN which causes the infinite recursion problem.

      2. Performing "compare" operations. I had problems with this before, as reported in

      http://issues.apache.org/jira/browse/DIRLDAP-77

      but this now works with the full server, thanks to Emmanuel's speedy response. Running the same search code against a context obtained from CoreContextFactory fails however. A compare is never performed and the search returns an empty enumeration. Is there some way I can get my client code (as posted in JIRA):

      SearchControls ctls = new SearchControls();
      ctls.setReturningAttributes(new String[0]);
      ctls.setSearchScope(SearchControls.OBJECT_SCOPE);

      String filter = "(userPassword={0}

      )";
      NamingEnumeration results = ctx.search(dn, filter, new
      Object[]

      {password.getBytes()}

      , ctls);

      to trigger a compare call on the context? The compare/search also fails for non-binary attributes.

      Attachments

        1. DIRSERVER169TestCase.java
          4 kB
          Luke
        2. LdapTestServer.java
          8 kB
          Luke
        3. TestCase.zip
          4 kB
          Luke

        Issue Links

          Activity

            People

              akarasulu Alex Karasulu
              luke Luke
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: