Lots of fixes for error paths where tdb_fetch() data need freeing.
[sharpe/samba-autobuild/.git] / source3 / nmbd / nmbd_winsserver.c
index d67d25bb883f51ca23b2a97ed8fa9f9fc36bc8a8..87391b35df876ccd8b33e15b6bb1a2f139db882d 100644 (file)
@@ -266,7 +266,8 @@ BOOL initialise_wins(void)
                        continue;
                                
                dbuf = tdb_fetch(tdb, kbuf);
-               if (!dbuf.dptr) continue;
+               if (!dbuf.dptr)
+                       continue;
 
                fstrcpy(name_type, kbuf.dptr+strlen(ENTRY_PREFIX));
 
@@ -284,15 +285,20 @@ BOOL initialise_wins(void)
                wins_ip=*interpret_addr2(ip_str);
 
                /* Don't reload replica records */
-               if (!ip_equal(wins_ip, our_fake_ip))
+               if (!ip_equal(wins_ip, our_fake_ip)) {
+                       SAFE_FREE(dbuf.dptr);
                        continue;
+               }
 
                /* Don't reload released or tombstoned records */
-               if ((wins_flags&WINS_STATE_MASK) != WINS_ACTIVE)
+               if ((wins_flags&WINS_STATE_MASK) != WINS_ACTIVE) {
+                       SAFE_FREE(dbuf.dptr);
                        continue;
+               }
 
                /* Allocate the space for the ip_list. */
                if((ip_list = (struct in_addr *)malloc( num_ips * sizeof(struct in_addr))) == NULL) {
+                       SAFE_FREE(dbuf.dptr);
                        DEBUG(0,("initialise_wins: Malloc fail !\n"));
                        return False;
                }
@@ -324,6 +330,7 @@ BOOL initialise_wins(void)
                                  name, type, ttl, inet_ntoa(ip_list[0]), nb_flags));
                }
 
+               SAFE_FREE(dbuf.dptr);
                SAFE_FREE(ip_list);
        }