2011-01-20 Miloslav Trmač * 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')