From: Stefan Metzmacher Date: Tue, 11 May 2010 08:34:19 +0000 (+0200) Subject: s4:dsdb: cached results of samdb_rodc() X-Git-Url: http://git.samba.org/?p=metze%2Fsamba%2Fwip.git;a=commitdiff_plain;h=1b1e2c7913097213a99ef74b90654e13b56775c4 s4:dsdb: cached results of samdb_rodc() metze --- diff --git a/source4/dsdb/common/util.c b/source4/dsdb/common/util.c index 5deb1d08b156..7c27b4adfb2f 100644 --- a/source4/dsdb/common/util.c +++ b/source4/dsdb/common/util.c @@ -2705,11 +2705,39 @@ int samdb_is_rodc(struct ldb_context *sam_ctx, const struct GUID *objectGUID, bo int samdb_rodc(struct ldb_context *sam_ctx, bool *am_rodc) { const struct GUID *objectGUID; + int ret; + bool *cached; + + /* see if we have a cached copy */ + cached = (bool *)ldb_get_opaque(ldb, "cache.am_rodc"); + if (cached) { + *am_rodc = *cached; + return LDB_SUCCESS; + } + objectGUID = samdb_ntds_objectGUID(sam_ctx); if (!objectGUID) { return LDB_ERR_OPERATIONS_ERROR; } - return samdb_is_rodc(sam_ctx, objectGUID, am_rodc); + + ret = samdb_is_rodc(sam_ctx, objectGUID, am_rodc); + if (ret != LDB_SUCCESS) { + return ret; + } + + cached = talloc(ldb, bool); + if (cached == NULL) { + return LDB_ERR_OPERATIONS_ERROR; + } + *cached = *am_rodc; + + ret = ldb_set_opaque(ldb, "cache.am_rodc", cached); + if (ret != LDB_SUCCESS) { + talloc_free(cached); + return LDB_ERR_OPERATIONS_ERROR; + } + + return LDB_SUCCESS; }