Blob Blame History Raw
2011-01-20  Miloslav Trma─Ź  <mitr@redhat.com>

	* modules/ldap.c (get_ent_adds): Don't use empty gecos as a commonName
	value.
	* tests/ldap_test.py (Tests.testUserAdd7): New test.

diff -r d5daa92a0e78 -r 44c92c5eef75 modules/ldap.c
--- a/modules/ldap.c	Thu Jan 20 13:05:59 2011 +0000
+++ b/modules/ldap.c	Thu Jan 20 14:21:20 2011 +0100
@@ -1026,6 +1026,7 @@
 		    && lu_ent_get(ent, LU_COMMONNAME) == NULL) {
 			char *cn;
 
+			cn = NULL;
 			vals = lu_ent_get(ent, LU_GECOS);
 			if (vals != NULL) {
 				char *p;
@@ -1035,7 +1036,11 @@
 				p = strchr(cn, ',');
 				if (p != NULL)
 					*p = 0;
-			} else {
+				/* Note that gecos may be empty, but
+				   commonName (as a DirectoryString) is not
+				   allowed to be empty. */
+			}
+			if (cn == NULL || *cn == 0) {
 				vals = lu_ent_get(ent, LU_USERNAME);
 				/* Guaranteed by lu_ldap_set() */
 				g_assert (vals != NULL);
diff -r d5daa92a0e78 -r 44c92c5eef75 tests/ldap_test.py
--- a/tests/ldap_test.py	Thu Jan 20 13:05:59 2011 +0000
+++ b/tests/ldap_test.py	Thu Jan 20 14:21:20 2011 +0100
@@ -169,6 +169,39 @@
         e = self.a.initUser('user6_6')
         self.assertRaises(RuntimeError, self.a.addUser, e, False, False)
 
+    def testUserAdd7(self):
+        # Adding commonName if it is not defined:
+        # - Explicitly set
+        e = self.a.initUser('user6_7')
+        e[libuser.COMMONNAME] = 'Common Name'
+        self.a.addUser(e, False, False)
+        del e
+        e = self.a.lookupUserByName('user6_7')
+        self.assertEqual(e[libuser.COMMONNAME], ['Common Name'])
+        # - Defaulted from GECOS
+        e = self.a.initUser('user6_8')
+        e[libuser.GECOS] = 'Full Name,Office,1234,4321'
+        self.a.addUser(e, False, False)
+        del e
+        e = self.a.lookupUserByName('user6_8')
+        self.assertEqual(e[libuser.COMMONNAME], ['Full Name'])
+        # Defaulted from user name
+        e = self.a.initUser('user6_9')
+        self.assertEqual(e[libuser.GECOS], ['user6_9'])
+        e.clear(libuser.GECOS)
+        self.assertRaises(KeyError, lambda x: x[libuser.GECOS], e)
+        self.a.addUser(e, False, False)
+        del e
+        e = self.a.lookupUserByName('user6_9')
+        self.assertEqual(e[libuser.COMMONNAME], ['user6_9'])
+        # Defaulted from user name if GECOS is empty
+        e = self.a.initUser('user6_10')
+        e[libuser.GECOS] = ''
+        self.a.addUser(e, False, False)
+        del e
+        e = self.a.lookupUserByName('user6_10')
+        self.assertEqual(e[libuser.COMMONNAME], ['user6_10'])
+
     def testUserMod1(self):
         # A minimal case
         e = self.a.initUser('user7_1')