[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Sun Mar 13 10:47:01 MDT 2011


The branch, master has been updated
       via  c1a2fd1 s4:librpc/rpc: finaly make struct rpc_request and enum rpc_request_state private
       via  81063f9 s4:librpc/rpc: remove unused dcerpc_request()
       via  f8030ec s4:librpc/rpc: make dcerpc_request_recv() static
       via  572683d s4:torture/rpc/scanner: use dcerpc_binding_handle_raw_call() instead of dcerpc_request()
       via  c3d8b4f s4:torture/rpc/countcalls: use dcerpc_binding_handle_raw_call() instead of dcerpc_request()
       via  9bbe047 s4:torture/rpc/autoidl: use dcerpc_binding_handle_raw_call() instead of dcerpc_request()
       via  26351bf s4:pyrpc: use dcerpc_binding_handle_raw_call() instead of dcerpc_request()
       via  fa0f0c2 s4:pyrpc: fix memory leaks in error pathes
       via  6539eba librpc/rpc: add dcerpc_binding_handle_raw_call()
       via  08dca92 librpc/rpc: move struct dcerpc_binding to rpc_common.h
       via  7b7baec s3:librpc/rpc: add target_principal to struct dcerpc_binding
       via  83c55ac librpc/rpc: move enum dcerpc_transport_t to rpc_common.h
       via  b0d54da s4:librpc/rpc: s/dcerpc_security/dcecli_security
      from  51ebaac s3: Enhance error messages in idmap_tdb2_init_hwm

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit c1a2fd1cd15c55e73df6ab89db77aa2e7f83c346
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Mar 13 16:24:55 2011 +0100

    s4:librpc/rpc: finaly make struct rpc_request and enum rpc_request_state private
    
    metze
    
    Autobuild-User: Stefan Metzmacher <metze at samba.org>
    Autobuild-Date: Sun Mar 13 17:46:02 CET 2011 on sn-devel-104

commit 81063f9a268e959edbb796ca72ba35da70e838c2
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Mar 13 16:21:44 2011 +0100

    s4:librpc/rpc: remove unused dcerpc_request()
    
    metze

commit f8030ec08021f170b90872ba80fa8772ee6d7618
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Mar 13 16:24:22 2011 +0100

    s4:librpc/rpc: make dcerpc_request_recv() static
    
    metze

commit 572683d9ad421c7077887e1d98583c33334eac54
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Mar 13 16:16:12 2011 +0100

    s4:torture/rpc/scanner: use dcerpc_binding_handle_raw_call() instead of dcerpc_request()
    
    metze

commit c3d8b4f003a63d3f4a9e5f89b70cec57af35e5a3
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Mar 13 16:15:35 2011 +0100

    s4:torture/rpc/countcalls: use dcerpc_binding_handle_raw_call() instead of dcerpc_request()
    
    metze

commit 9bbe047f8dd91767e2763d306e9f39d8fb45b950
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Mar 13 16:15:06 2011 +0100

    s4:torture/rpc/autoidl: use dcerpc_binding_handle_raw_call() instead of dcerpc_request()
    
    metze

commit 26351bf480066edae449b0c81c3f7735a8f39636
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Mar 13 14:44:53 2011 +0100

    s4:pyrpc: use dcerpc_binding_handle_raw_call() instead of dcerpc_request()
    
    metze

commit fa0f0c210763e0db5d4c6947840873998fd6b2eb
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Mar 13 14:44:28 2011 +0100

    s4:pyrpc: fix memory leaks in error pathes
    
    metze

commit 6539eba880682b53eb867b27c40efb0fbee18b4a
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Mar 13 14:58:12 2011 +0100

    librpc/rpc: add dcerpc_binding_handle_raw_call()
    
    metze

commit 08dca92499c5bd17402dda14521edb4256476639
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Mar 13 14:10:42 2011 +0100

    librpc/rpc: move struct dcerpc_binding to rpc_common.h
    
    metze

commit 7b7baecf1ab2f783ae90b68884fb034d25e9f798
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Mar 13 14:19:12 2011 +0100

    s3:librpc/rpc: add target_principal to struct dcerpc_binding
    
    This brings the source3 copy in sync with the source4 copy
    of struct dcerpc_binding.
    
    metze

commit 83c55ac67e488787a264f3981eabb6f69e7b0e87
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Mar 13 14:05:19 2011 +0100

    librpc/rpc: move enum dcerpc_transport_t to rpc_common.h
    
    metze

commit b0d54da7464396e1b5b9aaa58b50a3bd3f0e32b5
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Mar 13 13:49:41 2011 +0100

    s4:librpc/rpc: s/dcerpc_security/dcecli_security
    
    We'll use 'dcerpc_security' for the generic dcerpc
    client and server code.
    
    metze

-----------------------------------------------------------------------

Summary of changes:
 librpc/rpc/binding_handle.c      |   60 +++++++++++++++++++++++++++
 librpc/rpc/rpc_common.h          |   30 +++++++++++++
 source3/librpc/rpc/dcerpc.h      |   29 ++-----------
 source3/librpc/rpc/dcerpc_ep.c   |    2 +-
 source4/librpc/rpc/dcerpc.c      |   73 ++++++++++++++++++++++-----------
 source4/librpc/rpc/dcerpc.h      |   84 +++----------------------------------
 source4/librpc/rpc/dcerpc_auth.c |    4 +-
 source4/librpc/rpc/pyrpc.c       |   16 ++++++-
 source4/torture/rpc/autoidl.c    |   49 +++++++++++++++++++---
 source4/torture/rpc/countcalls.c |   14 +++++-
 source4/torture/rpc/scanner.c    |   13 +++++-
 11 files changed, 233 insertions(+), 141 deletions(-)


Changeset truncated at 500 lines:

diff --git a/librpc/rpc/binding_handle.c b/librpc/rpc/binding_handle.c
index 9ad7a9b..6c2d8a8 100644
--- a/librpc/rpc/binding_handle.c
+++ b/librpc/rpc/binding_handle.c
@@ -186,6 +186,66 @@ NTSTATUS dcerpc_binding_handle_raw_call_recv(struct tevent_req *req,
 	return NT_STATUS_OK;
 }
 
+NTSTATUS dcerpc_binding_handle_raw_call(struct dcerpc_binding_handle *h,
+					const struct GUID *object,
+					uint32_t opnum,
+					uint32_t in_flags,
+					const uint8_t *in_data,
+					size_t in_length,
+					TALLOC_CTX *mem_ctx,
+					uint8_t **out_data,
+					size_t *out_length,
+					uint32_t *out_flags)
+{
+	TALLOC_CTX *frame = talloc_stackframe();
+	struct tevent_context *ev;
+	struct tevent_req *subreq;
+	NTSTATUS status;
+
+	/*
+	 * TODO: allow only one sync call
+	 */
+
+	if (h->sync_ev) {
+		ev = h->sync_ev;
+	} else {
+		ev = tevent_context_init(frame);
+	}
+	if (ev == NULL) {
+		talloc_free(frame);
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	subreq = dcerpc_binding_handle_raw_call_send(frame, ev,
+						     h, object, opnum,
+						     in_flags,
+						     in_data,
+						     in_length);
+	if (subreq == NULL) {
+		talloc_free(frame);
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	if (!tevent_req_poll(subreq, ev)) {
+		status = map_nt_error_from_unix(errno);
+		talloc_free(frame);
+		return status;
+	}
+
+	status = dcerpc_binding_handle_raw_call_recv(subreq,
+						     mem_ctx,
+						     out_data,
+						     out_length,
+						     out_flags);
+	if (!NT_STATUS_IS_OK(status)) {
+		talloc_free(frame);
+		return status;
+	}
+
+	TALLOC_FREE(frame);
+	return NT_STATUS_OK;
+}
+
 struct dcerpc_binding_handle_disconnect_state {
 	const struct dcerpc_binding_handle_ops *ops;
 };
diff --git a/librpc/rpc/rpc_common.h b/librpc/rpc/rpc_common.h
index 5d1bde0..bd9c46d 100644
--- a/librpc/rpc/rpc_common.h
+++ b/librpc/rpc/rpc_common.h
@@ -29,9 +29,29 @@ struct ndr_interface_call;
 struct ndr_push;
 struct ndr_pull;
 struct ncacn_packet;
+struct epm_floor;
 struct tevent_context;
 struct tstream_context;
 
+enum dcerpc_transport_t {
+	NCA_UNKNOWN, NCACN_NP, NCACN_IP_TCP, NCACN_IP_UDP, NCACN_VNS_IPC, 
+	NCACN_VNS_SPP, NCACN_AT_DSP, NCADG_AT_DDP, NCALRPC, NCACN_UNIX_STREAM, 
+	NCADG_UNIX_DGRAM, NCACN_HTTP, NCADG_IPX, NCACN_SPX, NCACN_INTERNAL };
+
+/** this describes a binding to a particular transport/pipe */
+struct dcerpc_binding {
+	enum dcerpc_transport_t transport;
+	struct ndr_syntax_id object;
+	const char *host;
+	const char *target_hostname;
+	const char *target_principal;
+	const char *endpoint;
+	const char **options;
+	const char *localaddress;
+	uint32_t flags;
+	uint32_t assoc_group_id;
+};
+
 /* The following definitions come from ../librpc/rpc/dcerpc_error.c  */
 
 const char *dcerpc_errstr(TALLOC_CTX *mem_ctx, uint32_t fault_code);
@@ -175,6 +195,16 @@ NTSTATUS dcerpc_binding_handle_raw_call_recv(struct tevent_req *req,
 					     uint8_t **out_data,
 					     size_t *out_length,
 					     uint32_t *out_flags);
+NTSTATUS dcerpc_binding_handle_raw_call(struct dcerpc_binding_handle *h,
+					const struct GUID *object,
+					uint32_t opnum,
+					uint32_t in_flags,
+					const uint8_t *in_data,
+					size_t in_length,
+					TALLOC_CTX *mem_ctx,
+					uint8_t **out_data,
+					size_t *out_length,
+					uint32_t *out_flags);
 
 struct tevent_req *dcerpc_binding_handle_disconnect_send(TALLOC_CTX *mem_ctx,
 						struct tevent_context *ev,
diff --git a/source3/librpc/rpc/dcerpc.h b/source3/librpc/rpc/dcerpc.h
index 3cfd229..354c682 100644
--- a/source3/librpc/rpc/dcerpc.h
+++ b/source3/librpc/rpc/dcerpc.h
@@ -23,29 +23,12 @@
  * If you remove any functions or change their signature, update 
  * the so version number. */
 
-#ifndef __DCERPC_H__
-#define __DCERPC_H__
+#ifndef _S3_DCERPC_H__
+#define _S3_DCERPC_H__
 
-#define SMB_RPC_INTERFACE_VERSION 1
-
-enum dcerpc_transport_t {
-	NCA_UNKNOWN, NCACN_NP, NCACN_IP_TCP, NCACN_IP_UDP, NCACN_VNS_IPC, 
-	NCACN_VNS_SPP, NCACN_AT_DSP, NCADG_AT_DDP, NCALRPC, NCACN_UNIX_STREAM, 
-	NCADG_UNIX_DGRAM, NCACN_HTTP, NCADG_IPX, NCACN_SPX, NCACN_INTERNAL };
-
-/** this describes a binding to a particular transport/pipe */
-struct dcerpc_binding {
-	enum dcerpc_transport_t transport;
-	struct ndr_syntax_id object;
-	const char *host;
-	const char *target_hostname;
-	const char *endpoint;
-	const char **options;
-	const char *localaddress;
-	uint32_t flags;
-	uint32_t assoc_group_id;
-};
+#include "../librpc/rpc/rpc_common.h"
 
+#define SMB_RPC_INTERFACE_VERSION 1
 
 /* dcerpc pipe flags */
 #define DCERPC_DEBUG_PRINT_IN          (1<<0)
@@ -162,6 +145,4 @@ NTSTATUS dcerpc_check_auth(struct pipe_auth_data *auth,
 			   DATA_BLOB *raw_pkt,
 			   size_t *pad_len);
 
-#include "../librpc/rpc/rpc_common.h"
-
-#endif /* __DCERPC_H__ */
+#endif /* __S3_DCERPC_H__ */
diff --git a/source3/librpc/rpc/dcerpc_ep.c b/source3/librpc/rpc/dcerpc_ep.c
index 8cfd3b8..764dc17 100644
--- a/source3/librpc/rpc/dcerpc_ep.c
+++ b/source3/librpc/rpc/dcerpc_ep.c
@@ -51,7 +51,7 @@ NTSTATUS dcerpc_binding_vector_create(TALLOC_CTX *mem_ctx,
 		goto done;
 	}
 
-	bvec->bindings = talloc_array(bvec, struct dcerpc_binding, ep_count);
+	bvec->bindings = talloc_zero_array(bvec, struct dcerpc_binding, ep_count);
 	if (bvec->bindings == NULL) {
 		status = NT_STATUS_NO_MEMORY;
 		goto done;
diff --git a/source4/librpc/rpc/dcerpc.c b/source4/librpc/rpc/dcerpc.c
index 3e1aa6f..cc72866 100644
--- a/source4/librpc/rpc/dcerpc.c
+++ b/source4/librpc/rpc/dcerpc.c
@@ -33,6 +33,49 @@
 #include "lib/util/tevent_ntstatus.h"
 #include "librpc/rpc/rpc_common.h"
 
+enum rpc_request_state {
+	RPC_REQUEST_QUEUED,
+	RPC_REQUEST_PENDING,
+	RPC_REQUEST_DONE
+};
+
+/*
+  handle for an async dcerpc request
+*/
+struct rpc_request {
+	struct rpc_request *next, *prev;
+	struct dcerpc_pipe *p;
+	NTSTATUS status;
+	uint32_t call_id;
+	enum rpc_request_state state;
+	DATA_BLOB payload;
+	uint32_t flags;
+	uint32_t fault_code;
+
+	/* this is used to distinguish bind and alter_context requests
+	   from normal requests */
+	void (*recv_handler)(struct rpc_request *conn, 
+			     DATA_BLOB *blob, struct ncacn_packet *pkt);
+
+	const struct GUID *object;
+	uint16_t opnum;
+	DATA_BLOB request_data;
+	bool ignore_timeout;
+
+	/* use by the ndr level async recv call */
+	struct {
+		const struct ndr_interface_table *table;
+		uint32_t opnum;
+		void *struct_ptr;
+		TALLOC_CTX *mem_ctx;
+	} ndr;
+
+	struct {
+		void (*callback)(struct rpc_request *);
+		void *private_data;
+	} async;
+};
+
 _PUBLIC_ NTSTATUS dcerpc_init(struct loadparm_context *lp_ctx)
 {
 	return gensec_init(lp_ctx);
@@ -45,6 +88,9 @@ static struct rpc_request *dcerpc_request_send(struct dcerpc_pipe *p,
 					       const struct GUID *object,
 					       uint16_t opnum,
 					       DATA_BLOB *stub_data);
+static NTSTATUS dcerpc_request_recv(struct rpc_request *req,
+				    TALLOC_CTX *mem_ctx,
+				    DATA_BLOB *stub_data);
 static NTSTATUS dcerpc_ndr_validate_in(struct dcecli_connection *c,
 				       TALLOC_CTX *mem_ctx,
 				       DATA_BLOB blob,
@@ -1508,9 +1554,9 @@ _PUBLIC_ struct tevent_context *dcerpc_event_context(struct dcerpc_pipe *p)
 /*
   perform the receive side of a async dcerpc request
 */
-NTSTATUS dcerpc_request_recv(struct rpc_request *req,
-			     TALLOC_CTX *mem_ctx,
-			     DATA_BLOB *stub_data)
+static NTSTATUS dcerpc_request_recv(struct rpc_request *req,
+				    TALLOC_CTX *mem_ctx,
+				    DATA_BLOB *stub_data)
 {
 	NTSTATUS status;
 
@@ -1533,27 +1579,6 @@ NTSTATUS dcerpc_request_recv(struct rpc_request *req,
 }
 
 /*
-  perform a full request/response pair on a dcerpc pipe
-*/
-NTSTATUS dcerpc_request(struct dcerpc_pipe *p, 
-			struct GUID *object,
-			uint16_t opnum,
-			TALLOC_CTX *mem_ctx,
-			DATA_BLOB *stub_data_in,
-			DATA_BLOB *stub_data_out)
-{
-	struct rpc_request *req;
-
-	req = dcerpc_request_send(p, object, opnum, stub_data_in);
-	if (req == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	return dcerpc_request_recv(req, mem_ctx, stub_data_out);
-}
-
-
-/*
   this is a paranoid NDR validator. For every packet we push onto the wire
   we pull it back again, then push it again. Then we compare the raw NDR data
   for that to the NDR we initially generated. If they don't match then we know
diff --git a/source4/librpc/rpc/dcerpc.h b/source4/librpc/rpc/dcerpc.h
index fab1236..22f4b1e 100644
--- a/source4/librpc/rpc/dcerpc.h
+++ b/source4/librpc/rpc/dcerpc.h
@@ -24,29 +24,25 @@
  * If you remove any functions or change their signature, update 
  * the so version number. */
 
-#ifndef __DCERPC_H__
-#define __DCERPC_H__
+#ifndef __S4_DCERPC_H__
+#define __S4_DCERPC_H__
 
 #include "../lib/util/data_blob.h"
 #include "librpc/gen_ndr/dcerpc.h"
 #include "../librpc/ndr/libndr.h"
+#include "../librpc/rpc/rpc_common.h"
 
 struct tevent_context;
 struct tevent_req;
 struct dcerpc_binding_handle;
 struct tstream_context;
 
-enum dcerpc_transport_t {
-	NCA_UNKNOWN, NCACN_NP, NCACN_IP_TCP, NCACN_IP_UDP, NCACN_VNS_IPC, 
-	NCACN_VNS_SPP, NCACN_AT_DSP, NCADG_AT_DDP, NCALRPC, NCACN_UNIX_STREAM, 
-	NCADG_UNIX_DGRAM, NCACN_HTTP, NCADG_IPX, NCACN_SPX, NCACN_INTERNAL };
-
 /*
   this defines a generic security context for signed/sealed dcerpc pipes.
 */
 struct dcecli_connection;
 struct gensec_settings;
-struct dcerpc_security {
+struct dcecli_security {
 	struct dcerpc_auth *auth_info;
 	struct gensec_security *generic_state;
 
@@ -57,12 +53,13 @@ struct dcerpc_security {
 /*
   this holds the information that is not specific to a particular rpc context_id
 */
+struct rpc_request;
 struct dcecli_connection {
 	uint32_t call_id;
 	uint32_t srv_max_xmit_frag;
 	uint32_t srv_max_recv_frag;
 	uint32_t flags;
-	struct dcerpc_security security_state;
+	struct dcecli_security security_state;
 	const char *binding_string;
 	struct tevent_context *event_ctx;
 
@@ -184,21 +181,6 @@ struct dcerpc_pipe {
 /* specify binding interface */
 #define	DCERPC_LOCALADDRESS            (1<<22)
 
-/* this describes a binding to a particular transport/pipe */
-struct dcerpc_binding {
-	enum dcerpc_transport_t transport;
-	struct ndr_syntax_id object;
-	const char *host;
-	const char *target_hostname;
-	const char *target_principal;
-	const char *endpoint;
-	const char **options;
-	const char *localaddress;
-	uint32_t flags;
-	uint32_t assoc_group_id;
-};
-
-
 struct dcerpc_pipe_connect {
 	struct dcerpc_pipe *pipe;
 	struct dcerpc_binding *binding;
@@ -209,49 +191,6 @@ struct dcerpc_pipe_connect {
 };
 
 
-enum rpc_request_state {
-	RPC_REQUEST_QUEUED,
-	RPC_REQUEST_PENDING,
-	RPC_REQUEST_DONE
-};
-
-/*
-  handle for an async dcerpc request
-*/
-struct rpc_request {
-	struct rpc_request *next, *prev;
-	struct dcerpc_pipe *p;
-	NTSTATUS status;
-	uint32_t call_id;
-	enum rpc_request_state state;
-	DATA_BLOB payload;
-	uint32_t flags;
-	uint32_t fault_code;
-
-	/* this is used to distinguish bind and alter_context requests
-	   from normal requests */
-	void (*recv_handler)(struct rpc_request *conn, 
-			     DATA_BLOB *blob, struct ncacn_packet *pkt);
-
-	const struct GUID *object;
-	uint16_t opnum;
-	DATA_BLOB request_data;
-	bool ignore_timeout;
-
-	/* use by the ndr level async recv call */
-	struct {
-		const struct ndr_interface_table *table;
-		uint32_t opnum;
-		void *struct_ptr;
-		TALLOC_CTX *mem_ctx;
-	} ndr;
-
-	struct {
-		void (*callback)(struct rpc_request *);
-		void *private_data;
-	} async;
-};
-
 struct epm_tower;
 struct epm_floor;
 
@@ -372,17 +311,8 @@ NTSTATUS dcerpc_binding_from_tower(TALLOC_CTX *mem_ctx,
 				   struct epm_tower *tower, 
 				   struct dcerpc_binding **b_out);
 
-NTSTATUS dcerpc_request(struct dcerpc_pipe *p, 
-			struct GUID *object,
-			uint16_t opnum,
-			TALLOC_CTX *mem_ctx,
-			DATA_BLOB *stub_data_in,
-			DATA_BLOB *stub_data_out);
-
 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);
 
-#include "../librpc/rpc/rpc_common.h"
-
-#endif /* __DCERPC_H__ */
+#endif /* __S4_DCERPC_H__ */
diff --git a/source4/librpc/rpc/dcerpc_auth.c b/source4/librpc/rpc/dcerpc_auth.c
index 95fdbf2..fb2f4fb 100644
--- a/source4/librpc/rpc/dcerpc_auth.c
+++ b/source4/librpc/rpc/dcerpc_auth.c
@@ -114,7 +114,7 @@ static void bind_auth_recv_alter(struct composite_context *creq);
 static void bind_auth_next_step(struct composite_context *c)
 {
 	struct bind_auth_state *state;
-	struct dcerpc_security *sec;
+	struct dcecli_security *sec;
 	struct composite_context *creq;
 	bool more_processing = false;
 
@@ -233,7 +233,7 @@ struct composite_context *dcerpc_bind_auth_send(TALLOC_CTX *mem_ctx,
 {
 	struct composite_context *c, *creq;
 	struct bind_auth_state *state;
-	struct dcerpc_security *sec;
+	struct dcecli_security *sec;
 
 	struct ndr_syntax_id syntax, transfer_syntax;
 
diff --git a/source4/librpc/rpc/pyrpc.c b/source4/librpc/rpc/pyrpc.c
index ffd2376..2d6e1f6 100644
--- a/source4/librpc/rpc/pyrpc.c
+++ b/source4/librpc/rpc/pyrpc.c
@@ -146,10 +146,12 @@ static PyObject *py_iface_request(PyObject *self, PyObject *args, PyObject *kwar
 	PyObject *object = NULL;
 	struct GUID object_guid;
 	TALLOC_CTX *mem_ctx = talloc_new(NULL);
+	uint32_t out_flags = 0;
 	const char *kwnames[] = { "opnum", "data", "object", NULL };
 
 	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "is#|O:request", 
 		discard_const_p(char *, kwnames), &opnum, &in_data, &in_length, &object)) {
+		talloc_free(mem_ctx);
 		return NULL;
 	}
 
@@ -159,12 +161,20 @@ static PyObject *py_iface_request(PyObject *self, PyObject *args, PyObject *kwar
 	ZERO_STRUCT(data_out);
 
 	if (object != NULL && !PyString_AsGUID(object, &object_guid)) {
+		talloc_free(mem_ctx);
 		return NULL;
 	}
 
-	status = dcerpc_request(iface->pipe, object?&object_guid:NULL,
-				opnum, mem_ctx, &data_in, &data_out);
-
+	status = dcerpc_binding_handle_raw_call(iface->binding_handle,
+						object?&object_guid:NULL,
+						opnum,
+						0, /* in_flags */
+						data_in.data,
+						data_in.length,
+						mem_ctx,
+						&data_out.data,
+						&data_out.length,
+						&out_flags);
 	if (!NT_STATUS_IS_OK(status)) {
 		PyErr_SetDCERPCStatus(iface->pipe, status);
 		talloc_free(mem_ctx);
diff --git a/source4/torture/rpc/autoidl.c b/source4/torture/rpc/autoidl.c
index 3bf7dab..f1e35cd 100644
--- a/source4/torture/rpc/autoidl.c
+++ b/source4/torture/rpc/autoidl.c
@@ -124,13 +124,22 @@ static void try_expand(struct torture_context *tctx, const struct ndr_interface_
 
 	/* work out how much to expand to get a non fault */


-- 
Samba Shared Repository


More information about the samba-cvs mailing list