From 5e9ce495eef98b2b27a77bf042514ccb2037d33d Mon Sep 17 00:00:00 2001
From: Stefan Metzmacher <metze@samba.org>
Date: Thu, 18 Mar 2010 11:25:21 +0100
Subject: s4:librpc/rpc: let pyrpc make use of dcerpc_binding_handle stubs

metze
---
 source4/librpc/rpc/dcerpc.h | 2 --
 source4/librpc/rpc/pyrpc.c  | 5 ++++-
 source4/librpc/rpc/pyrpc.h  | 4 +++-
 3 files changed, 7 insertions(+), 4 deletions(-)

(limited to 'source4/librpc/rpc')

diff --git a/source4/librpc/rpc/dcerpc.h b/source4/librpc/rpc/dcerpc.h
index 08210e03c03..70e90c45ddb 100644
--- a/source4/librpc/rpc/dcerpc.h
+++ b/source4/librpc/rpc/dcerpc.h
@@ -392,8 +392,6 @@ NTSTATUS dcerpc_request(struct dcerpc_pipe *p,
 			DATA_BLOB *stub_data_in,
 			DATA_BLOB *stub_data_out);
 
-typedef NTSTATUS (*dcerpc_call_fn) (struct dcerpc_pipe *, TALLOC_CTX *, void *);
-
 enum dcerpc_transport_t dcerpc_transport_by_endpoint_protocol(int prot);
 
 const char *dcerpc_floor_get_rhs_data(TALLOC_CTX *mem_ctx, struct epm_floor *epm_floor);
diff --git a/source4/librpc/rpc/pyrpc.c b/source4/librpc/rpc/pyrpc.c
index 00bc6835f41..012f188ce1f 100644
--- a/source4/librpc/rpc/pyrpc.c
+++ b/source4/librpc/rpc/pyrpc.c
@@ -57,7 +57,7 @@ static PyObject *py_dcerpc_run_function(dcerpc_InterfaceObject *iface,
 		return NULL;
 	}
 
-	status = md->call(iface->pipe, mem_ctx, r);
+	status = md->call(iface->binding_handle, mem_ctx, r);
 	if (NT_STATUS_IS_ERR(status)) {
 		PyErr_SetDCERPCStatus(iface->pipe, status);
 		talloc_free(mem_ctx);
@@ -356,6 +356,7 @@ PyObject *py_dcerpc_interface_init_helper(PyTypeObject *type, PyObject *args, Py
 	}
 
 	ret->pipe->conn->flags |= DCERPC_NDR_REF_ALLOC;
+	ret->binding_handle = ret->pipe->binding_handle;
 	return (PyObject *)ret;
 }
 
@@ -425,6 +426,7 @@ static PyObject *dcerpc_interface_new(PyTypeObject *self, PyObject *args, PyObje
 	}
 
 	ret->pipe = NULL;
+	ret->binding_handle = NULL;
 
 	if (py_basis != Py_None) {
 		struct dcerpc_pipe *base_pipe;
@@ -451,6 +453,7 @@ static PyObject *dcerpc_interface_new(PyTypeObject *self, PyObject *args, PyObje
 		return NULL;
 	}
 	ret->pipe->conn->flags |= DCERPC_NDR_REF_ALLOC;
+	ret->binding_handle = ret->pipe->binding_handle;
 	return (PyObject *)ret;
 }
 
diff --git a/source4/librpc/rpc/pyrpc.h b/source4/librpc/rpc/pyrpc.h
index efbcac688ce..32337549f1a 100644
--- a/source4/librpc/rpc/pyrpc.h
+++ b/source4/librpc/rpc/pyrpc.h
@@ -44,6 +44,7 @@
 typedef struct {
 	PyObject_HEAD
 	struct dcerpc_pipe *pipe;
+	struct dcerpc_binding_handle *binding_handle;
 } dcerpc_InterfaceObject;
 
 PyAPI_DATA(PyTypeObject) dcerpc_InterfaceType;
@@ -55,13 +56,14 @@ PyAPI_DATA(PyTypeObject) dcerpc_InterfaceType;
 
 void PyErr_SetDCERPCStatus(struct dcerpc_pipe *p, NTSTATUS status);
 
+typedef NTSTATUS (*py_dcerpc_call_fn) (struct dcerpc_binding_handle *, TALLOC_CTX *, void *);
 typedef bool (*py_data_pack_fn) (PyObject *args, PyObject *kwargs, void *r);
 typedef PyObject *(*py_data_unpack_fn) (void *r);
 
 struct PyNdrRpcMethodDef {
 	const char *name;
 	const char *doc;
-	dcerpc_call_fn call;
+	py_dcerpc_call_fn call;
 	py_data_pack_fn pack_in_data;
 	py_data_unpack_fn unpack_out_data;
 	uint32_t opnum;
-- 
cgit