Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/xmpp/auth_nb.py')
-rw-r--r--src/common/xmpp/auth_nb.py46
1 files changed, 19 insertions, 27 deletions
diff --git a/src/common/xmpp/auth_nb.py b/src/common/xmpp/auth_nb.py
index 70a6d0be7..f4e43c87c 100644
--- a/src/common/xmpp/auth_nb.py
+++ b/src/common/xmpp/auth_nb.py
@@ -17,14 +17,11 @@
Provides library with all Non-SASL and SASL authentication mechanisms.
Can be used both for client and transport authentication.
'''
+import sys
from protocol import *
from auth import *
from client import PlugIn
-import sha
-import base64
-import random
-import itertools
-import dispatcher_nb
+import sha,base64,random,dispatcher_nb
try:
import kerberos
@@ -145,8 +142,8 @@ class SASL(PlugIn):
self._owner.RegisterHandler('failure', self.SASLHandler, xmlns=NS_SASL)
self._owner.RegisterHandler('success', self.SASLHandler, xmlns=NS_SASL)
if "GSSAPI" in mecs and have_kerberos:
- self.gss_vc = kerberos.authGSSClientInit(
- 'xmpp@' + self._owner.Server)[1]
+ rc, self.gss_vc = kerberos.authGSSClientInit('xmpp@' +
+ self._owner.Server)
response = kerberos.authGSSClientResponse(self.gss_vc)
node=Node('auth',attrs={'xmlns': NS_SASL, 'mechanism': 'GSSAPI'},
payload=(response or ""))
@@ -227,8 +224,10 @@ class SASL(PlugIn):
else:
resp['realm'] = self._owner.Server
resp['nonce']=chal['nonce']
- resp['cnonce'] = ''.join("%x" % randint(0, 2**28) for randint in
- itertools.repeat(random.randint, 7))
+ cnonce=''
+ for i in range(7):
+ cnonce += hex(int(random.random() * 65536 * 4096))[2:]
+ resp['cnonce'] = cnonce
resp['nc'] = ('00000001')
resp['qop'] = 'auth'
resp['digest-uri'] = 'xmpp/'+self._owner.Server
@@ -279,7 +278,7 @@ class NonBlockingNonSASL(PlugIn):
self.DEBUG('Querying server about possible auth methods', 'start')
self.owner = owner
- owner.Dispatcher.SendAndWaitForResponse(
+ resp = owner.Dispatcher.SendAndWaitForResponse(
Iq('get', NS_AUTH, payload=[Node('username', payload=[self.user])]), func=self._on_username
)
@@ -303,14 +302,9 @@ class NonBlockingNonSASL(PlugIn):
token=query.getTagData('token')
seq=query.getTagData('sequence')
self.DEBUG("Performing zero-k authentication",'ok')
-
- def hasher(s):
- return sha.new(s).hexdigest()
-
- def hash_n_times(s, count):
- return count and hasher(hash_n_times(s, count-1)) or s
-
- hash = hash_n_times(hasher(hasher(self.password) + token), int(seq))
+ hash = sha.new(sha.new(self.password).hexdigest()+token).hexdigest()
+ for foo in xrange(int(seq)):
+ hash = sha.new(hash).hexdigest()
query.setTagData('hash',hash)
self._method='0k'
else:
@@ -345,7 +339,7 @@ class NonBlockingNonSASL(PlugIn):
self.DEBUG('waiting on handshake', 'notify')
return
self._owner.onreceive(None)
- self._owner._registered_name=self.user
+ owner._registered_name=self.user
if self.handshake+1:
return self.on_auth('ok')
self.on_auth(None)
@@ -382,7 +376,7 @@ class NonBlockingBind(Bind):
self._resource = []
self._owner.onreceive(None)
- self._owner.Dispatcher.SendAndWaitForResponse(
+ resp=self._owner.Dispatcher.SendAndWaitForResponse(
Protocol('iq',typ='set',
payload=[Node('bind', attrs={'xmlns':NS_BIND}, payload=self._resource)]),
func=self._on_bound)
@@ -444,14 +438,12 @@ class NBComponentBind(ComponentBind):
def Bind(self, domain = None, on_bind = None):
''' Perform binding. Use provided domain name (if not provided). '''
- def wrapper(resp):
- self._on_bound(resp, domain)
- self._owner.onreceive(wrapper)
+ self._owner.onreceive(self._on_bound)
self.on_bind = on_bind
- def _on_bound(self, resp, domain=None):
- if resp:
- self.Dispatcher.ProcessNonBlocking(resp)
+ def _on_bound(self, resp):
+ if data:
+ self.Dispatcher.ProcessNonBlocking(data)
if self.bound is None:
return
self._owner.onreceive(None)
@@ -459,7 +451,7 @@ class NBComponentBind(ComponentBind):
Protocol('bind', attrs={'name':domain}, xmlns=NS_COMPONENT_1),
func=self._on_bind_reponse)
- def _on_bind_reponse(self, resp):
+ def _on_bind_reponse(self, res):
if resp and resp.getAttr('error'):
self.DEBUG('Binding failed: %s.' % resp.getAttr('error'), 'error')
elif resp: