s4-ldb_modules/util: Implement dsdb_module_find_ntdsguid_for_computer()
authorKamen Mazdrashki <kamenim@samba.org>
Mon, 14 Feb 2011 09:34:32 +0000 (11:34 +0200)
committerKamen Mazdrashki <kamenim@samba.org>
Mon, 14 Feb 2011 11:32:22 +0000 (12:32 +0100)
as a counterpart for samdb_find_ntdsguid_for_computer()
to be used in LDB modules

source4/dsdb/samdb/ldb_modules/util.c

index e3e908f033dd7384e59b3957c384007d00d2ba0d..37ab4707f392d58f0ef18c444f31357c54e4700c 100644 (file)
@@ -606,6 +606,36 @@ int dsdb_check_optional_feature(struct ldb_module *module, struct ldb_dn *scope,
        return LDB_SUCCESS;
 }
 
+/*
+  find the NTDS GUID from a computers DN record
+ */
+int dsdb_module_find_ntdsguid_for_computer(struct ldb_module *module,
+                                          TALLOC_CTX *mem_ctx,
+                                          struct ldb_dn *computer_dn,
+                                          struct GUID *ntds_guid,
+                                          struct ldb_request *parent)
+{
+       int ret;
+       struct ldb_dn *dn;
+
+       *ntds_guid = GUID_zero();
+
+       ret = dsdb_module_reference_dn(module, mem_ctx, computer_dn,
+                                      "serverReferenceBL", &dn, parent);
+       if (ret != LDB_SUCCESS) {
+               return ret;
+       }
+
+       if (!ldb_dn_add_child_fmt(dn, "CN=NTDS Settings")) {
+               talloc_free(dn);
+               return LDB_ERR_OPERATIONS_ERROR;
+       }
+
+       ret = dsdb_module_guid_by_dn(module, dn, ntds_guid, parent);
+       talloc_free(dn);
+       return ret;
+}
+
 /*
   find a 'reference' DN that points at another object
   (eg. serverReference, rIDManagerReference etc)