Hi all,
I found a bug in the max DB connection handling.
After rebooting my server (openfire 3.4.5) I noticed many Anonymous sessions.
I have the Anonymous login disabled.
Looking at the error log, turns out that the DefaultUserProvider.loadUser() gets SQLException on hitting the max limit and throws UserNotFoundException. This misleads the check AuthToken.isAnonymous() and the whole processing goes in wrong direction.
This is a critical bug!
The error handling should not alter the logic.
Here is a stack trace:
2008.04.25 12:26:38 org.jivesoftware.database.DefaultConnectionProvider.getConnection(DefaultConnect ionProvider.java:74) DbConnectionProvider: Error while getting connection:
java.sql.SQLException: Couldn’t get connection because we are at maximum connection count (30/30) and there are none available
at org.logicalcobwebs.proxool.Prototyper.quickRefuse(Prototyper.java:309)
at org.logicalcobwebs.proxool.ConnectionPool.getConnection(ConnectionPool.java:152 )
at org.logicalcobwebs.proxool.ProxoolDriver.connect(ProxoolDriver.java:89)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.jivesoftware.database.DefaultConnectionProvider.getConnection(DefaultConnec tionProvider.java:71)
at org.jivesoftware.database.DbConnectionManager.getConnection(DbConnectionManager .java:92)
at org.jivesoftware.openfire.user.DefaultUserProvider.loadUser(DefaultUserProvider .java:75)
at org.jivesoftware.openfire.user.UserManager.getUser(UserManager.java:200)
at org.jivesoftware.openfire.user.UserManager.isRegisteredUser(UserManager.java:30 1)
at org.jivesoftware.openfire.auth.AuthToken.isAnonymous(AuthToken.java:89)
at org.jivesoftware.openfire.handler.IQBindHandler.handleIQ(IQBindHandler.java:99)
at org.jivesoftware.openfire.handler.IQHandler.process(IQHandler.java:48)
at org.jivesoftware.openfire.IQRouter.handle(IQRouter.java:348)
at org.jivesoftware.openfire.IQRouter.route(IQRouter.java:100)
at org.jivesoftware.openfire.spi.PacketRouterImpl.route(PacketRouterImpl.java:67)
at org.jivesoftware.openfire.net.StanzaHandler.processIQ(StanzaHandler.java:303)
at org.jivesoftware.openfire.net.ClientStanzaHandler.processIQ(ClientStanzaHandler .java:78)
at org.jivesoftware.openfire.net.StanzaHandler.process(StanzaHandler.java:268)
at org.jivesoftware.openfire.net.StanzaHandler.process(StanzaHandler.java:167)
at org.jivesoftware.openfire.nio.ConnectionHandler.messageReceived(ConnectionHandl er.java:132)
at org.apache.mina.common.support.AbstractIoFilterChain$TailFilter.messageReceived (AbstractIoFilterChain.java:570)
at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(Ab stractIoFilterChain.java:299)
at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilt erChain.java:53)
at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceive d(AbstractIoFilterChain.java:648)
at org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flush(SimplePr otocolDecoderOutput.java:58)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecF ilter.java:173)
at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(Ab stractIoFilterChain.java:299)
at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilt erChain.java:53)
at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceive d(AbstractIoFilterChain.java:648)
at org.apache.mina.filter.executor.ExecutorFilter.processEvent(ExecutorFilter.java :239)
at org.apache.mina.filter.executor.ExecutorFilter$ProcessEventsRunnable.run(Execut orFilter.java:283)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
at java.lang.Thread.run(Unknown Source)
–Yavor