--- /dev/null
+diff -Naur ../jabberd-2.0s6.orig/PROTOCOL ./PROTOCOL
+--- ../jabberd-2.0s6.orig/PROTOCOL Mon Dec 20 20:15:48 2004
++++ ./PROTOCOL Mon Dec 20 20:17:26 2004
+@@ -21,7 +21,6 @@
+
+ Implemented, except for:
+ - SASL for s2s streams
+- - TLS for s2s streams
+ - Language support via xml:lang
+
+ XMPP IM (draft-ietf-xmpp-im-18)
+@@ -42,6 +41,10 @@
+ Last Activity (JEP-0012)
+
+ Implemented by the session manager (mod_iq_last).
++
++Message Events (JEP-0022)
++
++ Offline event implemented by the session manager (mod_offline).
+
+ Message Expiration (JEP-0023)
+
+diff -Naur ../jabberd-2.0s6.orig/README ./README
+--- ../jabberd-2.0s6.orig/README Mon Dec 20 20:15:48 2004
++++ ./README Mon Dec 20 20:22:10 2004
+@@ -2,7 +2,7 @@
+
+ Thanks for downloading jabberd 2.0. Below are some basic instructions to
+ get you started. Complete documentation is available at
+-http://www.jabberdoc.org/
++http://jabberd.jabberstudio.org/2/docs/
+
+ -- the jabberd team
+
+@@ -13,12 +13,11 @@
+ http://www.gnu.org/software/libidn/
+ - OpenSSL (0.9.6b or higher) - needed for SSL/TLS support
+ http://www.openssl.org/news/
+-
+ - Berkeley DB (4.1.24 or higher)
+ http://www.sleepycat.com/download/
+ - OpenLDAP (2.1.0 or higher)
+ http://www.openldap.org/software/download/
+- - PostgrsSQL (development libraries and headers)
++ - PostgresSQL (development libraries and headers)
+ http://www.postgresql.org/
+ - MySQL (development libraries and headers)
+ http://www.mysql.com/
+diff -Naur ../jabberd-2.0s6.orig/TODO ./TODO
+--- ../jabberd-2.0s6.orig/TODO Mon Dec 20 20:15:48 2004
++++ ./TODO Mon Dec 20 20:18:55 2004
+@@ -1,35 +1,10 @@
+-TODO for 2.0s4
+---------------
++TODO for 2.0
++------------
+
+ Roster templates may not be working properly (esp. with multiple items).
+ Check and fix if necessary.
+
+
+-This may not regen properly:
+-
+- <iq>
+- <query xmlns='foo'>
+- <one>
+- <two xmlns='bar'/>
+- </one>
+- <three xmlns='bar'/>
+- </query>
+- </iq>
+-
+-Regen seems to do this:
+-
+- <iq>
+- <query xmlns='foo'>
+- <one>
+- <two xmlns='bar'/>
+- </one>
+- <three/>
+- </query>
+- </ip>
+-
+-nad_find_scoped_namespace() is almost certainly the culprit.
+-
+-
+ Make sure that available presence in response to a s10n accept arrives
+ after the type='subscribed' (see chat with Nathan Walp)
+
+@@ -38,9 +13,6 @@
+ like I've checked this numerous times, so check once more, once and for
+ all.
+
+-
+-The SM memory leak seems to be doing better, but isn't confirmed.
+-
+
+ Modify user-load chain calls to indicate if the user is being loaded for
+ a session, or just for delivery. Don't load rosters (and other large
--- /dev/null
+--- c2s/authreg_ldap.c.orig Tue Dec 7 19:42:12 2004
++++ c2s/authreg_ldap.c Sun Dec 19 09:55:02 2004
+@@ -70,6 +70,21 @@
+ return ld_errno;
+ }
+
++/** entry-point function for following referrals, required in some cases by Active Directory */
++static int rebindProc(LDAP *ld, LDAP_CONST char *url, ber_tag_t request, ber_int_t msgid, void *mdata)
++{
++ moddata_t data = mdata;
++ data->ld = ld;
++ if(ldap_simple_bind_s(data->ld, data->binddn, data->bindpw)) {
++ log_write(data->ar->c2s->log, LOG_ERR, "ldap: bind failed (to %s): %s", url, ldap_err2string(_ldap_get_lderrno(data->ld)));
++ ldap_unbind_s(data->ld);
++ data->ld = NULL;
++ return NULL;
++ }
++
++ return LDAP_SUCCESS;
++}
++
+ /** connect to the ldap host */
+ static int _ldap_connect(moddata_t data)
+ {
+@@ -151,6 +166,13 @@
+ }
+
+ snprintf(filter, 1024, "(%s=%s)", data->uidattr, username);
++
++ if(ldap_set_rebind_proc(data->ld, &rebindProc,data)) {
++ log_write(data->ar->c2s->log, LOG_ERR, "ldap: set_rebind_proc failed: %s", ldap_err2string(_ldap_get_lderrno(data->ld)));
++ ldap_unbind_s(data->ld);
++ data->ld = NULL;
++ return NULL;
++ }
+
+ if(ldap_search_s(data->ld, basedn, LDAP_SCOPE_SUBTREE, filter, no_attrs, 0, &result))
+ {