summaryrefslogtreecommitdiff
path: root/source4/lib/ldb
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-10-12 08:51:12 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:39:43 -0500
commitc8978cb1f15b1ddc0c420baa568bd11db080b744 (patch)
tree7a04b650f52d1e6d143aa6bf4ed9f87e4670a9ef /source4/lib/ldb
parentdc3e65b25295f68d0c7c5d3a7cc9bade638661f4 (diff)
downloadsamba-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.in2
-rw-r--r--source4/lib/ldb/common/ldb_dn.c9
-rw-r--r--source4/lib/ldb/common/ldb_msg.c2
-rw-r--r--source4/lib/ldb/config.mk9
-rw-r--r--source4/lib/ldb/include/ldb.h6
-rw-r--r--source4/lib/ldb/include/ldb_private.h2
-rw-r--r--source4/lib/ldb/modules/operational.c4
-rw-r--r--source4/lib/ldb/modules/timestamps.c222
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 = &timestamps_ops;
-
- return ctx;
-}