import of dnsmasq-2.6.tar.gz
diff --git a/src/dnsmasq.c b/src/dnsmasq.c
index c626ed9..3169e55 100644
--- a/src/dnsmasq.c
+++ b/src/dnsmasq.c
@@ -71,7 +71,7 @@
   int leasefd = -1, dhcpfd = -1, dhcp_raw_fd = -1;
   struct sigaction sigact;
   sigset_t sigmask;
-  
+
   sighup = 1; /* init cache the first time through */
   sigusr1 = 0; /* but don't dump */
   sigterm = 0; /* or die */
@@ -120,17 +120,14 @@
 #endif
 
   if (!lease_file)
-    lease_file = LEASEFILE;
-  else
     {
-      if (!dhcp)
-	{
-	  complain("********* dhcp-lease option set, but not dhcp-range.", NULL);
-	  complain("********* Are you trying to use the obsolete ISC dhcpd integration?", NULL);
-	  complain("********* Please configure the dnsmasq integrated DHCP server by using", NULL);
-	  complain("********* the \"dhcp-range\" option, and remove any other DHCP server.", NULL);
-	}
+      if (dhcp)
+	lease_file = LEASEFILE;
     }
+#ifndef HAVE_ISC_READER
+  else if (!dhcp)
+    die("ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h", NULL);
+#endif
   
   interfaces = enumerate_interfaces(if_names, if_addrs, if_except, port);
   if (options & OPT_NOWILD)
@@ -152,11 +149,6 @@
     {
       dhcp_init(&dhcpfd, &dhcp_raw_fd);
       leasefd = lease_init(lease_file, domain_suffix, dnamebuff, packet, now, maxleases);
-      if (options & OPT_ETHERS)
-	dhcp_configs = dhcp_read_ethers(dhcp_configs, dnamebuff);
-      lease_update_from_configs(dhcp_configs, domain_suffix); /* must follow cache_init and lease_init */
-      lease_update_file(0, now); 
-      lease_update_dns();
     }
   
   setbuf(stdout, NULL);
@@ -248,7 +240,10 @@
 	sprintf(packet, "infinite");
       else
 	sprintf(packet, "%ds", (int)dhcp_tmp->lease_time);
-      syslog(LOG_INFO, "DHCP, IP range %s -- %s, lease time %s", 
+      syslog(LOG_INFO, 
+	     dhcp_tmp->start.s_addr == dhcp_tmp->end.s_addr ? 
+	     "DHCP, static leases only on %.0s%s, lease time %s" :
+	     "DHCP, IP range %s -- %s, lease time %s",
 	     dnamebuff, inet_ntoa(dhcp_tmp->end), packet);
     }
 
@@ -271,6 +266,8 @@
 	  cache_reload(options, dnamebuff, domain_suffix, addn_hosts);
 	  if (dhcp)
 	    {
+	      if (options & OPT_ETHERS)
+		dhcp_configs = dhcp_read_ethers(dhcp_configs, dnamebuff);
 	      dhcp_update_configs(dhcp_configs);
 	      lease_update_from_configs(dhcp_configs, domain_suffix); 
 	      lease_update_file(0, now); 
@@ -350,11 +347,17 @@
       if (last == 0 || difftime(now, last) > 1.0)
 	{
 	  last = now;
+
+#ifdef HAVE_ISC_READER
+	  if (lease_file && !dhcp)
+	    load_dhcp(lease_file, domain_suffix, now, dnamebuff);
+#endif
+
 	  if (!(options & OPT_NO_POLL))
 	    {
 	      struct resolvc *res = resolv, *latest = NULL;
-	      time_t last_change = 0;
 	      struct stat statbuf;
+	      time_t last_change = 0;
 	      /* There may be more than one possible file. 
 		 Go through and find the one which changed _last_.
 		 Warn of any which can't be read. */