Fix a really slow memory leak (in master at least). Found by Ira Cooper <ira@wakeful...
authorJeremy Allison <jra@samba.org>
Thu, 26 Jan 2012 22:53:43 +0000 (14:53 -0800)
committerJeremy Allison <jra@samba.org>
Fri, 27 Jan 2012 00:26:28 +0000 (01:26 +0100)
Bug #8724 - Memory leak in parent smbd on connection.

Autobuild-User: Jeremy Allison <jra@samba.org>
Autobuild-Date: Fri Jan 27 01:26:28 CET 2012 on sn-devel-104

source3/lib/substitute.c

index eae6d15f7c03a07b15ff391e4ce393b95f28b2c5..5427ed87a2bb8b2973905e5ee04167a0bcbbe39d 100644 (file)
@@ -195,7 +195,7 @@ void sub_set_smb_name(const char *name)
 }
 
 static char sub_peeraddr[INET6_ADDRSTRLEN];
-static const char *sub_peername = "";
+static const char *sub_peername = NULL;
 static char sub_sockaddr[INET6_ADDRSTRLEN];
 
 void sub_set_socket_ids(const char *peeraddr, const char *peername,
@@ -208,6 +208,11 @@ void sub_set_socket_ids(const char *peeraddr, const char *peername,
        }
        strlcpy(sub_peeraddr, addr, sizeof(sub_peeraddr));
 
+       if (sub_peername != NULL &&
+                       sub_peername != sub_peeraddr) {
+               free(discard_const_p(char,sub_peername));
+               sub_peername = NULL;
+       }
        sub_peername = SMB_STRDUP(peername);
        if (sub_peername == NULL) {
                sub_peername = sub_peeraddr;
@@ -547,7 +552,7 @@ static char *alloc_sub_basic(const char *smb_name, const char *domain_name,
                        break;
                case 'M' :
                        a_string = realloc_string_sub(a_string, "%M",
-                                                     sub_peername);
+                                                     sub_peername ? sub_peername : "");
                        break;
                case 'R' :
                        a_string = realloc_string_sub(a_string, "%R", remote_proto);