s3-dcerpc: use dcerpc_pull_dcerpc_auth() in cli_pipe_verify_schannel()
authorSimo Sorce <idra@samba.org>
Thu, 8 Jul 2010 18:00:54 +0000 (14:00 -0400)
committerSimo Sorce <idra@samba.org>
Thu, 8 Jul 2010 22:38:55 +0000 (18:38 -0400)
source3/rpc_client/cli_pipe.c

index 49df252230f3ef9112f8e28fab09d5b7264d3cb9..bff3f43e59ee4c7f0d8be7b012c875f16c09cefc 100644 (file)
@@ -930,7 +930,7 @@ static NTSTATUS cli_pipe_verify_schannel(struct rpc_pipe_client *cli,
                                prs_struct *current_pdu,
                                uint8 *p_ss_padding_len)
 {
-       RPC_HDR_AUTH auth_info;
+       struct dcerpc_auth auth_info;
        uint32_t auth_len = prhdr->auth_length;
        uint32 save_offset = prs_offset(current_pdu);
        struct schannel_state *schannel_auth =
@@ -976,17 +976,23 @@ static NTSTATUS cli_pipe_verify_schannel(struct rpc_pipe_client *cli,
                return NT_STATUS_BUFFER_TOO_SMALL;
        }
 
-       if(!smb_io_rpc_hdr_auth("hdr_auth", &auth_info, current_pdu, 0)) {
-               DEBUG(0,("cli_pipe_verify_schannel: failed to unmarshall RPC_HDR_AUTH.\n"));
-               return NT_STATUS_BUFFER_TOO_SMALL;
+       blob = data_blob_const(prs_data_p(current_pdu)
+                                       + prs_offset(current_pdu),
+                              prs_data_size(current_pdu)
+                                       - prs_offset(current_pdu));
+
+       status = dcerpc_pull_dcerpc_auth(cli, &blob, &auth_info);
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(0,("cli_pipe_verify_ntlmssp: failed to unmarshall dcerpc_auth.\n"));
+               return status;
        }
 
        /* Ensure auth_pad_len fits into the packet. */
-       if (RPC_HEADER_LEN + RPC_HDR_REQ_LEN + auth_info.auth_pad_len +
+       if (RPC_HEADER_LEN + RPC_HDR_REQ_LEN + auth_info.auth_pad_length +
                        RPC_HDR_AUTH_LEN + auth_len > prhdr->frag_length) {
                DEBUG(0,("cli_pipe_verify_schannel: auth_info.auth_pad_len "
                        "too large (%u), auth_len (%u), frag_len = (%u).\n",
-                       (unsigned int)auth_info.auth_pad_len,
+                       (unsigned int)auth_info.auth_pad_length,
                        (unsigned int)auth_len,
                        (unsigned int)prhdr->frag_length));
                return NT_STATUS_BUFFER_TOO_SMALL;
@@ -1051,7 +1057,7 @@ static NTSTATUS cli_pipe_verify_schannel(struct rpc_pipe_client *cli,
         * stream once the sign/seal is done.
         */
 
-       *p_ss_padding_len = auth_info.auth_pad_len;
+       *p_ss_padding_len = auth_info.auth_pad_length;
 
        return NT_STATUS_OK;
 }