diff options
author | Jeremy Allison <jra@samba.org> | 2010-01-15 17:52:54 -0800 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2010-02-24 16:25:09 +0100 |
commit | b990e6614f462edb4a00f8ea5665f244a3c9ac40 (patch) | |
tree | 5aa0e5a63e8c25c064e58044c2986bda1a116219 /source/libsmb/libsmb_setget.c | |
parent | e07bdeda53353597787183131cbe44eeeac5ec15 (diff) | |
download | samba-b990e6614f462edb4a00f8ea5665f244a3c9ac40.tar.gz samba-b990e6614f462edb4a00f8ea5665f244a3c9ac40.tar.xz samba-b990e6614f462edb4a00f8ea5665f244a3c9ac40.zip |
Fix bug 7045 - Bad (non memory copying) interfaces in smbc_setXXXX calls.
In smbc_free_context libsmbclient just called free() on the string options
so it assumes the callers have malloced them before setting them via smbc_set
calls.
Change to correctly malloc/free string options to the library.
Protect against SMB_STRDUP of null.
Contains 2d41b1ab78639abe4ae030ff482573f464564dd7 and
f85b6ee90b88c7f7b2a92c8a5f3e2ebe59c1087b from master.
Jeremy
(cherry picked from commit edc44312f76e14e94c56e70cf7bb49139f9f081e)
Diffstat (limited to 'source/libsmb/libsmb_setget.c')
-rw-r--r-- | source/libsmb/libsmb_setget.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/source/libsmb/libsmb_setget.c b/source/libsmb/libsmb_setget.c index 3493e4f8dd2..7113c62cf4b 100644 --- a/source/libsmb/libsmb_setget.c +++ b/source/libsmb/libsmb_setget.c @@ -39,7 +39,10 @@ smbc_getNetbiosName(SMBCCTX *c) void smbc_setNetbiosName(SMBCCTX *c, char * netbios_name) { - c->netbios_name = netbios_name; + SAFE_FREE(c->netbios_name); + if (netbios_name) { + c->netbios_name = SMB_STRDUP(netbios_name); + } } /** Get the workgroup used for making connections */ @@ -53,7 +56,10 @@ smbc_getWorkgroup(SMBCCTX *c) void smbc_setWorkgroup(SMBCCTX *c, char * workgroup) { - c->workgroup = workgroup; + SAFE_FREE(c->workgroup); + if (workgroup) { + c->workgroup = SMB_STRDUP(workgroup); + } } /** Get the username used for making connections */ @@ -67,7 +73,10 @@ smbc_getUser(SMBCCTX *c) void smbc_setUser(SMBCCTX *c, char * user) { - c->user = user; + SAFE_FREE(c->user); + if (user) { + c->user = SMB_STRDUP(user); + } } /** Get the debug level */ |