After literally hours of trying to set up Openfire with my own database, I finally got the admin interface to allow the admin user to log in again, but as soon as I do, I'm presented with the following exception:
java.lang.UnsupportedOperationException
at org.jivesoftware.openfire.user.JDBCUserProvider.createUser(JDBCUserProvider.jav a:173)
at org.jivesoftware.openfire.auth.JDBCAuthProvider.createUser(JDBCAuthProvider.jav a:404)
at org.jivesoftware.openfire.auth.JDBCAuthProvider.authenticate(JDBCAuthProvider.j ava:175)
at org.jivesoftware.openfire.auth.AuthFactory.authenticate(AuthFactory.java:176)
at org.jivesoftware.openfire.admin.login_jsp._jspService(login_jsp.java:149)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:547)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1359)
at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:39)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1330)
at org.jivesoftware.util.LocaleFilter.doFilter(LocaleFilter.java:74)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1330)
at org.jivesoftware.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingF ilter.java:50)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1330)
at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:78)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1330)
at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:164)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1330)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:22 7)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:94 1)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:409)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186 )
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:875 )
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandler Collection.java:250)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.jav a:149)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
at org.eclipse.jetty.server.Server.handle(Server.java:349)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.j ava:936)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:801)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:224)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51 )
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.jav a:586)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java :44)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598 )
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)
at java.lang.Thread.run(Thread.java:636)
Kind of makes sense, since it's not supposed to write to those tables, is it?
However, this does stop me from actually using the server.
As a sidenote, connecting to it using Pidgin with one of the users in my table doesn't work either; it simply returns 'Not authorized'.
In case it's needed, here's my ofProps table:
"passwordKey","sekrit"
"xmpp.socket.ssl.active","true"
"xmpp.domain","dijkstracomputers.nl"
"provider.admin.className","org.jivesoftware.openfire.admin.DefaultAdminProvider"
"provider.lockout.className","org.jivesoftware.openfire.lockout.DefaultLockOutProvider"
"provider.user.className","org.jivesoftware.openfire.user.JDBCUserProvider"
"provider.auth.className","org.jivesoftware.openfire.auth.JDBCAuthProvider"
"xmpp.auth.anonymous","true"
"provider.group.className","org.jivesoftware.openfire.group.JDBCGroupProvider"
"provider.vcard.className","org.jivesoftware.openfire.vcard.DefaultVCardProvider"
"provider.securityAudit.className","org.jivesoftware.openfire.security.DefaultSecurityAuditProvider"
"xmpp.session.conflict-limit","0"
"update.lastCheck","1377545539182"
"jdbcUserProvider.loadUserSQL","SELECT name,email FROM users WHERE userName=?"
"jdbcUserProvider.userCountSQL","SELECT COUNT(*) FROM users"
"jdbcUserProvider.allUsersSQL","SELECT userName FROM users"
"jdbcUserProvider.searchSQL","SELECT userName FROM users WHERE"
"jdbcUserProvider.usernameField","userName"
"jdbcUserProvider.nameField","fullName"
"jdbcUserProvider.emailField","email"
"jdbcAuthProvider.passwordSQL","SELECT password FROM users WHERE userName = ?"
"jdbcAuthProvider.passwordType","sha1"
"jdbcGroupProvider.groupCountSQL","SELECT COUNT(*) FROM userGroups"
"jdbcGroupProvider.allGroupsSQL","SELECT groupName FROM userGroups"
"jdbcGroupProvider.userGroupsSQL","SELECT `userGroups`.`groupName` FROM `userGroups` INNER JOIN `groupMembership` ON `userGroups`.`groupID` = `groupMembership`.`groupID` INNER JOIN `users` ON `groupMembership`.`userID` = `users`.`userID` WHERE `users`.`userName`=?"
"jdbcGroupProvider.descriptionSQL","SELECT description FROM userGroups WHERE groupName=?"
"jdbcGroupProvider.loadMembersSQL","SELECT `users`.`userName` FROM `users` INNER JOIN `groupMembership` ON `users`.`userID` = `groupMembership`.`userID` INNER JOIN `userGroups` ON `groupMembership`.`groupID` = `userGroups`.`groupID` WHERE `userGroups`.`groupName`=? AND `groupMembership`.`administrator` = 0"
"jdbcGroupProvider.loadAdminsSQL","SELECT `users`.`userName` FROM `users` INNER JOIN `groupMembership` ON `users`.`userID` = `groupMembership`.`userID` INNER JOIN `userGroups` ON `groupMembership`.`groupID` = `userGroups`.`groupID` WHERE `userGroups`.`groupName`=? AND `groupMembership`.`administrator` = 1"
"jdbcProvider.driver","com.mysql.jdbc.Driver"
"jdbcProvider.connectionString","jdbc:mysql://localhost/AMSC?user=AMSC&password=sekrit"
"admin.authorizedJIDs","admin@dijkstracomputers.nl"