r11871: fixed a problem volker found with the async bind code, and a callback
authorAndrew Tridgell <tridge@samba.org>
Wed, 23 Nov 2005 00:51:24 +0000 (00:51 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:46:39 +0000 (13:46 -0500)
destroying the dcerpc pipe
(This used to be commit 0b91602fa4b9a8b40331d088bdaac76381eac7ef)

source4/librpc/rpc/dcerpc.c

index 30c430dcbadc14fae69b0beffabb97e0d6575c98..2c90c62ef5be8381dc4fc4fa85aec9e105ccc00e 100644 (file)
@@ -568,10 +568,12 @@ static void dcerpc_recv_data(struct dcerpc_connection *conn, DATA_BLOB *blob, NT
        case DCERPC_PKT_BIND_ACK:
        case DCERPC_PKT_BIND_NAK:
                dcerpc_bind_recv_data(conn, &pkt);
+               data_blob_free(blob);
                break;
 
        case DCERPC_PKT_ALTER_RESP:
                dcerpc_alter_recv_data(conn, &pkt);
+               data_blob_free(blob);
                break;
 
        default:
@@ -579,8 +581,6 @@ static void dcerpc_recv_data(struct dcerpc_connection *conn, DATA_BLOB *blob, NT
                dcerpc_request_recv_data(conn, blob, &pkt);
                break;
        }
-
-       data_blob_free(blob);
 }
 
 
@@ -857,9 +857,12 @@ static void dcerpc_request_recv_data(struct dcerpc_connection *c,
 
        if (req == NULL) {
                DEBUG(2,("dcerpc_request: unmatched call_id %u in response packet\n", pkt->call_id));
+               data_blob_free(raw_packet);
                return;
        }
 
+       talloc_steal(req, raw_packet->data);
+
        if (pkt->ptype == DCERPC_PKT_FAULT) {
                DEBUG(5,("rpc fault: %s\n", dcerpc_errstr(c, pkt->u.fault.status)));
                req->fault_code = pkt->u.fault.status;