s4:dsdb Fix linked_attributes to cope with the Feb 2010 changes to DLIST
authorAndrew Bartlett <abartlet@samba.org>
Tue, 15 Jun 2010 12:57:14 +0000 (22:57 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Tue, 15 Jun 2010 23:57:52 +0000 (09:57 +1000)
The DLIST macros changed in behaviour in Feb 2010, and walking the
lists backwards is no longer safe if you don't use the macros.

Andrew Bartlett

source4/dsdb/samdb/ldb_modules/linked_attributes.c

index 4f36509a85567e6ce1abb320e0c398e259b7e76b..d2a435ef507d490d7776b6a8832a39b9a615dcf3 100644 (file)
@@ -1039,9 +1039,13 @@ static int linked_attributes_prepare_commit(struct ldb_module *module)
        /* walk the list backwards, to do the first entry first, as we
         * added the entries with DLIST_ADD() which puts them at the
         * start of the list */
-       for (ac = la_private->la_list; ac && ac->next; ac=ac->next) ;
 
-       for (; ac; ac=ac->prev) {
+       /* Start at the end of the list - so we can start
+        * there, but ensure we don't create a loop by NULLing
+        * it out in the first element */
+       ac = DLIST_TAIL(la_private->la_list);
+
+       for (; ac; ac=DLIST_PREV(ac)) {
                int ret;
                ac->req = NULL;
                ret = la_do_mod_request(module, ac);