mirror of
https://github.com/samba-team/samba.git
synced 2025-02-02 09:47:23 +03:00
s4:rpc_server: convert dcesrv_auth_request() into a generic dcesrv_auth_pkt_pull()
Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
This commit is contained in:
parent
cb94ec8424
commit
2e8c496ef5
@ -1665,8 +1665,29 @@ static NTSTATUS dcesrv_process_ncacn_packet(struct dcesrv_connection *dce_conn,
|
||||
DCERPC_NCA_S_PROTO_ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!dcesrv_auth_request(call, &blob)) {
|
||||
if (call->pkt.ptype == DCERPC_PKT_REQUEST) {
|
||||
bool ok;
|
||||
uint8_t payload_offset = DCERPC_REQUEST_LENGTH;
|
||||
|
||||
if (call->pkt.pfc_flags & DCERPC_PFC_FLAG_OBJECT_UUID) {
|
||||
payload_offset += 16;
|
||||
}
|
||||
|
||||
ok = dcesrv_auth_pkt_pull(call, &blob,
|
||||
0, /* required_flags */
|
||||
DCERPC_PFC_FLAG_FIRST |
|
||||
DCERPC_PFC_FLAG_LAST |
|
||||
DCERPC_PFC_FLAG_PENDING_CANCEL |
|
||||
0x08 | /* this is not defined, but should be ignored */
|
||||
DCERPC_PFC_FLAG_CONC_MPX |
|
||||
DCERPC_PFC_FLAG_DID_NOT_EXECUTE |
|
||||
DCERPC_PFC_FLAG_MAYBE |
|
||||
DCERPC_PFC_FLAG_OBJECT_UUID,
|
||||
payload_offset,
|
||||
&call->pkt.u.request.stub_and_verifier);
|
||||
if (!ok) {
|
||||
/*
|
||||
* We don't use dcesrv_fault_disconnect()
|
||||
* here, because we don't want to set
|
||||
|
@ -461,9 +461,14 @@ NTSTATUS dcesrv_auth_alter_ack(struct dcesrv_call_state *call, struct ncacn_pack
|
||||
}
|
||||
|
||||
/*
|
||||
check credentials on a request
|
||||
check credentials on a packet
|
||||
*/
|
||||
bool dcesrv_auth_request(struct dcesrv_call_state *call, DATA_BLOB *full_packet)
|
||||
bool dcesrv_auth_pkt_pull(struct dcesrv_call_state *call,
|
||||
DATA_BLOB *full_packet,
|
||||
uint8_t required_flags,
|
||||
uint8_t optional_flags,
|
||||
uint8_t payload_offset,
|
||||
DATA_BLOB *payload_and_verifier)
|
||||
{
|
||||
struct ncacn_packet *pkt = &call->pkt;
|
||||
struct dcesrv_connection *dce_conn = call->conn;
|
||||
@ -473,7 +478,6 @@ bool dcesrv_auth_request(struct dcesrv_call_state *call, DATA_BLOB *full_packet)
|
||||
.auth_context_id = dce_conn->auth_state.auth_context_id,
|
||||
};
|
||||
NTSTATUS status;
|
||||
uint8_t payload_offset = DCERPC_REQUEST_LENGTH;
|
||||
|
||||
if (!dce_conn->allow_request) {
|
||||
call->fault_code = DCERPC_NCA_S_PROTO_ERROR;
|
||||
@ -484,25 +488,14 @@ bool dcesrv_auth_request(struct dcesrv_call_state *call, DATA_BLOB *full_packet)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pkt->pfc_flags & DCERPC_PFC_FLAG_OBJECT_UUID) {
|
||||
payload_offset += 16;
|
||||
}
|
||||
|
||||
status = dcerpc_ncacn_pull_pkt_auth(&tmp_auth,
|
||||
dce_conn->auth_state.gensec_security,
|
||||
call,
|
||||
DCERPC_PKT_REQUEST,
|
||||
0, /* required_flags */
|
||||
DCERPC_PFC_FLAG_FIRST |
|
||||
DCERPC_PFC_FLAG_LAST |
|
||||
DCERPC_PFC_FLAG_PENDING_CANCEL |
|
||||
0x08 | /* this is not defined, but should be ignored */
|
||||
DCERPC_PFC_FLAG_CONC_MPX |
|
||||
DCERPC_PFC_FLAG_DID_NOT_EXECUTE |
|
||||
DCERPC_PFC_FLAG_MAYBE |
|
||||
DCERPC_PFC_FLAG_OBJECT_UUID,
|
||||
pkt->ptype,
|
||||
required_flags,
|
||||
optional_flags,
|
||||
payload_offset,
|
||||
&pkt->u.request.stub_and_verifier,
|
||||
payload_and_verifier,
|
||||
full_packet,
|
||||
pkt);
|
||||
if (NT_STATUS_EQUAL(status, NT_STATUS_RPC_PROTOCOL_ERROR)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user