diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-10-12 08:51:12 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:39:43 -0500 |
commit | c8978cb1f15b1ddc0c420baa568bd11db080b744 (patch) | |
tree | 7a04b650f52d1e6d143aa6bf4ed9f87e4670a9ef /source4/lib/ldb | |
parent | dc3e65b25295f68d0c7c5d3a7cc9bade638661f4 (diff) | |
download | samba-c8978cb1f15b1ddc0c420baa568bd11db080b744.tar.gz samba-c8978cb1f15b1ddc0c420baa568bd11db080b744.tar.bz2 samba-c8978cb1f15b1ddc0c420baa568bd11db080b744.zip |
r10918: - fixed standalone ldb build
- added note about allowedAttributesEffective (will be needed for mmc)
- fixed some more ldb warnings
(This used to be commit e9e4d81b6976549db8a7668572a5da466fbec4a9)
Diffstat (limited to 'source4/lib/ldb')
-rw-r--r-- | source4/lib/ldb/Makefile.in | 2 | ||||
-rw-r--r-- | source4/lib/ldb/common/ldb_dn.c | 9 | ||||
-rw-r--r-- | source4/lib/ldb/common/ldb_msg.c | 2 | ||||
-rw-r--r-- | source4/lib/ldb/config.mk | 9 | ||||
-rw-r--r-- | source4/lib/ldb/include/ldb.h | 6 | ||||
-rw-r--r-- | source4/lib/ldb/include/ldb_private.h | 2 | ||||
-rw-r--r-- | source4/lib/ldb/modules/operational.c | 4 | ||||
-rw-r--r-- | source4/lib/ldb/modules/timestamps.c | 222 |
8 files changed, 15 insertions, 241 deletions
diff --git a/source4/lib/ldb/Makefile.in b/source4/lib/ldb/Makefile.in index 2ffe6d25b8..f7e4b234ee 100644 --- a/source4/lib/ldb/Makefile.in +++ b/source4/lib/ldb/Makefile.in @@ -59,7 +59,7 @@ COMMON_OBJ=common/ldb.o common/ldb_ldif.o \ common/ldb_dn.o common/ldb_match.o common/ldb_attributes.o \ common/attrib_handlers.o -MODULES_OBJ=modules/timestamps.o modules/schema.o modules/rdn_name.o \ +MODULES_OBJ=modules/operational.o modules/schema.o modules/rdn_name.o \ modules/ldb_map.o OBJS = $(MODULES_OBJ) $(COMMON_OBJ) $(LDB_TDB_OBJ) $(TDB_OBJ) $(TALLOC_OBJ) $(LDB_LDAP_OBJ) $(LDB_SQLITE3_OBJ) diff --git a/source4/lib/ldb/common/ldb_dn.c b/source4/lib/ldb/common/ldb_dn.c index 92e06025d5..b497de142b 100644 --- a/source4/lib/ldb/common/ldb_dn.c +++ b/source4/lib/ldb/common/ldb_dn.c @@ -127,7 +127,7 @@ static struct ldb_val ldb_dn_unescape_value(void *mem_ctx, const char *src) unsigned x; char *p, *dst = NULL, *end; - value.length = 0; + memset(&value, 0, sizeof(value)); LDB_DN_NULL_FAILED(src); @@ -276,8 +276,9 @@ static struct ldb_dn_component ldb_dn_explode_component(void *mem_ctx, char *raw char *p; int ret, qs, qe; + memset(&dc, 0, sizeof(dc)); + if (raw_component == NULL) { - dc.name = NULL; return dc; } @@ -618,8 +619,8 @@ char *ldb_dn_linearize_casefold(struct ldb_context *ldb, const struct ldb_dn *ed static struct ldb_dn_component ldb_dn_copy_component(void *mem_ctx, struct ldb_dn_component *src) { struct ldb_dn_component dst; - - dst.name = NULL; + + memset(&dst, 0, sizeof(dst)); if (src == NULL) { return dst; diff --git a/source4/lib/ldb/common/ldb_msg.c b/source4/lib/ldb/common/ldb_msg.c index a72a4616fb..977f68144b 100644 --- a/source4/lib/ldb/common/ldb_msg.c +++ b/source4/lib/ldb/common/ldb_msg.c @@ -646,7 +646,7 @@ time_t ldb_string_to_time(const char *s) if (s == NULL) return 0; - ZERO_STRUCT(tm); + memset(&tm, 0, sizeof(tm)); if (sscanf(s, "%04u%02u%02u%02u%02u%02u", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec) != 6) { diff --git a/source4/lib/ldb/config.mk b/source4/lib/ldb/config.mk index cdb0e171e5..205ddc972c 100644 --- a/source4/lib/ldb/config.mk +++ b/source4/lib/ldb/config.mk @@ -1,13 +1,4 @@ ################################################ -# Start MODULE libldb_timestamps -[MODULE::libldb_timestamps] -SUBSYSTEM = LIBLDB -INIT_OBJ_FILES = \ - lib/ldb/modules/timestamps.o -# End MODULE libldb_timestamps -################################################ - -################################################ # Start MODULE libldb_operational [MODULE::libldb_operational] SUBSYSTEM = LIBLDB diff --git a/source4/lib/ldb/include/ldb.h b/source4/lib/ldb/include/ldb.h index 3629d9ec47..adc8a3e061 100644 --- a/source4/lib/ldb/include/ldb.h +++ b/source4/lib/ldb/include/ldb.h @@ -453,7 +453,7 @@ const char *ldb_msg_find_string(const struct ldb_message *msg, void ldb_msg_sort_elements(struct ldb_message *msg); -struct ldb_message *ldb_msg_copy_shallow(TALLOC_CTX *mem_ctx, +struct ldb_message *ldb_msg_copy_shallow(void *mem_ctx, const struct ldb_message *msg); struct ldb_message *ldb_msg_copy(void *mem_ctx, const struct ldb_message *msg); @@ -489,7 +489,7 @@ const struct ldb_attrib_handler *ldb_attrib_handler(struct ldb_context *ldb, const char *attrib); -const char **ldb_attr_list_copy(TALLOC_CTX *mem_ctx, const char * const *attrs); +const char **ldb_attr_list_copy(void *mem_ctx, const char * const *attrs); int ldb_attr_in_list(const char * const *attrs, const char *attr); @@ -500,7 +500,7 @@ void ldb_parse_tree_attr_replace(struct ldb_parse_tree *tree, int ldb_msg_rename_attr(struct ldb_message *msg, const char *attr, const char *replace); int ldb_msg_copy_attr(struct ldb_message *msg, const char *attr, const char *replace); -char *ldb_timestring(TALLOC_CTX *mem_ctx, time_t t); +char *ldb_timestring(void *mem_ctx, time_t t); time_t ldb_string_to_time(const char *s); #endif diff --git a/source4/lib/ldb/include/ldb_private.h b/source4/lib/ldb/include/ldb_private.h index e444b7235a..3fb73a93b7 100644 --- a/source4/lib/ldb/include/ldb_private.h +++ b/source4/lib/ldb/include/ldb_private.h @@ -165,7 +165,7 @@ int lsqlite3_connect(struct ldb_context *ldb, const char *url, unsigned int flags, const char *options[]); -struct ldb_module *timestamps_module_init(struct ldb_context *ldb, const char *options[]); +struct ldb_module *operational_module_init(struct ldb_context *ldb, const char *options[]); struct ldb_module *schema_module_init(struct ldb_context *ldb, const char *options[]); struct ldb_module *rdn_name_module_init(struct ldb_context *ldb, const char *options[]); diff --git a/source4/lib/ldb/modules/operational.c b/source4/lib/ldb/modules/operational.c index 09f9a9e62c..c40936df07 100644 --- a/source4/lib/ldb/modules/operational.c +++ b/source4/lib/ldb/modules/operational.c @@ -61,6 +61,10 @@ for this one we do the search as normal, then if requested ask for objectclass, change the attribute name, and add it + allowedAttributesEffective: HIDDEN, CONSTRUCTED, not-searchable, + list of attributes that can be modified - requires schema lookup + + attributeTypes: in schema only objectClasses: in schema only matchingRules: in schema only diff --git a/source4/lib/ldb/modules/timestamps.c b/source4/lib/ldb/modules/timestamps.c deleted file mode 100644 index 8451da2445..0000000000 --- a/source4/lib/ldb/modules/timestamps.c +++ /dev/null @@ -1,222 +0,0 @@ -/* - ldb database library - - Copyright (C) Simo Sorce 2004 - - ** NOTE! The following LGPL license applies to the ldb - ** library. This does NOT imply that all of Samba is released - ** under the LGPL - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -/* - * Name: ldb - * - * Component: ldb timestamps module - * - * Description: add object timestamping functionality - * - * Author: Simo Sorce - */ - -#include "includes.h" -#include "ldb/include/ldb.h" -#include "ldb/include/ldb_private.h" -#include <time.h> - -static int timestamps_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, "timestamps_search\n"); - return ldb_next_search_bytree(module, base, scope, tree, attrs, res); -} - -static int add_time_element(struct ldb_module *module, struct ldb_message *msg, - const char *attr_name, const char *time_string, unsigned int flags) -{ - struct ldb_message_element *attribute = NULL; - - int i; - - for (i = 0; i < msg->num_elements; i++) { - if (ldb_attr_cmp(msg->elements[i].name, attr_name) == 0) { - return 0; - } - } - - if (ldb_msg_add_string(msg, attr_name, time_string) != 0) { - return -1; - } - - for (i = 0; i < msg->num_elements; i++) { - if (ldb_attr_cmp(attr_name, msg->elements[i].name) == 0) { - attribute = &msg->elements[i]; - break; - } - } - - if (!attribute) { - return -1; - } - - attribute->flags = flags; - - return 0; -} - -/* add_record: add crateTimestamp/modifyTimestamp attributes */ -static int timestamps_add_record(struct ldb_module *module, const struct ldb_message *msg) -{ - struct ldb_message *msg2 = NULL; - struct tm *tm; - char *timestr; - time_t timeval; - int ret, i; - - ldb_debug(module->ldb, LDB_DEBUG_TRACE, "timestamps_add_record\n"); - - /* do not manipulate our control entries */ - if (ldb_dn_is_special(msg->dn)) { - return ldb_next_add_record(module, msg); - } - - timeval = time(NULL); - tm = gmtime(&timeval); - if (!tm) { - return -1; - } - - msg2 = talloc(module, struct ldb_message); - if (!msg2) { - 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->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); - } else { - ret = ldb_next_add_record(module, msg); - } - - return ret; -} - -/* modify_record: change modifyTimestamp as well */ -static int timestamps_modify_record(struct ldb_module *module, const struct ldb_message *msg) -{ - struct ldb_message *msg2 = NULL; - struct tm *tm; - char *timestr; - time_t timeval; - int ret, i; - - ldb_debug(module->ldb, LDB_DEBUG_TRACE, "timestamps_modify_record\n"); - - /* do not manipulate our control entries */ - if (ldb_dn_is_special(msg->dn)) { - return ldb_next_modify_record(module, msg); - } - - timeval = time(NULL); - tm = gmtime(&timeval); - if (!tm) { - return -1; - } - - msg2 = talloc(module, struct ldb_message); - if (!msg2) { - 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->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); - - ret = ldb_next_modify_record(module, msg2); - talloc_free(msg2); - - return ret; -} - - -static const struct ldb_module_ops timestamps_ops = { - .name = "timestamps", - .search_bytree = timestamps_search_bytree, - .add_record = timestamps_add_record, - .modify_record = timestamps_modify_record -}; - - -/* the init function */ -#ifdef HAVE_DLOPEN_DISABLED - struct ldb_module *init_module(struct ldb_context *ldb, const char *options[]) -#else -struct ldb_module *timestamps_module_init(struct ldb_context *ldb, const char *options[]) -#endif -{ - struct ldb_module *ctx; - - ctx = talloc(ldb, struct ldb_module); - if (!ctx) - return NULL; - - ctx->private_data = NULL; - ctx->ldb = ldb; - ctx->prev = ctx->next = NULL; - ctx->ops = ×tamps_ops; - - return ctx; -} |