s4:kludge_acl: just fake support for the SD_FLAGS control
authorStefan Metzmacher <metze@samba.org>
Thu, 2 Oct 2008 00:44:25 +0000 (02:44 +0200)
committerStefan Metzmacher <metze@samba.org>
Thu, 2 Oct 2008 10:20:57 +0000 (12:20 +0200)
metze

source4/dsdb/samdb/ldb_modules/kludge_acl.c

index 24527c36c95641aa9556744cb5b62f013b563c63..6e6da5581d628488fc2b5d44f607f3abf91b778b 100644 (file)
@@ -321,6 +321,8 @@ static int kludge_acl_search(struct ldb_module *module, struct ldb_request *req)
        struct kludge_private_data *data;
        const char * const *attrs;
        int ret, i;
+       struct ldb_control *sd_control;
+       struct ldb_control **sd_saved_controls;
 
        ac = talloc(req, struct kludge_acl_context);
        if (ac == NULL) {
@@ -382,6 +384,17 @@ static int kludge_acl_search(struct ldb_module *module, struct ldb_request *req)
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
+       /* check if there's an SD_FLAGS control */
+       sd_control = ldb_request_get_control(down_req, LDB_CONTROL_SD_FLAGS_OID);
+       if (sd_control) {
+               /* save it locally and remove it from the list */
+               /* we do not need to replace them later as we
+                * are keeping the original req intact */
+               if (!save_controls(sd_control, down_req, &sd_saved_controls)) {
+                       return LDB_ERR_OPERATIONS_ERROR;
+               }
+       }
+
        /* perform the search */
        return ldb_next_request(module, down_req);
 }
@@ -462,6 +475,13 @@ static int kludge_acl_init(struct ldb_module *module)
        }
        data->password_attrs[i] = NULL;
 
+       ret = ldb_mod_register_control(module, LDB_CONTROL_SD_FLAGS_OID);
+       if (ret != LDB_SUCCESS) {
+               ldb_debug(module->ldb, LDB_DEBUG_ERROR,
+                       "partition: Unable to register control with rootdse!\n");
+               return LDB_ERR_OPERATIONS_ERROR;
+       }
+
 done:
        talloc_free(mem_ctx);
        return ldb_next_init(module);