]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
libnet_dssync: add last_query flag to processing routine.
authorGünther Deschner <gd@samba.org>
Thu, 26 Jun 2008 23:41:26 +0000 (01:41 +0200)
committerGünther Deschner <gd@samba.org>
Fri, 27 Jun 2008 00:01:15 +0000 (02:01 +0200)
Guenther

source/libnet/libnet_dssync.c
source/libnet/libnet_dssync.h

index b596da816a3a96c918490dfef64593c72d8204df..87d5e8aadedf4f2a6dde14886fdf69dc0da8ba55 100644 (file)
@@ -366,6 +366,8 @@ static NTSTATUS libnet_dssync_process(TALLOC_CTX *mem_ctx,
 
        for (y=0; ;y++) {
 
+               bool last_query = true;
+
                if (level == 8) {
                        DEBUG(1,("start[%d] tmp_higest_usn: %llu , highest_usn: %llu\n",y,
                                (long long)req.req8.highwatermark.tmp_highest_usn,
@@ -416,10 +418,16 @@ static NTSTATUS libnet_dssync_process(TALLOC_CTX *mem_ctx,
                                                         &ctx->session_key,
                                                         ctr1->first_object);
 
+                       if (ctr1->new_highwatermark.tmp_highest_usn > ctr1->new_highwatermark.highest_usn) {
+                               req.req5.highwatermark = ctr1->new_highwatermark;
+                               last_query = false;
+                       }
+
                        if (ctx->processing_fn) {
                                status = ctx->processing_fn(mem_ctx,
                                                            ctr1->first_object,
                                                            &ctr1->mapping_ctr,
+                                                           last_query,
                                                            ctx);
                                if (!NT_STATUS_IS_OK(status)) {
                                        ctx->error_message = talloc_asprintf(mem_ctx,
@@ -429,8 +437,7 @@ static NTSTATUS libnet_dssync_process(TALLOC_CTX *mem_ctx,
                                }
                        }
 
-                       if (ctr1->new_highwatermark.tmp_highest_usn > ctr1->new_highwatermark.highest_usn) {
-                               req.req5.highwatermark = ctr1->new_highwatermark;
+                       if (!last_query) {
                                continue;
                        }
                }
@@ -454,10 +461,16 @@ static NTSTATUS libnet_dssync_process(TALLOC_CTX *mem_ctx,
                                                         &ctx->session_key,
                                                         ctr6->first_object);
 
+                       if (ctr6->new_highwatermark.tmp_highest_usn > ctr6->new_highwatermark.highest_usn) {
+                               req.req8.highwatermark = ctr6->new_highwatermark;
+                               last_query = false;
+                       }
+
                        if (ctx->processing_fn) {
                                status = ctx->processing_fn(mem_ctx,
                                                            ctr6->first_object,
                                                            &ctr6->mapping_ctr,
+                                                           last_query,
                                                            ctx);
                                if (!NT_STATUS_IS_OK(status)) {
                                        ctx->error_message = talloc_asprintf(mem_ctx,
@@ -467,8 +480,7 @@ static NTSTATUS libnet_dssync_process(TALLOC_CTX *mem_ctx,
                                }
                        }
 
-                       if (ctr6->new_highwatermark.tmp_highest_usn > ctr6->new_highwatermark.highest_usn) {
-                               req.req8.highwatermark = ctr6->new_highwatermark;
+                       if (!last_query) {
                                continue;
                        }
                }
index 0705996976e59ea859c11850342f5f0880fdb6b4..6a56566c19cde6b80ac00d130ac55362524b3c33 100644 (file)
@@ -22,6 +22,7 @@ struct dssync_context;
 typedef NTSTATUS (*dssync_processing_fn_t)(TALLOC_CTX *,
                                           struct drsuapi_DsReplicaObjectListItemEx *,
                                           struct drsuapi_DsReplicaOIDMapping_Ctr *,
+                                          bool,
                                           struct dssync_context *ctx);
 
 struct dssync_context {