2 # -*- coding: UTF-8 -*-
3 # Depends: python-mysqldb
11 # TODO: transformer toute la partie gestion de BdD en une classe
12 # TODO: connexion persistente et gérer les coupures de service MySQL
20 global _host
, _user
, _passwd
, _db
21 db
= MySQLdb
.connect(host
=_host
, user
=_user
, passwd
=_passwd
,
22 db
=_db
, connect_timeout
=1)
23 cur
= db
.cursor(MySQLdb
.cursors
.DictCursor
)
25 """SELECT uid FROM users WHERE source=0 AND username=%s""", (user
, ))
29 def authenticate_user(user
, password
):
30 global _host
, _user
, _passwd
, _db
31 db
= MySQLdb
.connect(host
=_host
, user
=_user
, passwd
=_passwd
,
32 db
=_db
, connect_timeout
=1)
33 cur
= db
.cursor(MySQLdb
.cursors
.DictCursor
)
35 """SELECT password FROM users WHERE source=0 AND username=%s"""
36 """ AND LENGTH(password)>1""", (user
, ))
37 users
= cur
.fetchall()
42 if crypt
.crypt(password
, user
['password']) == user
['password']:
47 log_file
= open('/var/log/ejabberd/auth-mysql.log', 'a')
50 nread
= sys
.stdin
.read(2)
54 now
= time
.strftime('%Y/%m/%d %H:%M:%S', time
.localtime())
56 log_file
.write('%s bytes_read=%d\n' % (now
, len(nread
)))
59 size
= struct
.unpack('>h', nread
)[0]
60 data
= sys
.stdin
.read(size
)
61 (operation
, data
) = data
.split(':', 1)
62 if operation
== 'auth':
63 (user
, host
, password
) = data
.split(':', 2)
64 log_file
.write('%s operation=%s user=%s host=%s\n'
65 % (now
, operation
, user
, host
))
67 result
= authenticate_user(user
, password
)
68 elif operation
== 'isuser':
69 (user
, host
) = data
.split(':', 1)
70 log_file
.write('%s operation=%s user=%s host=%s\n'
71 % (now
, operation
, user
, host
))
73 result
= find_user(user
)
74 elif operation
== 'setpass':
75 (user
, host
, password
) = data
.split(':', 2)
76 log_file
.write('%s operation=%s user=%s host=%s\n'
77 % (now
, operation
, user
, host
))
79 #result = set_user_password(user, password)
83 log_file
.write('%s => result=%s\n' % (now
, result
))
85 sys
.stdout
.write(struct
.pack('>hh', 2, result
and 1 or 0))
88 traceback
.print_exc(file=log_file
)
91 if __name__
== '__main__':