summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/scripting/swig/Ldb.py22
-rw-r--r--source4/scripting/swig/ldb.i24
2 files changed, 38 insertions, 8 deletions
diff --git a/source4/scripting/swig/Ldb.py b/source4/scripting/swig/Ldb.py
index 995f421beb..f761aec398 100644
--- a/source4/scripting/swig/Ldb.py
+++ b/source4/scripting/swig/Ldb.py
@@ -44,14 +44,20 @@ class LdbElement:
class LdbMessage:
"""A class representing a ldb message as a dict of ldb elements."""
- def __init__(self, msg):
- self.dn = msg.dn
- self.private_data = msg.private_data
- eltlist = \
- [LdbElement(ldb.ldb_message_element_array_getitem(msg.elements, x))
- for x in range(msg.num_elements)]
- self.elements = \
- dict([(x.name, x) for x in eltlist])
+ def __init__(self, msg = None):
+
+ self.dn = None
+ self.private_data = None
+ self.elements = []
+
+ if msg is not None:
+ self.dn = msg.dn
+ self.private_data = msg.private_data
+ eltlist = \
+ [LdbElement(ldb.ldb_message_element_array_getitem(
+ msg.elements, x))
+ for x in range(msg.num_elements)]
+ self.elements = dict([(x.name, x) for x in eltlist])
def __repr__(self):
return '<%s(dn=%s) instance at 0x%x>' % (self.__class__.__name__,
diff --git a/source4/scripting/swig/ldb.i b/source4/scripting/swig/ldb.i
index 6930ea4c9b..31c1ffe3e4 100644
--- a/source4/scripting/swig/ldb.i
+++ b/source4/scripting/swig/ldb.i
@@ -156,6 +156,30 @@ struct ldb_message {
void *private_data; /* private to the backend */
};
+%typemap(in) struct ldb_message * {
+ PyObject *obj, *key, *value;
+ int pos;
+
+ $1 = ldb_msg_new(NULL);
+
+ obj = PyObject_GetAttrString($input, "dn");
+ $1->dn = ldb_dn_explode(NULL, PyString_AsString(obj));
+
+ obj = PyObject_GetAttrString($input, "private_data");
+ $1->private_data = PyString_AsString(obj);
+
+ obj = PyObject_GetAttrString($input, "elements");
+
+ pos = 0;
+ while (PyDict_Next(obj, &pos, &key, &value)) {
+ struct ldb_val v;
+
+ v.data = PyString_AsString(value);
+ v.length = PyString_Size(value);
+ ldb_msg_add_value($1, PyString_AsString(key), &v);
+ }
+}
+
/*
* Wrap struct ldb_result
*/