diff options
author | Simo Sorce <idra@samba.org> | 2005-02-27 11:35:47 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:10:55 -0500 |
commit | b1b14817eaa6e6579596d54166e17bc8d5605c01 (patch) | |
tree | b1af59838a0337dd52b510374b048255397dfe24 /source4/lib/ldb/modules | |
parent | d2dc86994e7075490f95faa1cc85008feb38f04a (diff) | |
download | samba-b1b14817eaa6e6579596d54166e17bc8d5605c01.tar.gz samba-b1b14817eaa6e6579596d54166e17bc8d5605c01.tar.bz2 samba-b1b14817eaa6e6579596d54166e17bc8d5605c01.zip |
r5585: LDB interfaces change:
changes:
- ldb_wrap disappears from code and become a private structure of db_wrap.c
thanks to our move to talloc in ldb code, we do not need to expose it anymore
- removal of ldb_close() function form the code
thanks to our move to talloc in ldb code, we do not need it anymore
use talloc_free() to close and free an ldb database
- some minor updates to ldb modules code to cope with the change and fix some
bugs I found out during the process
(This used to be commit d58be9e74b786a11a57e89df36081d55730dfe0a)
Diffstat (limited to 'source4/lib/ldb/modules')
-rw-r--r-- | source4/lib/ldb/modules/schema.c | 40 | ||||
-rw-r--r-- | source4/lib/ldb/modules/skel.c | 16 | ||||
-rw-r--r-- | source4/lib/ldb/modules/timestamps.c | 134 |
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 = ×tamps_ops; + talloc_set_destructor (ctx, timestamps_destructor); + return ctx; } |