struct ldb_message *diff;
struct ldb_context *ldb;
PyObject *py_ret;
+ TALLOC_CTX *mem_ctx = NULL;
if (!PyArg_ParseTuple(args, "OO", &py_msg_old, &py_msg_new))
return NULL;
return NULL;
}
+ mem_ctx = talloc_new(NULL);
+ if (mem_ctx == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
ldb = pyldb_Ldb_AS_LDBCONTEXT(self);
- ldb_ret = ldb_msg_difference(ldb, ldb,
+ ldb_ret = ldb_msg_difference(ldb, mem_ctx,
pyldb_Message_AsMessage(py_msg_old),
pyldb_Message_AsMessage(py_msg_new),
&diff);
if (ldb_ret != LDB_SUCCESS) {
+ talloc_free(mem_ctx);
PyErr_SetString(PyExc_RuntimeError, "Failed to generate the Ldb Message diff");
return NULL;
}
+ diff = ldb_msg_copy(mem_ctx, diff);
+ if (diff == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
+
py_ret = PyLdbMessage_FromMessage(diff);
- talloc_unlink(ldb, diff);
+ talloc_free(mem_ctx);
return py_ret;
}