s4-ldb: only show the outer level of ldb ops when tracing
authorAndrew Tridgell <tridge@samba.org>
Tue, 22 Sep 2009 01:15:19 +0000 (18:15 -0700)
committerAndrew Tridgell <tridge@samba.org>
Wed, 23 Sep 2009 00:10:05 +0000 (17:10 -0700)
source4/lib/ldb/common/ldb.c
source4/lib/ldb/common/ldb_modules.c
source4/lib/ldb/include/ldb_private.h

index e93560e559ef2bf14041dc906e5f9ee62b6cf171..ba88e6cd64a064528ce19688ce016b44a416a04c 100644 (file)
@@ -635,7 +635,8 @@ static void ldb_trace_request(struct ldb_context *ldb, struct ldb_request *req)
        case LDB_SEARCH:
                ldb_debug_add(ldb, "ldb_trace_request: SEARCH\n");
                ldb_debug_add(ldb, " dn: %s\n",
-                         ldb_dn_get_linearized(req->op.search.base));
+                             ldb_dn_is_null(req->op.search.base)?"<rootDSE>":
+                             ldb_dn_get_linearized(req->op.search.base));
                ldb_debug_add(ldb, " scope: %s\n", 
                          req->op.search.scope==LDB_SCOPE_BASE?"base":
                          req->op.search.scope==LDB_SCOPE_ONELEVEL?"one":
@@ -921,6 +922,10 @@ int ldb_build_search_req_ex(struct ldb_request **ret_req,
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
+       if (parent) {
+               req->handle->nesting++;
+       }
+
        *ret_req = req;
        return LDB_SUCCESS;
 }
@@ -988,6 +993,10 @@ int ldb_build_add_req(struct ldb_request **ret_req,
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
+       if (parent) {
+               req->handle->nesting++;
+       }
+
        *ret_req = req;
 
        return LDB_SUCCESS;
@@ -1026,6 +1035,10 @@ int ldb_build_mod_req(struct ldb_request **ret_req,
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
+       if (parent) {
+               req->handle->nesting++;
+       }
+
        *ret_req = req;
 
        return LDB_SUCCESS;
@@ -1064,6 +1077,10 @@ int ldb_build_del_req(struct ldb_request **ret_req,
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
+       if (parent) {
+               req->handle->nesting++;
+       }
+
        *ret_req = req;
 
        return LDB_SUCCESS;
@@ -1104,6 +1121,10 @@ int ldb_build_rename_req(struct ldb_request **ret_req,
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
+       if (parent) {
+               req->handle->nesting++;
+       }
+
        *ret_req = req;
 
        return LDB_SUCCESS;
@@ -1173,6 +1194,10 @@ int ldb_build_extended_req(struct ldb_request **ret_req,
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
+       if (parent) {
+               req->handle->nesting++;
+       }
+
        *ret_req = req;
 
        return LDB_SUCCESS;
index 997d3736533e63d00dceadaf513a43426ff6736d..ea29a09a2ab6703b99010f62c2a94f51105d7112 100644 (file)
@@ -540,6 +540,8 @@ int ldb_next_request(struct ldb_module *module, struct ldb_request *request)
                return LDB_ERR_UNWILLING_TO_PERFORM;
        }
 
+       request->handle->nesting++;
+
        switch (request->operation) {
        case LDB_SEARCH:
                FIND_OP(module, search);
@@ -570,6 +572,9 @@ int ldb_next_request(struct ldb_module *module, struct ldb_request *request)
                ret = module->ops->request(module, request);
                break;
        }
+
+       request->handle->nesting--;
+
        if (ret == LDB_SUCCESS) {
                return ret;
        }
@@ -672,7 +677,8 @@ int ldb_module_send_entry(struct ldb_request *req,
        ares->controls = talloc_steal(ares, ctrls);
        ares->error = LDB_SUCCESS;
 
-       if (req->handle->ldb->flags & LDB_FLG_ENABLE_TRACING) {
+       if ((req->handle->ldb->flags & LDB_FLG_ENABLE_TRACING) &&
+           req->handle->nesting == 0) {
                char *s;
                ldb_debug_add(req->handle->ldb, "ldb_trace_response: ENTRY\n");
                s = ldb_ldif_message_string(req->handle->ldb, msg, LDB_CHANGETYPE_NONE, msg);
@@ -706,7 +712,8 @@ int ldb_module_send_referral(struct ldb_request *req,
        ares->referral = talloc_steal(ares, ref);
        ares->error = LDB_SUCCESS;
 
-       if (req->handle->ldb->flags & LDB_FLG_ENABLE_TRACING) {
+       if ((req->handle->ldb->flags & LDB_FLG_ENABLE_TRACING) &&
+           req->handle->nesting == 0) {
                ldb_debug_add(req->handle->ldb, "ldb_trace_response: REFERRAL\n");
                ldb_debug_add(req->handle->ldb, "ref: %s\n", ref);
                ldb_debug_end(req->handle->ldb, LDB_DEBUG_TRACE);
@@ -744,7 +751,8 @@ int ldb_module_done(struct ldb_request *req,
 
        req->handle->flags |= LDB_HANDLE_FLAG_DONE_CALLED;
 
-       if (req->handle->ldb->flags & LDB_FLG_ENABLE_TRACING) {
+       if ((req->handle->ldb->flags & LDB_FLG_ENABLE_TRACING) &&
+           req->handle->nesting == 0) {
                ldb_debug_add(req->handle->ldb, "ldb_trace_response: DONE\n");
                ldb_debug_add(req->handle->ldb, "error: %u\n", error);
                if (ldb_errstring(req->handle->ldb)) {
index b78cef969a90b74a65d047fc031ee6dd8a85f097..0e0a1a206d671137d6e1922daffa1d2d536f7a1a 100644 (file)
@@ -54,6 +54,7 @@ struct ldb_handle {
        enum ldb_state state;
        struct ldb_context *ldb;
        unsigned flags;
+       unsigned nesting;
 };
 
 /* basic module structure */