Module ActiveLdap::UserPassword
In: lib/active_ldap/user_password.rb
Error DeleteError LdapError AdapterNotSpecified OperationNotPermitted RequiredAttributeMissed LdifInvalid AttributeAssignmentError RequiredObjectClassMissed DistinguishedNameNotSetError StrongAuthenticationRequired ConnectionError SaveError EntryNotFound AuthenticationError EntryNotSaved UnknownAttribute ConnectionNotEstablished TimeoutError ConfigurationError AdapterNotFound DistinguishedNameInvalid ObjectClassError EntryInvalid EntryAlreadyExist Base DistinguishedName Ldif Reloadable::Deprecated Reloadable::Subclasses Enumerable Collection StandardError Children HasMany HasManyWrap BelongsToMany Proxy BelongsTo Common Find LDIF Delete Update GetText Parser GetTextSupport Base\n[lib/active_ldap/adapter/base.rb\nlib/active_ldap/adapter/ldap.rb\nlib/active_ldap/adapter/net_ldap.rb] Ldap NetLdap Normalize ActiveRecord::Callbacks ActiveRecord::Validations Schema\n[lib/active_ldap/schema.rb\nlib/active_ldap/schema/syntaxes.rb] lib/active_ldap/base.rb lib/active_ldap/schema.rb lib/active_ldap/ldif.rb lib/active_ldap/distinguished_name.rb lib/active_ldap/ldap_error.rb ClassMethods Associations ClassMethods HumanReadable 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/children.rb lib/active_ldap/association/collection.rb lib/active_ldap/association/belongs_to_many.rb lib/active_ldap/association/belongs_to.rb HasManyUtils Association ClassMethods Tree Acts Common LDIF Delete Find Update Operations lib/active_ldap/get_text/parser.rb GetText ClassMethods Configuration Command lib/active_ldap/adapter/net_ldap.rb lib/active_ldap/adapter/ldap.rb Adapter GetTextSupport Normalize ClassMethods Attributes Escape Callbacks ClassMethods ObjectClass Helper Validations ClassMethods Connection GetTextFallback Populate Salt UserPassword ActiveLdap dot/m_40_0.png

Methods

Classes and Modules

Module ActiveLdap::UserPassword::Salt

Public Instance methods

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

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

[Source]

    # File lib/active_ldap/user_password.rb, line 67
67:     def ssha(password, salt=nil)
68:       if salt and salt.size != 4
69:         raise ArgumentError, _("salt size must be == 4: %s") % salt.inspect
70:       end
71:       salt ||= Salt.generate(4)
72:       sha1_hash_with_salt = "#{SHA1.sha1(password + salt).digest}#{salt}"
73:       "{SSHA}#{Base64.encode64(sha1_hash_with_salt).chomp}"
74:     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: %s") % 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: %s") % 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,
24:             _("Can't extract salt from hashed password: %s") % hashed_password
25:         end
26:         generated_password = send(normalized_type, password, salt)
27:       else
28:         generated_password = send(normalized_type, password)
29:       end
30:       hashed_password == generated_password
31:     end

[Validate]