From 9f031352c6e9439922284fc853611964b33ea4af Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 2 Sep 2009 18:18:33 +1000 Subject: traverse the ac list in reverse order items are added to the linked attribute list using DLIST_ADD(), which means to commit them to the database in the same order they came from the server we need to walk the list backwards when we traverse it --- source4/dsdb/samdb/ldb_modules/linked_attributes.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'source4/dsdb') diff --git a/source4/dsdb/samdb/ldb_modules/linked_attributes.c b/source4/dsdb/samdb/ldb_modules/linked_attributes.c index 561fc66941..3486b7f229 100644 --- a/source4/dsdb/samdb/ldb_modules/linked_attributes.c +++ b/source4/dsdb/samdb/ldb_modules/linked_attributes.c @@ -1243,7 +1243,12 @@ static int linked_attributes_end_transaction(struct ldb_module *module) talloc_get_type(ldb_module_get_private(module), struct la_private); struct la_context *ac; - for (ac=la_private->la_list; ac; ac=ac->next) { + /* 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) { int ret; ac->req = NULL; ret = la_do_mod_request(module, ac); -- cgit