[FIX]auth_ldap: now using check_credentials instead of check

bzr revid: dle@openerp.com-20130731152018-fln3urf0expd9ps7
This commit is contained in:
Denis Ledoux 2013-07-31 17:20:18 +02:00
parent 1a0c4dd407
commit a9718bec29
1 changed files with 28 additions and 38 deletions

View File

@ -23,10 +23,10 @@ import logging
from ldap.filter import filter_format
import openerp.exceptions
from openerp import pooler
from openerp import tools
from openerp.osv import fields, osv
from openerp import SUPERUSER_ID
from openerp.modules.registry import RegistryManager
_logger = logging.getLogger(__name__)
class CompanyLDAP(osv.osv):
@ -191,9 +191,9 @@ class CompanyLDAP(osv.osv):
user_obj = self.pool.get('res.users')
values = self.map_ldap_attributes(cr, uid, conf, login, ldap_entry)
if conf['user']:
values['active'] = True
user_id = user_obj.copy(cr, SUPERUSER_ID, conf['user'],
default={'active': True})
user_obj.write(cr, SUPERUSER_ID, user_id, values)
default=values)
else:
user_id = user_obj.create(cr, SUPERUSER_ID, values)
return user_id
@ -246,42 +246,32 @@ class users(osv.osv):
user_id = super(users, self).login(db, login, password)
if user_id:
return user_id
cr = pooler.get_db(db).cursor()
ldap_obj = pooler.get_pool(db).get('res.company.ldap')
for conf in ldap_obj.get_ldap_dicts(cr):
entry = ldap_obj.authenticate(conf, login, password)
if entry:
user_id = ldap_obj.get_or_create_user(
cr, SUPERUSER_ID, conf, login, entry)
if user_id:
cr.execute("""UPDATE res_users
SET login_date=now() AT TIME ZONE 'UTC'
WHERE login=%s""",
(tools.ustr(login),))
cr.commit()
break
cr.close()
return user_id
def check(self, db, uid, passwd):
try:
return super(users,self).check(db, uid, passwd)
except openerp.exceptions.AccessDenied:
pass
cr = pooler.get_db(db).cursor()
cr.execute('SELECT login FROM res_users WHERE id=%s AND active=TRUE',
(int(uid),))
res = cr.fetchone()
if res:
ldap_obj = pooler.get_pool(db).get('res.company.ldap')
registry = RegistryManager.get(db)
with registry.cursor() as cr:
ldap_obj = registry.get('res.company.ldap')
for conf in ldap_obj.get_ldap_dicts(cr):
if ldap_obj.authenticate(conf, res[0], passwd):
self._uid_cache.setdefault(db, {})[uid] = passwd
cr.close()
return True
cr.close()
raise openerp.exceptions.AccessDenied()
entry = ldap_obj.authenticate(conf, login, password)
if entry:
user_id = ldap_obj.get_or_create_user(
cr, SUPERUSER_ID, conf, login, entry)
if user_id:
break
return user_id
def check_credentials(self, cr, uid, password):
try:
super(users, self).check_credentials(cr, uid, password)
except openerp.exceptions.AccessDenied:
cr.execute('SELECT login FROM res_users WHERE id=%s AND active=TRUE',
(int(uid),))
res = cr.fetchone()
if res:
ldap_obj = self.pool['res.company.ldap']
for conf in ldap_obj.get_ldap_dicts(cr):
if ldap_obj.authenticate(conf, res[0], password):
return
raise
users()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: