{
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) {
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)));
{
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;
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);
}
/*
{
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) {
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;
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));
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;
};
if (hs->conn->assoc_group == NULL) {
ZERO_STRUCT(state->call->pkt);
state->call->pkt.u.bind.assoc_group_id = 0;
- status = dce_ctx->callbacks.assoc_group.find(state->call);
+ status = dce_ctx->callbacks.assoc_group.find(
+ state->call,
+ dce_ctx->callbacks.assoc_group.private_data);
if (tevent_req_nterror(req, status)) {
return tevent_req_post(req, ev);
}
return;
}
-NTSTATUS dcesrv_auth_gensec_prepare(TALLOC_CTX *mem_ctx,
- struct dcesrv_call_state *call,
- struct gensec_security **out)
+NTSTATUS dcesrv_auth_gensec_prepare(
+ TALLOC_CTX *mem_ctx,
+ struct dcesrv_call_state *call,
+ struct gensec_security **out,
+ void *private_data)
{
struct gensec_security *gensec = NULL;
NTSTATUS status;
return NT_STATUS_OK;
}
-void dcesrv_log_successful_authz(struct dcesrv_call_state *call)
+void dcesrv_log_successful_authz(
+ struct dcesrv_call_state *call,
+ void *private_data)
{
TALLOC_CTX *frame = talloc_stackframe();
struct auth4_context *auth4_context = NULL;
return NT_STATUS_OK;
}
-NTSTATUS dcesrv_assoc_group_find(struct dcesrv_call_state *call)
+NTSTATUS dcesrv_assoc_group_find(
+ struct dcesrv_call_state *call,
+ void *private_data)
{
uint32_t assoc_group_id = call->pkt.u.bind.assoc_group_id;
dcerpc_ncacn_termination_fn termination_fn,
void *termination_data);
-NTSTATUS dcesrv_auth_gensec_prepare(TALLOC_CTX *mem_ctx,
- struct dcesrv_call_state *call,
- struct gensec_security **out);
-void dcesrv_log_successful_authz(struct dcesrv_call_state *call);
-NTSTATUS dcesrv_assoc_group_find(struct dcesrv_call_state *call);
+NTSTATUS dcesrv_auth_gensec_prepare(
+ TALLOC_CTX *mem_ctx,
+ struct dcesrv_call_state *call,
+ struct gensec_security **out,
+ void *private_data);
+void dcesrv_log_successful_authz(
+ struct dcesrv_call_state *call,
+ void *private_data);
+NTSTATUS dcesrv_assoc_group_find(
+ struct dcesrv_call_state *call,
+ void *private_data);
NTSTATUS dcesrv_endpoint_by_ncacn_np_name(struct dcesrv_context *dce_ctx,
const char *endpoint,
struct dcesrv_connection *dcesrv_conn = NULL;
struct dcesrv_call_state *dcesrv_call = NULL;
struct data_blob_list_item *rep = NULL;
+ struct dcesrv_context_callbacks *cb = NULL;
uint32_t opnum = state->request->data.ndrcmd;
TALLOC_CTX *mem_ctx;
NTSTATUS status;
ZERO_STRUCT(dcesrv_call->pkt);
dcesrv_call->pkt.u.bind.assoc_group_id = 0;
- status = dcesrv_call->conn->dce_ctx->callbacks.assoc_group.find(
- dcesrv_call);
+
+ cb = &dcesrv_call->conn->dce_ctx->callbacks;
+ status = cb->assoc_group.find(
+ dcesrv_call, cb->assoc_group.private_data);
if (!NT_STATUS_IS_OK(status)) {
goto out;
}
return assoc_group;
}
-NTSTATUS dcesrv_assoc_group_find(struct dcesrv_call_state *call)
+NTSTATUS dcesrv_assoc_group_find(
+ struct dcesrv_call_state *call,
+ void *private_data)
{
/*
if provided, check the assoc_group is valid
return srv_conn->server_id;
}
-void log_successful_dcesrv_authz_event(struct dcesrv_call_state *call)
+void log_successful_dcesrv_authz_event(
+ struct dcesrv_call_state *call,
+ void *private_data)
{
struct dcesrv_auth *auth = call->auth_state;
enum dcerpc_transport_t transport =
auth->auth_audited = true;
}
-NTSTATUS dcesrv_gensec_prepare(TALLOC_CTX *mem_ctx,
- struct dcesrv_call_state *call,
- struct gensec_security **out)
+NTSTATUS dcesrv_gensec_prepare(
+ TALLOC_CTX *mem_ctx,
+ struct dcesrv_call_state *call,
+ struct gensec_security **out,
+ void *private_data)
{
struct cli_credentials *server_creds = NULL;
struct imessaging_context *imsg_ctx =