changeset 28292:fa77b70c8ca6

jabber: Always require a resource when starting Legacy IQ Auth. It's possible to get to jabber_auth_start_old via SASL auth (when iChat Server says it will accept only GSSAPI). If the user has no resource specified, iChat Server will silently fail the authentication but pretend it succeeded.
author Paul Aurich <paul@darkrain42.org>
date Thu, 24 Sep 2009 16:38:49 +0000
parents c9d3bda6ef81
children c42d5c23a9e8
files ChangeLog libpurple/protocols/jabber/auth.c libpurple/protocols/jabber/jabber.c
diffstat 3 files changed, 14 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Sep 24 01:50:02 2009 +0000
+++ b/ChangeLog	Thu Sep 24 16:38:49 2009 +0000
@@ -3,6 +3,8 @@
 version 2.6.3 (??/??/20??):
 	XMPP:
 	* Fix a crash when attempting to validate an invalid JID.
+	* Resolve an issue when connecting to iChat Server when no resource
+	  is specified.
 
 	General:
 	* New 'plugins' sub-command to 'debug' command (i.e. '/debug plugins')
--- a/libpurple/protocols/jabber/auth.c	Thu Sep 24 01:50:02 2009 +0000
+++ b/libpurple/protocols/jabber/auth.c	Thu Sep 24 16:38:49 2009 +0000
@@ -692,7 +692,8 @@
 	JabberIq *iq;
 	xmlnode *query, *username;
 
-	/* We can end up here without encryption if the server doesn't support
+	/*
+	 * We can end up here without encryption if the server doesn't support
 	 * <stream:features/> and we're not using old-style SSL.  If the user
 	 * is requiring SSL/TLS, we need to enforce it.
 	 */
@@ -704,6 +705,16 @@
 		return;
 	}
 
+	/*
+	 * IQ Auth doesn't have support for resource binding, so we need to pick a
+	 * default resource so it will work properly.  jabberd14 throws an error and
+	 * iChat server just fails silently.
+	 */
+	if (!js->user->resource || *js->user->resource == '\0') {
+		g_free(js->user->resource);
+		js->user->resource = g_strdup("Home");
+	}
+
 #ifdef HAVE_CYRUS_SASL
 	/* If we have Cyrus SASL, then passwords will have been set
 	 * to OPTIONAL for this protocol. So, we need to do our own
--- a/libpurple/protocols/jabber/jabber.c	Thu Sep 24 01:50:02 2009 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Thu Sep 24 16:38:49 2009 +0000
@@ -1593,15 +1593,6 @@
 			if(js->protocol_version == JABBER_PROTO_0_9 && js->registration) {
 				jabber_register_start(js);
 			} else if(js->auth_type == JABBER_AUTH_IQ_AUTH) {
-				/* with dreamhost's xmpp server at least, you have to
-				   specify a resource or you will get a "406: Not
-				   Acceptable"
-				*/
-				if(!js->user->resource || *js->user->resource == '\0') {
-					g_free(js->user->resource);
-					js->user->resource = g_strdup("Home");
-				}
-
 				jabber_auth_start_old(js);
 			}
 			break;