s4-dsdb: added dsdb_search_by_dn_guid()
authorAndrew Tridgell <tridge@samba.org>
Sat, 2 Oct 2010 02:04:44 +0000 (19:04 -0700)
committerAndrew Tridgell <tridge@samba.org>
Sat, 2 Oct 2010 04:09:51 +0000 (21:09 -0700)
this is more efficient than first searching for the DN, then doing a
search. We should look at using this in lots of existing code

Pair-Programmed-With: Andrew Bartlett <abartlet@samba.org>

source4/dsdb/common/util.c

index 3259eabc3cf4ec28b6755570410faa3f4be9ef16..7e6090124bed2fe222ba728861554e5c82cab2db 100644 (file)
@@ -3759,6 +3759,32 @@ int dsdb_search_dn(struct ldb_context *ldb,
        return LDB_SUCCESS;
 }
 
+/*
+  search for attrs on one DN, by the GUID of the DN, allowing for
+  dsdb_flags controls
+ */
+int dsdb_search_by_dn_guid(struct ldb_context *ldb,
+                          TALLOC_CTX *mem_ctx,
+                          struct ldb_result **_res,
+                          const struct GUID *guid,
+                          const char * const *attrs,
+                          uint32_t dsdb_flags)
+{
+       TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx);
+       struct ldb_dn *dn;
+       int ret;
+
+       dn = ldb_dn_new_fmt(tmp_ctx, ldb, "<GUID=%s>", GUID_string(tmp_ctx, guid));
+       if (!ldb_dn_validate(dn)) {
+               talloc_free(tmp_ctx);
+               return LDB_ERR_INVALID_DN_SYNTAX;
+       }
+
+       ret = dsdb_search_dn(ldb, mem_ctx, _res, dn, attrs, dsdb_flags);
+       talloc_free(tmp_ctx);
+       return ret;
+}
+
 /*
   general search with dsdb_flags for controls
  */