Gentlemen, I am attempting to authenticate users via JAAS NTLoginModule and repeatedly recieve an ArrayIndexOutOfBoundsException wrapped in a LoginException. The error is (packages removed for confidentiality purposes):
javax.security.auth.login.LoginException: java.lang.ArrayIndexOutOfBoundsException at com.sun.security.auth.module.NTSystem.getCurrent(Native Method) at com.sun.security.auth.module.NTSystem.<init>(Unknown Source) at com.sun.security.auth.module.NTLoginModule.login(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at javax.security.auth.login.LoginContext.invoke(Unknown Source) at javax.security.auth.login.LoginContext.access$000(Unknown Source) at javax.security.auth.login.LoginContext$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.login.LoginContext.invokePriv(Unknown Source) at javax.security.auth.login.LoginContext.login(Unknown Source) at -------confidential-------- .UserServiceBean.authenticate( UserServiceBean.java:40) at -------confidential-------- .UserServiceBean.registerNewUser( UserServiceBean.java:130) at -------confidential-------- .servlets.AppManagerInitServlet.init( AppManagerInitServlet.java:33) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java :243) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAsPrivileged(Unknown Source) at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java :275) at org.apache.catalina.security.SecurityUtil.doAsPrivilege( SecurityUtil.java:161) at org.apache.catalina.security.SecurityUtil.doAsPrivilege( SecurityUtil.java:114) at org.apache.catalina.core.StandardWrapper.loadServlet( StandardWrapper.java:1099) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java :932) at org.apache.catalina.core.StandardContext.loadOnStartup( StandardContext.java:3917) at org.apache.catalina.core.StandardContext.start(StandardContext.java :4201) at org.apache.catalina.core.ContainerBase.addChildInternal( ContainerBase.java:759) at org.apache.catalina.core.ContainerBase.access$000(ContainerBase.java :121) at org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run( ContainerBase.java:143) at java.security.AccessController.doPrivileged(Native Method) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java :737) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:809) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java :698) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java :472) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java :310) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent( LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021) at org.apache.catalina.core.StandardHost.start(StandardHost.java:718) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java :442) at org.apache.catalina.core.StandardService.start(StandardService.java :450) at org.apache.catalina.core.StandardServer.start(StandardServer.java :709) at org.apache.catalina.startup.Catalina.start(Catalina.java:551) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432) NTSystem.getCurrent(Native Method) is a private method of NTSystem. This code executed as a standalone application works perfectly. This code executed in Tomcat 5.5 (not a servlet) fails. I have exhaustively researched this on the web and have attempted to trace the problem in the JAAS source code. The current operation has a servlet (AppManagerInitServlet) initializing on Tomcat startup that attempts to authenticate a known user (for testing purposes). I am currently executing this code with the Catalina SecurityManager in place, but I have get the exact same results not using the Catalina SecurityManager. For testing purposes, I have given my web application java.security.AllPermission until this can be resolved. Beyond instantiating a LoginContext and passing it my CallbackHandler I have no idea why this would fail, especially since it works in one environment and not another. Please help. ===================================================================================================================== My environment: Windows XP SP2 JDK 1.5.0_06 ( I have also tested on 1.5.0_08 with the same results) Tomcat 5.5.17 Relevant JVM switches: -Djava.security.manager -Djava.security.policy=D:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\catalina.policy -Djava.security.auth.login.config=D:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\jaas.conf catalina.policy // FOR TESTING PURPOSES ONLY grant codeBase "file:${catalina.home}/webapps/myapp/-" { permission java.security.AllPermission; }; JAAS Config File: mydomain { com.sun.security.auth.module.NTLoginModule required debug=true; }; -- Henry McClain "Life is hard. Wear a helmet" "Tell your wife that she looks pretty, even if she looks like a truck." --