r12658: Couple of fixes related to shared module builds.
[samba.git] / source / lib / ldb / modules / rdn_name.c
index 09e9c72811931122f5935876e37926bd0af84459..f35cff916c25aeb0fa995d64ec84fa094f2d8516 100644 (file)
 #include "ldb/include/ldb_private.h"
 #include <time.h>
 
-struct private_data {
-       const char *error_string;
-};
-
-static int rdn_name_search(struct ldb_module *module, const struct ldb_dn *base,
-                                 enum ldb_scope scope, const char *expression,
-                                 const char * const *attrs, struct ldb_message ***res)
-{
-       ldb_debug(module->ldb, LDB_DEBUG_TRACE, "rdn_name_search\n");
-       return ldb_next_search(module, base, scope, expression, attrs, res);
-}
-
-static int rdn_name_search_bytree(struct ldb_module *module, const struct ldb_dn *base,
-                                   enum ldb_scope scope, struct ldb_parse_tree *tree,
-                                   const char * const *attrs, struct ldb_message ***res)
-{
-       ldb_debug(module->ldb, LDB_DEBUG_TRACE, "rdn_name_search\n");
-       return ldb_next_search_bytree(module, base, scope, tree, attrs, res);
-}
-
 static struct ldb_message_element *rdn_name_find_attribute(const struct ldb_message *msg, const char *name)
 {
        int i;
@@ -70,11 +50,9 @@ static struct ldb_message_element *rdn_name_find_attribute(const struct ldb_mess
        return NULL;
 }
 
-/* add_record: add crateTimestamp/modifyTimestamp attributes */
-static int rdn_name_add_record(struct ldb_module *module, const struct ldb_message *msg)
+static int rdn_name_add(struct ldb_module *module, struct ldb_request *req)
 {
-       struct private_data *data = (struct private_data *)module->private_data;
-
+       const struct ldb_message *msg = req->op.add.message;
        struct ldb_message *msg2;
        struct ldb_message_element *attribute;
        struct ldb_dn_component *rdn;
@@ -84,12 +62,12 @@ static int rdn_name_add_record(struct ldb_module *module, const struct ldb_messa
 
        /* do not manipulate our control entries */
        if (ldb_dn_is_special(msg->dn)) {
-               return ldb_next_add_record(module, msg);
+               return ldb_next_request(module, req);
        }
 
        /* Perhaps someone above us knows better */
        if ((attribute = rdn_name_find_attribute(msg, "name")) != NULL ) {
-               return ldb_next_add_record(module, msg);
+               return ldb_next_request(module, req);
        }
 
        msg2 = talloc(module, struct ldb_message);
@@ -111,7 +89,7 @@ static int rdn_name_add_record(struct ldb_module *module, const struct ldb_messa
                return -1;
        }
        
-       if (ldb_msg_add_value(module->ldb, msg2, "name", &rdn->value) != 0) {
+       if (ldb_msg_add_value(msg2, "name", &rdn->value) != 0) {
                talloc_free(msg2);
                return -1;
        }
@@ -119,7 +97,7 @@ static int rdn_name_add_record(struct ldb_module *module, const struct ldb_messa
        attribute = rdn_name_find_attribute(msg2, rdn->name);
 
        if (!attribute) {
-               if (ldb_msg_add_value(module->ldb, msg2, rdn->name, &rdn->value) != 0) {
+               if (ldb_msg_add_value(msg2, rdn->name, &rdn->value) != 0) {
                        talloc_free(msg2);
                        return -1;
                }
@@ -134,22 +112,26 @@ static int rdn_name_add_record(struct ldb_module *module, const struct ldb_messa
                        }
                }
                if (i == attribute->num_values) {
-                       data->error_string = talloc_asprintf(data, "RDN mismatch on %s: %s", ldb_dn_linearize(msg2, msg2->dn), rdn->name);
-                       ldb_debug(module->ldb, LDB_DEBUG_FATAL, "%s\n", data->error_string);
+                       ldb_debug_set(module->ldb, LDB_DEBUG_FATAL, 
+                                     "RDN mismatch on %s: %s", 
+                                     ldb_dn_linearize(msg2, msg2->dn), rdn->name);
                        talloc_free(msg2);
                        return -1;
                }
        }
 
-       ret = ldb_next_add_record(module, msg2);
+       req->op.add.message = msg2;
+       ret = ldb_next_request(module, req);
+       req->op.add.message = msg;
+
        talloc_free(msg2);
 
        return ret;
 }
 
-/* modify_record: change modifyTimestamp as well */
-static int rdn_name_modify_record(struct ldb_module *module, const struct ldb_message *msg)
+static int rdn_name_modify(struct ldb_module *module, struct ldb_request *req)
 {
+       const struct ldb_message *msg = req->op.mod.message;
        struct ldb_message *msg2;
        struct ldb_message_element *attribute;
        struct ldb_dn_component *rdn;
@@ -159,12 +141,12 @@ static int rdn_name_modify_record(struct ldb_module *module, const struct ldb_me
 
        /* do not manipulate our control entries */
        if (ldb_dn_is_special(msg->dn)) {
-               return ldb_next_modify_record(module, msg);
+               return ldb_next_request(module, req);
        }
 
        /* Perhaps someone above us knows better */
        if ((attribute = rdn_name_find_attribute(msg, "name")) != NULL ) {
-               return ldb_next_modify_record(module, msg);
+               return ldb_next_request(module, req);
        }
 
        msg2 = talloc(module, struct ldb_message);
@@ -186,7 +168,7 @@ static int rdn_name_modify_record(struct ldb_module *module, const struct ldb_me
                return -1;
        }
        
-       if (ldb_msg_add_value(module->ldb, msg2, "name", &rdn->value) != 0) {
+       if (ldb_msg_add_value(msg2, "name", &rdn->value) != 0) {
                talloc_free(msg2);
                return -1;
        }
@@ -199,101 +181,51 @@ static int rdn_name_modify_record(struct ldb_module *module, const struct ldb_me
 
        attribute->flags = LDB_FLAG_MOD_REPLACE;
 
-       ret = ldb_next_modify_record(module, msg2);
+       req->op.add.message = msg2;
+       ret = ldb_next_request(module, req);
+       req->op.add.message = msg;
+
        talloc_free(msg2);
 
        return ret;
 }
 
-static int rdn_name_delete_record(struct ldb_module *module, const struct ldb_dn *dn)
-{
-       ldb_debug(module->ldb, LDB_DEBUG_TRACE, "rdn_name_delete_record\n");
-       return ldb_next_delete_record(module, dn);
-}
-
-static int rdn_name_rename_record(struct ldb_module *module, const struct ldb_dn *olddn, const struct ldb_dn *newdn)
+static int rdn_name_request(struct ldb_module *module, struct ldb_request *req)
 {
-       ldb_debug(module->ldb, LDB_DEBUG_TRACE, "rdn_name_rename_record\n");
-       return ldb_next_rename_record(module, olddn, newdn);
-}
+       switch (req->operation) {
 
-static int rdn_name_lock(struct ldb_module *module, const char *lockname)
-{
-       ldb_debug(module->ldb, LDB_DEBUG_TRACE, "rdn_name_lock\n");
-       return ldb_next_named_lock(module, lockname);
-}
+       case LDB_REQ_ADD:
+               return rdn_name_add(module, req);
 
-static int rdn_name_unlock(struct ldb_module *module, const char *lockname)
-{
-       ldb_debug(module->ldb, LDB_DEBUG_TRACE, "rdn_name_unlock\n");
-       return ldb_next_named_unlock(module, lockname);
-}
+       case LDB_REQ_MODIFY:
+               return rdn_name_modify(module, req);
 
-/* return extended error information */
-static const char *rdn_name_errstring(struct ldb_module *module)
-{
-       struct private_data *data = (struct private_data *)module->private_data;
 
-       ldb_debug(module->ldb, LDB_DEBUG_TRACE, "rdn_name_errstring\n");
-       if (data->error_string) {
-               const char *error;
+       default:
+               return ldb_next_request(module, req);
 
-               error = data->error_string;
-               data->error_string = NULL;
-               return error;
        }
-
-       return ldb_next_errstring(module);
-}
-
-static int rdn_name_destructor(void *module_ctx)
-{
-       /* struct ldb_module *ctx = module_ctx; */
-       /* put your clean-up functions here */
-       return 0;
 }
 
 static const struct ldb_module_ops rdn_name_ops = {
-       .name          = "rdn_name",
-       .search        = rdn_name_search,
-       .search_bytree = rdn_name_search_bytree,
-       .add_record    = rdn_name_add_record,
-       .modify_record = rdn_name_modify_record,
-       .delete_record = rdn_name_delete_record,
-       .rename_record = rdn_name_rename_record,
-       .named_lock    = rdn_name_lock,
-       .named_unlock  = rdn_name_unlock,
-       .errstring     = rdn_name_errstring
+       .name              = "rdn_name",
+       .request           = rdn_name_request
 };
 
 
 /* the init function */
-#ifdef HAVE_DLOPEN_DISABLED
- struct ldb_module *init_module(struct ldb_context *ldb, const char *options[])
-#else
 struct ldb_module *rdn_name_module_init(struct ldb_context *ldb, const char *options[])
-#endif
 {
        struct ldb_module *ctx;
-       struct private_data *data;
 
        ctx = talloc(ldb, struct ldb_module);
        if (!ctx)
                return NULL;
 
-       data = talloc(ctx, struct private_data);
-       if (!data) {
-               talloc_free(ctx);
-               return NULL;
-       }
-
-       data->error_string = NULL;
-       ctx->private_data = data;
+       ctx->private_data = NULL;
        ctx->ldb = ldb;
        ctx->prev = ctx->next = NULL;
        ctx->ops = &rdn_name_ops;
 
-       talloc_set_destructor (ctx, rdn_name_destructor);
-
        return ctx;
 }