Also check for allocation failures.
Reported-by: Franz Pförtsch <franz.pfoertsch@brose.com>
Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
size_t num_entries = 0;
char *unix_path = NULL;
const struct GROUP_POLICY_OBJECT *gpo;
+ char *gpo_cache_path = cache_path(GPO_CACHE_DIR);
+ if (gpo_cache_path == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
/* implementation of the policy callback function, see
* http://msdn.microsoft.com/en-us/library/aa373494%28v=vs.85%29.aspx
gpext_debug_header(0, "registry_process_group_policy", flags,
gpo, GP_EXT_GUID_REGISTRY, NULL);
- status = gpo_get_unix_path(mem_ctx, cache_path(GPO_CACHE_DIR),
+ status = gpo_get_unix_path(mem_ctx, gpo_cache_path,
gpo, &unix_path);
- NT_STATUS_NOT_OK_RETURN(status);
+ if (!NT_STATUS_IS_OK(status)) {
+ goto err_cache_path_free;
+ }
status = reg_parse_registry(mem_ctx,
flags,
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0,("failed to parse registry: %s\n",
nt_errstr(status)));
- return status;
+ goto err_cache_path_free;
}
dump_reg_entries(flags, "READ", entries, num_entries);
if (!W_ERROR_IS_OK(werr)) {
DEBUG(0,("failed to apply registry: %s\n",
win_errstr(werr)));
- return werror_to_ntstatus(werr);
+ status = werror_to_ntstatus(werr);
+ goto err_cache_path_free;
}
}
+ status = NT_STATUS_OK;
- return NT_STATUS_OK;
+err_cache_path_free:
+ talloc_free(gpo_cache_path);
+ return status;
}
/****************************************************************
GP_SCRIPTS_INI_LOGOFF
};
const struct GROUP_POLICY_OBJECT *gpo;
+ char *gpo_cache_path = cache_path(GPO_CACHE_DIR);
+ if (gpo_cache_path == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
/* implementation of the policy callback function, see
* http://msdn.microsoft.com/en-us/library/aa373494%28v=vs.85%29.aspx
gpext_debug_header(0, "scripts_process_group_policy", flags,
gpo, GP_EXT_GUID_SCRIPTS, NULL);
- status = gpo_get_unix_path(mem_ctx, cache_path(GPO_CACHE_DIR),
+ status = gpo_get_unix_path(mem_ctx, gpo_cache_path,
gpo, &unix_path);
- NT_STATUS_NOT_OK_RETURN(status);
+ if (!NT_STATUS_IS_OK(status)) {
+ goto err_cache_path_free;
+ }
status = gp_inifile_init_context(mem_ctx, flags, unix_path,
GP_SCRIPTS_INI, &ini_ctx);
- NT_STATUS_NOT_OK_RETURN(status);
+ if (!NT_STATUS_IS_OK(status)) {
+ goto err_cache_path_free;
+ }
for (i = 0; i < ARRAY_SIZE(list); i++) {
}
if (!NT_STATUS_IS_OK(status)) {
- return status;
+ TALLOC_FREE(ini_ctx);
+ goto err_cache_path_free;
}
dump_reg_entries(flags, "READ", entries, num_entries);
flags, list[i], gpo, entries, num_entries);
if (!W_ERROR_IS_OK(werr)) {
continue; /* FIXME: finally fix storing emtpy strings and REG_QWORD! */
- TALLOC_FREE(ini_ctx);
- return werror_to_ntstatus(werr);
}
}
TALLOC_FREE(ini_ctx);
}
+ status = NT_STATUS_OK;
- return NT_STATUS_OK;
+err_cache_path_free:
+ talloc_free(gpo_cache_path);
+ return status;
}
/****************************************************************
char *unix_path = NULL;
struct gp_inifile_context *ini_ctx = NULL;
const struct GROUP_POLICY_OBJECT *gpo;
+ char *gpo_cache_path = cache_path(GPO_CACHE_DIR);
+ if (gpo_cache_path == NULL) {
+ return NT_STATUS_NO_MEMORY;
+ }
/* implementation of the policy callback function, see
* http://msdn.microsoft.com/en-us/library/aa373494%28v=vs.85%29.aspx
/* this handler processes the gpttmpl files and merge output to the
* registry */
- status = gpo_get_unix_path(mem_ctx, cache_path(GPO_CACHE_DIR),
+ status = gpo_get_unix_path(mem_ctx, gpo_cache_path,
gpo, &unix_path);
if (!NT_STATUS_IS_OK(status)) {
goto out;
nt_errstr(status)));
}
TALLOC_FREE(ini_ctx);
+ talloc_free(gpo_cache_path);
return status;
}
struct GROUP_POLICY_OBJECT *gpo;
NTSTATUS result;
struct security_token *token = NULL;
+ char *gpo_cache_path;
if (argc < 1 || c->display_usage) {
d_printf("%s\n%s\n%s",
d_printf(_("finished\n"));
d_printf(_("* Refreshing Group Policy Data "));
- if (!NT_STATUS_IS_OK(result = check_refresh_gpo_list(ads, mem_ctx,
- cache_path(GPO_CACHE_DIR),
- flags,
- gpo_list))) {
+ gpo_cache_path = cache_path(GPO_CACHE_DIR);
+ if (gpo_cache_path == NULL) {
+ d_printf(_("failed: %s\n"), nt_errstr(NT_STATUS_NO_MEMORY));
+ goto out;
+ }
+ result = check_refresh_gpo_list(ads, mem_ctx,
+ gpo_cache_path,
+ flags,
+ gpo_list);
+ TALLOC_FREE(gpo_cache_path);
+ if (!NT_STATUS_IS_OK(result)) {
d_printf(_("failed: %s\n"), nt_errstr(result));
goto out;
}