s4:drepl_out_helpers: don't return NT_STATUS_OK, if an extended operation doesn't...
authorStefan Metzmacher <metze@samba.org>
Thu, 8 Jul 2010 14:18:21 +0000 (16:18 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 9 Jul 2010 07:27:16 +0000 (09:27 +0200)
metze

source4/dsdb/repl/drepl_out_helpers.c

index 56e12579876892a12263e50e1e1f910aa981037d..d8e5b76fb79ee45e25f15ddb8b2a605b0ae70a86 100644 (file)
@@ -365,7 +365,7 @@ static void dreplsrv_op_pull_source_get_changes_done(struct tevent_req *subreq)
        uint32_t ctr_level = 0;
        struct drsuapi_DsGetNCChangesCtr1 *ctr1 = NULL;
        struct drsuapi_DsGetNCChangesCtr6 *ctr6 = NULL;
-
+       enum drsuapi_DsExtendedError extended_ret;
        state->ndr_struct_ptr = NULL;
 
        status = dcerpc_drsuapi_DsGetNCChanges_r_recv(subreq, r);
@@ -420,6 +420,19 @@ static void dreplsrv_op_pull_source_get_changes_done(struct tevent_req *subreq)
                        tevent_req_nterror(req, status);
                        return;
                }
+               extended_ret = ctr6->extended_ret;
+       }
+
+       if (ctr_level == 1) {
+               extended_ret = ctr1->extended_ret;
+       }
+
+       if (state->op->extended_op != DRSUAPI_EXOP_NONE) {
+               if (extended_ret != DRSUAPI_EXOP_ERR_SUCCESS) {
+                       status = NT_STATUS_UNSUCCESSFUL;
+                       tevent_req_nterror(req, status);
+                       return;
+               }
        }
 
        dreplsrv_op_pull_source_apply_changes_trigger(req, r, ctr_level, ctr1, ctr6);