diff options
author | Volker Lendecke <vl@samba.org> | 2021-01-29 18:16:08 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2021-03-16 17:09:31 +0000 |
commit | 403eabe4fc3d43d80f3b33f104a8e35296b60fef (patch) | |
tree | e1ded900c4da57a0860bb40ad38f57d89ad66a43 /librpc | |
parent | e338d4fab47d78e28139979480902c8f95986a08 (diff) | |
download | samba-403eabe4fc3d43d80f3b33f104a8e35296b60fef.tar.gz |
librpc: Add "private_data" to struct dcesrv_context_callbacks
Not used right now, but we should never have callbacks without a
"private_data" pointer. Some of the callbacks could even today benefit
from this.
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 | 19 | ||||
-rw-r--r-- | librpc/rpc/dcesrv_core.c | 3 | ||||
-rw-r--r-- | librpc/rpc/dcesrv_core.h | 17 |
3 files changed, 26 insertions, 13 deletions
diff --git a/librpc/rpc/dcesrv_auth.c b/librpc/rpc/dcesrv_auth.c index 8ac90f2a2bd..1f09bf0d18e 100644 --- a/librpc/rpc/dcesrv_auth.c +++ b/librpc/rpc/dcesrv_auth.c @@ -79,6 +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; NTSTATUS status; if (auth->auth_started) { @@ -127,9 +128,11 @@ static bool dcesrv_auth_prepare_gensec(struct dcesrv_call_state *call) auth->auth_level = call->in_auth_info.auth_level; auth->auth_context_id = call->in_auth_info.auth_context_id; - status = call->conn->dce_ctx->callbacks.auth.gensec_prepare(auth, - call, - &auth->gensec_security); + status = cb->auth.gensec_prepare( + auth, + call, + &auth->gensec_security, + cb->auth.private_data); if (!NT_STATUS_IS_OK(status)) { DEBUG(1, ("Failed to call samba_server_gensec_start %s\n", nt_errstr(status))); @@ -246,6 +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; if (auth->auth_audited) { return; @@ -267,11 +271,11 @@ void dcesrv_default_auth_state_prepare_request(struct dcesrv_call_state *call) return; } - if (!call->conn->dce_ctx->callbacks.log.successful_authz) { + if (cb->log.successful_authz == NULL) { return; } - call->conn->dce_ctx->callbacks.log.successful_authz(call); + cb->log.successful_authz(call, cb->log.private_data); } /* @@ -283,6 +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; NTSTATUS status; if (pkt->auth_length == 0) { @@ -291,8 +296,8 @@ bool dcesrv_auth_bind(struct dcesrv_call_state *call) auth->auth_context_id = 0; auth->auth_started = true; - if (call->conn->dce_ctx->callbacks.log.successful_authz) { - call->conn->dce_ctx->callbacks.log.successful_authz(call); + if (cb->log.successful_authz != NULL) { + cb->log.successful_authz(call, cb->log.private_data); } return true; diff --git a/librpc/rpc/dcesrv_core.c b/librpc/rpc/dcesrv_core.c index 7a20ffe71a0..a5bfac507f5 100644 --- a/librpc/rpc/dcesrv_core.c +++ b/librpc/rpc/dcesrv_core.c @@ -952,7 +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); + 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)); diff --git a/librpc/rpc/dcesrv_core.h b/librpc/rpc/dcesrv_core.h index 6371552a56d..d566aa53217 100644 --- a/librpc/rpc/dcesrv_core.h +++ b/librpc/rpc/dcesrv_core.h @@ -381,15 +381,22 @@ struct dcesrv_assoc_group { struct dcesrv_context_callbacks { struct { - void (*successful_authz)(struct dcesrv_call_state *); + void (*successful_authz)( + struct dcesrv_call_state *call, void *private_data); + void *private_data; } log; struct { - NTSTATUS (*gensec_prepare)(TALLOC_CTX *mem_ctx, - struct dcesrv_call_state *call, - struct gensec_security **out); + NTSTATUS (*gensec_prepare)( + TALLOC_CTX *mem_ctx, + struct dcesrv_call_state *call, + struct gensec_security **out, + void *private_data); + void *private_data; } auth; struct { - NTSTATUS (*find)(struct dcesrv_call_state *); + NTSTATUS (*find)( + struct dcesrv_call_state *call, void *private_data); + void *private_data; } assoc_group; }; |