The branch, master has been updated
       via  7320f19 ldb: new ABI sigs file
       via  8794e6d s4-dsdb: replaced the calls to ldb_search() in dsdb modules 
with dsdb_module_search()
       via  87f3151 s4-dsdb: pass parent request to dsdb_module_*() functions
       via  633c3e8 ldb: added ldb_req_mark_trusted()
       via  f334cd2 ldb: inherit parent flags on child requests in modules
      from  e665fce web_server: Display trivial placeholder page if SWAT could 
not be found.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 7320f1988cd937ed27b6612dec742798d8c41501
Author: Andrew Tridgell <tri...@samba.org>
Date:   Mon Jan 17 15:24:52 2011 +1100

    ldb: new ABI sigs file
    
    Autobuild-User: Andrew Tridgell <tri...@samba.org>
    Autobuild-Date: Mon Jan 17 06:09:23 CET 2011 on sn-devel-104

commit 8794e6dad906b9cc1eefbe03665a0035b91ac199
Author: Andrew Tridgell <tri...@samba.org>
Date:   Mon Jan 17 13:39:46 2011 +1100

    s4-dsdb: replaced the calls to ldb_search() in dsdb modules with 
dsdb_module_search()
    
    this ensures we follow the module stack, and set the parent on child
    requests

commit 87f31510475c6debd56ff874130f4f5d48bef9a5
Author: Andrew Tridgell <tri...@samba.org>
Date:   Mon Jan 17 13:12:15 2011 +1100

    s4-dsdb: pass parent request to dsdb_module_*() functions
    
    this preserves the request hierarchy for dsdb_module_*() calls inside
    dsdb ldb modules
    
    Pair-Programmed-With: Andrew Bartlett <abart...@samba.org>

commit 633c3e8da5a3a5ee1b61f9045c7dedb39bbb668a
Author: Andrew Tridgell <tri...@samba.org>
Date:   Mon Jan 17 13:11:08 2011 +1100

    ldb: added ldb_req_mark_trusted()
    
    this is used to mark a ldb child request trusted, if the caller has
    validated all inputs. This will be used when creating new child
    requests with trusted inputs.
    
    Pair-Programmed-With: Andrew Bartlett <abart...@samba.org>

commit f334cd22101b7ce32b3382fc4d048eadd7385f2e
Author: Matthias Dieter Wallnöfer <m...@samba.org>
Date:   Mon Jan 17 11:42:35 2011 +1100

    ldb: inherit parent flags on child requests in modules

-----------------------------------------------------------------------

Summary of changes:
 source4/dsdb/samdb/ldb_modules/acl.c               |   25 ++--
 source4/dsdb/samdb/ldb_modules/acl_read.c          |    6 +-
 source4/dsdb/samdb/ldb_modules/acl_util.c          |   10 +-
 source4/dsdb/samdb/ldb_modules/descriptor.c        |    4 +-
 source4/dsdb/samdb/ldb_modules/linked_attributes.c |   13 +-
 source4/dsdb/samdb/ldb_modules/naming_fsmo.c       |    2 +-
 source4/dsdb/samdb/ldb_modules/objectclass.c       |    8 +-
 source4/dsdb/samdb/ldb_modules/operational.c       |   50 +++++---
 source4/dsdb/samdb/ldb_modules/partition.c         |    6 +-
 source4/dsdb/samdb/ldb_modules/partition_init.c    |   17 ++-
 source4/dsdb/samdb/ldb_modules/password_hash.c     |    4 +-
 source4/dsdb/samdb/ldb_modules/pdc_fsmo.c          |    2 +-
 source4/dsdb/samdb/ldb_modules/repl_meta_data.c    |  101 +++++++++--------
 source4/dsdb/samdb/ldb_modules/ridalloc.c          |   65 ++++++-----
 source4/dsdb/samdb/ldb_modules/rootdse.c           |   48 ++++----
 source4/dsdb/samdb/ldb_modules/samba3sid.c         |    8 +-
 source4/dsdb/samdb/ldb_modules/samba_dsdb.c        |    8 +-
 source4/dsdb/samdb/ldb_modules/samldb.c            |   63 ++++++----
 source4/dsdb/samdb/ldb_modules/schema.c            |    3 +-
 source4/dsdb/samdb/ldb_modules/schema_load.c       |    8 +-
 source4/dsdb/samdb/ldb_modules/schema_util.c       |   27 +++--
 source4/dsdb/samdb/ldb_modules/subtree_delete.c    |    3 +-
 source4/dsdb/samdb/ldb_modules/update_keytab.c     |   13 ++-
 source4/dsdb/samdb/ldb_modules/util.c              |  122 +++++++++++++------
 source4/dsdb/samdb/ldb_modules/util.h              |    2 +-
 source4/dsdb/samdb/ldb_modules/wscript_build       |    2 +-
 .../ldb/ABI/{ldb-0.9.23.sigs => ldb-0.9.24.sigs}   |    1 +
 source4/lib/ldb/common/ldb.c                       |   19 +++
 source4/lib/ldb/include/ldb_module.h               |    5 +
 source4/lib/ldb/wscript                            |    2 +-
 source4/torture/drs/unit/schemainfo_tests.c        |    8 +-
 31 files changed, 393 insertions(+), 262 deletions(-)
 copy source4/lib/ldb/ABI/{ldb-0.9.23.sigs => ldb-0.9.24.sigs} (99%)


