Windows dcpromo do the same: getncchanges with DRS_GET_ANC and
DRS_CRITICAL_ONLY, then it does a getncchanges without those flags for
the rest.
Signed-off-by: Andrew Tridgell <tridge@samba.org>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
struct libnet_BecomeDC_Callbacks callbacks;
bool rodc_join;
struct libnet_BecomeDC_Callbacks callbacks;
bool rodc_join;
};
static int32_t get_dc_function_level(struct loadparm_context *lp_ctx)
};
static int32_t get_dc_function_level(struct loadparm_context *lp_ctx)
| DRSUAPI_DRS_FULL_SYNC_IN_PROGRESS
| DRSUAPI_DRS_NEVER_SYNCED
| DRSUAPI_DRS_USE_COMPRESSION;
| DRSUAPI_DRS_FULL_SYNC_IN_PROGRESS
| DRSUAPI_DRS_NEVER_SYNCED
| DRSUAPI_DRS_USE_COMPRESSION;
+ if (s->critical_only) {
+ s->domain_part.replica_flags |= DRSUAPI_DRS_CRITICAL_ONLY | DRSUAPI_DRS_GET_ANC;
+ }
if (s->rodc_join) {
s->schema_part.replica_flags &= ~DRSUAPI_DRS_WRIT_REP;
}
if (s->rodc_join) {
s->schema_part.replica_flags &= ~DRSUAPI_DRS_WRIT_REP;
}
+ if (s->critical_only) {
+ /* Remove the critical and ANC */
+ s->domain_part.replica_flags ^= DRSUAPI_DRS_CRITICAL_ONLY | DRSUAPI_DRS_GET_ANC;
+ s->critical_only = false;
+ becomeDC_drsuapi_pull_partition_send(s, &s->drsuapi2, &s->drsuapi3, &s->domain_part,
+ becomeDC_drsuapi3_pull_domain_recv);
+ return;
+ }
becomeDC_drsuapi_update_refs_send(s, &s->drsuapi2, &s->schema_part,
becomeDC_drsuapi2_update_refs_schema_recv);
}
becomeDC_drsuapi_update_refs_send(s, &s->drsuapi2, &s->schema_part,
becomeDC_drsuapi2_update_refs_schema_recv);
}
c->status = becomeDC_ldap2_move_computer(s);
if (!composite_is_ok(c)) return;
c->status = becomeDC_ldap2_move_computer(s);
if (!composite_is_ok(c)) return;
+ s->critical_only = true;
becomeDC_drsuapi3_pull_domain_send(s);
}
becomeDC_drsuapi3_pull_domain_send(s);
}