diff options
author | Jeremy Allison <jra@samba.org> | 2012-05-31 15:06:58 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2012-05-31 16:08:44 -0700 |
commit | 8fd02fa2d6bdedbda1657a15f602bb4384367251 (patch) | |
tree | 1895c33c04d9dc0b3376308a126a037748a9c2ae | |
parent | f6e41026f89deb5393e239b9dc83b287e5c7d6ed (diff) | |
download | samba-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.c | 3 | ||||
-rw-r--r-- | source3/param/loadparm.c | 6 | ||||
-rw-r--r-- | source3/printing/load.c | 7 | ||||
-rw-r--r-- | source3/smbd/server_reload.c | 1 | ||||
-rw-r--r-- | source3/winbindd/winbindd.c | 3 |
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 |