Changeset truncated at 500 lines:

diff --git a/source4/dsdb/samdb/ldb_modules/acl.c 
b/source4/dsdb/samdb/ldb_modules/acl.c
index 00dc565..2db4de5 100644
--- a/source4/dsdb/samdb/ldb_modules/acl.c
+++ b/source4/dsdb/samdb/ldb_modules/acl.c
@@ -107,7 +107,7 @@ static int acl_module_init(struct ldb_module *module)
        ret = dsdb_module_search_dn(module, mem_ctx, &res,
                                    ldb_dn_new(mem_ctx, ldb, "@KLUDGEACL"),
                                    attrs,
-                                   DSDB_FLAG_NEXT_MODULE);
+                                   DSDB_FLAG_NEXT_MODULE, NULL);
        if (ret != LDB_SUCCESS) {
                goto done;
        }
@@ -591,7 +591,7 @@ static int acl_check_spn(TALLOC_CTX *mem_ctx,
                                    &acl_res, req->op.mod.message->dn,
                                    acl_attrs,
                                    DSDB_FLAG_NEXT_MODULE |
-                                   DSDB_SEARCH_SHOW_DELETED);
+                                   DSDB_SEARCH_SHOW_DELETED, req);
        if (ret != LDB_SUCCESS) {
                talloc_free(tmp_ctx);
                return ret;
@@ -606,6 +606,7 @@ static int acl_check_spn(TALLOC_CTX *mem_ctx,
                                 LDB_SCOPE_ONELEVEL,
                                 netbios_attrs,
                                 DSDB_FLAG_NEXT_MODULE,
+                                req,
                                 "(ncName=%s)",
                                 
ldb_dn_get_linearized(ldb_get_default_basedn(ldb)));
 
@@ -686,7 +687,7 @@ static int acl_add(struct ldb_module *module, struct 
ldb_request *req)
 
        guid = class_schemaid_guid_by_lDAPDisplayName(schema,
                                                      (char 
*)oc_el->values[oc_el->num_values-1].data);
-       ret = dsdb_module_check_access_on_dn(module, req, parent, 
SEC_ADS_CREATE_CHILD, guid);
+       ret = dsdb_module_check_access_on_dn(module, req, parent, 
SEC_ADS_CREATE_CHILD, guid, req);
        if (ret != LDB_SUCCESS) {
                return ret;
        }
@@ -850,7 +851,7 @@ static int acl_modify(struct ldb_module *module, struct 
ldb_request *req)
        struct security_descriptor *sd;
        struct dom_sid *sid = NULL;
        struct ldb_control *as_system = ldb_request_get_control(req, 
LDB_CONTROL_AS_SYSTEM_OID);
-       bool userPassword = dsdb_user_password_support(module, req);
+       bool userPassword = dsdb_user_password_support(module, req, req);
        TALLOC_CTX *tmp_ctx = talloc_new(req);
        static const char *acl_attrs[] = {
                "nTSecurityDescriptor",
@@ -876,7 +877,7 @@ static int acl_modify(struct ldb_module *module, struct 
ldb_request *req)
        }
        ret = dsdb_module_search_dn(module, tmp_ctx, &acl_res, 
req->op.mod.message->dn,
                                    acl_attrs,
-                                   DSDB_FLAG_NEXT_MODULE);
+                                   DSDB_FLAG_NEXT_MODULE, req);
 
        if (ret != LDB_SUCCESS) {
                goto fail;
@@ -1075,7 +1076,7 @@ static int acl_delete(struct ldb_module *module, struct 
ldb_request *req)
 
        /* First check if we have delete object right */
        ret = dsdb_module_check_access_on_dn(module, req, req->op.del.dn,
-                                            SEC_STD_DELETE, NULL);
+                                            SEC_STD_DELETE, NULL, req);
        if (ret == LDB_SUCCESS) {
                return ldb_next_request(module, req);
        }
