r19264: Clarify behaviour in ldb_search_callback() and provide more
authorAndrew Bartlett <abartlet@samba.org>
Fri, 13 Oct 2006 09:44:55 +0000 (09:44 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:20:59 +0000 (14:20 -0500)
information when modules fail to load.

Andrew Bartlett

source/lib/ldb/common/ldb.c

index 28d1c7235aa17e2afdf5f4f59c243813b5aa8ac3..7648abf795e27bfa7e73f64603ff061a556cee1b 100644 (file)
@@ -208,7 +208,8 @@ int ldb_connect(struct ldb_context *ldb, const char *url, unsigned int flags, co
        }
 
        if (ldb_load_modules(ldb, options) != LDB_SUCCESS) {
-               ldb_debug(ldb, LDB_DEBUG_FATAL, "Unable to load modules for '%s'\n", url);
+               ldb_debug(ldb, LDB_DEBUG_FATAL, "Unable to load modules for %s: %s\n",
+                         url, ldb_errstring(ldb));
                return LDB_ERR_OTHER;
        }
 
@@ -536,8 +537,9 @@ static int ldb_search_callback(struct ldb_context *ldb, void *context, struct ld
        if (!res || !ares) {
                goto error;
        }
-
-       if (ares->type == LDB_REPLY_ENTRY) {
+       
+       switch (ares->type) {
+       case LDB_REPLY_ENTRY:
                res->msgs = talloc_realloc(res, res->msgs, struct ldb_message *, res->count + 2);
                if (! res->msgs) {
                        goto error;
@@ -547,9 +549,8 @@ static int ldb_search_callback(struct ldb_context *ldb, void *context, struct ld
 
                res->msgs[res->count] = talloc_move(res->msgs, &ares->message);
                res->count++;
-       }
-
-       if (ares->type == LDB_REPLY_REFERRAL) {
+               break;
+       case LDB_REPLY_REFERRAL:
                if (res->refs) {
                        for (n = 0; res->refs[n]; n++) /*noop*/ ;
                } else {
@@ -563,8 +564,11 @@ static int ldb_search_callback(struct ldb_context *ldb, void *context, struct ld
 
                res->refs[n] = talloc_move(res->refs, &ares->referral);
                res->refs[n + 1] = NULL;
+       case LDB_REPLY_DONE:
+               /* Should do something here to detect if this never
+                * happens */
+               break;          
        }
-
        talloc_steal(res, ares->controls);
        talloc_free(ares);
        return LDB_SUCCESS;