Uploaded image for project: 'JBoss Web Server'
  1. JBoss Web Server
  2. JWS-992

Using roleSubtree="true" in JNDIRealm causes ArrayIndexOutOfBoundsException

    XMLWordPrintable

Details

    • Bug
    • Resolution: Won't Do
    • Critical
    • None
    • JWS 3.1.0 SP2 GA
    • tomcat8
    • None

    Description

      When setting roleSubtree="true" on a JNDIRealm a java.lang.ArrayIndexOutOfBoundsException is thrown when getting roles. This results in an HTTP 500 response. The exception and stack trace details are below.

      SEVERE [http-apr-8080-exec-1] org.apache.catalina.core.StandardHostValve.invoke Exception Processing /tomcat-ldap-example-1.0-SNAPSHOT/admin/admin.html
       java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
      	at java.util.Vector.elementAt(Vector.java:474)
      	at javax.naming.NameImpl.get(NameImpl.java:556)
      	at javax.naming.CompositeName.get(CompositeName.java:381)
      	at org.apache.catalina.realm.JNDIRealm.getDistinguishedName(JNDIRealm.java:2683)
      	at org.apache.catalina.realm.JNDIRealm.getRoles(JNDIRealm.java:1970)
      	at org.apache.catalina.realm.JNDIRealm.authenticate(JNDIRealm.java:1353)
      	at org.apache.catalina.realm.JNDIRealm.authenticate(JNDIRealm.java:1265)
      	at org.apache.catalina.authenticator.BasicAuthenticator.authenticate(BasicAuthenticator.java:84)
      	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:569)
      	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
      	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
      	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
      	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
      	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
      	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100)
      	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687)
      	at org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:2458)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
      	at java.lang.Thread.run(Thread.java:748)
      

      Here is my JNDIRealm configuration:

         <Realm className="org.apache.catalina.realm.JNDIRealm"
            connectionURL="ldap://localhost:389"
            connectionName="cn=admin,dc=mycorp,dc=com"
            connectionPassword="*****"
            userPattern="uid={0},ou=users,dc=mycorp,dc=com"
            roleBase="cn=helpdesk,dc=mycorp,dc=com"
            roleName="cn"
            roleSubtree="true"
            roleSearch="(member={0})"
          />
      

      Removing roleSubtree="true" results in no exception, but the roles aren't retrieved. This is because the default LDAP search scope is single-level, but roleSubtree="true" switches the scope to subtree (which is what is needed).

      Attachments

        Activity

          People

            rhn-support-csutherl Coty Sutherland
            dmulford@redhat.com Dave Mulford
            Marek Czernek Marek Czernek (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: