From 9072ff18c16fdeee8cdc677ff0310b5b69c4fd34 Mon Sep 17 00:00:00 2001
From: Yann Leboulanger <asterix@lagaule.org>
Date: Mon, 14 Dec 2009 17:39:32 +0100
Subject: [PATCH] [Dave Cridland] implement EXTERNAL auth method. See #5512

---
 src/common/xmpp/auth_nb.py | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/common/xmpp/auth_nb.py b/src/common/xmpp/auth_nb.py
index b85b516894..cac73ec877 100644
--- a/src/common/xmpp/auth_nb.py
+++ b/src/common/xmpp/auth_nb.py
@@ -207,6 +207,14 @@ class SASL(PlugIn):
 			self.startsasl = SASL_IN_PROCESS
 			self._owner.send(str(node))
 			raise NodeProcessed
+		if "EXTERNAL" in self.mecs:
+			self.mecs.remove('EXTERNAL')
+			node = Node('auth', attrs={'xmlns': NS_SASL, 'mechanism': 'EXTERNAL'},
+				payload=[base64.encodestring('%s@%s' % (self.username,
+				self._owner.Server)).replace('\n', '')])
+			self.startsasl = SASL_IN_PROCESS
+			self._owner.send(str(node))
+			raise NodeProcessed
 		if 'GSSAPI' in self.mecs and have_kerberos:
 			self.mecs.remove('GSSAPI')
 			try:
@@ -237,7 +245,8 @@ class SASL(PlugIn):
 			self.startsasl = SASL_IN_PROCESS
 			raise NodeProcessed
 		self.startsasl = SASL_FAILURE
-		log.error('I can only use DIGEST-MD5, GSSAPI and PLAIN mecanisms.')
+		log.error('I can only use EXTERNAL, DIGEST-MD5, GSSAPI and PLAIN '
+			'mecanisms.')
 		if self.on_sasl:
 			self.on_sasl()
 		return
-- 
GitLab