1/* 2 * Unix SMB/CIFS implementation. 3 * Group Policy Support 4 * Copyright (C) Guenther Deschner 2007-2008 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, see <http://www.gnu.org/licenses/>. 18 */ 19 20#ifndef __GPEXT_H__ 21#define __GPEXT_H__ 22 23#include "librpc/gen_ndr/winreg.h" 24 25#define KEY_WINLOGON_GPEXT_PATH "HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\GPExtensions" 26 27#define SAMBA_SUBSYSTEM_GPEXT "gpext" 28 29#define SMB_GPEXT_INTERFACE_VERSION 1 30 31struct gp_extension { 32 struct GUID *guid; 33 const char *name; 34 struct gp_extension_methods *methods; 35 struct gp_extension *prev, *next; 36}; 37 38struct gp_extension_reg_table { 39 const char *val; 40 enum winreg_Type type; 41 const char *data; 42}; 43 44struct gp_extension_reg_entry { 45 const char *value; 46 struct registry_value *data; 47}; 48 49struct gp_extension_reg_info_entry { 50 struct GUID guid; 51 size_t num_entries; 52 struct gp_extension_reg_entry *entries; 53}; 54 55struct gp_extension_reg_info { 56 size_t num_entries; 57 struct gp_extension_reg_info_entry *entries; 58}; 59 60struct gp_extension_methods { 61 62 NTSTATUS (*initialize)(TALLOC_CTX *mem_ctx); 63 64 NTSTATUS (*process_group_policy)(ADS_STRUCT *ads, 65 TALLOC_CTX *mem_ctx, 66 uint32_t flags, 67 struct registry_key *root_key, 68 const NT_USER_TOKEN *token, 69 struct GROUP_POLICY_OBJECT *gpo, 70 const char *extension_guid, 71 const char *snapin_guid); 72 73 NTSTATUS (*process_group_policy2)(ADS_STRUCT *ads, 74 TALLOC_CTX *mem_ctx, 75 uint32_t flags, 76 const NT_USER_TOKEN *token, 77 struct GROUP_POLICY_OBJECT *gpo_list, 78 const char *extension_guid); 79 80 NTSTATUS (*get_reg_config)(TALLOC_CTX *mem_ctx, 81 struct gp_extension_reg_info **info); 82 83 NTSTATUS (*shutdown)(void); 84}; 85 86/* The following definitions come from libgpo/gpext/gpext.c */ 87 88struct gp_extension *get_gp_extension_list(void); 89NTSTATUS unregister_gp_extension(const char *name); 90NTSTATUS register_gp_extension(TALLOC_CTX *gpext_ctx, 91 int version, 92 const char *name, 93 const char *guid, 94 struct gp_extension_methods *methods); 95NTSTATUS gp_ext_info_add_entry(TALLOC_CTX *mem_ctx, 96 const char *module, 97 const char *ext_guid, 98 struct gp_extension_reg_table *table, 99 struct gp_extension_reg_info *info); 100NTSTATUS shutdown_gp_extensions(void); 101NTSTATUS init_gp_extensions(TALLOC_CTX *mem_ctx); 102NTSTATUS free_gp_extensions(void); 103void debug_gpext_header(int lvl, 104 const char *name, 105 uint32_t flags, 106 struct GROUP_POLICY_OBJECT *gpo, 107 const char *extension_guid, 108 const char *snapin_guid); 109NTSTATUS process_gpo_list_with_extension(ADS_STRUCT *ads, 110 TALLOC_CTX *mem_ctx, 111 uint32_t flags, 112 const NT_USER_TOKEN *token, 113 struct GROUP_POLICY_OBJECT *gpo_list, 114 const char *extension_guid, 115 const char *snapin_guid); 116NTSTATUS gpext_process_extension(ADS_STRUCT *ads, 117 TALLOC_CTX *mem_ctx, 118 uint32_t flags, 119 const NT_USER_TOKEN *token, 120 struct registry_key *root_key, 121 struct GROUP_POLICY_OBJECT *gpo, 122 const char *extension_guid, 123 const char *snapin_guid); 124 125 126#endif /* __GPEXT_H__ */ 127