Browse Source

Fix bug in ldapdb by adding a GLOBAL_OPTIONS config parameter for ldap backend in order to define ldap.OPT_X_TLS_REQUIRE_CERT: ldap.OPT_X_TLS_NEVER which doesn't work in CONNECTION_OPTIONS

Fabs 11 years ago
parent
commit
fb2161f697
3 changed files with 22 additions and 12 deletions
  1. 9 5
      coin/members/tests.py
  2. 1 1
      coin/settings.py
  3. 12 6
      ldapdb/backends/ldap/base.py

+ 9 - 5
coin/members/tests.py

@@ -10,10 +10,13 @@ class MemberTests(TestCase):
         
     def test_when_creating_member_a_ldapuser_is_also_created_with_same_data(self):
         """
-        Test que lors de la création d'un nouveau membre, une entrée correspondante est bien créer dans le LDAP et qu'elle contient les même données
+        Test que lors de la création d'un nouveau membre, une entrée 
+        correspondante est bien créer dans le LDAP et qu'elle contient 
+        les même données.
         Cela concerne le nom et le prénom
         """
         #~ Créé un membre
+        
         first_name = u'Gérard';
         last_name = u'Majax';
         ldap_cn =  self.get_random_ldap_cn()
@@ -34,7 +37,8 @@ class MemberTests(TestCase):
     
     def test_when_modifiying_member_corresponding_ldap_user_is_also_modified_with_same_data(self):
         """
-        Test que lorsque l'on modifie un membre, l'utilisateur LDAP correspondant est bien modifié
+        Test que lorsque l'on modifie un membre, l'utilisateur LDAP 
+        correspondant est bien modifié
         Cela concerne le no met le prénom
         """
         #~ Créé un membre
@@ -78,14 +82,14 @@ class MemberTests(TestCase):
         #~ ldap_user.save()
         #~ 
         #~ Test l'authentification
-        logger.debug(ldap_cn)
+        # logger.debug(ldap_cn)
         c = Client()
         
         # TODO : Ce test échoue systématiquement, voir pourquoi
-        # self.assertEqual(c.login(username=ldap_cn, password=password), True)
+        self.assertEqual(c.login(username=ldap_cn, password=password), True)
         
         member.delete();
-        #~ ldap_user.delete();
+        ldap_user.delete();
         
     def get_random_ldap_cn(self):
         return 'coin_test_' + os.urandom(8).encode('hex');

+ 1 - 1
coin/settings.py

@@ -28,7 +28,7 @@ DATABASES = {
     # LDAP backend pour stockage et mise à jour de données
     'ldap': {
         'ENGINE': 'ldapdb.backends.ldap',
-        'NAME': 'ldap://ldapdev.illyse.org:390',
+        'NAME': 'ldap://ldapdev.illyse.org:390/',
         'TLS': True,
         'USER': 'cn=illysedev,ou=services,o=ILLYSE,l=Villeurbanne,st=RHA,c=FR',
         'PASSWORD': 'gfj83-E8ECgGh23JK_Ol12'

+ 12 - 6
ldapdb/backends/ldap/base.py

@@ -32,6 +32,7 @@
 
 import ldap
 import django
+from pprint import pprint
 
 from django.db.backends import (BaseDatabaseFeatures, BaseDatabaseOperations,
                                 BaseDatabaseWrapper)
@@ -95,15 +96,20 @@ class DatabaseWrapper(BaseDatabaseWrapper):
 
     def ensure_connection(self):
         if self.connection is None:
-            self.connection = ldap.initialize(self.settings_dict['NAME'])
-
-            options = self.settings_dict.get('CONNECTION_OPTIONS', {})
-            for opt, value in options.items():
+            
+            global_options = self.settings_dict.get('GLOBAL_OPTIONS', {})
+            for opt, value in global_options.items():
+                ldap.set_option(opt, value)
+            
+            self.connection = ldap.initialize(self.settings_dict['NAME'])          
+            
+            connection_options = self.settings_dict.get('CONNECTION_OPTIONS', {})
+            for opt, value in connection_options.items():
                 self.connection.set_option(opt, value)
-
+        
             if self.settings_dict.get('TLS', False):
                 self.connection.start_tls_s()
-
+        
             self.connection.simple_bind_s(
                 self.settings_dict['USER'],
                 self.settings_dict['PASSWORD'])