s4/libnet: Vampire should join us as a Domain Controller
[kamenim/samba.git] / source4 / libnet / libnet_vampire.c
index 37a9d7e72dee18eb467170bf0c7bc39de7ff124b..aa1ea163c7d44d87c5b66aeef74ea8775353252c 100644 (file)
@@ -94,7 +94,7 @@ static NTSTATUS vampire_prepare_db(void *private_data,
        settings.realm = s->join->out.realm;
        settings.domain = s->join->out.domain_name;
        settings.server_dn_str = p->dest_dsa->server_dn_str;
-       settings.machine_password = generate_random_str(s, 16);
+       settings.machine_password = generate_random_password(s, 16, 255);
        settings.targetdir = s->targetdir;
 
        status = provision_bare(s, s->lp_ctx, &settings, &result);
@@ -205,9 +205,9 @@ static NTSTATUS vampire_apply_schema(struct vampire_state *s,
                return NT_STATUS_INVALID_PARAMETER;
        }
 
-       s_dsa->replica_flags            = DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE
-                                       | DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP
-                                       | DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS;
+       s_dsa->replica_flags            = DRSUAPI_DRS_WRIT_REP
+                                       | DRSUAPI_DRS_INIT_SYNC
+                                       | DRSUAPI_DRS_PER_SYNC;
        memset(s_dsa->schedule, 0x11, sizeof(s_dsa->schedule));
 
        tmp_dns_name    = GUID_string(s_dsa->other_info, &s_dsa->source_dsa_obj_guid);
@@ -366,7 +366,7 @@ static NTSTATUS vampire_apply_schema(struct vampire_state *s,
                return NT_STATUS_FOOBAR;
        }
 
-       s->schema = dsdb_get_schema(s->ldb);
+       s->schema = dsdb_get_schema(s->ldb, s);
        if (!s->schema) {
                DEBUG(0,("Failed to get loaded dsdb_schema\n"));
                return NT_STATUS_FOOBAR;
@@ -512,9 +512,9 @@ static NTSTATUS vampire_store_chunk(void *private_data,
                return NT_STATUS_INVALID_PARAMETER;
        }
 
-       s_dsa->replica_flags            = DRSUAPI_DS_REPLICA_NEIGHBOUR_WRITEABLE
-                                       | DRSUAPI_DS_REPLICA_NEIGHBOUR_SYNC_ON_STARTUP
-                                       | DRSUAPI_DS_REPLICA_NEIGHBOUR_DO_SCHEDULED_SYNCS;
+       s_dsa->replica_flags            = DRSUAPI_DRS_WRIT_REP
+                                       | DRSUAPI_DRS_INIT_SYNC
+                                       | DRSUAPI_DRS_PER_SYNC;
        memset(s_dsa->schedule, 0x11, sizeof(s_dsa->schedule));
 
        tmp_dns_name    = GUID_string(s_dsa->other_info, &s_dsa->source_dsa_obj_guid);
@@ -659,7 +659,7 @@ NTSTATUS libnet_Vampire(struct libnet_context *ctx, TALLOC_CTX *mem_ctx,
        join->in.account_name   = account_name;
        join->in.netbios_name   = netbios_name;
        join->in.level          = LIBNET_JOINDOMAIN_AUTOMATIC;
-       join->in.acct_type      = ACB_WSTRUST;
+       join->in.acct_type      = ACB_SVRTRUST;
        join->in.recreate_account = false;
        status = libnet_JoinDomain(ctx, join, join);
        if (!NT_STATUS_IS_OK(status)) {
@@ -686,6 +686,8 @@ NTSTATUS libnet_Vampire(struct libnet_context *ctx, TALLOC_CTX *mem_ctx,
        b.in.callbacks.config_chunk     = vampire_store_chunk;
        b.in.callbacks.domain_chunk     = vampire_store_chunk;
 
+       b.in.rodc_join = lp_parm_bool(s->lp_ctx, NULL, "repl", "RODC", false);
+
        status = libnet_BecomeDC(ctx, s, &b);
        if (!NT_STATUS_IS_OK(status)) {
                printf("libnet_BecomeDC() failed - %s\n", nt_errstr(status));
@@ -758,8 +760,8 @@ NTSTATUS libnet_Vampire(struct libnet_context *ctx, TALLOC_CTX *mem_ctx,
                return status;
        }
 
-       r->out.domain_name = talloc_steal(r, join->out.domain_name);
-       r->out.domain_sid = dom_sid_dup(r, join->out.domain_sid);
+       r->out.domain_name = talloc_steal(mem_ctx, join->out.domain_name);
+       r->out.domain_sid = dom_sid_dup(mem_ctx, join->out.domain_sid);
        
        /* commit the transaction now we know the secrets were written
         * out properly