lib/active_ldap/user_password.rb in activeldap-4.0.4 vs lib/active_ldap/user_password.rb in activeldap-4.0.5
- old
+ new
@@ -3,10 +3,12 @@
require 'digest/md5'
require 'digest/sha1'
module ActiveLdap
module UserPassword
+ include GetText
+
module_function
def valid?(password, hashed_password)
unless /^\{([A-Za-z][A-Za-z\d]+)\}/ =~ hashed_password
# Plain text password
return hashed_password == password
@@ -35,13 +37,21 @@
salt ||= "$1$#{Salt.generate(8)}"
"{CRYPT}#{password.crypt(salt)}"
end
def extract_salt_for_crypt(crypted_password)
- if /^\$1\$/ =~ crypted_password
- $MATCH + $POSTMATCH[0, 8].sub(/\$.*/, '') + "$"
+ if /\A\$(?:1|5|6|2a)\$[a-zA-Z0-9.\/]{,16}\$/ =~ crypted_password
+ $MATCH
else
- crypted_password[0, 2]
+ salt = crypted_password[0, 2]
+ if salt.size != 2
+ raise ArgumentError, _("salt size must be 2: <%s>") % salt
+ end
+ unless /\A[a-zA-Z0-9.\/]{2}\z/ =~ salt
+ message = _("salt character must be [a-zA-Z0-9./]: <%s>") % salt
+ raise ArgumentError, message
+ end
+ salt
end
end
def md5(password)
"{MD5}#{[Digest::MD5.digest(password)].pack('m').chomp}"