r19964: make debuging easier and report usefull error messages
authorStefan Metzmacher <metze@samba.org>
Thu, 30 Nov 2006 10:03:54 +0000 (10:03 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:28:40 +0000 (14:28 -0500)
metze

source/lib/ldb/common/attrib_handlers.c
source/lib/ldb/ldb_tdb/ldb_index.c

index f563865c037459bb3d20a5fecbed0acb1947fdde..7a9fd1f9da9bcb4f013fe59cfd3b8e1026a903c5 100644 (file)
@@ -237,7 +237,7 @@ int ldb_canonicalise_dn(struct ldb_context *ldb, void *mem_ctx,
 
        dn = ldb_dn_new(ldb, mem_ctx, (char *)in->data);
        if ( ! ldb_dn_validate(dn)) {
-               return -1;
+               return LDB_ERR_INVALID_DN_SYNTAX;
        }
 
        out->data = (uint8_t *)ldb_dn_alloc_casefold(mem_ctx, dn);
index 045be985a4cd1c6e314ca25b06c0c768cca09726..99288d2b5f48b24bc7783f1868fd985629d73e8d 100644 (file)
@@ -110,6 +110,7 @@ static struct ldb_dn *ltdb_index_key(struct ldb_context *ldb,
        struct ldb_val v;
        const struct ldb_attrib_handler *h;
        char *attr_folded;
+       int r;
 
        attr_folded = ldb_attr_casefold(ldb, attr);
        if (!attr_folded) {
@@ -117,10 +118,13 @@ static struct ldb_dn *ltdb_index_key(struct ldb_context *ldb,
        }
 
        h = ldb_attrib_handler(ldb, attr);
-       if (h->canonicalise_fn(ldb, ldb, value, &v) != 0) {
+       r = h->canonicalise_fn(ldb, ldb, value, &v);
+       if (r != LDB_SUCCESS) {
                /* canonicalisation can be refused. For example, 
                   a attribute that takes wildcards will refuse to canonicalise
                   if the value contains a wildcard */
+               ldb_asprintf_errstring(ldb, "Failed to create index key for attribute '%s':%s:%s",
+                                      attr, ldb_strerror(r), ldb_errstring(ldb));
                talloc_free(attr_folded);
                return NULL;
        }
@@ -845,7 +849,6 @@ static int ltdb_index_add1(struct ldb_module *module, const char *dn,
        dn_key = ltdb_index_key(ldb, el->name, &el->values[v_idx]);
        if (!dn_key) {
                talloc_free(msg);
-               errno = ENOMEM;
                return -1;
        }
        talloc_steal(msg, dn_key);