summaryrefslogtreecommitdiff
path: root/librpc
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2021-02-02 15:07:35 +0100
committerJeremy Allison <jra@samba.org>2021-03-16 17:09:32 +0000
commit9614273aa3d0d7c7113d25b2204ebb292405c7a8 (patch)
tree8cfef0c015f6fda8aaea61a6c4b263feffedb298 /librpc
parentc8f47dfc03de58525a49824725a3c367d393433b (diff)
downloadsamba-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.c6
-rw-r--r--librpc/rpc/dcesrv_core.c12
-rw-r--r--librpc/rpc/dcesrv_core.h2
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 */