Merge branch 'master' of ssh://git.samba.org/data/git/samba into regsrv
[tprouty/samba.git] / source3 / libnet / libnet_samsync_keytab.c
index bfb3a58ce2a5afdc16f4a5f7ba13ace739449d6b..9e666ced3232032908689aea3c09e5142f093a78 100644 (file)
@@ -93,6 +93,7 @@ static NTSTATUS fetch_sam_entry_keytab(TALLOC_CTX *mem_ctx,
                                          ctx->dns_domain_name);
        entry.password = data_blob_talloc(mem_ctx, nt_passwd, 16);
        entry.kvno = ads_get_kvno(ctx->ads, entry.name);
+       entry.enctype = ENCTYPE_NULL;
 
        NT_STATUS_HAVE_NO_MEMORY(entry.name);
        NT_STATUS_HAVE_NO_MEMORY(entry.principal);
@@ -116,13 +117,16 @@ NTSTATUS fetch_sam_entries_keytab(TALLOC_CTX *mem_ctx,
 {
        NTSTATUS status = NT_STATUS_OK;
        krb5_error_code ret = 0;
-       struct libnet_keytab_context *keytab_ctx = NULL;
+       static struct libnet_keytab_context *keytab_ctx = NULL;
        int i;
 
-       ret = libnet_keytab_init(mem_ctx, ctx->output_filename, &keytab_ctx);
-       if (ret) {
-               status = krb5_to_nt_status(ret);
-               goto out;
+       if (!keytab_ctx) {
+               ret = libnet_keytab_init(mem_ctx, ctx->output_filename,
+                                        &keytab_ctx);
+               if (ret) {
+                       status = krb5_to_nt_status(ret);
+                       goto out;
+               }
        }
 
        status = keytab_ad_connect(mem_ctx,
@@ -150,20 +154,22 @@ NTSTATUS fetch_sam_entries_keytab(TALLOC_CTX *mem_ctx,
                }
        }
 
-       ret = libnet_keytab_add(keytab_ctx);
-       if (ret) {
-               status = krb5_to_nt_status(ret);
-               ctx->error_message = talloc_asprintf(mem_ctx,
-                       "Failed to add entries to keytab %s: %s",
-                       keytab_ctx->keytab_name, error_message(ret));
-               goto out;
-       }
-
        if (last_query) {
+
+               ret = libnet_keytab_add(keytab_ctx);
+               if (ret) {
+                       status = krb5_to_nt_status(ret);
+                       ctx->error_message = talloc_asprintf(mem_ctx,
+                               "Failed to add entries to keytab %s: %s",
+                               keytab_ctx->keytab_name, error_message(ret));
+                       goto out;
+               }
+
                ctx->result_message = talloc_asprintf(mem_ctx,
                        "Vampired %d accounts to keytab %s",
                        keytab_ctx->count,
                        keytab_ctx->keytab_name);
+
                TALLOC_FREE(keytab_ctx);
        }