[PATCH 2/2] s4-pyrpc: Fix talloc hierachy in dceprc interface functions.

Andreas Schneider asn at samba.org
Fri Feb 14 10:03:01 MST 2014


Signed-off-by: Andreas Schneider <asn at samba.org>
---
 source4/librpc/rpc/pyrpc.c      | 22 +++++++---------------
 source4/librpc/rpc/pyrpc_util.c | 15 +++++++--------
 2 files changed, 14 insertions(+), 23 deletions(-)

diff --git a/source4/librpc/rpc/pyrpc.c b/source4/librpc/rpc/pyrpc.c
index 0de3681..d77b35d 100644
--- a/source4/librpc/rpc/pyrpc.c
+++ b/source4/librpc/rpc/pyrpc.c
@@ -356,7 +356,6 @@ static PyObject *dcerpc_interface_new(PyTypeObject *type, PyObject *args, PyObje
 	} else {
 		struct tevent_context *event_ctx;
 		struct loadparm_context *lp_ctx;
-		struct cli_credentials *credentials;
 
 		event_ctx = s4_event_context_init(ret->mem_ctx);
 		if (event_ctx == NULL) {
@@ -372,20 +371,13 @@ static PyObject *dcerpc_interface_new(PyTypeObject *type, PyObject *args, PyObje
 			return NULL;
 		}
 
-		credentials = cli_credentials_from_py_object(py_credentials);
-		if (credentials == NULL) {
-			PyErr_SetString(PyExc_TypeError, "Expected credentials");
-			TALLOC_FREE(ret->mem_ctx);
-			return NULL;
-		}
-		status = dcerpc_pipe_connect(ret->mem_ctx, &ret->pipe, binding_string, 
-			     table, credentials, event_ctx, lp_ctx);
-
-		/*
-		 * the event context is cached under the connection,
-		 * so let it be a child of it.
-		 */
-		talloc_steal(ret->pipe->conn, event_ctx);
+		status = dcerpc_pipe_connect_creds_helper(ret->mem_ctx,
+							  event_ctx,
+							  binding_string,
+							  table,
+							  py_credentials,
+							  lp_ctx,
+							  &ret->pipe);
 	}
 
 	if (!NT_STATUS_IS_OK(status)) {
diff --git a/source4/librpc/rpc/pyrpc_util.c b/source4/librpc/rpc/pyrpc_util.c
index f90f350..c887181 100644
--- a/source4/librpc/rpc/pyrpc_util.c
+++ b/source4/librpc/rpc/pyrpc_util.c
@@ -200,14 +200,13 @@ PyObject *py_dcerpc_interface_init_helper(PyTypeObject *type, PyObject *args, Py
 
 		ret->pipe = talloc_steal(ret->mem_ctx, ret->pipe);
 	} else {
-		credentials = cli_credentials_from_py_object(py_credentials);
-		if (credentials == NULL) {
-			PyErr_SetString(PyExc_TypeError, "Expected credentials");
-			talloc_free(mem_ctx);
-			return NULL;
-		}
-		status = dcerpc_pipe_connect(event_ctx, &ret->pipe, binding_string,
-		             table, credentials, event_ctx, lp_ctx);
+		status = dcerpc_pipe_connect_creds_helper(ret->mem_ctx,
+							  event_ctx,
+							  binding_string,
+							  table,
+							  py_credentials,
+							  lp_ctx,
+							  &ret->pipe);
 	}
 	if (NT_STATUS_IS_ERR(status)) {
 		PyErr_SetNTSTATUS(status);
-- 
1.8.5.2




More information about the samba-technical mailing list