ejabberd 2.0.1 (solved: mod_*_odbc) and (unsolved: roster status updates)

Hello all! This is really two questions, but I didn't want to appear to be spamming with two topics. I'm using the Debian stable version of ejabberd (2.0.1), with authentication done via Kerberos via PAM.

  1. Using the Mnesia database for roster, vcards, etc., everything works fine. The only problem is, when I connect with Pidgin or Psi (both latest), I get my roster but no presence information. I have to either wait for one of the clients to change status (i.e. to Away), or manually click "re-request authorization". Additionally, none of the IM gateways send my IM roster ot my client (i.e. my AIM contact list does not appear). This works fine in Jabberd 2, so what have I done wrong?
  2. Using mod_*_odbc (preferred), nothing works. I've configured the database correctly (MySQL, the username and passwords work), I ran the MySQL script to set up the schema, and all permissions are granted to the ejabberd user. Despite all of this, whenever I attempt to perform an action that would touch ODBC (such as a vcard update), I get the following error message in the log:
    =ERROR REPORT==== 2009-07-16 11:52:54 ===
    E(<0.305.0>:gen_iq_handler:118) : {noproc,
                                       {gen_server,call,
                                        ['ejabberd_odbc_sup_redacted.org',
                                         which_children,infinity]}}

       

    EDIT: This one has been solved.

I can provide my configuration if you need to see it.

Thanks in advance!

2. remember to do: ./configure --enable-odbc

1. No idea of your problem. Presence should work as usual.

2. If you compiled ejabberd from source code, remember to do: ./configure --enable-odbc
Also, if you installed ejabberd from source code or from some OS package (like Debian, Ubuntu), remember to also install the mysql erlang library. You will find some links in the ejabberd Guide.

MySQL Problem Fixed

It was from Debian. I installed the relevant odbc packages, and built the mysql module from SVN. MySQL works grand now.

Presence is still messed up. My roster appears fine, even with MySQL, but every contact gets re-marked "Not Authorized" every time I re-login. I do not get any status information on them at all unless they change status at some point (i.e. to away) (but when they do change their status, I do see it. It goes away when I log out/in again though).

Is there a module responsible for this that I can peek at?

Thanks!

Some ideas to try

If you just replaced in ejabberd.cfg mod_roster by mod_roster_odbc, then roster/subscriptions/presence should work correctly using ODBC (in your case MySQL) storage.

Try with other Jabber clients (well known are Psi, Gajim, Tkabber or Jabbim).

Try also creating two more accounts: test1 and test2. Login to each one with a different client. Add between them as contacts, then login to both, and let's see if presence is displayed correctly.

It's client-independent

It behaves the same on Pidgin, Psi, and other random clients.

I created test accounts; when I add them to each others' rosters, authorization requests are not received on either account. This tells us the next-to-root cause at least.

The following appears in the logs after every auth request:

D(<0.348.0>:ejabberd_c2s:1352) : Send XML on stream = "<iq from='test1@[redacted]' to='test1@[redacted]/476843264124990176606330' type='error' id='purple61be4e8b'><ping xmlns='urn:xmpp:ping'/><error code='503' type='cancel'><service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq>"

Are you using the original

Are you using the original configuration, or you changed anything in it? Try with the default config, or at least show here what lines you have added/changed/removed.

Syndicate content