summaryrefslogtreecommitdiff
path: root/librpc
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2021-01-29 18:16:08 +0100
committerJeremy Allison <jra@samba.org>2021-03-16 17:09:31 +0000
commit403eabe4fc3d43d80f3b33f104a8e35296b60fef (patch)
treee1ded900c4da57a0860bb40ad38f57d89ad66a43 /librpc
parente338d4fab47d78e28139979480902c8f95986a08 (diff)
downloadsamba-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.c19
-rw-r--r--librpc/rpc/dcesrv_core.c3
-rw-r--r--librpc/rpc/dcesrv_core.h17
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;
};