summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2012-05-31 15:06:58 -0700
committerJeremy Allison <jra@samba.org>2012-05-31 16:08:44 -0700
commit8fd02fa2d6bdedbda1657a15f602bb4384367251 (patch)
tree1895c33c04d9dc0b3376308a126a037748a9c2ae
parentf6e41026f89deb5393e239b9dc83b287e5c7d6ed (diff)
downloadsamba-8fd02fa2d6bdedbda1657a15f602bb4384367251.tar.gz
samba-8fd02fa2d6bdedbda1657a15f602bb4384367251.tar.bz2
samba-8fd02fa2d6bdedbda1657a15f602bb4384367251.zip
Forward port of Richard Sharpe's <realrichardsharpe@gmail.com> fix for bug #8970 - Possible memory leaks in the samba master process.
-rw-r--r--source3/nmbd/nmbd.c3
-rw-r--r--source3/param/loadparm.c6
-rw-r--r--source3/printing/load.c7
-rw-r--r--source3/smbd/server_reload.c1
-rw-r--r--source3/winbindd/winbindd.c3
5 files changed, 16 insertions, 4 deletions
diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c
index 98a531026a..d464e7e0f6 100644
--- a/source3/nmbd/nmbd.c
+++ b/source3/nmbd/nmbd.c
@@ -382,11 +382,12 @@ static bool reload_nmbd_services(bool test)
set_remote_machine_name("nmbd", False);
if ( lp_loaded() ) {
- const char *fname = lp_configfile();
+ char *fname = lp_configfile();
if (file_exist(fname) && !strcsequal(fname,get_dyn_CONFIGFILE())) {
set_dyn_CONFIGFILE(fname);
test = False;
}
+ TALLOC_FREE(fname);
}
if ( test && !lp_file_list_changed() )
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 11ff646cb6..1c78b5831c 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -8809,7 +8809,11 @@ static bool lp_load_ex(const char *pszFname,
}
}
- lp_add_auto_services(lp_auto_services());
+ {
+ char *serv = lp_auto_services();
+ lp_add_auto_services(serv);
+ TALLOC_FREE(serv);
+ }
if (add_ipc) {
/* When 'restrict anonymous = 2' guest connections to ipc$
diff --git a/source3/printing/load.c b/source3/printing/load.c
index 161d71103c..af4dcc7a2b 100644
--- a/source3/printing/load.c
+++ b/source3/printing/load.c
@@ -31,6 +31,7 @@ static void add_auto_printers(void)
int pnum = lp_servicenumber(PRINTERS_NAME);
char *str;
char *saveptr;
+ char *auto_serv = NULL;
if (pnum < 0)
if (process_registry_service(PRINTERS_NAME))
@@ -39,8 +40,12 @@ static void add_auto_printers(void)
if (pnum < 0)
return;
- if ((str = SMB_STRDUP(lp_auto_services())) == NULL)
+ auto_serv = lp_auto_services();
+ str = SMB_STRDUP(auto_serv);
+ TALLOC_FREE(auto_serv);
+ if (str == NULL) {
return;
+ }
for (p = strtok_r(str, LIST_SEP, &saveptr); p;
p = strtok_r(NULL, LIST_SEP, &saveptr)) {
diff --git a/source3/smbd/server_reload.c b/source3/smbd/server_reload.c
index 8ca5bee7b1..bab622d11f 100644
--- a/source3/smbd/server_reload.c
+++ b/source3/smbd/server_reload.c
@@ -146,6 +146,7 @@ bool reload_services(struct smbd_server_connection *sconn,
set_dyn_CONFIGFILE(fname);
test = False;
}
+ TALLOC_FREE(fname);
}
reopen_logs();
diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
index 22056e26ca..248f747ee4 100644
--- a/source3/winbindd/winbindd.c
+++ b/source3/winbindd/winbindd.c
@@ -65,11 +65,12 @@ static bool reload_services_file(const char *lfile)
bool ret;
if (lp_loaded()) {
- const char *fname = lp_configfile();
+ char *fname = lp_configfile();
if (file_exist(fname) && !strcsequal(fname,get_dyn_CONFIGFILE())) {
set_dyn_CONFIGFILE(fname);
}
+ TALLOC_FREE(fname);
}
/* if this is a child, restore the logfile to the special