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"