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