Disable descriptor module unless enabled in smb.conf
authorNadezhda Ivanova <nadezhda.ivanova@postpath.com>
Sun, 20 Sep 2009 04:45:07 +0000 (21:45 -0700)
committerNadezhda Ivanova <nadezhda.ivanova@postpath.com>
Sun, 20 Sep 2009 21:07:16 +0000 (14:07 -0700)
Since this code may still have some problems, it is not executed by default.
To enable descriptor inheritance add:
acl:inheritance = true
in your smb.conf

source4/dsdb/samdb/ldb_modules/descriptor.c

index e74a93c2793682ac1f5ca4c6eaf782e76b7a1f3c..7b5b700916dc899229a57b02146d495ae29805c1 100644 (file)
 #include "auth/auth.h"
 #include "param/param.h"
 
 #include "auth/auth.h"
 #include "param/param.h"
 
+struct descriptor_data {
+       bool inherit;
+};
+
 struct descriptor_context {
                struct ldb_module *module;
                struct ldb_request *req;
 struct descriptor_context {
                struct ldb_module *module;
                struct ldb_request *req;
@@ -395,10 +399,15 @@ static int descriptor_add(struct ldb_module *module, struct ldb_request *req)
        struct descriptor_context *ac;
        struct ldb_dn *parent_dn;
        int ret;
        struct descriptor_context *ac;
        struct ldb_dn *parent_dn;
        int ret;
+       struct descriptor_data *data;
        static const char * const descr_attrs[] = { "nTSecurityDescriptor", NULL };
 
        static const char * const descr_attrs[] = { "nTSecurityDescriptor", NULL };
 
+       data = talloc_get_type(ldb_module_get_private(module), struct descriptor_data);
        ldb = ldb_module_get_ctx(module);
 
        ldb = ldb_module_get_ctx(module);
 
+       if (!data->inherit)
+               return ldb_next_request(module, req);
+
        ldb_debug(ldb, LDB_DEBUG_TRACE, "descriptor_add\n");
 
        if (ldb_dn_is_special(req->op.add.message->dn)) {
        ldb_debug(ldb, LDB_DEBUG_TRACE, "descriptor_add\n");
 
        if (ldb_dn_is_special(req->op.add.message->dn)) {
@@ -452,11 +461,31 @@ static int descriptor_rename(struct ldb_module *module, struct ldb_request *req)
        return ldb_next_request(module, req);
 }
 
        return ldb_next_request(module, req);
 }
 
+static int descriptor_init(struct ldb_module *module)
+{
+       struct ldb_context *ldb;
+       struct descriptor_data *data;
+
+       ldb = ldb_module_get_ctx(module);
+       data = talloc(module, struct descriptor_data);
+       if (data == NULL) {
+               ldb_oom(ldb);
+               return LDB_ERR_OPERATIONS_ERROR;
+       }
+
+       data->inherit = lp_parm_bool(ldb_get_opaque(ldb, "loadparm"),
+                                 NULL, "acl", "inheritance", false);
+       ldb_module_set_private(module, data);
+       return ldb_next_init(module);
+}
+
+
 _PUBLIC_ const struct ldb_module_ops ldb_descriptor_module_ops = {
        .name              = "descriptor",
        .add           = descriptor_add,
        .modify        = descriptor_modify,
        .rename        = descriptor_rename,
 _PUBLIC_ const struct ldb_module_ops ldb_descriptor_module_ops = {
        .name              = "descriptor",
        .add           = descriptor_add,
        .modify        = descriptor_modify,
        .rename        = descriptor_rename,
+       .init_context  = descriptor_init
 };
 
 
 };