summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--auth/credentials/pycredentials.c7
-rw-r--r--lib/ldb/pyldb.c15
-rw-r--r--source3/libsmb/pylibsmb.c7
-rw-r--r--source4/dns_server/pydns.c6
4 files changed, 25 insertions, 10 deletions
diff --git a/auth/credentials/pycredentials.c b/auth/credentials/pycredentials.c
index d1ee12e45a9..1b86e001557 100644
--- a/auth/credentials/pycredentials.c
+++ b/auth/credentials/pycredentials.c
@@ -75,9 +75,10 @@ static PyObject *py_creds_get_ntlm_username_domain(PyObject *self, PyObject *unu
PyObject *ret = NULL;
cli_credentials_get_ntlm_username_domain(PyCredentials_AsCliCredentials(self),
frame, &user, &domain);
- ret = Py_BuildValue("(OO)",
- PyString_FromStringOrNULL(user),
- PyString_FromStringOrNULL(domain));
+ ret = Py_BuildValue("(ss)",
+ user,
+ domain);
+
TALLOC_FREE(frame);
return ret;
}
diff --git a/lib/ldb/pyldb.c b/lib/ldb/pyldb.c
index 8e48fa5d56d..a4618db8d35 100644
--- a/lib/ldb/pyldb.c
+++ b/lib/ldb/pyldb.c
@@ -1673,9 +1673,13 @@ static PyObject *ldb_ldif_to_pyobject(struct ldb_ldif *ldif)
Py_RETURN_NONE;
} else {
/* We don't want this attached to the 'ldb' any more */
- return Py_BuildValue(discard_const_p(char, "(iO)"),
- ldif->changetype,
- PyLdbMessage_FromMessage(ldif->msg));
+ PyObject *obj = PyLdbMessage_FromMessage(ldif->msg);
+ PyObject *result =
+ Py_BuildValue(discard_const_p(char, "(iO)"),
+ ldif->changetype,
+ obj);
+ Py_CLEAR(obj);
+ return result;
}
}
@@ -3427,12 +3431,15 @@ static PyObject *py_ldb_msg_items(PyLdbMessageObject *self)
Py_ssize_t i, j = 0;
PyObject *l = PyList_New(msg->num_elements + (msg->dn == NULL?0:1));
if (msg->dn != NULL) {
- PyList_SetItem(l, 0, Py_BuildValue("(sO)", "dn", pyldb_Dn_FromDn(msg->dn)));
+ PyObject *obj = pyldb_Dn_FromDn(msg->dn);
+ PyList_SetItem(l, 0, Py_BuildValue("(sO)", "dn", obj));
+ Py_CLEAR(obj);
j++;
}
for (i = 0; i < msg->num_elements; i++, j++) {
PyObject *py_el = PyLdbMessageElement_FromMessageElement(&msg->elements[i], msg->elements);
PyObject *value = Py_BuildValue("(sO)", msg->elements[i].name, py_el);
+ Py_CLEAR(py_el);
PyList_SetItem(l, j, value);
}
return l;
diff --git a/source3/libsmb/pylibsmb.c b/source3/libsmb/pylibsmb.c
index 629ff0a4fd3..d2a8e05a667 100644
--- a/source3/libsmb/pylibsmb.c
+++ b/source3/libsmb/pylibsmb.c
@@ -1124,13 +1124,14 @@ static NTSTATUS list_helper(const char *mntpoint, struct file_info *finfo,
{
PyObject *result = (PyObject *)state;
PyObject *file = NULL;
+ PyObject *size = NULL;
int ret;
/* suppress '.' and '..' in the results we return */
if (ISDOT(finfo->name) || ISDOTDOT(finfo->name)) {
return NT_STATUS_OK;
}
-
+ size = PyLong_FromUnsignedLongLong(finfo->size);
/*
* Build a dictionary representing the file info.
* Note: Windows does not always return short_name (so it may be None)
@@ -1139,10 +1140,12 @@ static NTSTATUS list_helper(const char *mntpoint, struct file_info *finfo,
"name", finfo->name,
"attrib", (int)finfo->mode,
"short_name", finfo->short_name,
- "size", PyLong_FromUnsignedLongLong(finfo->size),
+ "size", size,
"mtime",
convert_timespec_to_time_t(finfo->mtime_ts));
+ Py_CLEAR(size);
+
if (file == NULL) {
return NT_STATUS_NO_MEMORY;
}
diff --git a/source4/dns_server/pydns.c b/source4/dns_server/pydns.c
index a4441ddef56..16d22dfe4b8 100644
--- a/source4/dns_server/pydns.c
+++ b/source4/dns_server/pydns.c
@@ -100,6 +100,7 @@ static PyObject *py_dsdb_dns_lookup(PyObject *self,
struct ldb_context *samdb;
PyObject *py_ldb, *ret, *pydn;
PyObject *py_dns_partition = NULL;
+ PyObject *result = NULL;
char *dns_name;
TALLOC_CTX *frame;
NTSTATUS status;
@@ -156,7 +157,10 @@ static PyObject *py_dsdb_dns_lookup(PyObject *self,
ret = py_dnsp_DnssrvRpcRecord_get_list(records, num_records);
pydn = pyldb_Dn_FromDn(dn);
talloc_free(frame);
- return Py_BuildValue("(OO)", pydn, ret);
+ result = Py_BuildValue("(OO)", pydn, ret);
+ Py_CLEAR(ret);
+ Py_CLEAR(pydn);
+ return result;
}
static PyObject *py_dsdb_dns_extract(PyObject *self, PyObject *args)