Add salt to sha of password

This commit is contained in:
Cédric Krier committed 2009-07-29 16:27:18 +02:00
1 parent 990af40345
commit ab45d85e78
4 files changed
+24 -9

No files matched your search

+1
View File
@@ -1,3 +1,4 @@
* Add salt to sha of password
* Add strftime to ir.lang to handle locale's format
* Add sqlite backend
* Add validate test for required and size
+10 -2
View File
@@ -7,6 +7,8 @@ from trytond.wizard import Wizard
from lxml import etree
from trytond.tools import Cache
from trytond.backend import TableHandler
import string
import random
class User(ModelSQL, ModelView):
@@ -16,6 +18,7 @@ class User(ModelSQL, ModelView):
name = fields.Char('Name', required=True, select=1, translate=True)
login = fields.Char('Login', required=True)
password = fields.Sha('Password')
salt = fields.Char('Salt', size=8)
signature = fields.Text('Signature')
active = fields.Boolean('Active')
action = fields.Many2One('ir.action', 'Home Action')
@@ -114,8 +117,13 @@ class User(ModelSQL, ModelView):
if 'menu' in vals:
vals['menu'] = action_obj.get_action_id(cursor, user,
vals['menu'], context=context)
if 'password' in vals and vals['password'] == 'x' * 10:
del vals['password']
if 'password' in vals:
if vals['password'] == 'x' * 10:
del vals['password']
else:
vals['salt'] = ''.join(random.sample(
string.letters + string.digits, 8))
vals['password'] += vals['salt']
return vals
def create(self, cursor, user, vals, context=None):
+7 -5
View File
@@ -18,11 +18,7 @@ def login(dbname, loginname, password, cache=True):
_USER_TRY.setdefault(dbname, {})
database = Database(dbname).connect()
cursor = database.cursor()
if hashlib:
password_sha = hashlib.sha1(password).hexdigest()
else:
password_sha = sha.new(password).hexdigest()
cursor.execute('SELECT id, password, active FROM res_user '
cursor.execute('SELECT id, password, active, salt FROM res_user '
'WHERE login = %s', (loginname,))
res = cursor.fetchone()
if res:
@@ -31,6 +27,12 @@ def login(dbname, loginname, password, cache=True):
if user_id == 0:
return False
_USER_TRY[dbname].setdefault(user_id, 0)
# Add salt
password += res[3] or ''
if hashlib:
password_sha = hashlib.sha1(password).hexdigest()
else:
password_sha = sha.new(password).hexdigest()
if res[1] == password_sha and res[2]:
_USER_TRY[dbname][user_id] = 0
if cache:
+6 -2
View File
@@ -27,6 +27,8 @@ except ImportError:
import sha
import threading
from pool import Pool
import string
import random
class TrytonServer(object):
@@ -128,13 +130,15 @@ class TrytonServer(object):
database = Database(db_name).connect()
cursor = database.cursor()
salt = ''.join(random.sample(string.letters + string.digits, 8))
password += salt
if hashlib:
password = hashlib.sha1(password).hexdigest()
else:
password = sha.new(password).hexdigest()
cursor.execute('UPDATE res_user ' \
'SET password = %s ' \
'WHERE login = \'admin\'', (password,))
'SET password = %s, salt = %s ' \
'WHERE login = \'admin\'', (password, salt))
cursor.commit()
cursor.close()