On 13/11/2010 17:09, Matthias Dieter Wallnöfer wrote:
Sure, Jelmer!

Consider this modify request message - doesn't make much sense but was needed for a test. There's obviously a bug that the previous message element is overwritten by the second one. Only with "modify_ldif" it works correctly.

Greets,
Matthias
-        m = Message()
-        m.dn = Dn(ldb, "cn=ldaptestuser,cn=users," + self.base_dn)
- m["objectClass"] = MessageElement("bootableDevice", FLAG_MOD_DELETE,
-          "objectClass")
- m["objectClass"] = MessageElement("bootableDevice", FLAG_MOD_ADD,
-          "objectClass")
-        try:
-            ldb.modify(m)
-            self.fail()
-        except LdbError, (num, _):
-            self.assertEquals(num, ERR_ATTRIBUTE_OR_VALUE_EXISTS)

+        # More than one change operation is allowed
+        ldb.modify_ldif("""
+dn: cn=ldaptestuser,cn=users, """ + self.base_dn + """
+changetype: modify
+delete: objectClass
+objectClass: bootableDevice
+add: objectClass
+objectClass: bootableDevice
+""")
Well that's pretty obvious that the m["objecClass"] way is not correct as you expect to it to have both the add and remove in your message but in reality you'll have just the add.

The first question: did you try the FLAG_MOD_MODIFY  ?
The second question: it seems that you are trying to trigger some behavior by changing the objectclass what is the goal of this ?

So for the example you gave modify_ldif might be correct but clearly for the change you made in upgradeprovisionhelper it wasn't as we can do it with Message() + modify().


Matthieu.

--
Matthieu Patou
Samba Team        http://samba.org
Private repo      http://git.samba.org/?p=mat/samba.git;a=summary


Reply via email to