s3-libnet: better separate headers.
[kamenim/samba.git] / source3 / libnet / libnet_dssync_keytab.c
index 6a3139d6ad3cfb4b6dc9f8378835c687353c7f7b..b0c745d1107ade72e80c866a9d95d2feefe49f87 100644 (file)
 */
 
 #include "includes.h"
-#include "libnet/libnet.h"
+#include "smb_krb5.h"
+#include "ads.h"
+#include "libnet/libnet_dssync.h"
+#include "libnet/libnet_keytab.h"
 #include "librpc/gen_ndr/ndr_drsblobs.h"
 
 #if defined(HAVE_ADS) && defined(ENCTYPE_ARCFOUR_HMAC)
 
-/**
- * Internal helper function to add data to the list
- * of keytab entries. It builds the prefix from the input.
- */
-static NTSTATUS add_to_keytab_entries(TALLOC_CTX *mem_ctx,
-                                     struct libnet_keytab_context *ctx,
-                                     uint32_t kvno,
-                                     const char *name,
-                                     const char *prefix,
-                                     const krb5_enctype enctype,
-                                     DATA_BLOB blob)
-{
-       struct libnet_keytab_entry entry;
-
-       entry.kvno = kvno;
-       entry.name = talloc_strdup(mem_ctx, name);
-       entry.principal = talloc_asprintf(mem_ctx, "%s%s%s@%s",
-                                         prefix ? prefix : "",
-                                         prefix ? "/" : "",
-                                         name, ctx->dns_domain_name);
-       entry.enctype = enctype;
-       entry.password = blob;
-       NT_STATUS_HAVE_NO_MEMORY(entry.name);
-       NT_STATUS_HAVE_NO_MEMORY(entry.principal);
-       NT_STATUS_HAVE_NO_MEMORY(entry.password.data);
-
-       ADD_TO_ARRAY(mem_ctx, struct libnet_keytab_entry, entry,
-                    &ctx->entries, &ctx->count);
-       NT_STATUS_HAVE_NO_MEMORY(ctx->entries);
-
-       return NT_STATUS_OK;
-}
-
 static NTSTATUS keytab_startup(struct dssync_context *ctx, TALLOC_CTX *mem_ctx,
                               struct replUpToDateVectorBlob **pold_utdv)
 {
@@ -85,8 +55,7 @@ static NTSTATUS keytab_startup(struct dssync_context *ctx, TALLOC_CTX *mem_ctx,
                enum ndr_err_code ndr_err;
                old_utdv = talloc(mem_ctx, struct replUpToDateVectorBlob);
 
-               ndr_err = ndr_pull_struct_blob(&entry->password, old_utdv,
-                               NULL, old_utdv,
+               ndr_err = ndr_pull_struct_blob(&entry->password, old_utdv, old_utdv,
                                (ndr_pull_flags_fn_t)ndr_pull_replUpToDateVectorBlob);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        NTSTATUS status = ndr_map_error2ntstatus(ndr_err);
@@ -124,7 +93,7 @@ static NTSTATUS keytab_finish(struct dssync_context *ctx, TALLOC_CTX *mem_ctx,
                        NDR_PRINT_DEBUG(replUpToDateVectorBlob, new_utdv);
                }
 
-               ndr_err = ndr_push_struct_blob(&blob, mem_ctx, NULL, new_utdv,
+               ndr_err = ndr_push_struct_blob(&blob, mem_ctx, new_utdv,
                                (ndr_push_flags_fn_t)ndr_push_replUpToDateVectorBlob);
                if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                        status = ndr_map_error2ntstatus(ndr_err);
@@ -134,10 +103,10 @@ static NTSTATUS keytab_finish(struct dssync_context *ctx, TALLOC_CTX *mem_ctx,
                        goto done;
                }
 
-               status = add_to_keytab_entries(mem_ctx, keytab_ctx, 0,
-                                              ctx->nc_dn, "UTDV",
-                                              ENCTYPE_NULL,
-                                              blob);
+               status = libnet_keytab_add_to_keytab_entries(mem_ctx, keytab_ctx, 0,
+                                                            ctx->nc_dn, "UTDV",
+                                                            ENCTYPE_NULL,
+                                                            blob);
                if (!NT_STATUS_IS_OK(status)) {
                        goto done;
                }
@@ -179,7 +148,7 @@ static  NTSTATUS parse_supplemental_credentials(TALLOC_CTX *mem_ctx,
        bool newer_keys = false;
        uint32_t j;
 
-       ndr_err = ndr_pull_struct_blob_all(blob, mem_ctx, NULL, &scb,
+       ndr_err = ndr_pull_struct_blob_all(blob, mem_ctx, &scb,
                        (ndr_pull_flags_fn_t)ndr_pull_supplementalCredentialsBlob);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                status = ndr_map_error2ntstatus(ndr_err);
@@ -236,7 +205,7 @@ static  NTSTATUS parse_supplemental_credentials(TALLOC_CTX *mem_ctx,
                status = NT_STATUS_NO_MEMORY;
                goto done;
        }
-       ndr_err = ndr_pull_struct_blob(&scpk_blob, mem_ctx, NULL, pkb,
+       ndr_err = ndr_pull_struct_blob(&scpk_blob, mem_ctx, pkb,
                        (ndr_pull_flags_fn_t)ndr_pull_package_PrimaryKerberosBlob);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
                status = ndr_map_error2ntstatus(ndr_err);
@@ -391,11 +360,11 @@ static NTSTATUS parse_object(TALLOC_CTX *mem_ctx,
        }
 
        if (name) {
-               status = add_to_keytab_entries(mem_ctx, ctx, 0, object_dn,
-                                              "SAMACCOUNTNAME",
-                                              ENCTYPE_NULL,
-                                              data_blob_talloc(mem_ctx, name,
-                                                       strlen(name) + 1));
+               status = libnet_keytab_add_to_keytab_entries(mem_ctx, ctx, 0, object_dn,
+                                                            "SAMACCOUNTNAME",
+                                                            ENCTYPE_NULL,
+                                                            data_blob_talloc(mem_ctx, name,
+                                                            strlen(name) + 1));
                if (!NT_STATUS_IS_OK(status)) {
                        return status;
                }
@@ -454,9 +423,9 @@ static NTSTATUS parse_object(TALLOC_CTX *mem_ctx,
        }
        DEBUGADD(1,("\n"));
 
-       status = add_to_keytab_entries(mem_ctx, ctx, kvno, name, NULL,
-                                      ENCTYPE_ARCFOUR_HMAC,
-                                      data_blob_talloc(mem_ctx, nt_passwd, 16));
+       status = libnet_keytab_add_to_keytab_entries(mem_ctx, ctx, kvno, name, NULL,
+                                                    ENCTYPE_ARCFOUR_HMAC,
+                                                    data_blob_talloc(mem_ctx, nt_passwd, 16));
 
        if (!NT_STATUS_IS_OK(status)) {
                return status;
@@ -469,11 +438,11 @@ static NTSTATUS parse_object(TALLOC_CTX *mem_ctx,
                        if (!pkb4->keys[i].value) {
                                continue;
                        }
-                       status = add_to_keytab_entries(mem_ctx, ctx, kvno,
-                                                      name,
-                                                      NULL,
-                                                      pkb4->keys[i].keytype,
-                                                      *pkb4->keys[i].value);
+                       status = libnet_keytab_add_to_keytab_entries(mem_ctx, ctx, kvno,
+                                                                    name,
+                                                                    NULL,
+                                                                    pkb4->keys[i].keytype,
+                                                                    *pkb4->keys[i].value);
                        if (!NT_STATUS_IS_OK(status)) {
                                return status;
                        }
@@ -482,11 +451,11 @@ static NTSTATUS parse_object(TALLOC_CTX *mem_ctx,
                        if (!pkb4->old_keys[i].value) {
                                continue;
                        }
-                       status = add_to_keytab_entries(mem_ctx, ctx, kvno - 1,
-                                                      name,
-                                                      NULL,
-                                                      pkb4->old_keys[i].keytype,
-                                                      *pkb4->old_keys[i].value);
+                       status = libnet_keytab_add_to_keytab_entries(mem_ctx, ctx, kvno - 1,
+                                                                    name,
+                                                                    NULL,
+                                                                    pkb4->old_keys[i].keytype,
+                                                                    *pkb4->old_keys[i].value);
                        if (!NT_STATUS_IS_OK(status)) {
                                return status;
                        }
@@ -495,11 +464,11 @@ static NTSTATUS parse_object(TALLOC_CTX *mem_ctx,
                        if (!pkb4->older_keys[i].value) {
                                continue;
                        }
-                       status = add_to_keytab_entries(mem_ctx, ctx, kvno - 2,
-                                                      name,
-                                                      NULL,
-                                                      pkb4->older_keys[i].keytype,
-                                                      *pkb4->older_keys[i].value);
+                       status = libnet_keytab_add_to_keytab_entries(mem_ctx, ctx, kvno - 2,
+                                                                    name,
+                                                                    NULL,
+                                                                    pkb4->older_keys[i].keytype,
+                                                                    *pkb4->older_keys[i].value);
                        if (!NT_STATUS_IS_OK(status)) {
                                return status;
                        }
@@ -511,10 +480,10 @@ static NTSTATUS parse_object(TALLOC_CTX *mem_ctx,
                        if (!pkb3->keys[i].value) {
                                continue;
                        }
-                       status = add_to_keytab_entries(mem_ctx, ctx, kvno, name,
-                                                      NULL,
-                                                      pkb3->keys[i].keytype,
-                                                      *pkb3->keys[i].value);
+                       status = libnet_keytab_add_to_keytab_entries(mem_ctx, ctx, kvno, name,
+                                                                    NULL,
+                                                                    pkb3->keys[i].keytype,
+                                                                    *pkb3->keys[i].value);
                        if (!NT_STATUS_IS_OK(status)) {
                                return status;
                        }
@@ -523,11 +492,11 @@ static NTSTATUS parse_object(TALLOC_CTX *mem_ctx,
                        if (!pkb3->old_keys[i].value) {
                                continue;
                        }
-                       status = add_to_keytab_entries(mem_ctx, ctx, kvno - 1,
-                                                      name,
-                                                      NULL,
-                                                      pkb3->old_keys[i].keytype,
-                                                      *pkb3->old_keys[i].value);
+                       status = libnet_keytab_add_to_keytab_entries(mem_ctx, ctx, kvno - 1,
+                                                                    name,
+                                                                    NULL,
+                                                                    pkb3->old_keys[i].keytype,
+                                                                    *pkb3->old_keys[i].value);
                        if (!NT_STATUS_IS_OK(status)) {
                                return status;
                        }
@@ -549,9 +518,9 @@ static NTSTATUS parse_object(TALLOC_CTX *mem_ctx,
        }
 
        for (; i<pwd_history_len; i++) {
-               status = add_to_keytab_entries(mem_ctx, ctx, kvno--, name, NULL,
-                               ENCTYPE_ARCFOUR_HMAC,
-                               data_blob_talloc(mem_ctx, &pwd_history[i*16], 16));
+               status = libnet_keytab_add_to_keytab_entries(mem_ctx, ctx, kvno--, name, NULL,
+                                                            ENCTYPE_ARCFOUR_HMAC,
+                                                            data_blob_talloc(mem_ctx, &pwd_history[i*16], 16));
                if (!NT_STATUS_IS_OK(status)) {
                        break;
                }