summaryrefslogtreecommitdiff
path: root/source4/rpc_server/drsuapi/getncchanges.c
diff options
context:
space:
mode:
authorAnatoliy Atanasov <anatoliy.atanasov@postpath.com>2009-09-23 15:47:14 -0700
committerAnatoliy Atanasov <anatoliy.atanasov@postpath.com>2009-09-23 15:50:51 -0700
commitc9dc6506e626611283756a0f426e23b8a456dc25 (patch)
tree1c0b5e1fab43821375231b72ffcf46d1f42d8b33 /source4/rpc_server/drsuapi/getncchanges.c
parent5925e2952c391aba48c49426a176677a9f623fc2 (diff)
downloadsamba-c9dc6506e626611283756a0f426e23b8a456dc25.tar.gz
samba-c9dc6506e626611283756a0f426e23b8a456dc25.tar.bz2
samba-c9dc6506e626611283756a0f426e23b8a456dc25.zip
s4: Handle DRSUAPI_DS_REPLICA_NEIGHBOUR_CRITICAL_ONLY req in getncchanges
Diffstat (limited to 'source4/rpc_server/drsuapi/getncchanges.c')
-rw-r--r--source4/rpc_server/drsuapi/getncchanges.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/source4/rpc_server/drsuapi/getncchanges.c b/source4/rpc_server/drsuapi/getncchanges.c
index f38f95c044..75f5651791 100644
--- a/source4/rpc_server/drsuapi/getncchanges.c
+++ b/source4/rpc_server/drsuapi/getncchanges.c
@@ -306,7 +306,8 @@ WERROR dcesrv_drsuapi_DsGetNCChanges(struct dcesrv_call_state *dce_call, TALLOC_
DATA_BLOB session_key;
const char *attrs[] = { "*", "parentGUID", "distinguishedName", NULL };
WERROR werr;
-
+ char* search_filter;
+
*r->out.level_out = 6;
/* TODO: linked attributes*/
r->out.ctr->ctr6.linked_attributes_count = 0;
@@ -355,12 +356,21 @@ WERROR dcesrv_drsuapi_DsGetNCChanges(struct dcesrv_call_state *dce_call, TALLOC_
}
/* Construct response. */
+ search_filter = talloc_asprintf(mem_ctx,
+ "(uSNChanged>=%llu)",
+ (unsigned long long)(r->in.req->req8.highwatermark.highest_usn+1));
+
+ if ((r->in.req->req8.replica_flags & DRSUAPI_DS_REPLICA_NEIGHBOUR_CRITICAL_ONLY)
+ == DRSUAPI_DS_REPLICA_NEIGHBOUR_CRITICAL_ONLY) {
+ search_filter = talloc_asprintf(mem_ctx,
+ "(&%s(isCriticalSystemObject=true))",
+ search_filter);
+ }
ncRoot_dn = ldb_dn_new(mem_ctx, sam_ctx, ncRoot->dn);
ret = drsuapi_search_with_extended_dn(sam_ctx, mem_ctx, &site_res,
ncRoot_dn, LDB_SCOPE_SUBTREE, attrs,
"distinguishedName",
- "(uSNChanged>=%llu)",
- (unsigned long long)(r->in.req->req8.highwatermark.highest_usn+1));
+ search_filter);
if (ret != LDB_SUCCESS) {
return WERR_DS_DRA_INTERNAL_ERROR;
}