ret = ldb_connect(ldb, url, flags, options);
if (ret != LDB_SUCCESS) {
PyErr_SetLdbError(PyExc_LdbError, ret, ldb);
+ talloc_free(options);
return -1;
}
} else {
string = ldb_ldif_write_string(pyldb_Ldb_AS_LDBCONTEXT(self), mem_ctx, &ldif);
if (!string) {
PyErr_SetString(PyExc_KeyError, "Failed to generate LDIF");
+ talloc_free(mem_ctx);
return NULL;
}
diff = ldb_msg_copy(mem_ctx, diff);
if (diff == NULL) {
+ talloc_free(mem_ctx);
PyErr_NoMemory();
return NULL;
}
if (dict == NULL) {
return NULL;
}
- if (PyDict_Update(dict, (PyObject *)self) != 0)
+ if (PyDict_Update(dict, (PyObject *)self) != 0) {
+ Py_DECREF(dict);
return NULL;
+ }
repr = PyObject_Repr(dict);
if (repr == NULL) {
Py_DECREF(dict);
py_tree = PyLdbTree_FromTree(req->op.search.tree);
- if (py_tree == NULL)
+ if (py_tree == NULL) {
+ Py_DECREF(py_base);
return LDB_ERR_OPERATIONS_ERROR;
+ }
if (req->op.search.attrs == NULL) {
py_attrs = Py_None;
req->op.search.res = PyLdbResult_AsResult(NULL, py_result);
if (req->op.search.res == NULL) {
+ Py_DECREF(py_result);
return LDB_ERR_PYTHON_EXCEPTION;
}
py_result = PyObject_CallMethod(py_ldb, discard_const_p(char, "delete"),
discard_const_p(char, "O"),
py_dn);
+ Py_DECREF(py_dn);
if (py_result == NULL) {
return LDB_ERR_PYTHON_EXCEPTION;
py_newdn = pyldb_Dn_FromDn(req->op.rename.newdn);
- if (py_newdn == NULL)
+ if (py_newdn == NULL) {
+ Py_DECREF(py_olddn);
return LDB_ERR_OPERATIONS_ERROR;
+ }
py_result = PyObject_CallMethod(py_ldb, discard_const_p(char, "rename"),
discard_const_p(char, "OO"),
py_next = PyLdbModule_FromModule(mod->next);
- if (py_next == NULL)
+ if (py_next == NULL) {
+ Py_DECREF(py_ldb);
return LDB_ERR_OPERATIONS_ERROR;
+ }
py_result = PyObject_CallFunction(py_class, discard_const_p(char, "OO"),
py_ldb, py_next);
+ Py_DECREF(py_next);
+ Py_DECREF(py_ldb);
+
if (py_result == NULL) {
return LDB_ERR_PYTHON_EXCEPTION;
}
{
struct ldb_dn *odn;
PyTypeObject *PyLdb_Dn_Type;
+ bool is_dn;
if (ldb_ctx != NULL && (PyUnicode_Check(object))) {
const char *odn_str = NULL;
return false;
}
- if (PyObject_TypeCheck(object, PyLdb_Dn_Type)) {
+ is_dn = PyObject_TypeCheck(object, PyLdb_Dn_Type);
+ Py_DECREF(PyLdb_Dn_Type);
+ if (is_dn) {
*dn = pyldb_Dn_AS_DN(object);
return true;
}
}
py_ret = (PyLdbDnObject *)PyLdb_Dn_Type->tp_alloc(PyLdb_Dn_Type, 0);
+ Py_DECREF(PyLdb_Dn_Type);
if (py_ret == NULL) {
talloc_free(mem_ctx);
PyErr_NoMemory();