diff options
author | Matthias Dieter Wallnöfer <mdw@samba.org> | 2012-05-03 22:55:06 +0200 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2012-05-04 08:25:36 +1000 |
commit | d4391f77bf54ae94de9715bfbefcd545c556e55c (patch) | |
tree | 5b51b375cf6bbd777b518e95d8ee351f43844990 /source4/dsdb/tests/python | |
parent | 299c13b7f60f2e3faaf73d6b3370acf99021963d (diff) | |
download | samba-d4391f77bf54ae94de9715bfbefcd545c556e55c.tar.gz samba-d4391f77bf54ae94de9715bfbefcd545c556e55c.tar.bz2 samba-d4391f77bf54ae94de9715bfbefcd545c556e55c.zip |
s4:samldb LDB module - make sure to not add identical "servicePrincipalName"s more than once
The service principal names need to be case-insensitively unique, otherwise we
end up in a LDB ERR_ATTRIBUTE_OR_VALUE_EXISTS error.
This issue has been discovered on the technical mailing list (thread:
cannot rename windows xp machine in samba4) when trying to rename a AD
client workstation.
Diffstat (limited to 'source4/dsdb/tests/python')
-rwxr-xr-x | source4/dsdb/tests/python/sam.py | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/source4/dsdb/tests/python/sam.py b/source4/dsdb/tests/python/sam.py index 8417b26cb7..c5727cd080 100755 --- a/source4/dsdb/tests/python/sam.py +++ b/source4/dsdb/tests/python/sam.py @@ -2432,10 +2432,53 @@ class SamTests(samba.tests.TestCase): self.assertTrue(len(res) == 1) self.assertEquals(res[0]["dNSHostName"][0], "testname2.testdom") self.assertEquals(res[0]["sAMAccountName"][0], "testname2$") - self.assertTrue(res[0]["servicePrincipalName"][0] == "HOST/testname2" or - res[0]["servicePrincipalName"][1] == "HOST/testname2") - self.assertTrue(res[0]["servicePrincipalName"][0] == "HOST/testname2.testdom" or - res[0]["servicePrincipalName"][1] == "HOST/testname2.testdom") + self.assertTrue(len(res[0]["servicePrincipalName"]) == 2) + self.assertTrue("HOST/testname2" in res[0]["servicePrincipalName"]) + self.assertTrue("HOST/testname2.testdom" in res[0]["servicePrincipalName"]) + + m = Message() + m.dn = Dn(ldb, "cn=ldaptestcomputer,cn=computers," + self.base_dn) + m["servicePrincipalName"] = MessageElement("HOST/testname2.testdom", + FLAG_MOD_ADD, "servicePrincipalName") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS) + + m = Message() + m.dn = Dn(ldb, "cn=ldaptestcomputer,cn=computers," + self.base_dn) + m["servicePrincipalName"] = MessageElement("HOST/testname3", + FLAG_MOD_ADD, "servicePrincipalName") + ldb.modify(m) + + res = ldb.search("cn=ldaptestcomputer,cn=computers," + self.base_dn, + scope=SCOPE_BASE, attrs=["dNSHostName", "sAMAccountName", "servicePrincipalName"]) + self.assertTrue(len(res) == 1) + self.assertEquals(res[0]["dNSHostName"][0], "testname2.testdom") + self.assertEquals(res[0]["sAMAccountName"][0], "testname2$") + self.assertTrue(len(res[0]["servicePrincipalName"]) == 3) + self.assertTrue("HOST/testname2" in res[0]["servicePrincipalName"]) + self.assertTrue("HOST/testname3" in res[0]["servicePrincipalName"]) + self.assertTrue("HOST/testname2.testdom" in res[0]["servicePrincipalName"]) + + m = Message() + m.dn = Dn(ldb, "cn=ldaptestcomputer,cn=computers," + self.base_dn) + m["dNSHostName"] = MessageElement("testname3.testdom", + FLAG_MOD_REPLACE, "dNSHostName") + m["servicePrincipalName"] = MessageElement("HOST/testname3.testdom", + FLAG_MOD_ADD, "servicePrincipalName") + ldb.modify(m) + + res = ldb.search("cn=ldaptestcomputer,cn=computers," + self.base_dn, + scope=SCOPE_BASE, attrs=["dNSHostName", "sAMAccountName", "servicePrincipalName"]) + self.assertTrue(len(res) == 1) + self.assertEquals(res[0]["dNSHostName"][0], "testname3.testdom") + self.assertEquals(res[0]["sAMAccountName"][0], "testname2$") + self.assertTrue(len(res[0]["servicePrincipalName"]) == 3) + self.assertTrue("HOST/testname2" in res[0]["servicePrincipalName"]) + self.assertTrue("HOST/testname3" in res[0]["servicePrincipalName"]) + self.assertTrue("HOST/testname3.testdom" in res[0]["servicePrincipalName"]) delete_force(self.ldb, "cn=ldaptestcomputer,cn=computers," + self.base_dn) |