Module ActiveLdap::UserPassword
In: lib/active_ldap/user_password.rb
Error DeleteError AdapterNotSpecified OperationNotPermitted LdapError RequiredAttributeMissed AttributeAssignmentError RequiredObjectClassMissed DistinguishedNameNotSetError StrongAuthenticationRequired ConnectionError SaveError EntryNotFound AuthenticationError EntryNotSaved UnknownAttribute ConnectionNotEstablished TimeoutError ConfigurationError AdapterNotFound DistinguishedNameInvalid ObjectClassError EntryInvalid EntryAlreadyExist Reloadable::Deprecated Base Reloadable::Subclasses Enumerable Collection StandardError HasMany HasManyWrap BelongsToMany Proxy BelongsTo Base\n[lib/active_ldap/adapter/base.rb\nlib/active_ldap/adapter/ldap.rb\nlib/active_ldap/adapter/net_ldap.rb] Ldap NetLdap ActiveRecord::Callbacks ActiveRecord::Validations Schema DistinguishedName lib/active_ldap/base.rb lib/active_ldap/schema.rb lib/active_ldap/distinguished_name.rb lib/active_ldap/ldap_error.rb ClassMethods Associations lib/active_ldap/association/has_many_wrap.rb lib/active_ldap/association/has_many.rb lib/active_ldap/association/proxy.rb lib/active_ldap/association/collection.rb lib/active_ldap/association/belongs_to_many.rb lib/active_ldap/association/belongs_to.rb Association ClassMethods Configuration Command lib/active_ldap/adapter/net_ldap.rb lib/active_ldap/adapter/ldap.rb lib/active_ldap/adapter/base.rb Adapter ClassMethods Attributes ClassMethods ObjectClass Callbacks ClassMethods Connection Validations Salt UserPassword ActiveLdap dot/m_26_0.png

Methods

Classes and Modules

Module ActiveLdap::UserPassword::Salt

Public Instance methods

[Source]

    # File lib/active_ldap/user_password.rb, line 32
32:     def crypt(password, salt=nil)
33:       salt ||= "$1$#{Salt.generate(8)}"
34:       "{CRYPT}#{password.crypt(salt)}"
35:     end

[Source]

    # File lib/active_ldap/user_password.rb, line 37
37:     def extract_salt_for_crypt(crypted_password)
38:       if /^\$1\$/ =~ crypted_password
39:         $MATCH + $POSTMATCH[0, 8].sub(/\$.*/, '') + "$"
40:       else
41:         crypted_password[0, 2]
42:       end
43:     end

[Source]

    # File lib/active_ldap/user_password.rb, line 58
58:     def extract_salt_for_smd5(smd5ed_password)
59:       Base64.decode64(smd5ed_password)[-4, 4]
60:     end

[Source]

    # File lib/active_ldap/user_password.rb, line 75
75:     def extract_salt_for_ssha(sshaed_password)
76:       extract_salt_for_smd5(sshaed_password)
77:     end

[Source]

    # File lib/active_ldap/user_password.rb, line 85
85:       def generate(length)
86:         salt = ""
87:         length.times {salt << CHARS[rand(CHARS.length)]}
88:         salt
89:       end

[Source]

    # File lib/active_ldap/user_password.rb, line 45
45:     def md5(password)
46:       "{MD5}#{Base64.encode64(MD5.md5(password).digest).chomp}"
47:     end

[Source]

    # File lib/active_ldap/user_password.rb, line 62
62:     def sha(password)
63:       "{SHA}#{Base64.encode64(SHA1.sha1(password).digest).chomp}"
64:     end

[Source]

    # File lib/active_ldap/user_password.rb, line 49
49:     def smd5(password, salt=nil)
50:       if salt and salt.size != 4
51:         raise ArgumentError.new("salt size must be == 4")
52:       end
53:       salt ||= Salt.generate(4)
54:       md5_hash_with_salt = "#{MD5.md5(password + salt).digest}#{salt}"
55:       "{SMD5}#{Base64.encode64(md5_hash_with_salt).chomp}"
56:     end

[Source]

    # File lib/active_ldap/user_password.rb, line 66
66:     def ssha(password, salt=nil)
67:       if salt and salt.size != 4
68:         raise ArgumentError.new("salt size must be == 4")
69:       end
70:       salt ||= Salt.generate(4)
71:       sha1_hash_with_salt = "#{SHA1.sha1(password + salt).digest}#{salt}"
72:       "{SSHA}#{Base64.encode64(sha1_hash_with_salt).chomp}"
73:     end

[Source]

    # File lib/active_ldap/user_password.rb, line 9
 9:     def valid?(password, hashed_password)
10:       unless /^\{([A-Z][A-Z\d]+)\}/ =~ hashed_password
11:         raise ArgumentError, "Invalid hashed password"
12:       end
13:       type = $1
14:       hashed_password_without_type = $POSTMATCH
15:       normalized_type = type.downcase
16:       unless respond_to?(normalized_type)
17:         raise ArgumentError, "Unknown Hash type #{type}"
18:       end
19:       salt_extractor = "extract_salt_for_#{normalized_type}"
20:       if respond_to?(salt_extractor)
21:         salt = send(salt_extractor, hashed_password_without_type)
22:         if salt.nil?
23:           raise ArgumentError, "Can't extract salt from hashed password"
24:         end
25:         generated_password = send(normalized_type, password, salt)
26:       else
27:         generated_password = send(normalized_type, password)
28:       end
29:       hashed_password == generated_password
30:     end

[Validate]