/* * Unix SMB/CIFS implementation. * Group Policy Object Support * Copyright (C) Guenther Deschner 2005 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "includes.h" #define GPT_INI_SECTION_GENERAL "General" #define GPT_INI_PARAMETER_VERSION "Version" #define GPT_INI_PARAMETER_DISPLAYNAME "displayName" struct gpt_ini { uint32 version; const char *display_name; }; static uint32 version; static BOOL do_section(const char *section) { DEBUG(10,("do_section: %s\n", section)); return True; } static BOOL do_parameter(const char *parameter, const char *value) { DEBUG(10,("do_parameter: %s, %s\n", parameter, value)); if (strequal(parameter, GPT_INI_PARAMETER_VERSION)) { version = atoi(value); } return True; } NTSTATUS ads_gpo_get_sysvol_gpt_version(ADS_STRUCT *ads, TALLOC_CTX *mem_ctx, const char *filesyspath, uint32 *sysvol_version) { NTSTATUS status; const char *path; struct cli_state *cli; int fnum; fstring tok; static int io_bufsize = 64512; int read_size = io_bufsize; char *data = NULL; off_t start = 0; off_t nread = 0; int handle = 0; const char *local_file; *sysvol_version = 0; next_token(&filesyspath, tok, "\\", sizeof(tok)); next_token(&filesyspath, tok, "\\", sizeof(tok)); path = talloc_asprintf(mem_ctx, "\\%s\\gpt.ini", filesyspath); if (path == NULL) { return NT_STATUS_NO_MEMORY; } local_file = talloc_asprintf(mem_ctx, "%s/%s", lock_path("gpo_cache"), "gpt.ini"); if (local_file == NULL) { return NT_STATUS_NO_MEMORY; } /* FIXME: walk down the dfs tree instead */ status = cli_full_connection(&cli, global_myname(), ads->config.ldap_server_name, NULL, 0, "SYSVOL", "A:", ads->auth.user_name, NULL, ads->auth.password, CLI_FULL_CONNECTION_USE_KERBEROS, Undefined, NULL); if (!NT_STATUS_IS_OK(status)) { return status; } fnum = cli_open(cli, path, O_RDONLY, DENY_NONE); if (fnum == -1) { return NT_STATUS_NO_SUCH_FILE; } data = (char *)SMB_MALLOC(read_size); if (data == NULL) { return NT_STATUS_NO_MEMORY; } handle = sys_open(local_file, O_WRONLY|O_CREAT|O_TRUNC, 0644); if (handle == -1) { return NT_STATUS_NO_SUCH_FILE; } while (1) { int n = cli_read(cli, fnum, data, nread + start, read_size); if (n <= 0) break; if (write(handle, data, n) != n) { break; } nread += n; } cli_close(cli, fnum); if (!pm_process(local_file, do_section, do_parameter)) { return NT_STATUS_INVALID_PARAMETER; } *sysvol_version = version; SAFE_FREE(data); cli_shutdown(cli); return NT_STATUS_OK; } /* perfectly parseable with pm_process() :)) [Unicode] Unicode=yes [System Access] MinimumPasswordAge = 1 MaximumPasswordAge = 42 MinimumPasswordLength = 7 PasswordComplexity = 1 PasswordHistorySize = 24 LockoutBadCount = 0 RequireLogonToChangePassword = 0 ForceLogoffWhenHourExpire = 0 ClearTextPassword = 0 [Kerberos Policy] MaxTicketAge = 10 MaxRenewAge = 7 MaxServiceAge = 600 MaxClockSkew = 5 TicketValidateClient = 1 [Version] signature="$CHICAGO$" Revision=1 */