From 93c1a27fe2e64647521c4a5dbd115b77bfc8328c Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 31 Mar 2014 10:19:58 +1300 Subject: libsmb: Provide a talloc_stackframe() to external users of libsmb_setget.c Signed-off-by: Andrew Bartlett Reviewed-by: Jeremy Allison (cherry picked from commit bc5bd4010e8fedf19047ed6f7a793cd373f9f14f) The last 3 patches address bug #8449 (simple use case results in "no talloc stackframe around, leaking memory" error). --- source3/libsmb/libsmb_setget.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'source3/libsmb/libsmb_setget.c') diff --git a/source3/libsmb/libsmb_setget.c b/source3/libsmb/libsmb_setget.c index b8adcca18b..3255b522bb 100644 --- a/source3/libsmb/libsmb_setget.c +++ b/source3/libsmb/libsmb_setget.c @@ -91,9 +91,11 @@ void smbc_setDebug(SMBCCTX *c, int debug) { char buf[32]; + TALLOC_CTX *frame = talloc_stackframe(); snprintf(buf, sizeof(buf), "%d", debug); c->debug = debug; lp_set_cmdline("log level", buf); + TALLOC_FREE(frame); } /** @@ -139,10 +141,15 @@ smbc_setPort(SMBCCTX *c, uint16_t port) smbc_bool smbc_getOptionDebugToStderr(SMBCCTX *c) { + smbc_bool ret; + TALLOC_CTX *frame = talloc_stackframe(); + /* Because this is a global concept, it is better to check * what is really set, rather than what we wanted set * (particularly as you cannot go back to stdout). */ - return debug_get_output_is_stderr(); + ret = debug_get_output_is_stderr(); + TALLOC_FREE(frame); + return ret; } /** Set whether to log to standard error instead of standard output. @@ -154,6 +161,7 @@ smbc_getOptionDebugToStderr(SMBCCTX *c) void smbc_setOptionDebugToStderr(SMBCCTX *c, smbc_bool b) { + TALLOC_CTX *frame = talloc_stackframe(); if (b) { /* * We do not have a unique per-thread debug state? For @@ -164,6 +172,7 @@ smbc_setOptionDebugToStderr(SMBCCTX *c, smbc_bool b) */ setup_logging("libsmbclient", DEBUG_STDERR); } + TALLOC_FREE(frame); } /** @@ -498,7 +507,11 @@ smbc_setOptionUseNTHash(SMBCCTX *c, smbc_bool b) smbc_get_auth_data_fn smbc_getFunctionAuthData(SMBCCTX *c) { - return c->callbacks.auth_fn; + smbc_get_auth_data_fn ret; + TALLOC_CTX *frame = talloc_stackframe(); + ret = c->callbacks.auth_fn; + TALLOC_FREE(frame); + return ret; } /** Set the function for obtaining authentication data */ -- cgit v1.2.3