r3320: fixed bugs in the rpc_server code in handling partial packet receives and...
authorAndrew Tridgell <tridge@samba.org>
Thu, 28 Oct 2004 11:59:03 +0000 (11:59 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:04:54 +0000 (13:04 -0500)
it now passes the non-blocking test suite
(This used to be commit 6cdf485fb263c69d62ea2e98236d92ffbf6b7a3e)

source4/rpc_server/dcerpc_server.c
source4/rpc_server/dcerpc_sock.c

index 9373b066431c21f6afcc5b317d26609192646690..fd605fb9553bee7e926aeb3bf098c7f384be55b9 100644 (file)
@@ -907,7 +907,6 @@ NTSTATUS dcesrv_output(struct dcesrv_connection *dce_conn,
        struct dcesrv_call_state *call;
        struct dcesrv_call_reply *rep;
        ssize_t nwritten;
-       NTSTATUS status = NT_STATUS_OK;
 
        call = dce_conn->call_list;
        if (!call || !call->replies) {
@@ -928,8 +927,6 @@ NTSTATUS dcesrv_output(struct dcesrv_connection *dce_conn,
        if (rep->data.length == 0) {
                /* we're done with this section of the call */
                DLIST_REMOVE(call->replies, rep);
-       } else {
-               status = STATUS_BUFFER_OVERFLOW;
        }
 
        if (call->replies == NULL) {
@@ -938,7 +935,7 @@ NTSTATUS dcesrv_output(struct dcesrv_connection *dce_conn,
                talloc_free(call);
        }
 
-       return status;
+       return NT_STATUS_OK;
 }
 
 
index 32d1f0df3588c81113395471b80d2339b0d75c92..508f42d2fba65f61fd3b275f17d58db9e3295986 100644 (file)
@@ -39,7 +39,7 @@ static ssize_t dcerpc_write_fn(void *private, DATA_BLOB *out)
        size_t sendlen;
 
        status = socket_send(sock, out, &sendlen, 0);
-       if (!NT_STATUS_IS_OK(status)) {
+       if (NT_STATUS_IS_ERR(status)) {
                return -1;
        }
 
@@ -265,6 +265,7 @@ void dcesrv_sock_recv(struct server_connection *conn, time_t t, uint16_t flags)
                return;
        }
        if (nread == 0) {
+               talloc_free(tmp_blob.data);
                return;
        }