s3-dcerpc: use dcerpc_pull_ncacn_packet() in cli_pipe_validate_current_pdu().
authorGünther Deschner <gd@samba.org>
Wed, 1 Apr 2009 22:34:42 +0000 (00:34 +0200)
committerSimo Sorce <idra@samba.org>
Thu, 8 Jul 2010 04:53:01 +0000 (00:53 -0400)
Guenther

Signed-off-by: Simo Sorce <idra@samba.org>
source3/rpc_client/cli_pipe.c

index 8f74488eb974594d5dd89d096459a1857e3d43c1..e793575c26e46f514097c00ddb6a993e7631d5a6 100644 (file)
@@ -1164,11 +1164,19 @@ static NTSTATUS cli_pipe_validate_current_pdu(struct rpc_pipe_client *cli,
 
                case DCERPC_PKT_RESPONSE:
                {
-                       RPC_HDR_RESP rhdr_resp;
                        uint8 ss_padding_len = 0;
+                       DATA_BLOB blob;
+                       struct ncacn_packet r;
+
+                       blob = data_blob_const(prs_data_p(current_pdu),
+                                              prs_data_size(current_pdu));
+
+                       ret = dcerpc_pull_ncacn_packet(cli, &blob, &r);
+                       if (!NT_STATUS_IS_OK(ret)) {
+                               return ret;
+                       }
 
-                       if(!smb_io_rpc_hdr_resp("rpc_hdr_resp", &rhdr_resp, current_pdu, 0)) {
-                               DEBUG(5,("cli_pipe_validate_current_pdu: failed to unmarshal RPC_HDR_RESP.\n"));
+                       if (!prs_set_offset(current_pdu, prs_offset(current_pdu) + RPC_HDR_RESP_LEN)) {
                                return NT_STATUS_BUFFER_TOO_SMALL;
                        }
 
@@ -1206,11 +1214,11 @@ static NTSTATUS cli_pipe_validate_current_pdu(struct rpc_pipe_client *cli,
                         * set up the return_data parse_struct to the correct size.
                         */
 
-                       if ((prs_data_size(return_data) == 0) && rhdr_resp.alloc_hint && (rhdr_resp.alloc_hint < 15*1024*1024)) {
-                               if (!prs_set_buffer_size(return_data, rhdr_resp.alloc_hint)) {
+                       if ((prs_data_size(return_data) == 0) && r.u.response.alloc_hint && (r.u.response.alloc_hint < 15*1024*1024)) {
+                               if (!prs_set_buffer_size(return_data, r.u.response.alloc_hint)) {
                                        DEBUG(0,("cli_pipe_validate_current_pdu: reply alloc hint %u "
                                                "too large to allocate\n",
-                                               (unsigned int)rhdr_resp.alloc_hint ));
+                                               (unsigned int)r.u.response.alloc_hint ));
                                        return NT_STATUS_NO_MEMORY;
                                }
                        }