2 * Unix SMB/CIFS implementation.
3 * Group Policy Object Support
4 * Copyright (C) Guenther Deschner 2005
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 2 of the License, or
9 * (at your option) any later version.
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.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 #define GPT_INI_SECTION_GENERAL "General"
26 #define GPT_INI_PARAMETER_VERSION "Version"
27 #define GPT_INI_PARAMETER_DISPLAYNAME "displayName"
31 const char *display_name;
34 static uint32 version;
36 static BOOL do_section(const char *section)
38 DEBUG(10,("do_section: %s\n", section));
43 static BOOL do_parameter(const char *parameter, const char *value)
45 DEBUG(10,("do_parameter: %s, %s\n", parameter, value));
47 if (strequal(parameter, GPT_INI_PARAMETER_VERSION)) {
48 version = atoi(value);
53 NTSTATUS ads_gpo_get_sysvol_gpt_version(ADS_STRUCT *ads,
55 const char *filesyspath,
56 uint32 *sysvol_version)
60 struct cli_state *cli;
63 static int io_bufsize = 64512;
64 int read_size = io_bufsize;
69 const char *local_file;
73 next_token(&filesyspath, tok, "\\", sizeof(tok));
74 next_token(&filesyspath, tok, "\\", sizeof(tok));
76 path = talloc_asprintf(mem_ctx, "\\%s\\gpt.ini", filesyspath);
78 return NT_STATUS_NO_MEMORY;
81 local_file = talloc_asprintf(mem_ctx, "%s/%s", lock_path("gpo_cache"), "gpt.ini");
82 if (local_file == NULL) {
83 return NT_STATUS_NO_MEMORY;
86 /* FIXME: walk down the dfs tree instead */
87 status = cli_full_connection(&cli, global_myname(),
88 ads->config.ldap_server_name,
91 ads->auth.user_name, NULL, ads->auth.password,
92 CLI_FULL_CONNECTION_USE_KERBEROS,
94 if (!NT_STATUS_IS_OK(status)) {
98 fnum = cli_open(cli, path, O_RDONLY, DENY_NONE);
100 return NT_STATUS_NO_SUCH_FILE;
104 data = (char *)SMB_MALLOC(read_size);
106 return NT_STATUS_NO_MEMORY;
109 handle = sys_open(local_file, O_WRONLY|O_CREAT|O_TRUNC, 0644);
112 return NT_STATUS_NO_SUCH_FILE;
117 int n = cli_read(cli, fnum, data, nread + start, read_size);
122 if (write(handle, data, n) != n) {
129 cli_close(cli, fnum);
131 if (!pm_process(local_file, do_section, do_parameter)) {
132 return NT_STATUS_INVALID_PARAMETER;
135 *sysvol_version = version;
146 perfectly parseable with pm_process() :))
151 MinimumPasswordAge = 1
152 MaximumPasswordAge = 42
153 MinimumPasswordLength = 7
154 PasswordComplexity = 1
155 PasswordHistorySize = 24
157 RequireLogonToChangePassword = 0
158 ForceLogoffWhenHourExpire = 0
159 ClearTextPassword = 0
165 TicketValidateClient = 1
167 signature="$CHICAGO$"
171 #endif /* HAVE_LDAP */