svn commit: samba r8023 - in branches/SAMBA_4_0/source/rpc_server: .

metze at samba.org metze at samba.org
Thu Jun 30 19:24:29 GMT 2005


Author: metze
Date: 2005-06-30 19:24:29 +0000 (Thu, 30 Jun 2005)
New Revision: 8023

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=8023

Log:
use a pointer to a DATA_BLOB for each reply,
that will allow the write_fn callback of dcesrv_output()
to reference the memory with a valid TALLOC pointer

metze
Modified:
   branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c
   branches/SAMBA_4_0/source/rpc_server/dcerpc_server.h


Changeset:
Modified: branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c	2005-06-30 17:46:06 UTC (rev 8022)
+++ branches/SAMBA_4_0/source/rpc_server/dcerpc_server.c	2005-06-30 19:24:29 UTC (rev 8023)
@@ -399,17 +399,16 @@
 	pkt.u.fault.status = fault_code;
 
 	rep = talloc(call, struct dcesrv_call_reply);
-	if (!rep) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	NT_STATUS_HAVE_NO_MEMORY(rep);
 
-	status = ncacn_push_auth(&rep->data, call, &pkt, NULL);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
+	rep->data = talloc(call, DATA_BLOB);
+	NT_STATUS_HAVE_NO_MEMORY(rep->data);
 
-	dcerpc_set_frag_length(&rep->data, rep->data.length);
+	status = ncacn_push_auth(rep->data, call, &pkt, NULL);
+	NT_STATUS_NOT_OK_RETURN(status);
 
+	dcerpc_set_frag_length(rep->data, rep->data->length);
+
 	DLIST_ADD_END(call->replies, rep, struct dcesrv_call_reply *);
 	DLIST_ADD_END(call->conn->call_list, call, struct dcesrv_call_state *);
 
@@ -436,17 +435,16 @@
 	pkt.u.bind_nak.num_versions = 0;
 
 	rep = talloc(call, struct dcesrv_call_reply);
-	if (!rep) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	NT_STATUS_HAVE_NO_MEMORY(rep);
 
-	status = ncacn_push_auth(&rep->data, call, &pkt, NULL);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
+	rep->data = talloc(call, DATA_BLOB);
+	NT_STATUS_HAVE_NO_MEMORY(rep->data);
 
-	dcerpc_set_frag_length(&rep->data, rep->data.length);
+	status = ncacn_push_auth(rep->data, call, &pkt, NULL);
+	NT_STATUS_NOT_OK_RETURN(status);
 
+	dcerpc_set_frag_length(rep->data, rep->data->length);
+
 	DLIST_ADD_END(call->replies, rep, struct dcesrv_call_reply *);
 	DLIST_ADD_END(call->conn->call_list, call, struct dcesrv_call_state *);
 
@@ -571,18 +569,17 @@
 	}
 
 	rep = talloc(call, struct dcesrv_call_reply);
-	if (!rep) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	NT_STATUS_HAVE_NO_MEMORY(rep);
 
-	status = ncacn_push_auth(&rep->data, call, &pkt, 
-				  call->conn->auth_state.auth_info);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
+	rep->data = talloc(call, DATA_BLOB);
+	NT_STATUS_HAVE_NO_MEMORY(rep->data);
 
-	dcerpc_set_frag_length(&rep->data, rep->data.length);
+	status = ncacn_push_auth(rep->data, call, &pkt, 
+				 call->conn->auth_state.auth_info);
+	NT_STATUS_NOT_OK_RETURN(status);
 
+	dcerpc_set_frag_length(rep->data, rep->data->length);
+
 	DLIST_ADD_END(call->replies, rep, struct dcesrv_call_reply *);
 	DLIST_ADD_END(call->conn->call_list, call, struct dcesrv_call_state *);
 
@@ -713,18 +710,17 @@
 	}
 
 	rep = talloc(call, struct dcesrv_call_reply);
-	if (!rep) {
-		return NT_STATUS_NO_MEMORY;
-	}
+	NT_STATUS_HAVE_NO_MEMORY(rep);
 
-	status = ncacn_push_auth(&rep->data, call, &pkt, 
-				  call->conn->auth_state.auth_info);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
+	rep->data = talloc(call, DATA_BLOB);
+	NT_STATUS_HAVE_NO_MEMORY(rep->data);
 
-	dcerpc_set_frag_length(&rep->data, rep->data.length);
+	status = ncacn_push_auth(rep->data, call, &pkt, 
+				 call->conn->auth_state.auth_info);
+	NT_STATUS_IS_OK_RETURN(status);
 
+	dcerpc_set_frag_length(rep->data, rep->data->length);
+
 	DLIST_ADD_END(call->replies, rep, struct dcesrv_call_reply *);
 	DLIST_ADD_END(call->conn->call_list, call, struct dcesrv_call_state *);
 
@@ -844,6 +840,9 @@
 		rep = talloc(call, struct dcesrv_call_reply);
 		NT_STATUS_HAVE_NO_MEMORY(rep);
 
+		rep->data = talloc(call, DATA_BLOB);
+		NT_STATUS_HAVE_NO_MEMORY(rep->data);
+
 		length = stub.length;
 		if (length + DCERPC_RESPONSE_LENGTH > call->conn->cli_max_recv_frag) {
 			/* the 32 is to cope with signing data */
@@ -869,11 +868,11 @@
 		pkt.u.response.stub_and_verifier.data = stub.data;
 		pkt.u.response.stub_and_verifier.length = length;
 
-		if (!dcesrv_auth_response(call, &rep->data, &pkt)) {
+		if (!dcesrv_auth_response(call, rep->data, &pkt)) {
 			return dcesrv_fault(call, DCERPC_FAULT_OTHER);		
 		}
 
-		dcerpc_set_frag_length(&rep->data, rep->data.length);
+		dcerpc_set_frag_length(rep->data, rep->data->length);
 
 		DLIST_ADD_END(call->replies, rep, struct dcesrv_call_reply *);
 		
@@ -1127,13 +1126,13 @@
 	}
 	rep = call->replies;
 
-	status = write_fn(private_data, &rep->data, &nwritten);
+	status = write_fn(private_data, rep->data, &nwritten);
 	NT_STATUS_IS_ERR_RETURN(status);
 
-	rep->data.length -= nwritten;
-	rep->data.data += nwritten;
+	rep->data->length -= nwritten;
+	rep->data->data += nwritten;
 
-	if (rep->data.length == 0) {
+	if (rep->data->length == 0) {
 		/* we're done with this section of the call */
 		DLIST_REMOVE(call->replies, rep);
 	}

Modified: branches/SAMBA_4_0/source/rpc_server/dcerpc_server.h
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/dcerpc_server.h	2005-06-30 17:46:06 UTC (rev 8022)
+++ branches/SAMBA_4_0/source/rpc_server/dcerpc_server.h	2005-06-30 19:24:29 UTC (rev 8023)
@@ -104,7 +104,7 @@
 
 	struct dcesrv_call_reply {
 		struct dcesrv_call_reply *next, *prev;
-		DATA_BLOB data;
+		DATA_BLOB *data;
 	} *replies;
 
 	/* this is used by the boilerplate code to generate DCERPC faults */



More information about the samba-cvs mailing list