From 636c9a7c719ef24205c40b8e2018d83040520490 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 3 Jan 2008 04:40:24 -0600 Subject: r26648: Move detection of global catalog captability to a central function, so this can be shared with the CLDAP server (for the netlogon reply). Andrew Bartlett (This used to be commit 592c10ae11c94007e38404a7edea9fd8471f1907) --- source4/dsdb/common/util.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'source4/dsdb') diff --git a/source4/dsdb/common/util.c b/source4/dsdb/common/util.c index 345f13fcbc..17a20199d5 100644 --- a/source4/dsdb/common/util.c +++ b/source4/dsdb/common/util.c @@ -1367,6 +1367,42 @@ failed: return false; } +/* + work out if we are a Global Catalog server for the domain of the current open ldb +*/ +bool samdb_is_gc(struct ldb_context *ldb) +{ + const char *attrs[] = { "options", NULL }; + int ret, options; + struct ldb_result *res; + TALLOC_CTX *tmp_ctx; + + tmp_ctx = talloc_new(ldb); + if (tmp_ctx == NULL) { + DEBUG(1, ("talloc_new failed in samdb_is_pdc")); + return false; + } + + /* Query cn=ntds settings,.... */ + ret = ldb_search(ldb, samdb_ntds_settings_dn(ldb), LDB_SCOPE_BASE, NULL, attrs, &res); + if (ret) { + return false; + } + if (res->count != 1) { + talloc_free(res); + return false; + } + + options = ldb_msg_find_attr_as_int(res->msgs[0], "options", 0); + talloc_free(res); + talloc_free(ldb); + + /* if options attribute has the 0x00000001 flag set, then enable the global catlog */ + if (options & 0x000000001) { + return true; + } + return false; +} /* Find a domain object in the parents of a particular DN. */ int samdb_search_for_parent_domain(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, struct ldb_dn *dn, -- cgit