OSDN Git Service

Fix LDAP on the fly creation. The User object doesn't have a :dn attribute.
authorEric Davis <edavis@littlestreamsoftware.com>
Thu, 25 Feb 2010 16:19:55 +0000 (16:19 +0000)
committerEric Davis <edavis@littlestreamsoftware.com>
Thu, 25 Feb 2010 16:19:55 +0000 (16:19 +0000)
Fixes #4918 and adds a test for the behavior.

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

app/models/user.rb
test/unit/user_test.rb

index 8a69fda..496ca21 100644 (file)
@@ -111,7 +111,8 @@ class User < Principal
       # user is not yet registered, try to authenticate with available sources
       attrs = AuthSource.authenticate(login, password)
       if attrs
-        user = new(*attrs)
+        attributes = *attrs
+        user = new(attributes.symbolize_keys.except(:dn))
         user.login = login
         user.language = Setting.default_language
         if user.save
index a94870d..8d5ce97 100644 (file)
@@ -120,6 +120,36 @@ class UserTest < ActiveSupport::TestCase
     assert_equal nil, user  
   end
   
+  if ldap_configured?
+    context "#try_to_login using LDAP" do
+      context "on the fly registration" do
+        setup do
+          @auth_source = AuthSourceLdap.generate!(:name => 'localhost',
+                                                  :host => '127.0.0.1',
+                                                  :port => 389,
+                                                  :base_dn => 'OU=Person,DC=redmine,DC=org',
+                                                  :attr_login => 'uid',
+                                                  :attr_firstname => 'givenName',
+                                                  :attr_lastname => 'sn',
+                                                  :attr_mail => 'mail',
+                                                  :onthefly_register => true)
+
+        end
+
+        context "with a successful authentication" do
+          should "create a new user account" do
+            assert_difference('User.count') do
+              User.try_to_login('edavis', '123456')
+            end
+          end
+        end
+      end
+    end
+
+  else
+    puts "Skipping LDAP tests."
+  end
+  
   def test_create_anonymous
     AnonymousUser.delete_all
     anon = User.anonymous