1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 """SASL authentication implementaion for PyXMPP.
18
19 Normative reference:
20 - `RFC 2222 <http://www.ietf.org/rfc/rfc2222.txt>`__
21 """
22
23 __docformat__="restructuredtext en"
24
25 import random
26
27 from pyxmpp.sasl.core import Reply,Response,Challenge,Success,Failure,PasswordManager
28
29 from pyxmpp.sasl.plain import PlainClientAuthenticator,PlainServerAuthenticator
30 from pyxmpp.sasl.digest_md5 import DigestMD5ClientAuthenticator,DigestMD5ServerAuthenticator
31 from pyxmpp.sasl.external import ExternalClientAuthenticator
32
33 safe_mechanisms_dict={"DIGEST-MD5":(DigestMD5ClientAuthenticator,DigestMD5ServerAuthenticator),
34 "EXTERNAL":(ExternalClientAuthenticator, None)}
35 try:
36 from pyxmpp.sasl.gssapi import GSSAPIClientAuthenticator
37 except ImportError:
38 pass
39 else:
40 safe_mechanisms_dict["GSSAPI"] = (GSSAPIClientAuthenticator,None)
41 unsafe_mechanisms_dict={"PLAIN":(PlainClientAuthenticator,PlainServerAuthenticator)}
42 all_mechanisms_dict=safe_mechanisms_dict.copy()
43 all_mechanisms_dict.update(unsafe_mechanisms_dict)
44
45 safe_mechanisms=safe_mechanisms_dict.keys()
46 unsafe_mechanisms=unsafe_mechanisms_dict.keys()
47 all_mechanisms=safe_mechanisms+unsafe_mechanisms
48
50 """Create a client authenticator object for given SASL mechanism and
51 password manager.
52
53 :Parameters:
54 - `mechanism`: name of the SASL mechanism ("PLAIN", "DIGEST-MD5" or "GSSAPI").
55 - `password_manager`: name of the password manager object providing
56 authentication credentials.
57 :Types:
58 - `mechanism`: `str`
59 - `password_manager`: `PasswordManager`
60
61 :return: new authenticator.
62 :returntype: `sasl.core.ClientAuthenticator`"""
63 authenticator=all_mechanisms_dict[mechanism][0]
64 return authenticator(password_manager)
65
67 """Create a server authenticator object for given SASL mechanism and
68 password manager.
69
70 :Parameters:
71 - `mechanism`: name of the SASL mechanism ("PLAIN", "DIGEST-MD5" or "GSSAPI").
72 - `password_manager`: name of the password manager object to be used
73 for authentication credentials verification.
74 :Types:
75 - `mechanism`: `str`
76 - `password_manager`: `PasswordManager`
77
78 :return: new authenticator.
79 :returntype: `sasl.core.ServerAuthenticator`"""
80 authenticator=all_mechanisms_dict[mechanism][1]
81 return authenticator(password_manager)
82
83
84