libgpo: implement CSE filtering in gpext_process_extension().
authorGünther Deschner <gd@samba.org>
Thu, 19 Dec 2013 16:25:37 +0000 (17:25 +0100)
committerAndreas Schneider <asn@samba.org>
Tue, 7 Jan 2014 15:59:38 +0000 (16:59 +0100)
Guenther

Signed-off-by: Günther Deschner <gd@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
libgpo/gpext/gpext.c
libgpo/gpext/gpext.h
libgpo/gpo_util.c

index 7c83aa577fa833afeb6be636563db7a138df1070..85f0831a04871e20bb3b78a9c648845113f19b75 100644 (file)
@@ -733,12 +733,12 @@ NTSTATUS gpext_process_extension(TALLOC_CTX *mem_ctx,
                                 struct registry_key *root_key,
                                 const struct GROUP_POLICY_OBJECT *deleted_gpo_list,
                                 const struct GROUP_POLICY_OBJECT *changed_gpo_list,
-                                const char *extension_guid,
-                                const char *snapin_guid)
+                                const char *extension_guid_filter)
 {
        NTSTATUS status;
        struct gp_extension *ext = NULL;
        const struct GROUP_POLICY_OBJECT *gpo;
+       struct GUID extension_guid_filter_guid;
 
        status = gpext_init_gp_extensions(mem_ctx);
        if (!NT_STATUS_IS_OK(status)) {
@@ -747,11 +747,25 @@ NTSTATUS gpext_process_extension(TALLOC_CTX *mem_ctx,
                return status;
        }
 
+       if (extension_guid_filter) {
+               status = GUID_from_string(extension_guid_filter,
+                                         &extension_guid_filter_guid);
+               if (!NT_STATUS_IS_OK(status)) {
+                       return status;
+               }
+       }
+
        for (ext = extensions; ext; ext = ext->next) {
 
                struct GROUP_POLICY_OBJECT *deleted_gpo_list_filtered = NULL;
                struct GROUP_POLICY_OBJECT *changed_gpo_list_filtered = NULL;
 
+               if (extension_guid_filter) {
+                       if (!GUID_equal(&extension_guid_filter_guid, ext->guid)) {
+                               continue;
+                       }
+               }
+
                for (gpo = deleted_gpo_list; gpo; gpo = gpo->next) {
 
                        bool is_present = false;
index 01368b783f86b4f2fbff9bab5339a7aba0dccf0f..600af23d4c9aae1d1449c56587a4bd870026b993 100644 (file)
@@ -103,8 +103,7 @@ NTSTATUS gpext_process_extension(TALLOC_CTX *mem_ctx,
                                 struct registry_key *root_key,
                                 const struct GROUP_POLICY_OBJECT *deleted_gpo_list,
                                 const struct GROUP_POLICY_OBJECT *changed_gpo_list,
-                                const char *extension_guid,
-                                const char *snapin_guid);
+                                const char *extension_guid);
 
 
 #endif /* __GPEXT_H__ */
index 3edb4a59c72edcdb0057a96eab4c3b1eb9a9025b..2f1c997df65ecc2b932d3118286b8c1cb3e8b24a 100644 (file)
@@ -469,8 +469,7 @@ static NTSTATUS gpo_process_a_gpo(TALLOC_CTX *mem_ctx,
                ntstatus = gpext_process_extension(mem_ctx,
                                                   flags, token, root_key,
                                                   NULL, gpo,
-                                                  gp_ext->extensions_guid[i],
-                                                  gp_ext->snapins_guid[i]);
+                                                  gp_ext->extensions_guid[i]);
                if (!NT_STATUS_IS_OK(ntstatus)) {
                        return ntstatus;
                }