From: Stefan Metzmacher Date: Mon, 23 Sep 2013 07:50:37 +0000 (+0200) Subject: TODO; test_permisive_modify X-Git-Url: http://git.samba.org/?p=metze%2Fsamba%2Fwip.git;a=commitdiff_plain;h=697b4d884dbd0cd3a7f35ed316e7eecce27318eb TODO; test_permisive_modify --- diff --git a/source4/dsdb/tests/python/ldap.py b/source4/dsdb/tests/python/ldap.py index 5ed3981993eb..e02ec7ec6552 100755 --- a/source4/dsdb/tests/python/ldap.py +++ b/source4/dsdb/tests/python/ldap.py @@ -710,6 +710,442 @@ class BasicTests(samba.tests.TestCase): delete_force(self.ldb, "cn=ldaptestgroup,cn=users," + self.base_dn) + def test_permisive_modify_add(self): + """Test permissive modify with MOD_ADD""" + print "Test permissive modify with MOD_ADD""" + + userdn = "cn=ldaptestuser,cn=users," + self.base_dn + + delete_force(self.ldb, userdn) + + self.ldb.add({ + "dn": userdn, + "objectclass": "user", + "userSharedFolderOther": ["vv0", "vv1", "vv2"]}) + + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 3) + # w2k8r2 reverse the order... + self.assertEquals(res[0]["userSharedFolderOther"][0], "vv2") + self.assertEquals(res[0]["userSharedFolderOther"][1], "vv1") + self.assertEquals(res[0]["userSharedFolderOther"][2], "vv0") + + m = Message() + m.dn = Dn(ldb, userdn) + m["userSharedFolderOther"] = MessageElement(["vv1"], + FLAG_MOD_ADD, + "userSharedFolderOther") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS) + + m = Message() + m.dn = Dn(ldb, userdn) + m["userSharedFolderOther"] = MessageElement(["VV1"], + FLAG_MOD_ADD, + "userSharedFolderOther") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS) + + m = Message() + m.dn = Dn(ldb, userdn) + m["userSharedFolderOther"] = MessageElement(["vv4","vv4"], + FLAG_MOD_ADD, + "userSharedFolderOther") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS) + + m = Message() + m.dn = Dn(ldb, userdn) + m["userSharedFolderOther"] = MessageElement(["vv4","VV4"], + FLAG_MOD_ADD, + "userSharedFolderOther") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS) + + m = Message() + m.dn = Dn(ldb, userdn) + m["userSharedFolderOther"] = MessageElement(["VV1", "VV1"], + FLAG_MOD_ADD, + "userSharedFolderOther") + ldb.modify(m, controls=["permissive_modify:1"]) + + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 3) + self.assertEquals(res[0]["userSharedFolderOther"][0], "vv2") + self.assertEquals(res[0]["userSharedFolderOther"][1], "vv1") + self.assertEquals(res[0]["userSharedFolderOther"][2], "vv0") + + m = Message() + m.dn = Dn(ldb, userdn) + m["userSharedFolderOther"] = MessageElement(["VV1", "VV1", "vv4", "VV4"], + FLAG_MOD_ADD, + "userSharedFolderOther") + ldb.modify(m, controls=["permissive_modify:1"]) + + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 4) + self.assertEquals(res[0]["userSharedFolderOther"][0], "vv4") + self.assertEquals(res[0]["userSharedFolderOther"][1], "vv2") + self.assertEquals(res[0]["userSharedFolderOther"][2], "vv1") + self.assertEquals(res[0]["userSharedFolderOther"][3], "vv0") + + delete_force(self.ldb, "cn=ldaptestuser,cn=users," + self.base_dn) + + def test_permisive_modify_replace(self): + """Test permissive modify with MOD_REPLACE""" + print "Test permissive modify with MOD_REPLACE""" + + userdn = "cn=ldaptestuser,cn=users," + self.base_dn + + delete_force(self.ldb, userdn) + + self.ldb.add({ + "dn": userdn, + "objectclass": "user", + "userSharedFolderOther": ["vv0", "vv1", "vv2"]}) + + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 3) + # w2k8r2 reverse the order... + self.assertEquals(res[0]["userSharedFolderOther"][0], "vv2") + self.assertEquals(res[0]["userSharedFolderOther"][1], "vv1") + self.assertEquals(res[0]["userSharedFolderOther"][2], "vv0") + + m = Message() + m.dn = Dn(ldb, userdn) + m["userSharedFolderOther"] = MessageElement(["vv0"], + FLAG_MOD_REPLACE, + "userSharedFolderOther") + ldb.modify(m) + + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 1) + # w2k8r2 reverse the order... + self.assertEquals(res[0]["userSharedFolderOther"][0], "vv0") + + m = Message() + m.dn = Dn(ldb, userdn) + m["userSharedFolderOther"] = MessageElement(["VV0"], + FLAG_MOD_REPLACE, + "userSharedFolderOther") + ldb.modify(m) + + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 1) + # w2k8r2 reverse the order... + self.assertEquals(res[0]["userSharedFolderOther"][0], "VV0") + + m = Message() + m.dn = Dn(ldb, userdn) + m["userSharedFolderOther"] = MessageElement(["vv0","vv0"], + FLAG_MOD_REPLACE, + "userSharedFolderOther") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS) + try: + # This even fails with permissive_modify + ldb.modify(m, controls=["permissive_modify:1"]) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS) + + m = Message() + m.dn = Dn(ldb, userdn) + m["userSharedFolderOther"] = MessageElement(["vv0","VV0"], + FLAG_MOD_REPLACE, + "userSharedFolderOther") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS) + try: + # This even fails with permissive_modify + ldb.modify(m, controls=["permissive_modify:1"]) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS) + + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 1) + self.assertEquals(res[0]["userSharedFolderOther"][0], "VV0") + + delete_force(self.ldb, "cn=ldaptestuser,cn=users," + self.base_dn) + + def test_permisive_modify_delete(self): + """Test permissive modify with MOD_DEL""" + print "Test permissive modify with MOD_DEL""" + + userdn = "cn=ldaptestuser,cn=users," + self.base_dn + + delete_force(self.ldb, userdn) + + self.ldb.add({ + "dn": userdn, + "objectclass": "user", + "userSharedFolderOther": ["vv0", "vv1", "vv2"]}) + + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 3) + # w2k8r2 reverse the order... + self.assertEquals(res[0]["userSharedFolderOther"][0], "vv2") + self.assertEquals(res[0]["userSharedFolderOther"][1], "vv1") + self.assertEquals(res[0]["userSharedFolderOther"][2], "vv0") + + m = Message() + m.dn = Dn(ldb, userdn) + m["userSharedFolderOther"] = MessageElement(["vv4"], + FLAG_MOD_DELETE, + "userSharedFolderOther") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_NO_SUCH_ATTRIBUTE) + ldb.modify(m, controls=["permissive_modify:1"]) + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 3) + # w2k8r2 reverse the order... + self.assertEquals(res[0]["userSharedFolderOther"][0], "vv2") + self.assertEquals(res[0]["userSharedFolderOther"][1], "vv1") + self.assertEquals(res[0]["userSharedFolderOther"][2], "vv0") + + m = Message() + m.dn = Dn(ldb, userdn) + m["userSharedFolderOther"] = MessageElement(["vv0", "vv4"], + FLAG_MOD_DELETE, + "userSharedFolderOther") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_NO_SUCH_ATTRIBUTE) + ldb.modify(m, controls=["permissive_modify:1"]) + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 2) + # w2k8r2 reverse the order... + self.assertEquals(res[0]["userSharedFolderOther"][0], "vv2") + self.assertEquals(res[0]["userSharedFolderOther"][1], "vv1") + + m = Message() + m.dn = Dn(ldb, userdn) + m["userSharedFolderOther"] = MessageElement(["vv0", "VV1", "vv4"], + FLAG_MOD_DELETE, + "userSharedFolderOther") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_NO_SUCH_ATTRIBUTE) + ldb.modify(m, controls=["permissive_modify:1"]) + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 1) + # w2k8r2 reverse the order... + self.assertEquals(res[0]["userSharedFolderOther"][0], "vv2") + + m = Message() + m.dn = Dn(ldb, userdn) + m["userSharedFolderOther"] = MessageElement(["vv0", "VV1", "Vv2"], + FLAG_MOD_DELETE, + "userSharedFolderOther") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_NO_SUCH_ATTRIBUTE) + ldb.modify(m, controls=["permissive_modify:1"]) + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertFalse("userSharedFolderOther" in res[0]) + + # and again + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_NO_SUCH_ATTRIBUTE) + ldb.modify(m, controls=["permissive_modify:1"]) + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertFalse("userSharedFolderOther" in res[0]) + + delete_force(self.ldb, "cn=ldaptestuser,cn=users," + self.base_dn) + + def test_permisive_modify_mixed(self): + """Test permissive modify with mixed MOD_DEL/ADD/REPLACE""" + print "Test permissive modify with mixed MOD_DEL/ADD/REPLACE""" + + userdn = "cn=ldaptestuser,cn=users," + self.base_dn + + delete_force(self.ldb, userdn) + + self.ldb.add({ + "dn": userdn, + "objectclass": "user", + "userSharedFolderOther": ["vv0", "vv1", "vv2"]}) + + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 3) + # w2k8r2 reverse the order... + self.assertEquals(res[0]["userSharedFolderOther"][0], "vv2") + self.assertEquals(res[0]["userSharedFolderOther"][1], "vv1") + self.assertEquals(res[0]["userSharedFolderOther"][2], "vv0") + + m = Message() + m.dn = Dn(ldb, userdn) + m["e1"] = MessageElement(["VV4"], + FLAG_MOD_DELETE, + "userSharedFolderOther") + m["e2"] = MessageElement(["vv4"], + FLAG_MOD_REPLACE, + "userSharedFolderOther") + m["e2"] = MessageElement(["VV4"], + FLAG_MOD_ADD, + "userSharedFolderOther") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_NO_SUCH_ATTRIBUTE) + ldb.modify(m, controls=["permissive_modify:1"]) + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 1) + self.assertEquals(res[0]["userSharedFolderOther"][0], "vv4") + + m = Message() + m.dn = Dn(ldb, userdn) + m["e1"] = MessageElement(["VV4"], + FLAG_MOD_DELETE, + "userSharedFolderOther") + m["e2"] = MessageElement(["vv5"], + FLAG_MOD_REPLACE, + "userSharedFolderOther") + m["e2"] = MessageElement(["VV5"], + FLAG_MOD_ADD, + "userSharedFolderOther") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS) + ldb.modify(m, controls=["permissive_modify:1"]) + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 1) + # w2k8r2 reverse the order... + self.assertEquals(res[0]["userSharedFolderOther"][0], "vv5") + + m = Message() + m.dn = Dn(ldb, userdn) + m["e1"] = MessageElement(["VV5"], + FLAG_MOD_DELETE, + "userSharedFolderOther") + m["e2"] = MessageElement(["vv6"], + FLAG_MOD_REPLACE, + "userSharedFolderOther") + m["e3"] = MessageElement(["VV5"], + FLAG_MOD_DELETE, + "userSharedFolderOther") + m["e4"] = MessageElement(["VV5"], + FLAG_MOD_ADD, + "userSharedFolderOther") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_NO_SUCH_ATTRIBUTE) + ldb.modify(m, controls=["permissive_modify:1"]) + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 2) + self.assertEquals(res[0]["userSharedFolderOther"][0], "VV5") + self.assertEquals(res[0]["userSharedFolderOther"][1], "vv6") + + m = Message() + m.dn = Dn(ldb, userdn) + m["e0"] = MessageElement(["VV7"], + FLAG_MOD_ADD, + "userSharedFolderOther") + m["e1"] = MessageElement(["VV7"], + FLAG_MOD_DELETE, + "userSharedFolderOther") + m["e2"] = MessageElement(["VV7"], + FLAG_MOD_ADD, + "userSharedFolderOther") + m["e3"] = MessageElement(["vv6"], + FLAG_MOD_REPLACE, + "userSharedFolderOther") + m["e4"] = MessageElement(["VV7"], + FLAG_MOD_ADD, + "userSharedFolderOther") + m["e5"] = MessageElement(["VV7"], + FLAG_MOD_ADD, + "userSharedFolderOther") + m["e6"] = MessageElement(["VV5"], + FLAG_MOD_DELETE, + "userSharedFolderOther") + m["e7"] = MessageElement(["VV5"], + FLAG_MOD_ADD, + "userSharedFolderOther") + try: + ldb.modify(m) + self.fail() + except LdbError, (num, _): + self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS) + ldb.modify(m, controls=["permissive_modify:1"]) + res = ldb.search(userdn, scope=SCOPE_BASE, attrs=["userSharedFolderOther"]) + self.assertEquals(len(res), 1) + self.assertTrue("userSharedFolderOther" in res[0]) + self.assertEquals(len(res[0]["userSharedFolderOther"]), 3) + self.assertEquals(res[0]["userSharedFolderOther"][0], "VV5") + self.assertEquals(res[0]["userSharedFolderOther"][1], "VV7") + self.assertEquals(res[0]["userSharedFolderOther"][2], "vv6") + + delete_force(self.ldb, "cn=ldaptestuser,cn=users," + self.base_dn) + def test_attribute_ranges(self): """Test attribute ranges""" print "Test attribute ranges"