Standalone samdb_ntds_site_settings_options() helper
authorDave Craft <wimberosa@gmail.com>
Wed, 6 Jul 2011 02:19:54 +0000 (21:19 -0500)
committerAndrew Tridgell <tridge@samba.org>
Wed, 13 Jul 2011 21:05:09 +0000 (07:05 +1000)
A helper function for retrieving the ntds site settings
via standalone function call.  Used within KCC

Signed-off-by: Andrew Tridgell <tridge@samba.org>
source4/dsdb/common/util.c

index 3fa8f67447cef449d5b35471886d8fa1297a1951..7283405bb368f142d1d00e083a5e88c3cb050ee4 100644 (file)
@@ -2908,6 +2908,54 @@ failed:
 }
 
 
+/*
+ * return NTDSSiteSettings options. See MS-ADTS 7.1.1.2.2.1.1
+ * flags are DS_NTDSSETTINGS_OPT_*
+ */
+int samdb_ntds_site_settings_options(struct ldb_context *ldb_ctx,
+                                       uint32_t *options)
+{
+       int rc;
+       TALLOC_CTX *tmp_ctx;
+       struct ldb_result *res;
+       struct ldb_dn *site_dn;
+       const char *attrs[] = { "options", NULL };
+
+       tmp_ctx = talloc_new(ldb_ctx);
+       if (tmp_ctx == NULL)
+               goto failed;
+
+        /* Retrieve the site dn for the ldb that we
+        * have open.  This is our local site.
+         */
+        site_dn = samdb_server_site_dn(ldb_ctx, tmp_ctx);
+       if (site_dn == NULL)
+               goto failed;
+
+       /* Perform a one level (child) search from the local
+         * site distinguided name.   We're looking for the
+         * "options" attribute within the nTDSSiteSettings
+         * object
+        */
+       rc = ldb_search(ldb_ctx, tmp_ctx, &res, site_dn,
+                       LDB_SCOPE_ONELEVEL, attrs,
+                        "objectClass=nTDSSiteSettings");
+
+        if (rc != LDB_SUCCESS || res->count != 1)
+               goto failed;
+
+       *options = ldb_msg_find_attr_as_uint(res->msgs[0], "options", 0);
+
+       talloc_free(tmp_ctx);
+
+       return LDB_SUCCESS;
+
+failed:
+       DEBUG(1,("Failed to find our NTDS Site Settings options in ldb!\n"));
+       talloc_free(tmp_ctx);
+       return LDB_ERR_NO_SUCH_OBJECT;
+}
+
 /*
   return NTDS options flags. See MS-ADTS 7.1.1.2.2.1.2.1.1