iChat + Wildfire LDAP + Trillian Crash

I have a wildfire 3.1.1 server authenticating solely against LDAP. When an ichat client attempts to chat with a trillian client, the trillian client looses its jabber connection. Debug logs for Trillian show malformed XML has been received. This also happens if the Trillian client mouses over the ichat client username. The debug logs for the server say something about the ldapvcard provider being read only.

I have issolated the crashing of Trillian to when user info (including an avatar) is requested from the ichat client. iChat (being the non-standard jabber client that it is) returns a vcard, which causes Wildfire to bork and send malformed XML to Trillian, which promptly drops the connection. This doesn’'t occur with any other combination of clients (i.e. Adium-Trillian works fine, iChat-Adium works fine, etc…)

Seeing as Trillian is actually the standards compliant node in this whole mess, I figured that the bug report should be filed against one of the other two (wildfire or iChat). I’'d rather file with ichat, but I figure you guys probably will fix it long before Apple would. Any thoughts on a work around?

Hey Daniel,

Could you paste the error that you get in the logs? I attached a debugger plugin for Wildfire that you can use to collect the received and sent XML packets. I’'m really curious to see how Wildfire can send a malformed XML stanza.

Thanks for your help.

Regards,

– Gato

Here’'s the XML output from Trillian (it was easier to do it that way than install a plugin).

<query xmlns=“http://jabber.org/protocol/disco#info”/>

</iq>

<body>Hi</body>

<html xmlns=“http://jabber.org/protocol/xhtml-im”><body xmlns=“http://www.w3.org/1999/xhtml” style=“background-color:#7BB5EE;color:#000000”><span style=“font-family:Helvetica”>Hi</span></body></html><x xmlns=“jabber:x:event”>

<composing/>

</x>

</message>

_ ** *INTERNAL XML PARSING ERROR!_

_ ** *INTERNAL XML PARSING ERROR!_

_ ** *Connection to server lost._

_ ** *Disconnected from server._

  • Trillian: <presence id=’‘trill_19’’ type=’‘unavailable’’><status>Logging off</status></presence>*

_ ** *Reconnecting to showreelplayer.com, attempt 0…_

_ ** *Creating connection "daniel@showreelplayer.com/Trillian"_

  • Trillian: <?xml version=“1.0”?><stream:stream to=“showreelplayer.com” xmlns=“jabber:client” xmlns:stream=“http://etherx.jabber.org/streams” xml:lang=“en” version=“1.0”>*

  • showreelplayer.com: <?xml version=’‘1.0’’ encoding=’‘UTF-8’’?>*

  • showreelplayer.com: <stream:stream xmlns:stream=“http://etherx.jabber.org/streams” xmlns=“jabber:client” from=“showreelplayer.com” id=“68c54370” xml:lang=“en” version=“1.0”>*

  • showreelplayer.com: <stream:features><starttls xmlns=“urn:ietf:params:xml:ns:xmpp-tls”><required/></starttls>&l t;mechanisms xmlns=“urn:ietf:params:xml:ns:xmpp-sasl”><mechanism>PLAIN</mechanis m></mechanisms></stream:features>*

  • Trillian: <starttls xmlns=’‘urn:ietf:params:xml:ns:xmpp-tls’’ />*

And the relevant error log entries:

java.lang.UnsupportedOperationException: VCard provider is read-only.

at org.jivesoftware.wildfire.vcard.VCardManager.setVCard(VCardManager.java:122)

at org.jivesoftware.wildfire.handler.IQvCardHandler.handleIQ(IQvCardHandler.java:8 2)

at org.jivesoftware.wildfire.handler.IQHandler.process(IQHandler.java:48)

at org.jivesoftware.wildfire.IQRouter.handle(IQRouter.java:268)

at org.jivesoftware.wildfire.IQRouter.route(IQRouter.java:96)

at org.jivesoftware.wildfire.spi.PacketRouterImpl.route(PacketRouterImpl.java:67)

at org.jivesoftware.wildfire.net.SocketReader.processIQ(SocketReader.java:250)

at org.jivesoftware.wildfire.net.ClientSocketReader.processIQ(ClientSocketReader.j ava:51)

at org.jivesoftware.wildfire.net.SocketReader.process(SocketReader.java:216)

at org.jivesoftware.wildfire.net.BlockingReadingMode.readStream(BlockingReadingMod e.java:156)

at org.jivesoftware.wildfire.net.BlockingReadingMode.run(BlockingReadingMode.java: 62)

at org.jivesoftware.wildfire.net.SocketReader.run(SocketReader.java:123)

at java.lang.Thread.run(Thread.java:595)

2006.11.30 20:11:56 org.jivesoftware.wildfire.handler.IQvCardHandler.handleIQ(IQvCardHandler.java:91 )

java.lang.UnsupportedOperationException: VCard provider is read-only.

at org.jivesoftware.wildfire.vcard.VCardManager.setVCard(VCardManager.java:122)

at org.jivesoftware.wildfire.handler.IQvCardHandler.handleIQ(IQvCardHandler.java:8 2)

at org.jivesoftware.wildfire.handler.IQHandler.process(IQHandler.java:48)

at org.jivesoftware.wildfire.IQRouter.handle(IQRouter.java:268)

at org.jivesoftware.wildfire.IQRouter.route(IQRouter.java:96)

at org.jivesoftware.wildfire.spi.PacketRouterImpl.route(PacketRouterImpl.java:67)

at org.jivesoftware.wildfire.net.SocketReader.processIQ(SocketReader.java:250)

at org.jivesoftware.wildfire.net.ClientSocketReader.processIQ(ClientSocketReader.j ava:51)

at org.jivesoftware.wildfire.net.SocketReader.process(SocketReader.java:216)

at org.jivesoftware.wildfire.net.BlockingReadingMode.readStream(BlockingReadingMod e.java:156)

at org.jivesoftware.wildfire.net.BlockingReadingMode.run(BlockingReadingMode.java: 62)

at org.jivesoftware.wildfire.net.SocketReader.run(SocketReader.java:123)

at java.lang.Thread.run(Thread.java:595)

If you like, I can install your plugin and do it that way, it was just quicker