Module ActiveLdap::UserPassword
In: lib/active_ldap/user_password.rb
Error AttributeAssignmentError AdapterNotSpecified OperationNotPermitted RequiredObjectClassMissed ConnectionError RequiredAttributeMissed LdifInvalid DistinguishedNameNotSetError EntryNotFound LdapError SaveError StrongAuthenticationRequired NotImplemented 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] Base DistinguishedName Reloadable::Deprecated Reloadable::Subclasses Enumerable Ldif Collection EntryAttribute StandardError Children HasManyWrap HasMany BelongsToMany Proxy BelongsTo Normalizable Common Find LDIF Delete Update ActiveRecord::Callbacks GetText Parser 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 ActiveRecord::Validations 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 ClassMethods Normalizable Attributes Update Common ModifyNameRecordLoadable AddOperationModifiable DeleteOperationModifiable ReplaceOperationModifiable ModifyRecordLoadable DeleteRecordLoadable AddRecordLoadable ContentRecordLoadable LDIF Delete Find Operations GetTextSupport Escape ClassMethods Configuration ClassMethods ObjectClass ClassMethods Callbacks lib/active_ldap/get_text/parser.rb GetText lib/active_ldap/adapter/jndi_connection.rb lib/active_ldap/adapter/net_ldap.rb lib/active_ldap/adapter/ldap.rb lib/active_ldap/adapter/base.rb lib/active_ldap/adapter/jndi.rb Adapter Validations GetTextFallback Helper 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]