*data_to_send = MIN(max_len, data_left);
- mod_len = (header_len + *data_to_send) % pad_alignment;
+ mod_len = (*data_to_send) % pad_alignment;
if (mod_len) {
*pad_len = pad_alignment - mod_len;
} else {
return NT_STATUS_OK;
}
-#define DCERPC_PAYLOAD_PADDING_SIZE 16 //TODO???
+#define DCERPC_PAYLOAD_PADDING_SIZE 16
static NTSTATUS dcerpc_auth_blob(TALLOC_CTX *mem_ctx,
enum dcerpc_AuthType auth_type,
static NTSTATUS dcerpc_response_auth_blob(struct dcerpc_security *sec,
size_t pad_len,
+ size_t auth_len,
DATA_BLOB *rpc_out)
{
char pad[DCERPC_PAYLOAD_PADDING_SIZE] = { 0, };
/* Can't happen. */
smb_panic("bad auth level");
/* Notreached. */
- return NT_STATUS_INVALID_PARAMETER;
+ return NT_STATUS_INVALID_PARAMETER_MIX;
+ }
+
+ if (auth_blob.length != auth_len) {
+ return NT_STATUS_INVALID_PARAMETER_MIX;
}
/* Finally attach the blob. */
status = dcerpc_guess_pdu_sizes(state->call->sec,
hdr_len, total_left,
state->conn->features.max_xmit_frag,
- 16,//TODO
+ DCERPC_PAYLOAD_PADDING_SIZE,
&total_thistime,
&frag_len, &auth_len, &pad_len);
if (!NT_STATUS_IS_OK(status)) {
case DCERPC_AUTH_LEVEL_PRIVACY:
status = dcerpc_response_auth_blob(state->call->sec,
pad_len,
+ auth_len,
&frag->blob);
if (!NT_STATUS_IS_OK(status)) {
tevent_req_nterror(req, status);