]> source.dussan.org Git - redmine.git/commitdiff
Force string comparison for login search to be case sensitive on MySQL. #2473
authorEric Davis <edavis@littlestreamsoftware.com>
Thu, 24 Jun 2010 03:08:20 +0000 (03:08 +0000)
committerEric Davis <edavis@littlestreamsoftware.com>
Thu, 24 Jun 2010 03:08:20 +0000 (03:08 +0000)
Contributed by Holger Just.

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3813 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/user.rb

index bbb3ff2ec456ae44cb271640a239bc1518db8520..8148ae3a9fb7abba4ac0199618b59acd86f335b7 100644 (file)
@@ -225,10 +225,13 @@ class User < Principal
   # Find a user account by matching the exact login and then a case-insensitive
   # version.  Exact matches will be given priority.
   def self.find_by_login(login)
+    # force string comparison to be case sensitive on MySQL
+    type_cast = (ActiveRecord::Base.connection.adapter_name == 'MySQL') ? 'BINARY' : ''
+    
     # First look for an exact match
-    user = first(:conditions => {:login => login})
+    user = first(:conditions => ["#{type_cast} login = ?", login])
     # Fail over to case-insensitive if none was found
-    user ||= first(:conditions => ["LOWER(login) = ?", login.to_s.downcase])
+    user ||= first(:conditions => ["#{type_cast} LOWER(login) = ?", login.to_s.downcase])
   end
 
   def self.find_by_rss_key(key)