From 9b5c8db2ce15257bffd4c594010103068fd6c56f Mon Sep 17 00:00:00 2001
From: Yann Leboulanger <asterix@lagaule.org>
Date: Mon, 16 Mar 2009 09:54:57 +0000
Subject: [PATCH] prevent Traceback when server replies badly to resource
 binding request. Fixes #4880

---
 src/common/xmpp/auth_nb.py | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/src/common/xmpp/auth_nb.py b/src/common/xmpp/auth_nb.py
index cfbc3d43cd..7c89b3b738 100644
--- a/src/common/xmpp/auth_nb.py
+++ b/src/common/xmpp/auth_nb.py
@@ -484,15 +484,17 @@ class NonBlockingBind(PlugIn):
 
 	def _on_bound(self, resp):
 		if isResultNode(resp):
-			self.bound.append(resp.getTag('bind').getTagData('jid'))
-			log.info('Successfully bound %s.' % self.bound[-1])
-			jid = JID(resp.getTag('bind').getTagData('jid'))
-			self._owner.User = jid.getNode()
-			self._owner.Resource = jid.getResource()
-			self._owner.SendAndWaitForResponse(Protocol('iq', typ='set',
-				payload=[Node('session', attrs={'xmlns':NS_SESSION})]),
-				func=self._on_session)
-		elif resp:
+			if resp.getTag('bind') and resp.getTag('bind').getTagData('jid'):
+				self.bound.append(resp.getTag('bind').getTagData('jid'))
+				log.info('Successfully bound %s.' % self.bound[-1])
+				jid = JID(resp.getTag('bind').getTagData('jid'))
+				self._owner.User = jid.getNode()
+				self._owner.Resource = jid.getResource()
+				self._owner.SendAndWaitForResponse(Protocol('iq', typ='set',
+					payload=[Node('session', attrs={'xmlns':NS_SESSION})]),
+					func=self._on_session)
+				return
+		if resp:
 			log.error('Binding failed: %s.' % resp.getTag('error'))
 			self.on_bound(None)
 		else:
-- 
GitLab