diff options
author | Volker Lendecke <vl@samba.org> | 2021-02-02 15:07:35 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2021-03-16 17:09:32 +0000 |
commit | 9614273aa3d0d7c7113d25b2204ebb292405c7a8 (patch) | |
tree | 8cfef0c015f6fda8aaea61a6c4b263feffedb298 /librpc | |
parent | c8f47dfc03de58525a49824725a3c367d393433b (diff) | |
download | samba-9614273aa3d0d7c7113d25b2204ebb292405c7a8.tar.gz |
librpc: Make "dcesrv_context->callbacks" a pointer
This structure just grew from 3 to 6 pointers, avoid making a copy of
this. All callers of dcesrv_init_context() have this as a static
struct in the C object, so a pointer to that won't change.
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'librpc')
-rw-r--r-- | librpc/rpc/dcesrv_auth.c | 6 | ||||
-rw-r--r-- | librpc/rpc/dcesrv_core.c | 12 | ||||
-rw-r--r-- | librpc/rpc/dcesrv_core.h | 2 |
3 files changed, 11 insertions, 9 deletions
diff --git a/librpc/rpc/dcesrv_auth.c b/librpc/rpc/dcesrv_auth.c index 1f09bf0d18e..6bbac4e0160 100644 --- a/librpc/rpc/dcesrv_auth.c +++ b/librpc/rpc/dcesrv_auth.c @@ -79,7 +79,7 @@ static bool dcesrv_auth_prepare_gensec(struct dcesrv_call_state *call) { struct dcesrv_connection *dce_conn = call->conn; struct dcesrv_auth *auth = call->auth_state; - struct dcesrv_context_callbacks *cb = &call->conn->dce_ctx->callbacks; + struct dcesrv_context_callbacks *cb = call->conn->dce_ctx->callbacks; NTSTATUS status; if (auth->auth_started) { @@ -249,7 +249,7 @@ void dcesrv_default_auth_state_prepare_request(struct dcesrv_call_state *call) { struct dcesrv_connection *dce_conn = call->conn; struct dcesrv_auth *auth = call->auth_state; - struct dcesrv_context_callbacks *cb = &call->conn->dce_ctx->callbacks; + struct dcesrv_context_callbacks *cb = call->conn->dce_ctx->callbacks; if (auth->auth_audited) { return; @@ -287,7 +287,7 @@ bool dcesrv_auth_bind(struct dcesrv_call_state *call) { struct ncacn_packet *pkt = &call->pkt; struct dcesrv_auth *auth = call->auth_state; - struct dcesrv_context_callbacks *cb = &call->conn->dce_ctx->callbacks; + struct dcesrv_context_callbacks *cb = call->conn->dce_ctx->callbacks; NTSTATUS status; if (pkt->auth_length == 0) { diff --git a/librpc/rpc/dcesrv_core.c b/librpc/rpc/dcesrv_core.c index a5bfac507f5..70e0245532e 100644 --- a/librpc/rpc/dcesrv_core.c +++ b/librpc/rpc/dcesrv_core.c @@ -952,8 +952,8 @@ static NTSTATUS dcesrv_bind(struct dcesrv_call_state *call) conn->max_recv_frag = max_rep; conn->max_xmit_frag = max_rep; - status = dce_ctx->callbacks.assoc_group.find( - call, dce_ctx->callbacks.assoc_group.private_data); + status = dce_ctx->callbacks->assoc_group.find( + call, dce_ctx->callbacks->assoc_group.private_data); if (!NT_STATUS_IS_OK(status)) { DBG_NOTICE("Failed to find assoc_group 0x%08x: %s\n", call->pkt.u.bind.assoc_group_id, nt_errstr(status)); @@ -2311,6 +2311,10 @@ _PUBLIC_ NTSTATUS dcesrv_init_context(TALLOC_CTX *mem_ctx, { struct dcesrv_context *dce_ctx; + if (cb == NULL) { + return NT_STATUS_INVALID_PARAMETER; + } + dce_ctx = talloc_zero(mem_ctx, struct dcesrv_context); NT_STATUS_HAVE_NO_MEMORY(dce_ctx); @@ -2330,9 +2334,7 @@ _PUBLIC_ NTSTATUS dcesrv_init_context(TALLOC_CTX *mem_ctx, return NT_STATUS_NO_MEMORY; } dce_ctx->broken_connections = NULL; - if (cb != NULL) { - dce_ctx->callbacks = *cb; - } + dce_ctx->callbacks = cb; *_dce_ctx = dce_ctx; return NT_STATUS_OK; diff --git a/librpc/rpc/dcesrv_core.h b/librpc/rpc/dcesrv_core.h index d566aa53217..d8d5f903095 100644 --- a/librpc/rpc/dcesrv_core.h +++ b/librpc/rpc/dcesrv_core.h @@ -440,7 +440,7 @@ struct dcesrv_context { struct dcesrv_connection *broken_connections; - struct dcesrv_context_callbacks callbacks; + struct dcesrv_context_callbacks *callbacks; }; /* this structure is used by modules to determine the size of some critical types */ |