Finish removal of iconv_convenience in public API's.
[bbaumbach/samba-autobuild/.git] / source4 / kdc / kdc.c
index 026eaf4122006eb0acef3e220739a0a3ed3238c6..b824bb86b089edddb3576ca0c12c66e2d56958bc 100644 (file)
 #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,
@@ -314,7 +311,7 @@ static void kdc_tcp_accept(struct stream_connection *conn)
 
        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) {
@@ -592,9 +589,7 @@ static NTSTATUS kdc_check_generic_kerberos(struct irpc_message *msg,
        /* 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;
@@ -739,24 +734,24 @@ static void kdc_task_init(struct task_server *task)
        }
        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",