--- src/dnsmasq.h	2006-10-18 22:24:50.000000000 +0200
+++ src/dnsmasq.h	2007-01-06 15:09:12.000000000 +0100
@@ -306,6 +306,7 @@
 #endif
   int hwaddr_len, hwaddr_type;
   unsigned char hwaddr[DHCP_CHADDR_MAX]; 
+  char *ifrname;         /* name of interface */
   struct in_addr addr;
   unsigned char *vendorclass, *userclass;
   unsigned int vendorclass_len, userclass_len;
@@ -599,6 +600,7 @@
 		      unsigned char *clid, int hw_len, int hw_type, int clid_len);
 void lease_set_hostname(struct dhcp_lease *lease, char *name, 
 			char *suffix, int auth);
+void lease_set_ifrname(struct dhcp_lease *lease, char *ifrname);
 void lease_set_expires(struct dhcp_lease *lease, unsigned int len, time_t now);
 struct dhcp_lease *lease_find_by_client(unsigned char *hwaddr, int hw_len, int hw_type,  
 					unsigned char *clid, int clid_len);
--- src/lease.c	2006-10-18 22:24:50.000000000 +0200
+++ src/lease.c	2007-01-06 15:18:38.000000000 +0100
@@ -162,11 +162,16 @@
 
   if (file_dirty != 0 && daemon->lease_stream)
     {
+ 
+      FILE *multid_leases;
+ 
       errno = 0;
       rewind(daemon->lease_stream);
       if (errno != 0 || ftruncate(fileno(daemon->lease_stream), 0) != 0)
 	err = errno;
       
+      multid_leases = fopen("/var/tmp/multid.leases", "w");
+      
       for (lease = leases; lease; lease = lease->next)
 	{
 #ifdef HAVE_BROKEN_RTC
@@ -185,14 +190,29 @@
 	  ourprintf(daemon, &err, " %s %s ", inet_ntoa(lease->addr),
 		    lease->hostname && strlen(lease->hostname) != 0 ? lease->hostname : "*");
 	  
+          /* lease 00:12:79:41:AA:01 192.168.178.40 1122416 "computer" 0100127941b4a0 */
+          fprintf(multid_leases,"%s %.2X:%.2X:%.2X:%.2X:%.2X:%.2X %s %lu \"%s\" ",
+ 		lease->ifrname && strcmp(lease->ifrname, "wlan") == 0 ? "wlease" : "lease",
+ 		lease->hwaddr[0], lease->hwaddr[1], lease->hwaddr[2],
+ 		lease->hwaddr[3], lease->hwaddr[4], lease->hwaddr[5],
+ 		inet_ntoa(lease->addr), lease->expires, 
+ 		lease->hostname && strlen(lease->hostname) != 0 ? lease->hostname : "");
+  	  
 	  if (lease->clid && lease->clid_len != 0)
 	    {
 	      for (i = 0; i < lease->clid_len - 1; i++)
 		ourprintf(daemon, &err, "%.2x:", lease->clid[i]);
 	      ourprintf(daemon, &err, "%.2x\n", lease->clid[i]);
+ 
+ 	      for (i = 0; i < lease->clid_len; i++) 
+                 fprintf(multid_leases,"%.2x", lease->clid[i]);
+ 
 	    }
 	  else
 	    ourprintf(daemon, &err, "*\n");	  
+ 
+          fprintf(multid_leases,"\n");
+ 	  
 	}
       
       if (fflush(daemon->lease_stream) != 0 ||
@@ -201,6 +221,9 @@
       
       if (!err)
 	file_dirty = 0;
+      
+      fclose(multid_leases);
+ 
     }
   
   /* Set alarm for when the first lease expires + slop. */
@@ -392,6 +415,23 @@
 
 }
 
+void lease_set_ifrname (struct dhcp_lease *lease, char *ifrname)
+{
+  char *lease_ifrname = NULL;
+
+  if (!(lease_ifrname = malloc(strlen(ifrname) + 1)))
+    return;	/* whoops */
+
+  strcpy(lease_ifrname, ifrname);
+
+  if (lease->ifrname)
+    free(lease->ifrname);
+
+  lease->ifrname = lease_ifrname;
+
+  file_dirty = 1;
+}
+
 void lease_set_hostname(struct dhcp_lease *lease, char *name, char *suffix, int auth)
 {
   struct dhcp_lease *lease_tmp;
--- src/rfc2131.c	2006-10-19 08:54:54.000000000 +0200
+++ src/rfc2131.c	2007-01-06 15:20:43.000000000 +0100
@@ -379,6 +379,7 @@
 	      lease_set_hwaddr(lease, mess->chaddr, NULL, mess->hlen, mess->htype, 0);
 	      if (hostname)
 		lease_set_hostname(lease, hostname, daemon->domain_suffix, 1); 
+ 		lease_set_ifrname(lease, iface_name);
 	      lease_set_expires(lease, 0xffffffff, now); /* infinite lease */
 	      
 	      clear_packet(mess, end);
@@ -871,7 +872,7 @@
 	    }
 	  if (hostname)
 	    lease_set_hostname(lease, hostname, daemon->domain_suffix, hostname_auth);
-	  
+	    lease_set_ifrname(lease, iface_name);
 	  lease_set_expires(lease, time, now);
 	  	
 	  log_packet(daemon, "ACK", &mess->yiaddr, emac, emac_len, iface_name, hostname);  
