#include "librpc/gen_ndr/ndr_misc.h"
-/* Disgusting hack to get a mem_ctx and lp_ctx into the hdb plugin, when
- * used as a keytab */
-TALLOC_CTX *hdb_samba4_mem_ctx;
-struct tevent_context *hdb_samba4_ev_ctx;
-struct loadparm_context *hdb_samba4_lp_ctx;
+extern struct krb5plugin_windc_ftable windc_plugin_table;
+extern struct hdb_method hdb_samba4;
typedef bool (*kdc_process_fn_t)(struct kdc_server *kdc,
TALLOC_CTX *mem_ctx,
TALLOC_FREE(conn->event.fde);
- rc = tstream_bsd_existing_socket(kdc_conn->tstream,
+ rc = tstream_bsd_existing_socket(kdc_conn,
socket_get_fd(conn->socket),
&kdc_conn->tstream);
if (rc < 0) {
/* There is no reply to this request */
r->out.generic_reply = data_blob(NULL, 0);
- ndr_err = ndr_pull_struct_blob(&r->in.generic_request, msg,
- lp_iconv_convenience(kdc->task->lp_ctx),
- &pac_validate,
+ ndr_err = ndr_pull_struct_blob(&r->in.generic_request, msg, &pac_validate,
(ndr_pull_flags_fn_t)ndr_pull_PAC_Validate);
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
return NT_STATUS_INVALID_PARAMETER;
}
kdc->config->num_db = 1;
- status = hdb_samba4_create_kdc(kdc, task->event_ctx, task->lp_ctx,
- kdc->smb_krb5_context->krb5_context,
- &kdc->config->db[0]);
- if (!NT_STATUS_IS_OK(status)) {
- task_server_terminate(task, "kdc: hdb_samba4_create_kdc (setup KDC database) failed", true);
- return;
- }
-
/* Register hdb-samba4 hooks for use as a keytab */
- kdc->hdb_samba4_context = talloc(kdc, struct hdb_samba4_context);
- if (!kdc->hdb_samba4_context) {
+ kdc->base_ctx = talloc_zero(kdc, struct samba_kdc_base_context);
+ if (!kdc->base_ctx) {
task_server_terminate(task, "kdc: out of memory", true);
return;
}
- kdc->hdb_samba4_context->ev_ctx = task->event_ctx;
- kdc->hdb_samba4_context->lp_ctx = task->lp_ctx;
+ kdc->base_ctx->ev_ctx = task->event_ctx;
+ kdc->base_ctx->lp_ctx = task->lp_ctx;
+
+ status = hdb_samba4_create_kdc(kdc->base_ctx,
+ kdc->smb_krb5_context->krb5_context,
+ &kdc->config->db[0]);
+ if (!NT_STATUS_IS_OK(status)) {
+ task_server_terminate(task, "kdc: hdb_samba4_create_kdc (setup KDC database) failed", true);
+ return;
+ }
ret = krb5_plugin_register(kdc->smb_krb5_context->krb5_context,
PLUGIN_TYPE_DATA, "hdb",