diff options
author | David Disseldorp <ddiss@samba.org> | 2014-10-06 18:21:14 +0200 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2014-10-06 19:18:05 +0200 |
commit | 3c592eaac6db32843cde480226424e71312a853f (patch) | |
tree | 815e45508f9b2c5e69c35d2af8b75bfe8c5ebd03 /source3/libgpo/gpext/scripts.c | |
parent | e8ee9bb66e765433e94f03d46ccb66459bb5fc3f (diff) | |
download | samba-3c592eaac6db32843cde480226424e71312a853f.tar.gz samba-3c592eaac6db32843cde480226424e71312a853f.tar.xz samba-3c592eaac6db32843cde480226424e71312a853f.zip |
gpo: don't leak cache_path onto talloc tos
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>
Diffstat (limited to 'source3/libgpo/gpext/scripts.c')
-rw-r--r-- | source3/libgpo/gpext/scripts.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/source3/libgpo/gpext/scripts.c b/source3/libgpo/gpext/scripts.c index e2841c01cb..da6f5cc264 100644 --- a/source3/libgpo/gpext/scripts.c +++ b/source3/libgpo/gpext/scripts.c @@ -357,6 +357,10 @@ static NTSTATUS scripts_process_group_policy(TALLOC_CTX *mem_ctx, 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 @@ -374,13 +378,17 @@ static NTSTATUS scripts_process_group_policy(TALLOC_CTX *mem_ctx, 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++) { @@ -394,7 +402,8 @@ static NTSTATUS scripts_process_group_policy(TALLOC_CTX *mem_ctx, } 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); @@ -403,15 +412,16 @@ static NTSTATUS scripts_process_group_policy(TALLOC_CTX *mem_ctx, 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; } /**************************************************************** |