s4-kcc: remove stale repsFrom entries in kcc run
authorAndrew Tridgell <tridge@samba.org>
Mon, 28 Sep 2009 03:10:13 +0000 (13:10 +1000)
committerAndrew Tridgell <tridge@samba.org>
Mon, 28 Sep 2009 03:11:25 +0000 (13:11 +1000)
source4/dsdb/kcc/kcc_periodic.c

index dae0c1e2358c4b4eb9fe790aa90f2c08fe212891..dfbbf2404b93dd54712b3266ddf4b3d3f795417d 100644 (file)
@@ -75,6 +75,7 @@ static NTSTATUS kccsrv_add_repsFrom(struct kccsrv_service *s, TALLOC_CTX *mem_ct
                        return NT_STATUS_INTERNAL_DB_CORRUPTION;
                }
 
+               /* add any new ones */
                for (i=0; i<count; i++) {
                        if (!reps_in_list(&reps[i], old_reps, old_count)) {
                                old_reps = talloc_realloc(mem_ctx, old_reps, struct repsFromToBlob, old_count+1);
@@ -84,6 +85,16 @@ static NTSTATUS kccsrv_add_repsFrom(struct kccsrv_service *s, TALLOC_CTX *mem_ct
                                modified = true;
                        }
                }
+
+               /* remove any stale ones */
+               for (i=0; i<old_count; i++) {
+                       if (!reps_in_list(&old_reps[i], reps, count)) {
+                               memmove(&old_reps[i], &old_reps[i+1], (old_count-(i+1))*sizeof(old_reps[0]));
+                               old_count--;
+                               i--;
+                               modified = true;
+                       }
+               }
                
                if (modified) {
                        werr = dsdb_savereps(s->samdb, mem_ctx, p->dn, "repsFrom", old_reps, old_count);