[jabberd] Some jabberd2 enhancements and corrections
nvs at fromru.com
Sun Mar 21 22:31:22 CST 2004
Lately I worked on jabberd2 adoption to my corporate network, and I seen that
it lacks for some features and has some nasty bugs.
Here is files:
Now short description.
At first, features :)
All authorization and user accounts data in my network stored in LDAP.
, and write access to this data has only administrators of appropriated
So I wanted that authentication of users and retrievial of user's info worked
with LDAP. I rewrote authreg_ldap.c module and called it authreg_ldapfull.c,
with it not only plain text authentication allowed (but as negative side,
password stored in cleartext, but as another positive side, not in
userPassword attribute). I wrote it with ldap_initialize, so multiple ldap
servers in form of LDAP URI may be specified (I didn't added checks to
configuration script for ldap_initialize in ldap library).
I wrote module for vcard retrivial from LDAP (read-only), called
storage_ldapvcard.c. You may specify ldapvcard storage driver for type
Next wanted feature was roster updates for each user when new corporate user
created, deleted, or moved to another department. I called this feature
"published roster". I implemented it on base of mod_roster (created new
module mod_roster_published) and storage_ldapvcard (added new storage type
"published-roster"). I made this feature so it affects only corporate
contacts of user's roster, algorithm described in supplied patch to
All features configured with appropriate config files (examples are in patches
to sm.xml.in.dist and c2s.xml.in.dist)
Now bugs and fixes.
Bug in 2.0s2's authreg.c cause c2s to crash when removing user. See
SM leaks havily. If it doesn't, kick me ;-)
I found (thanks, dmalloc) only one obvious place where memory was not freed
But I found one thing that I can't call bug, but sm leaks indirectly because
of this thing. Leak (one of many) happens somewhere in mod_roster in
user-load chain. When user becomes online, sm tries to load/use each other
user's data for some reason. If user which data is to be used is not online
(and is not loaded already), data loaded from database and then freed. But as
I can see, roster is not needed in that situation (loading roster for each
offline makes big cpu overhead), and I corrected mod_roster.c, sm.h and
sess.c so roster loaded only for that user for which session is created now.
This is dirty hack, but memory now does not leaks so fast and sm does not
consume much cpu time at every user registration.
I have no time for debugging leaks, but when I compiled sm with dmalloc, I
seen that biggest leaks happens with jid's and pool's.
I supplied file with openldap schema called local.schema. It uses unregistered
OIDs, you warned :-)
Please let me know if you have any suggestions, and correct me if I was wrong
or said things that already has been discussed.
And sorry for my English ;-)
More information about the jabberd