summaryrefslogtreecommitdiff
path: root/source4/lib/ldb/modules
diff options
context:
space:
mode:
Diffstat (limited to 'source4/lib/ldb/modules')
-rw-r--r--source4/lib/ldb/modules/schema.c40
-rw-r--r--source4/lib/ldb/modules/skel.c16
-rw-r--r--source4/lib/ldb/modules/timestamps.c134
3 files changed, 100 insertions, 90 deletions
diff --git a/source4/lib/ldb/modules/schema.c b/source4/lib/ldb/modules/schema.c
index 2921bdc68b..ef766b55ee 100644
--- a/source4/lib/ldb/modules/schema.c
+++ b/source4/lib/ldb/modules/schema.c
@@ -297,12 +297,6 @@ static int get_attr_list_recursive(struct ldb_module *module, struct schema_stru
return 0;
}
-/* close */
-static int schema_close(struct ldb_module *module)
-{
- return ldb_next_close(module);
-}
-
/* search */
static int schema_search(struct ldb_module *module, const char *base,
enum ldb_scope scope, const char *expression,
@@ -371,18 +365,6 @@ static int schema_add_record(struct ldb_module *module, const struct ldb_message
return -1;
}
- /* check we are not trying to delete a required attribute */
- /* TODO: consider multivalued attrs */
- if ((attr->flags & SCHEMA_FLAG_MOD_DELETE) != 0) {
- ldb_debug(module->ldb, LDB_DEBUG_ERROR,
- "Trying to delete the required attribute %s.\n",
- attr->name);
-
- data->error_string = "Objectclass violation, a required attribute cannot be removed";
- talloc_free(entry_structs);
- return -1;
- }
-
/* mark the attribute as checked */
attr->flags = SCHEMA_FLAG_CHECKED;
}
@@ -477,6 +459,18 @@ static int schema_modify_record(struct ldb_module *module, const struct ldb_mess
return -1;
}
+ /* check we are not trying to delete a required attribute */
+ /* TODO: consider multivalued attrs */
+ if ((attr->flags & SCHEMA_FLAG_MOD_DELETE) != 0) {
+ ldb_debug(module->ldb, LDB_DEBUG_ERROR,
+ "Trying to delete the required attribute %s.\n",
+ attr->name);
+
+ data->error_string = "Objectclass violation, a required attribute cannot be removed";
+ talloc_free(entry_structs);
+ return -1;
+ }
+
/* mark the attribute as checked */
attr->flags = SCHEMA_FLAG_CHECKED;
}
@@ -544,9 +538,15 @@ static const char *schema_errstring(struct ldb_module *module)
return ldb_next_errstring(module);
}
+static int schema_destructor(void *module_ctx)
+{
+ struct ldb_module *ctx = module_ctx;
+ /* put your clean-up functions here */
+ return 0;
+}
+
static const struct ldb_module_ops schema_ops = {
"schema",
- schema_close,
schema_search,
schema_search_free,
schema_add_record,
@@ -584,5 +584,7 @@ struct ldb_module *schema_module_init(struct ldb_context *ldb, const char *optio
ctx->prev = ctx->next = NULL;
ctx->ops = &schema_ops;
+ talloc_set_destructor (ctx, schema_destructor);
+
return ctx;
}
diff --git a/source4/lib/ldb/modules/skel.c b/source4/lib/ldb/modules/skel.c
index afafe1bbd9..882a776819 100644
--- a/source4/lib/ldb/modules/skel.c
+++ b/source4/lib/ldb/modules/skel.c
@@ -36,12 +36,6 @@
#include "ldb/include/ldb.h"
#include "ldb/include/ldb_private.h"
-/* close */
-static int skel_close(struct ldb_module *module)
-{
- return ldb_next_close(module);
-}
-
/* search */
static int skel_search(struct ldb_module *module, const char *base,
enum ldb_scope scope, const char *expression,
@@ -98,9 +92,15 @@ static const char *skel_errstring(struct ldb_module *module)
return ldb_next_errstring(module);
}
+static int skel_destructor(void *module_ctx)
+{
+ struct ldb_module *ctx = module_ctx;
+ /* put your clean-up functions here */
+ return 0;
+}
+
static const struct ldb_module_ops skel_ops = {
"skel",
- skel_close,
skel_search,
skel_search_free,
skel_add_record,
@@ -129,5 +129,7 @@ struct ldb_module *skel_plugin_init(struct ldb_context *ldb, const char *options
ctx->private_data = NULL;
ctx->ops = &skel_ops;
+ talloc_set_destructor (ctx, skel_destructor);
+
return ctx;
}
diff --git a/source4/lib/ldb/modules/timestamps.c b/source4/lib/ldb/modules/timestamps.c
index 1deeeb218b..dec564bf66 100644
--- a/source4/lib/ldb/modules/timestamps.c
+++ b/source4/lib/ldb/modules/timestamps.c
@@ -41,12 +41,6 @@ struct private_data {
const char *error_string;
};
-static int timestamps_close(struct ldb_module *module)
-{
- ldb_debug(module->ldb, LDB_DEBUG_TRACE, "timestamps_close\n");
- return ldb_next_close(module);
-}
-
static int timestamps_search(struct ldb_module *module, const char *base,
enum ldb_scope scope, const char *expression,
const char * const *attrs, struct ldb_message ***res)
@@ -106,41 +100,43 @@ static int timestamps_add_record(struct ldb_module *module, const struct ldb_mes
ldb_debug(module->ldb, LDB_DEBUG_TRACE, "timestamps_add_record\n");
- if (msg->dn[0] != '@') { /* do not manipulate our control entries */
- timeval = time(NULL);
- tm = gmtime(&timeval);
- if (!tm) {
- return -1;
- }
+ if (msg->dn[0] == '@') { /* do not manipulate our control entries */
+ return ldb_next_add_record(module, msg);
+ }
- msg2 = talloc(module, struct ldb_message);
- if (!msg2) {
- return -1;
- }
+ timeval = time(NULL);
+ tm = gmtime(&timeval);
+ if (!tm) {
+ return -1;
+ }
- /* formatted like: 20040408072012.0Z */
- timestr = talloc_asprintf(msg2, "%04u%02u%02u%02u%02u%02u.0Z",
- tm->tm_year+1900, tm->tm_mon+1,
- tm->tm_mday, tm->tm_hour, tm->tm_min,
- tm->tm_sec);
- if (!timestr) {
- return -1;
- }
+ msg2 = talloc(module, struct ldb_message);
+ if (!msg2) {
+ return -1;
+ }
- msg2->dn = msg->dn;
- msg2->num_elements = msg->num_elements;
- msg2->private_data = msg->private_data;
- msg2->elements = talloc_array(msg2, struct ldb_message_element, msg2->num_elements);
- for (i = 0; i < msg2->num_elements; i++) {
- msg2->elements[i] = msg->elements[i];
- }
+ /* formatted like: 20040408072012.0Z */
+ timestr = talloc_asprintf(msg2, "%04u%02u%02u%02u%02u%02u.0Z",
+ tm->tm_year+1900, tm->tm_mon+1,
+ tm->tm_mday, tm->tm_hour, tm->tm_min,
+ tm->tm_sec);
+ if (!timestr) {
+ return -1;
+ }
- add_time_element(module, msg2, "createTimestamp", timestr, LDB_FLAG_MOD_ADD);
- add_time_element(module, msg2, "modifyTimestamp", timestr, LDB_FLAG_MOD_ADD);
- add_time_element(module, msg2, "whenCreated", timestr, LDB_FLAG_MOD_ADD);
- add_time_element(module, msg2, "whenChanged", timestr, LDB_FLAG_MOD_ADD);
+ msg2->dn = msg->dn;
+ msg2->num_elements = msg->num_elements;
+ msg2->private_data = msg->private_data;
+ msg2->elements = talloc_array(msg2, struct ldb_message_element, msg2->num_elements);
+ for (i = 0; i < msg2->num_elements; i++) {
+ msg2->elements[i] = msg->elements[i];
}
+ add_time_element(module, msg2, "createTimestamp", timestr, LDB_FLAG_MOD_ADD);
+ add_time_element(module, msg2, "modifyTimestamp", timestr, LDB_FLAG_MOD_ADD);
+ add_time_element(module, msg2, "whenCreated", timestr, LDB_FLAG_MOD_ADD);
+ add_time_element(module, msg2, "whenChanged", timestr, LDB_FLAG_MOD_ADD);
+
if (msg2) {
ret = ldb_next_add_record(module, msg2);
talloc_free(msg2);
@@ -162,40 +158,42 @@ static int timestamps_modify_record(struct ldb_module *module, const struct ldb_
ldb_debug(module->ldb, LDB_DEBUG_TRACE, "timestamps_modify_record\n");
- if (msg->dn[0] != '@') { /* do not manipulate our control entries */
- timeval = time(NULL);
- tm = gmtime(&timeval);
- if (!tm) {
- return -1;
- }
+ if (msg->dn[0] == '@') { /* do not manipulate our control entries */
+ return ldb_next_modify_record(module, msg);
+ }
- msg2 = talloc(module, struct ldb_message);
- if (!msg2) {
- return -1;
- }
+ timeval = time(NULL);
+ tm = gmtime(&timeval);
+ if (!tm) {
+ return -1;
+ }
- /* formatted like: 20040408072012.0Z */
- timestr = talloc_asprintf(msg2,
- "%04u%02u%02u%02u%02u%02u.0Z",
- tm->tm_year+1900, tm->tm_mon+1,
- tm->tm_mday, tm->tm_hour, tm->tm_min,
- tm->tm_sec);
- if (!timestr) {
- return -1;
- }
+ msg2 = talloc(module, struct ldb_message);
+ if (!msg2) {
+ return -1;
+ }
- msg2->dn = msg->dn;
- msg2->num_elements = msg->num_elements;
- msg2->private_data = msg->private_data;
- msg2->elements = talloc_array(msg2, struct ldb_message_element, msg2->num_elements);
- for (i = 0; i < msg2->num_elements; i++) {
- msg2->elements[i] = msg->elements[i];
- }
+ /* formatted like: 20040408072012.0Z */
+ timestr = talloc_asprintf(msg2,
+ "%04u%02u%02u%02u%02u%02u.0Z",
+ tm->tm_year+1900, tm->tm_mon+1,
+ tm->tm_mday, tm->tm_hour, tm->tm_min,
+ tm->tm_sec);
+ if (!timestr) {
+ return -1;
+ }
- add_time_element(module, msg2, "modifyTimestamp", timestr, LDB_FLAG_MOD_REPLACE);
- add_time_element(module, msg2, "whenChanged", timestr, LDB_FLAG_MOD_REPLACE);
+ msg2->dn = msg->dn;
+ msg2->num_elements = msg->num_elements;
+ msg2->private_data = msg->private_data;
+ msg2->elements = talloc_array(msg2, struct ldb_message_element, msg2->num_elements);
+ for (i = 0; i < msg2->num_elements; i++) {
+ msg2->elements[i] = msg->elements[i];
}
+ add_time_element(module, msg2, "modifyTimestamp", timestr, LDB_FLAG_MOD_REPLACE);
+ add_time_element(module, msg2, "whenChanged", timestr, LDB_FLAG_MOD_REPLACE);
+
if (msg2) {
ret = ldb_next_modify_record(module, msg2);
talloc_free(msg2);
@@ -247,9 +245,15 @@ static const char *timestamps_errstring(struct ldb_module *module)
return ldb_next_errstring(module);
}
+static int timestamps_destructor(void *module_ctx)
+{
+ struct ldb_module *ctx = module_ctx;
+ /* put your clean-up functions here */
+ return 0;
+}
+
static const struct ldb_module_ops timestamps_ops = {
"timestamps",
- timestamps_close,
timestamps_search,
timestamps_search_free,
timestamps_add_record,
@@ -288,5 +292,7 @@ struct ldb_module *timestamps_module_init(struct ldb_context *ldb, const char *o
ctx->prev = ctx->next = NULL;
ctx->ops = &timestamps_ops;
+ talloc_set_destructor (ctx, timestamps_destructor);
+
return ctx;
}