From e18a172207b433a3f027541d4d5e98cea73dbcb6 Mon Sep 17 00:00:00 2001 From: Wilco Baan Hofman Date: Mon, 7 Jun 2010 15:21:53 +0200 Subject: Add preliminary support for storing changed Group Policies. Signed-off-by: Jelmer Vernooij --- source4/lib/policy/gp_ldap.c | 56 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to 'source4/lib/policy/gp_ldap.c') diff --git a/source4/lib/policy/gp_ldap.c b/source4/lib/policy/gp_ldap.c index 95d9808243..ea86fb8ac5 100644 --- a/source4/lib/policy/gp_ldap.c +++ b/source4/lib/policy/gp_ldap.c @@ -978,3 +978,59 @@ NTSTATUS gp_set_ads_acl (struct gp_context *gp_ctx, const char *dn_str, const st talloc_free(mem_ctx); return NT_STATUS_OK; } + +/* This function sets flags, version and displayName on a GPO */ +NTSTATUS gp_set_ldap_gpo(struct gp_context *gp_ctx, struct gp_object *gpo) +{ + int rv; + TALLOC_CTX *mem_ctx; + struct ldb_message *msg; + char *version_str, *flags_str; + + mem_ctx = talloc_new(gp_ctx); + + msg = ldb_msg_new(mem_ctx); + NT_STATUS_HAVE_NO_MEMORY_AND_FREE(msg, mem_ctx); + + msg->dn = ldb_dn_new(mem_ctx, gp_ctx->ldb_ctx, gpo->dn); + + version_str = talloc_asprintf(mem_ctx, "%d", gpo->version); + NT_STATUS_HAVE_NO_MEMORY_AND_FREE(msg, mem_ctx); + + flags_str = talloc_asprintf(mem_ctx, "%d", gpo->flags); + NT_STATUS_HAVE_NO_MEMORY_AND_FREE(msg, mem_ctx); + + rv = ldb_msg_add_string(msg, "flags", flags_str); + if (rv != 0) { + DEBUG(0, ("LDB message add string failed for flags: %s\n", ldb_strerror(rv))); + talloc_free(mem_ctx); + return NT_STATUS_UNSUCCESSFUL; + } + msg->elements[0].flags = LDB_FLAG_MOD_REPLACE; + + rv = ldb_msg_add_string(msg, "version", version_str); + if (rv != 0) { + DEBUG(0, ("LDB message add string failed for version: %s\n", ldb_strerror(rv))); + talloc_free(mem_ctx); + return NT_STATUS_UNSUCCESSFUL; + } + msg->elements[1].flags = LDB_FLAG_MOD_REPLACE; + + rv = ldb_msg_add_string(msg, "displayName", gpo->display_name); + if (rv != 0) { + DEBUG(0, ("LDB message add string failed for displayName: %s\n", ldb_strerror(rv))); + talloc_free(mem_ctx); + return NT_STATUS_UNSUCCESSFUL; + } + msg->elements[2].flags = LDB_FLAG_MOD_REPLACE; + + rv = ldb_modify(gp_ctx->ldb_ctx, msg); + if (rv != 0) { + DEBUG(0, ("LDB modify failed: %s\n", ldb_strerror(rv))); + talloc_free(mem_ctx); + return NT_STATUS_UNSUCCESSFUL; + } + + talloc_free(mem_ctx); + return NT_STATUS_OK; +} -- cgit