uint32_t length;
struct data_blob_list_item *rep;
struct ncacn_packet pkt;
+ bool ok;
rep = talloc_zero(call, struct data_blob_list_item);
NT_STATUS_HAVE_NO_MEMORY(rep);
pkt.u.response.stub_and_verifier.data = stub.data;
pkt.u.response.stub_and_verifier.length = length;
- if (!dcesrv_auth_response(call, &rep->blob, sig_size, &pkt)) {
+ ok = dcesrv_auth_pkt_push(call, &rep->blob, sig_size,
+ DCERPC_RESPONSE_LENGTH,
+ &pkt.u.response.stub_and_verifier,
+ &pkt);
+ if (!ok) {
return dcesrv_fault(call, DCERPC_FAULT_OTHER);
}
return true;
}
-
/*
push a signed or sealed dcerpc request packet into a blob
*/
-bool dcesrv_auth_response(struct dcesrv_call_state *call,
+bool dcesrv_auth_pkt_push(struct dcesrv_call_state *call,
DATA_BLOB *blob, size_t sig_size,
+ uint8_t payload_offset,
+ const DATA_BLOB *payload,
const struct ncacn_packet *pkt)
{
struct dcesrv_connection *dce_conn = call->conn;
status = dcerpc_ncacn_push_pkt_auth(&tmp_auth,
dce_conn->auth_state.gensec_security,
call, blob, sig_size,
- DCERPC_RESPONSE_LENGTH,
- &pkt->u.response.stub_and_verifier,
+ payload_offset,
+ payload,
pkt);
return NT_STATUS_IS_OK(status);
}