r10667: cope with a NULL tree for base searches in ldb_search()
authorAndrew Tridgell <tridge@samba.org>
Fri, 30 Sep 2005 23:47:40 +0000 (23:47 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:39:16 +0000 (13:39 -0500)
source/lib/ldb/ldb_tdb/ldb_search.c

index 9af62c7754d4b54ba1b1f7593a239266d41667e4..574d9485f8fc552473c34c7c5d7ef55fe48e9204 100644 (file)
@@ -501,6 +501,17 @@ int ltdb_search_bytree(struct ldb_module *module, const struct ldb_dn *base,
        if ((base == NULL || base->comp_num == 0) &&
            (scope == LDB_SCOPE_BASE || scope == LDB_SCOPE_ONELEVEL)) return -1;
 
+       /* check if we are looking for a simple dn */
+       if (scope == LDB_SCOPE_BASE && tree == NULL) {
+               return ltdb_search_dn(module, base, attrs, res);
+       }
+
+       if (tree == NULL) {
+               char *err_string = talloc_strdup(module, "expression parse failed");
+               if (err_string) ldb_set_errstring(module, err_string);
+               return -1;
+       }
+
        /* it is important that we handle dn queries this way, and not
           via a full db search, otherwise ldb is horribly slow */
        if (tree->operation == LDB_OP_EQUALITY &&
@@ -553,18 +564,7 @@ int ltdb_search(struct ldb_module *module, const struct ldb_dn *base,
        if ((base == NULL || base->comp_num == 0) &&
            (scope == LDB_SCOPE_BASE || scope == LDB_SCOPE_ONELEVEL)) return -1;
 
-       /* check if we are looking for a simple dn */
-       if (scope == LDB_SCOPE_BASE && (expression == NULL || expression[0] == '\0')) {
-               ret = ltdb_search_dn(module, base, attrs, res);
-               return ret;
-       }
-
        tree = ldb_parse_tree(ltdb, expression);
-       if (tree == NULL) {
-               char *err_string = talloc_strdup(module, "expression parse failed");
-               if (err_string) ldb_set_errstring(module, err_string);
-               return -1;
-       }
 
        ret = ltdb_search_bytree(module, base, scope, tree, attrs, res);
        talloc_free(tree);