@@ -1083,7 +1084,7 @@ static int acl_delete(struct ldb_module *module, struct 
ldb_request *req)
        /* Nope, we don't have delete object. Lets check if we have delete
         * child on the parent */
        ret = dsdb_module_check_access_on_dn(module, req, parent,
-                                            SEC_ADS_DELETE_CHILD, NULL);
+                                            SEC_ADS_DELETE_CHILD, NULL, req);
        if (ret != LDB_SUCCESS) {
                return ret;
        }
@@ -1151,7 +1152,7 @@ static int acl_rename(struct ldb_module *module, struct 
ldb_request *req)
        ret = dsdb_module_search_dn(module, tmp_ctx, &acl_res,
                                    req->op.rename.olddn, acl_attrs,
                                    DSDB_FLAG_NEXT_MODULE |
-                                   DSDB_SEARCH_SHOW_RECYCLED);
+                                   DSDB_SEARCH_SHOW_RECYCLED, req);
        /* we sould be able to find the parent */
        if (ret != LDB_SUCCESS) {
                DEBUG(10,("acl: failed to find object %s\n",
@@ -1240,7 +1241,7 @@ static int acl_rename(struct ldb_module *module, struct 
ldb_request *req)
                return ldb_module_done(req, NULL, NULL,  
LDB_ERR_OPERATIONS_ERROR);
        }
 
-       ret = dsdb_module_check_access_on_dn(module, req, newparent, 
SEC_ADS_CREATE_CHILD, guid);
+       ret = dsdb_module_check_access_on_dn(module, req, newparent, 
SEC_ADS_CREATE_CHILD, guid, req);
        if (ret != LDB_SUCCESS) {
                DEBUG(10,("acl:access_denied renaming %s", 
ldb_dn_get_linearized(req->op.rename.olddn)));
                talloc_free(tmp_ctx);
@@ -1259,7 +1260,7 @@ static int acl_rename(struct ldb_module *module, struct 
ldb_request *req)
                return ldb_next_request(module, req);
        }
        /* what about delete child on the current parent */
-       ret = dsdb_module_check_access_on_dn(module, req, oldparent, 
SEC_ADS_DELETE_CHILD, NULL);
+       ret = dsdb_module_check_access_on_dn(module, req, oldparent, 
SEC_ADS_DELETE_CHILD, NULL, req);
        if (ret != LDB_SUCCESS) {
                DEBUG(10,("acl:access_denied renaming %s", 
ldb_dn_get_linearized(req->op.rename.olddn)));
                talloc_free(tmp_ctx);
@@ -1308,7 +1309,7 @@ static int acl_search_callback(struct ldb_request *req, 
struct ldb_reply *ares)
                    || ac->sDRightsEffective) {
                        ret = dsdb_module_search_dn(ac->module, ac, &acl_res, 
ares->message->dn, 
                                                    acl_attrs,
-                                                   DSDB_FLAG_NEXT_MODULE);
+                                                   DSDB_FLAG_NEXT_MODULE, req);
                        if (ret != LDB_SUCCESS) {
                                return ldb_module_done(ac->req, NULL, NULL, 
ret);
                        }
@@ -1390,7 +1391,7 @@ static int acl_search(struct ldb_module *module, struct 
ldb_request *req)
        ac->allowedChildClasses = ldb_attr_in_list(req->op.search.attrs, 
"allowedChildClasses");
        ac->allowedChildClassesEffective = 
ldb_attr_in_list(req->op.search.attrs, "allowedChildClassesEffective");
        ac->sDRightsEffective = ldb_attr_in_list(req->op.search.attrs, 
"sDRightsEffective");
-       ac->userPassword = dsdb_user_password_support(module, ac);
+       ac->userPassword = dsdb_user_password_support(module, ac, req);
        ac->schema = dsdb_get_schema(ldb, ac);
 
        /* replace any attributes in the parse tree that are private,
diff --git a/source4/dsdb/samdb/ldb_modules/acl_read.c 
b/source4/dsdb/samdb/ldb_modules/acl_read.c
index 27cc1e7..4ed057c 100644
--- a/source4/dsdb/samdb/ldb_modules/acl_read.c
+++ b/source4/dsdb/samdb/ldb_modules/acl_read.c
@@ -105,7 +105,7 @@ static int aclread_callback(struct ldb_request *req, struct 
ldb_reply *ares)
                                                             tmp_ctx,
                                                             parent_dn,
                                                             SEC_ADS_LIST,
-                                                            NULL);
+                                                            NULL, req);
                        if (ret == LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS) {
                                talloc_free(tmp_ctx);
                                return LDB_SUCCESS;
@@ -253,7 +253,7 @@ static int aclread_search(struct ldb_module *module, struct 
ldb_request *req)
                ret = dsdb_module_search_dn(module, req, &res, 
req->op.search.base,
                                            acl_attrs,
                                            DSDB_FLAG_NEXT_MODULE |
-                                           DSDB_SEARCH_SHOW_DELETED);
+                                           DSDB_SEARCH_SHOW_DELETED, req);
                if (ret != LDB_SUCCESS) {
                        return ldb_error(ldb, ret,
                                         "acl_read: Error retrieving 
instanceType for base.");
@@ -268,7 +268,7 @@ static int aclread_search(struct ldb_module *module, struct 
ldb_request *req)
                                                             req,
                                                             parent_dn,
                                                             SEC_ADS_LIST,
-                                                            NULL);
+                                                            NULL, req);
                        if (ret == LDB_ERR_INSUFFICIENT_ACCESS_RIGHTS) {
                                return ldb_module_done(req, NULL, NULL, 
LDB_ERR_NO_SUCH_OBJECT);
                        } else if (ret != LDB_SUCCESS) {
diff --git a/source4/dsdb/samdb/ldb_modules/acl_util.c 
b/source4/dsdb/samdb/ldb_modules/acl_util.c
index 1fb8b9a..a7bc331 100644
--- a/source4/dsdb/samdb/ldb_modules/acl_util.c
+++ b/source4/dsdb/samdb/ldb_modules/acl_util.c
@@ -55,7 +55,8 @@ int dsdb_module_check_access_on_dn(struct ldb_module *module,
                                   TALLOC_CTX *mem_ctx,
                                   struct ldb_dn *dn,
                                   uint32_t access_mask,
-                                  const struct GUID *guid)
+                                  const struct GUID *guid,
+                                  struct ldb_request *parent)
 {
        int ret;
        struct ldb_result *acl_res;
@@ -73,7 +74,8 @@ int dsdb_module_check_access_on_dn(struct ldb_module *module,
        ret = dsdb_module_search_dn(module, mem_ctx, &acl_res, dn,
                                    acl_attrs,
                                    DSDB_FLAG_NEXT_MODULE |
-                                   DSDB_SEARCH_SHOW_RECYCLED);
+                                   DSDB_SEARCH_SHOW_RECYCLED,
+                                   parent);
        if (ret != LDB_SUCCESS) {
                DEBUG(0,("access_check: failed to find object %s\n", 
ldb_dn_get_linearized(dn)));
                return ret;
@@ -90,7 +92,8 @@ int dsdb_module_check_access_on_guid(struct ldb_module 
*module,
                                     TALLOC_CTX *mem_ctx,
                                     struct GUID *guid,
                                     uint32_t access_mask,
-                                    const struct GUID *oc_guid)
+                                    const struct GUID *oc_guid,
+                                    struct ldb_request *parent)
 {
        int ret;
        struct ldb_result *acl_res;
@@ -109,6 +112,7 @@ int dsdb_module_check_access_on_guid(struct ldb_module 
*module,
                                 acl_attrs,
                                 DSDB_FLAG_NEXT_MODULE |
                                 DSDB_SEARCH_SHOW_RECYCLED,
+                                parent,
                                 "objectGUID=%s", GUID_string(mem_ctx, guid));
 
        if (ret != LDB_SUCCESS || acl_res->count == 0) {
diff --git a/source4/dsdb/samdb/ldb_modules/descriptor.c 
b/source4/dsdb/samdb/ldb_modules/descriptor.c
index 0ea91ba..dfbfdf6 100644
--- a/source4/dsdb/samdb/ldb_modules/descriptor.c
+++ b/source4/dsdb/samdb/ldb_modules/descriptor.c
@@ -572,7 +572,7 @@ static int descriptor_do_mod(struct descriptor_context *ac)
                return ldb_operr(ldb);
        }
 
-       objectclass = get_last_structural_class(schema, objectclass_element);
+       objectclass = get_last_structural_class(schema, objectclass_element, 
ac->req);
        if (objectclass == NULL) {
                return ldb_operr(ldb);
        }
@@ -667,7 +667,7 @@ static int descriptor_do_add(struct descriptor_context *ac)
                }
 
                objectclass = get_last_structural_class(schema,
-                                                       objectclass_element);
+                                                       objectclass_element, 
ac->req);
                if (objectclass == NULL) {
                        return ldb_operr(ldb);
                }
diff --git a/source4/dsdb/samdb/ldb_modules/linked_attributes.c 
b/source4/dsdb/samdb/ldb_modules/linked_attributes.c
index ebbc7c6..324faa2 100644
--- a/source4/dsdb/samdb/ldb_modules/linked_attributes.c
+++ b/source4/dsdb/samdb/ldb_modules/linked_attributes.c
@@ -594,7 +594,8 @@ static int linked_attributes_modify(struct ldb_module 
*module, struct ldb_reques
 static int linked_attributes_fix_links(struct ldb_module *module,
                                       struct ldb_dn *old_dn, struct ldb_dn 
*new_dn,
                                       struct ldb_message_element *el, struct 
dsdb_schema *schema,
-                                      const struct dsdb_attribute *schema_attr)
+                                      const struct dsdb_attribute *schema_attr,
+                                      struct ldb_request *parent)
 {
        unsigned int i, j;
        TALLOC_CTX *tmp_ctx = talloc_new(module);
@@ -629,7 +630,7 @@ static int linked_attributes_fix_links(struct ldb_module 
*module,
                                            DSDB_FLAG_NEXT_MODULE |
                                            DSDB_SEARCH_SHOW_RECYCLED |
                                            
DSDB_SEARCH_SHOW_DN_IN_STORAGE_FORMAT |
-                                           DSDB_SEARCH_REVEAL_INTERNALS);
+                                           DSDB_SEARCH_REVEAL_INTERNALS, 
parent);
                if (ret != LDB_SUCCESS) {
                        ldb_asprintf_errstring(ldb, "Linked attribute %s->%s 
between %s and %s - remote not found - %s",
                                               el->name, 
target->lDAPDisplayName,
@@ -690,7 +691,7 @@ static int linked_attributes_fix_links(struct ldb_module 
*module,
                   disable checking for this attribute */
                el2->flags |= LDB_FLAG_INTERNAL_DISABLE_SINGLE_VALUE_CHECK;
 
-               ret = dsdb_module_modify(module, msg, DSDB_FLAG_NEXT_MODULE);
+               ret = dsdb_module_modify(module, msg, DSDB_FLAG_NEXT_MODULE, 
parent);
                if (ret != LDB_SUCCESS) {
                        ldb_asprintf_errstring(ldb, "Linked attribute %s->%s 
between %s and %s - update failed - %s",
                                               el->name, 
target->lDAPDisplayName,
@@ -725,7 +726,7 @@ static int linked_attributes_rename(struct ldb_module 
*module, struct ldb_reques
        ret = dsdb_module_search_dn(module, req, &res, req->op.rename.olddn,
                                    NULL,
                                    DSDB_FLAG_NEXT_MODULE |
-                                   DSDB_SEARCH_SHOW_RECYCLED);
+                                   DSDB_SEARCH_SHOW_RECYCLED, req);
        if (ret != LDB_SUCCESS) {
                return ret;
        }
@@ -745,7 +746,7 @@ static int linked_attributes_rename(struct ldb_module 
*module, struct ldb_reques
                        continue;
                }
                ret = linked_attributes_fix_links(module, msg->dn, 
req->op.rename.newdn, el,
-                                                 schema, schema_attr);
+                                                 schema, schema_attr, req);
                if (ret != LDB_SUCCESS) {
                        talloc_free(res);
                        return ret;
@@ -986,7 +987,7 @@ static int la_do_op_request(struct ldb_module *module, 
struct la_context *ac, st
                         ldb_ldif_message_string(ldb, op, 
LDB_CHANGETYPE_MODIFY, new_msg)));
        }
 
-       ret = dsdb_module_modify(module, new_msg, DSDB_FLAG_NEXT_MODULE);
+       ret = dsdb_module_modify(module, new_msg, DSDB_FLAG_NEXT_MODULE, 
ac->req);
        if (ret != LDB_SUCCESS) {
                ldb_debug(ldb, LDB_DEBUG_WARNING, "Failed to apply linked 
attribute change '%s'\n%s\n",
                          ldb_errstring(ldb),
diff --git a/source4/dsdb/samdb/ldb_modules/naming_fsmo.c 
b/source4/dsdb/samdb/ldb_modules/naming_fsmo.c
index b309035..f59919c 100644
--- a/source4/dsdb/samdb/ldb_modules/naming_fsmo.c
+++ b/source4/dsdb/samdb/ldb_modules/naming_fsmo.c
@@ -67,7 +67,7 @@ static int naming_fsmo_init(struct ldb_module *module)
        ret = dsdb_module_search_dn(module, mem_ctx, &naming_res,
                                    naming_dn,
                                    naming_attrs,
-                                   DSDB_FLAG_NEXT_MODULE);
+                                   DSDB_FLAG_NEXT_MODULE, NULL);
        if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                ldb_debug(ldb, LDB_DEBUG_TRACE,
                          "naming_fsmo_init: no partitions dn present: (skip 
loading of naming contexts details)");
diff --git a/source4/dsdb/samdb/ldb_modules/objectclass.c 
b/source4/dsdb/samdb/ldb_modules/objectclass.c
index 48813e5..b72b9bb 100644
--- a/source4/dsdb/samdb/ldb_modules/objectclass.c
+++ b/source4/dsdb/samdb/ldb_modules/objectclass.c
@@ -613,7 +613,7 @@ static int objectclass_do_add(struct oc_context *ac)
 
                /* Make sure its valid to add an object of this type */
                objectclass = get_last_structural_class(ac->schema,
-                                                       objectclass_element);
+                                                       objectclass_element, 
ac->req);
                if(objectclass == NULL) {
                        ldb_asprintf_errstring(ldb,
                                               "Failed to find a structural 
class for %s",
@@ -1039,7 +1039,7 @@ static int objectclass_do_mod(struct oc_context *ac)
                        }
 
                        objectclass = get_last_structural_class(ac->schema,
-                                                               oc_el_change);
+                                                               oc_el_change, 
ac->req);
                        if (objectclass != NULL) {
                                ldb_asprintf_errstring(ldb,
                                                       "objectclass: cannot add 
a new top-most structural objectclass '%s'!",
@@ -1075,7 +1075,7 @@ static int objectclass_do_mod(struct oc_context *ac)
                case LDB_FLAG_MOD_DELETE:
                        /* get the actual top-most structural objectclass */
                        objectclass = get_last_structural_class(ac->schema,
-                                                               oc_el_entry);
+                                                               oc_el_entry, 
ac->req);
                        if (objectclass == NULL) {
                                /* no structural objectclass? */
                                talloc_free(mem_ctx);
@@ -1352,7 +1352,7 @@ static int objectclass_do_rename2(struct oc_context *ac)
                        /* existing entry without a valid object class? */
                        return ldb_operr(ldb);
                }
-               objectclass = get_last_structural_class(ac->schema, 
oc_el_entry);
+               objectclass = get_last_structural_class(ac->schema, 
oc_el_entry, ac->req);
                if (objectclass == NULL) {
                        /* existing entry without a valid object class? */
                        return ldb_operr(ldb);
diff --git a/source4/dsdb/samdb/ldb_modules/operational.c 
b/source4/dsdb/samdb/ldb_modules/operational.c
index a1b5a2e..ae61089 100644
--- a/source4/dsdb/samdb/ldb_modules/operational.c
+++ b/source4/dsdb/samdb/ldb_modules/operational.c
@@ -89,7 +89,8 @@ struct operational_data {
   construct a canonical name from a message
 */
 static int construct_canonical_name(struct ldb_module *module,
-       struct ldb_message *msg, enum ldb_scope scope)
+                                   struct ldb_message *msg, enum ldb_scope 
scope,
+                                   struct ldb_request *parent)
 {
        char *canonicalName;
        canonicalName = ldb_dn_canonical_string(msg, msg->dn);
@@ -103,7 +104,8 @@ static int construct_canonical_name(struct ldb_module 
*module,
   construct a primary group token for groups from a message
 */
 static int construct_primary_group_token(struct ldb_module *module,
-                                        struct ldb_message *msg, enum 
ldb_scope scope)
+                                        struct ldb_message *msg, enum 
ldb_scope scope,
+                                        struct ldb_request *parent)
 {
        struct ldb_context *ldb;
        uint32_t primary_group_token;
@@ -127,7 +129,8 @@ static int construct_primary_group_token(struct ldb_module 
*module,
   construct the token groups for SAM objects from a message
 */
 static int construct_token_groups(struct ldb_module *module,
-                                 struct ldb_message *msg, enum ldb_scope scope)
+                                 struct ldb_message *msg, enum ldb_scope scope,
+                                 struct ldb_request *parent)
 {
        struct ldb_context *ldb = ldb_module_get_ctx(module);;
        TALLOC_CTX *tmp_ctx = talloc_new(msg);
@@ -265,7 +268,8 @@ static int construct_token_groups(struct ldb_module *module,
   construct the parent GUID for an entry from a message
 */
 static int construct_parent_guid(struct ldb_module *module,
-                                struct ldb_message *msg, enum ldb_scope scope)
+                                struct ldb_message *msg, enum ldb_scope scope,
+                                struct ldb_request *parent)
 {
        struct ldb_result *res, *parent_res;
        const struct ldb_val *parent_guid;
@@ -279,7 +283,7 @@ static int construct_parent_guid(struct ldb_module *module,
        /* determine if the object is NC by instance type */
        ret = dsdb_module_search_dn(module, msg, &res, msg->dn, attrs,
                                    DSDB_FLAG_NEXT_MODULE |
-                                   DSDB_SEARCH_SHOW_RECYCLED);
+                                   DSDB_SEARCH_SHOW_RECYCLED, parent);
 
        instanceType = ldb_msg_find_attr_as_uint(res->msgs[0],
                                                 "instanceType", 0);
@@ -298,7 +302,7 @@ static int construct_parent_guid(struct ldb_module *module,
        }
        ret = dsdb_module_search_dn(module, msg, &parent_res, parent_dn, attrs2,
                                    DSDB_FLAG_NEXT_MODULE |
-                                   DSDB_SEARCH_SHOW_RECYCLED);
+                                   DSDB_SEARCH_SHOW_RECYCLED, parent);
        talloc_free(parent_dn);
 
        /* not NC, so the object should have a parent*/
@@ -330,7 +334,8 @@ static int construct_parent_guid(struct ldb_module *module,
   construct a subSchemaSubEntry
 */
 static int construct_subschema_subentry(struct ldb_module *module,
-                                       struct ldb_message *msg, enum ldb_scope 
scope)
+                                       struct ldb_message *msg, enum ldb_scope 
scope,
+                                       struct ldb_request *parent)
 {
        struct operational_data *data = 
talloc_get_type(ldb_module_get_private(module), struct operational_data);
        char *subSchemaSubEntry;
@@ -394,7 +399,8 @@ static int construct_msds_isrodc_with_dn(struct ldb_module 
*module,
 
 static int construct_msds_isrodc_with_server_dn(struct ldb_module *module,
                                                struct ldb_message *msg,
-                                               struct ldb_dn *dn)
+                                               struct ldb_dn *dn,
+                                               struct ldb_request *parent)
 {
        struct ldb_dn *server_dn;
        const char *attr_obj_cat[] = { "objectCategory", NULL };
@@ -410,7 +416,7 @@ static int construct_msds_isrodc_with_server_dn(struct 
ldb_module *module,
        }
 
        ret = dsdb_module_search_dn(module, msg, &res, server_dn, attr_obj_cat,
-                                   DSDB_FLAG_NEXT_MODULE);
+                                   DSDB_FLAG_NEXT_MODULE, parent);
        if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                DEBUG(4,(__location__ ": Can't get objectCategory for %s \n",
                                         ldb_dn_get_linearized(server_dn)));
@@ -429,7 +435,8 @@ static int construct_msds_isrodc_with_server_dn(struct 
ldb_module *module,
 }
 
 static int construct_msds_isrodc_with_computer_dn(struct ldb_module *module,
-                                                 struct ldb_message *msg)
+                                                 struct ldb_message *msg,
+                                                 struct ldb_request *parent)
 {
        struct ldb_context *ldb;
        const char *attr[] = { "serverReferenceBL", NULL };
@@ -438,7 +445,7 @@ static int construct_msds_isrodc_with_computer_dn(struct 
ldb_module *module,
        struct ldb_dn *server_dn;
 
        ret = dsdb_module_search_dn(module, msg, &res, msg->dn, attr,
-                                   DSDB_FLAG_NEXT_MODULE);
+                                   DSDB_FLAG_NEXT_MODULE, parent);
        if (ret == LDB_ERR_NO_SUCH_OBJECT) {
                DEBUG(4,(__location__ ": Can't get serverReferenceBL for %s \n",
                         ldb_dn_get_linearized(msg->dn)));
@@ -458,14 +465,15 @@ static int construct_msds_isrodc_with_computer_dn(struct 
ldb_module *module,
                         ldb_dn_get_linearized(res->msgs[0]->dn)));
                return LDB_SUCCESS;
        }
-       return construct_msds_isrodc_with_server_dn(module, msg, server_dn);
+       return construct_msds_isrodc_with_server_dn(module, msg, server_dn, 
parent);
 }
 
 /*
   construct msDS-isRODC attr
 */
 static int construct_msds_isrodc(struct ldb_module *module,
-                                struct ldb_message *msg, enum ldb_scope scope)
+                                struct ldb_message *msg, enum ldb_scope scope,
+                                struct ldb_request *parent)
 {
        struct ldb_message_element * object_class;
        struct ldb_message_element * object_category;
@@ -496,13 +504,13 @@ static int construct_msds_isrodc(struct ldb_module 
*module,
                         * the DN of TO. Apply the previous rule for the "TO is 
an nTDSDSA  object" case,
                         * substituting TN for TO.
                         */
-                       return construct_msds_isrodc_with_server_dn(module, 
msg, msg->dn);
+                       return construct_msds_isrodc_with_server_dn(module, 
msg, msg->dn, parent);
                }
                if (strequal((const char*)object_class->values[i].data, 
"computer")) {
                        /* Let TS be the server  object named by 
TO!serverReferenceBL. Apply the previous
                         * rule for the "TO is a server  object" case, 
substituting TS for TO.
                         */
-                       return construct_msds_isrodc_with_computer_dn(module, 
msg);
+                       return construct_msds_isrodc_with_computer_dn(module, 
msg, parent);
                }
        }
 
@@ -518,7 +526,8 @@ static int construct_msds_isrodc(struct ldb_module *module,
 */
 static int construct_msds_keyversionnumber(struct ldb_module *module,
                                           struct ldb_message *msg,
-                                          enum ldb_scope scope)
+                                          enum ldb_scope scope,
+                                          struct ldb_request *parent)
 {
        uint32_t i;
        enum ndr_err_code ndr_err;
@@ -605,7 +614,7 @@ static const struct {
        const char *attr;
        const char *replace;
        const char *extra_attr;
-       int (*constructor)(struct ldb_module *, struct ldb_message *, enum 
ldb_scope);
+       int (*constructor)(struct ldb_module *, struct ldb_message *, enum 
ldb_scope, struct ldb_request *);
 } search_sub[] = {
        { "createTimestamp", "whenCreated", NULL , NULL },
        { "modifyTimestamp", "whenChanged", NULL , NULL },
@@ -657,7 +666,8 @@ static int operational_search_post_process(struct 
ldb_module *module,
                                           enum ldb_scope scope,
                                           const char * const *attrs_from_user,
                                           const char * const 
*attrs_searched_for,
-                                          struct op_controls_flags* 
controls_flags)
+                                          struct op_controls_flags* 
controls_flags,
+                                          struct ldb_request *parent)
 {
        struct ldb_context *ldb;
        unsigned int i, a = 0;


-- 
Samba Shared Repository

Reply via email to