mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
s4-drs: use dsdb_load_udv_v2() in getncchanges code
This commit is contained in:
parent
09d947f77c
commit
0bba44094a
@ -412,49 +412,6 @@ static WERROR get_nc_changes_add_links(struct ldb_context *sam_ctx,
|
||||
return WERR_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
load replUpToDateVector from a DN
|
||||
*/
|
||||
static WERROR load_udv(struct ldb_context *sam_ctx, TALLOC_CTX *mem_ctx,
|
||||
struct ldb_dn *dn, struct replUpToDateVectorBlob *ouv)
|
||||
{
|
||||
const char *attrs[] = { "replUpToDateVector", NULL };
|
||||
struct ldb_result *res = NULL;
|
||||
TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx);
|
||||
struct ldb_message_element *el;
|
||||
enum ndr_err_code ndr_err;
|
||||
|
||||
ZERO_STRUCTP(ouv);
|
||||
|
||||
if (ldb_search(sam_ctx, tmp_ctx, &res, dn, LDB_SCOPE_BASE, attrs, NULL) != LDB_SUCCESS ||
|
||||
res->count < 1) {
|
||||
DEBUG(0,("load_udv: failed to read partition object\n"));
|
||||
talloc_free(tmp_ctx);
|
||||
return WERR_DS_DRA_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
el = ldb_msg_find_element(res->msgs[0], "replUpToDateVector");
|
||||
if (el == NULL || el->num_values < 1) {
|
||||
talloc_free(tmp_ctx);
|
||||
ouv->version = 2;
|
||||
return WERR_OK;
|
||||
}
|
||||
|
||||
ndr_err = ndr_pull_struct_blob(&el->values[0],
|
||||
mem_ctx, lp_iconv_convenience(ldb_get_opaque(sam_ctx, "loadparm")),
|
||||
ouv,
|
||||
(ndr_pull_flags_fn_t)ndr_pull_replUpToDateVectorBlob);
|
||||
talloc_free(tmp_ctx);
|
||||
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
|
||||
DEBUG(0,(__location__ ": Failed to parse replUpToDateVector for %s\n",
|
||||
ldb_dn_get_linearized(dn)));
|
||||
return WERR_DS_DRA_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
return WERR_OK;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
fill in the cursors return based on the replUpToDateVector for the ncRoot_dn
|
||||
*/
|
||||
@ -463,20 +420,20 @@ static WERROR get_nc_changes_udv(struct ldb_context *sam_ctx,
|
||||
struct drsuapi_DsReplicaCursor2CtrEx *udv,
|
||||
uint64_t highestUSN)
|
||||
{
|
||||
WERROR werr;
|
||||
struct drsuapi_DsReplicaCursor2 *tmp_cursor;
|
||||
NTTIME now;
|
||||
time_t t = time(NULL);
|
||||
struct replUpToDateVectorBlob ouv;
|
||||
int i;
|
||||
int i, ret;
|
||||
|
||||
udv->version = 2;
|
||||
udv->reserved1 = 0;
|
||||
udv->reserved2 = 0;
|
||||
|
||||
werr = load_udv(sam_ctx, udv, ncRoot_dn, &ouv);
|
||||
if (!W_ERROR_IS_OK(werr)) {
|
||||
return werr;
|
||||
ret = dsdb_load_udv_v2(sam_ctx, ncRoot_dn, udv, &udv->cursors, &udv->count);
|
||||
if (ret != LDB_SUCCESS) {
|
||||
DEBUG(0,(__location__ ": Failed to load UDV for %s - %s\n",
|
||||
ldb_dn_get_linearized(ncRoot_dn), ldb_errstring(sam_ctx)));
|
||||
return WERR_DS_DRA_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
tmp_cursor = talloc(udv, struct drsuapi_DsReplicaCursor2);
|
||||
@ -485,9 +442,6 @@ static WERROR get_nc_changes_udv(struct ldb_context *sam_ctx,
|
||||
unix_to_nt_time(&now, t);
|
||||
tmp_cursor->last_sync_success = now;
|
||||
|
||||
udv->count = ouv.ctr.ctr2.count;
|
||||
udv->cursors = talloc_steal(udv, ouv.ctr.ctr2.cursors);
|
||||
|
||||
for (i=0; i<udv->count; i++) {
|
||||
if (GUID_equal(&tmp_cursor->source_dsa_invocation_id,
|
||||
&udv->cursors[i].source_dsa_invocation_id)) {
|
||||
|
Loading…
Reference in New Issue
Block a user