Module ActiveLdap::UserPassword
In: lib/active_ldap/user_password.rb
Error AttributeAssignmentError AdapterNotSpecified OperationNotPermitted RequiredObjectClassMissed ConnectionError RequiredAttributeMissed LdifInvalid LdapError DistinguishedNameNotSetError EntryNotFound SaveError StrongAuthenticationRequired AdapterNotFound TimeoutError AuthenticationError AttributeValueInvalid EntryNotSaved DistinguishedNameInputInvalid EntryAlreadyExist ObjectClassError UnknownAttribute EntryInvalid DeleteError ConfigurationError ConnectionNotSetup DistinguishedNameInvalid Schema\n[lib/active_ldap/schema.rb\nlib/active_ldap/schema/syntaxes.rb] DistinguishedName Base Reloadable::Deprecated Reloadable::Subclasses Enumerable Ldif Collection EntryAttribute StandardError Children HasManyWrap HasMany BelongsToMany Proxy BelongsTo Common Find LDIF Delete Update Normalizable GetText Parser ActiveRecord::Callbacks ActiveRecord::Validations Base\n[lib/active_ldap/adapter/base.rb\nlib/active_ldap/adapter/jndi.rb\nlib/active_ldap/adapter/ldap.rb\nlib/active_ldap/adapter/net_ldap.rb] Jndi Ldap NetLdap GetTextSupport Xml JndiConnection lib/active_ldap/distinguished_name.rb lib/active_ldap/base.rb lib/active_ldap/xml.rb lib/active_ldap/schema.rb lib/active_ldap/entry_attribute.rb lib/active_ldap/ldif.rb lib/active_ldap/ldap_error.rb Compatible ClassMethods Associations LdapBenchmarking ActionController Populate lib/active_ldap/association/has_many_wrap.rb lib/active_ldap/association/children.rb lib/active_ldap/association/collection.rb lib/active_ldap/association/proxy.rb lib/active_ldap/association/belongs_to_many.rb lib/active_ldap/association/belongs_to.rb lib/active_ldap/association/has_many.rb HasManyUtils Association ClassMethods Tree Acts Command Update Common ModifyNameRecordLoadable AddOperationModifiable DeleteOperationModifiable ReplaceOperationModifiable ModifyRecordLoadable DeleteRecordLoadable AddRecordLoadable ContentRecordLoadable LDIF Delete Find Operations GetTextSupport Escape ClassMethods Normalizable Attributes ClassMethods Configuration ClassMethods ObjectClass lib/active_ldap/get_text/parser.rb GetText ClassMethods Callbacks Validations lib/active_ldap/adapter/jndi_connection.rb lib/active_ldap/adapter/net_ldap.rb lib/active_ldap/adapter/ldap.rb lib/active_ldap/adapter/jndi.rb Adapter Helper GetTextFallback ClassMethods HumanReadable Salt UserPassword ClassMethods Connection ActiveLdap dot/m_46_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}#{[Digest::MD5.digest(password)].pack('m').chomp}"
47:     end

[Source]

    # File lib/active_ldap/user_password.rb, line 62
62:     def sha(password)
63:       "{SHA}#{[Digest::SHA1.digest(password)].pack('m').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, _("salt size must be == 4: %s") % salt.inspect
52:       end
53:       salt ||= Salt.generate(4)
54:       md5_hash_with_salt = "#{Digest::MD5.digest(password + salt)}#{salt}"
55:       "{SMD5}#{[md5_hash_with_salt].pack('m').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, _("salt size must be == 4: %s") % salt.inspect
69:       end
70:       salt ||= Salt.generate(4)
71:       sha1_hash_with_salt = "#{Digest::SHA1.digest(password + salt)}#{salt}"
72:       "{SSHA}#{[sha1_hash_with_salt].pack('m').chomp}"
73:     end

[Source]

    # File lib/active_ldap/user_password.rb, line 8
 8:     def valid?(password, hashed_password)
 9:       unless /^\{([A-Z][A-Z\d]+)\}/ =~ hashed_password
10:         raise ArgumentError, _("Invalid hashed password: %s") % hashed_password
11:       end
12:       type = $1
13:       hashed_password_without_type = $POSTMATCH
14:       normalized_type = type.downcase
15:       unless respond_to?(normalized_type)
16:         raise ArgumentError, _("Unknown Hash type: %s") % type
17:       end
18:       salt_extractor = "extract_salt_for_#{normalized_type}"
19:       if respond_to?(salt_extractor)
20:         salt = send(salt_extractor, hashed_password_without_type)
21:         if salt.nil?
22:           raise ArgumentError,
23:             _("Can't extract salt from hashed password: %s") % 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]