Applied debian/patches/004_mac_address_range_fix.patch from
[rpld.git] / client.c
index 6b14b6f..788f9da 100644 (file)
--- a/client.c
+++ b/client.c
@@ -156,7 +156,7 @@ cache_locally (struct clfile *f)
 struct client *
 find_client_by_mac (unsigned char *mac)
 {
-  struct client *pc = NULL, *c = clients;
+  struct client *pc = NULL, *nc = NULL, *c = clients;
 
 /* We need to match clients by a (possibly partial) MAC address; however
  * this struct client is also used to transmit to them, so we need to return
@@ -170,14 +170,17 @@ find_client_by_mac (unsigned char *mac)
           /* if partial match, create new struct client */
           if (c->partial_mac_len != ETH_ALEN)
             {
-              pc = (struct client *) malloc (sizeof (struct client));
-              memcpy (pc, c, sizeof (struct client));
-
-              pc->next = c->next;
-              c->next = clients;
-              clients = c;
-
-              return pc;
+              nc = (struct client *) malloc (sizeof (struct client));
+              memcpy (nc, c, sizeof (struct client));
+              memcpy (nc->mac, mac, ETH_ALEN);
+
+             if (pc) 
+                  pc->next = nc;
+              else 
+                  clients = nc;
+             nc->next = c;
+             
+              return nc;
             }
 
           /* else reorder the tree for speed, and return the found client */