r23796: main COPYING file for samba4, plus some formatting varients
[samba.git] / source / lib / ldb / swig / Ldb.py
index e78d56efdae23e25026686490223466a49b29e76..8cc7663cc3641b535f29bdfd80f2a423899ac3ce 100644 (file)
@@ -7,7 +7,7 @@
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #   
 # This program is distributed in the hope that it will be useful,
 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
 
+#
+# Interface notes:
+#
+#   - should an empty dn be represented as None, or an empty string?
+#
+#   - should single-valued attributes be a string, or a list with one
+#     element?
+#
+
 from ldb import *
 
 # Global initialisation
@@ -62,6 +71,9 @@ class LdbMessage:
     def __setattr__(self, attr, value):
         if attr == 'dn':
             self.msg.dn = ldb_dn_explode(self.msg, value)
+            if self.msg.dn == None:
+                err = LDB_ERR_INVALID_DN_SYNTAX
+                raise LdbError(err, ldb_strerror(err))
             return
         self.__dict__[attr] = value
         
@@ -78,6 +90,7 @@ class LdbMessage:
                 for i in range(elt.num_values)]
 
     def __setitem__(self, key, value):
+        ldb_msg_remove_attr(self.msg, key)
         if type(value) in (list, tuple):
             [ldb_msg_add_value(self.msg, key, v) for v in value]
         else:
@@ -99,6 +112,11 @@ class LdbMessage:
     def items(self):
         return [(k, self[k]) for k in self.keys()]
 
+    # Misc stuff
+
+    def sanity_check(self):
+        return ldb_msg_sanity_check(self.msg)
+
 class Ldb:
     """A class representing a binding to a ldb file."""