diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/utils/net_conf.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/source3/utils/net_conf.c b/source3/utils/net_conf.c index d05a36f44d..f06a5f660d 100644 --- a/source3/utils/net_conf.c +++ b/source3/utils/net_conf.c @@ -536,6 +536,13 @@ static int import_process_service(TALLOC_CTX *ctx, struct registry_key *key; WERROR werr; char *valstr = NULL; + TALLOC_CTX *tmp_ctx = NULL; + + tmp_ctx = talloc_new(ctx); + if (tmp_ctx == NULL) { + werr = WERR_NOMEM; + goto done; + } servicename = (share->service == GLOBAL_SECTION_SNUM)? GLOBAL_NAME : lp_servicename(share->service); @@ -544,13 +551,13 @@ static int import_process_service(TALLOC_CTX *ctx, d_printf("[%s]\n", servicename); } else { - if (smbconf_key_exists(ctx, servicename)) { - werr = reg_delkey_internal(ctx, servicename); + if (smbconf_key_exists(tmp_ctx, servicename)) { + werr = reg_delkey_internal(tmp_ctx, servicename); if (!W_ERROR_IS_OK(werr)) { goto done; } } - werr = reg_createkey_internal(ctx, servicename, &key); + werr = reg_createkey_internal(tmp_ctx, servicename, &key); if (!W_ERROR_IS_OK(werr)) { goto done; } @@ -562,7 +569,7 @@ static int import_process_service(TALLOC_CTX *ctx, && !(parm->flags & FLAG_GLOBAL)) continue; - valstr = parm_valstr(ctx, parm, share); + valstr = parm_valstr(tmp_ctx, parm, share); if (parm->type != P_SEP) { if (opt_testmode) { @@ -583,7 +590,9 @@ static int import_process_service(TALLOC_CTX *ctx, } ret = 0; + done: + TALLOC_FREE(tmp_ctx); return ret; } |