Forward port of Richard Sharpe's <realrichardsharpe@gmail.com> fix for bug #8970...
[ddiss/samba.git] / source3 / nmbd / nmbd.c
index 1f7d4b5f8c423f7a266a6604fe5fed433d2037a2..0172e084695f59943c9b918187640fc8af825b4d 100644 (file)
@@ -4,26 +4,27 @@
    Copyright (C) Andrew Tridgell 1994-1998
    Copyright (C) Jeremy Allison 1997-2002
    Copyright (C) Jelmer Vernooij 2002,2003 (Conversion to popt)
-   
+
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-   
 */
 
 #include "includes.h"
+#include "system/filesys.h"
 #include "popt_common.h"
-#include "librpc/gen_ndr/messaging.h"
 #include "nmbd/nmbd.h"
+#include "serverid.h"
+#include "messages.h"
 
 int ClientNMB       = -1;
 int ClientDGRAM     = -1;
@@ -364,11 +365,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() )
@@ -460,9 +462,7 @@ static void msg_nmbd_send_packet(struct messaging_context *msg,
                p->packet.dgram.header.source_port = 138;
        }
 
-       if (store_outstanding_send_packet(p)) {
-               send_packet(p);
-       }
+       send_packet(p);
 }
 
 /**************************************************************************** **
@@ -658,12 +658,6 @@ static void process(void)
                if (lp_enhanced_browsing())
                        sync_all_dmbs(t);
 
-               /*
-                * clear the unexpected packet queue 
-                */
-
-               clear_unexpected(t);
-
                /* check for new network interfaces */
 
                reload_interfaces(t);
@@ -1017,6 +1011,11 @@ static bool open_sockets(bool isdaemon, int port)
                exit(1);
        }
 
+       if (!nmbd_init_packet_server()) {
+               kill_async_dns_child();
+                exit(1);
+        }
+
        TALLOC_FREE(frame);
        process();