Fix the last reported debian problem with nmbd not waiting
authorJeremy Allison <jra@samba.org>
Thu, 10 Apr 2008 15:56:30 +0000 (08:56 -0700)
committerJeremy Allison <jra@samba.org>
Thu, 10 Apr 2008 15:56:30 +0000 (08:56 -0700)
until interfaces come up.
Jeremy.

source/nmbd/nmbd_subnetdb.c

index 398119cc829daf2fcf080a0a7490a20f89f32e12..61db70fae0b6071567ef4cd4d0f815f8e513d094 100644 (file)
@@ -180,15 +180,19 @@ struct subnet_record *make_normal_subnet(struct interface *iface)
 
 BOOL create_subnets(void)
 {    
-       int num_interfaces = iface_count();
+       int num_interfaces;
        int i;
        struct in_addr unicast_ip, ipzero;
 
-       if(num_interfaces == 0) {
-               void (*saved_handler)(int);
+  try_interfaces_again:
 
+       if (iface_count() == 0) {
                DEBUG(0,("create_subnets: No local interfaces !\n"));
                DEBUG(0,("create_subnets: Waiting for an interface to appear ...\n"));
+       }
+
+       while (iface_count() == 0) {
+               void (*saved_handler)(int);
 
                /* 
                 * Whilst we're waiting for an interface, allow SIGTERM to
@@ -197,10 +201,8 @@ BOOL create_subnets(void)
 
                saved_handler = CatchSignal( SIGTERM, SIGNAL_CAST SIG_DFL );
 
-               while (iface_count() == 0) {
-                       sleep(5);
-                       load_interfaces();
-               }
+               sleep(5);
+               load_interfaces();
 
                /* 
                 * We got an interface, restore our normal term handler.
@@ -241,9 +243,19 @@ BOOL create_subnets(void)
 
         /* We must have at least one subnet. */
        if (subnetlist == NULL) {
-               DEBUG(0,("create_subnets: unable to create any subnet from "
-                               "given interfaces. nmbd is terminating\n"));
-               return False;
+               void (*saved_handler)(int);
+
+               DEBUG(0,("create_subnets: Unable to create any subnet from "
+                               "given interfaces. Is your interface line in "
+                               "smb.conf correct ?\n"));
+
+               saved_handler = CatchSignal( SIGTERM, SIGNAL_CAST SIG_DFL );
+
+               sleep(5);
+               load_interfaces();
+
+               CatchSignal( SIGTERM, SIGNAL_CAST saved_handler );
+               goto try_interfaces_again;
        }
 
        if (lp_we_are_a_wins_server()) {