r26639: librpc: Pass iconv convenience on from RPC connection to NDR library, so...
[jelmer/samba4-debian.git] / source / kdc / hdb-ldb.c
index 3ef5f9510aed8e7d74f354176cab9b2f7c00ffda..51726a03c31a8244185849f222843087f4d011e2 100644 (file)
@@ -44,7 +44,7 @@
 #include "auth/auth.h"
 #include "auth/credentials/credentials.h"
 #include "auth/auth_sam.h"
-#include "db_wrap.h"
+#include "util/util_ldb.h"
 #include "dsdb/samdb/samdb.h"
 #include "librpc/ndr/libndr.h"
 #include "librpc/gen_ndr/ndr_drsblobs.h"
@@ -186,7 +186,7 @@ static krb5_error_code LDB_message2entry_keys(krb5_context context,
                                              hdb_entry_ex *entry_ex)
 {
        krb5_error_code ret = 0;
-       NTSTATUS status;
+       enum ndr_err_code ndr_err;
        struct samr_Password *hash;
        const struct ldb_val *sc_val;
        struct supplementalCredentialsBlob scb;
@@ -213,9 +213,9 @@ static krb5_error_code LDB_message2entry_keys(krb5_context context,
 
        /* supplementalCredentials if present */
        if (sc_val) {
-               status = ndr_pull_struct_blob_all(sc_val, mem_ctx, &scb,
-                                                 (ndr_pull_flags_fn_t)ndr_pull_supplementalCredentialsBlob);
-               if (!NT_STATUS_IS_OK(status)) {
+               ndr_err = ndr_pull_struct_blob_all(sc_val, mem_ctx, lp_iconv_convenience(global_loadparm), &scb,
+                                                  (ndr_pull_flags_fn_t)ndr_pull_supplementalCredentialsBlob);
+               if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        dump_data(0, sc_val->data, sc_val->length);
                        ret = EINVAL;
                        goto out;
@@ -250,9 +250,9 @@ static krb5_error_code LDB_message2entry_keys(krb5_context context,
                talloc_steal(mem_ctx, blob.data);
 
                /* TODO: use ndr_pull_struct_blob_all(), when the ndr layer handles it correct with relative pointers */
-               status = ndr_pull_struct_blob(&blob, mem_ctx, &_pkb,
-                                             (ndr_pull_flags_fn_t)ndr_pull_package_PrimaryKerberosBlob);
-               if (!NT_STATUS_IS_OK(status)) {
+               ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, lp_iconv_convenience(global_loadparm), &_pkb,
+                                              (ndr_pull_flags_fn_t)ndr_pull_package_PrimaryKerberosBlob);
+               if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        krb5_set_error_string(context, "LDB_message2entry_keys: could not parse package_PrimaryKerberosBlob");
                        krb5_warnx(context, "LDB_message2entry_keys: could not parse package_PrimaryKerberosBlob");
                        ret = EINVAL;
@@ -1103,6 +1103,7 @@ static krb5_error_code LDB_destroy(krb5_context context, HDB *db)
  * code */
 
 NTSTATUS kdc_hdb_ldb_create(TALLOC_CTX *mem_ctx, 
+                           struct loadparm_context *lp_ctx,
                            krb5_context context, struct HDB **db, const char *arg)
 {
        NTSTATUS nt_status;
@@ -1116,7 +1117,7 @@ NTSTATUS kdc_hdb_ldb_create(TALLOC_CTX *mem_ctx,
        (*db)->hdb_master_key_set = 0;
        (*db)->hdb_db = NULL;
 
-       nt_status = auth_system_session_info(*db, &session_info);
+       nt_status = auth_system_session_info(*db, lp_ctx, &session_info);
        if (!NT_STATUS_IS_OK(nt_status)) {
                return nt_status;
        }
@@ -1133,7 +1134,7 @@ NTSTATUS kdc_hdb_ldb_create(TALLOC_CTX *mem_ctx,
                                           CRED_DONT_USE_KERBEROS);
 
        /* Setup the link to LDB */
-       (*db)->hdb_db = samdb_connect(*db, session_info);
+       (*db)->hdb_db = samdb_connect(*db, lp_ctx, session_info);
        if ((*db)->hdb_db == NULL) {
                DEBUG(1, ("hdb_ldb_create: Cannot open samdb for KDC backend!"));
                return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
@@ -1164,7 +1165,8 @@ krb5_error_code hdb_ldb_create(krb5_context context, struct HDB **db, const char
 {
        NTSTATUS nt_status;
        /* The global kdc_mem_ctx, Disgusting, ugly hack, but it means one less private hook */
-       nt_status = kdc_hdb_ldb_create(kdc_mem_ctx, context, db, arg);
+       nt_status = kdc_hdb_ldb_create(kdc_mem_ctx, global_loadparm, 
+                                      context, db, arg);
 
        if (NT_STATUS_IS_OK(nt_status)) {
                return 0;