[ros-diffs] [cgutman] 41838: - Use the target hardware address to find the correct DHCP_ADAPTER for the received packet

cgutman at svn.reactos.org cgutman at svn.reactos.org
Fri Jul 10 03:15:52 CEST 2009


Author: cgutman
Date: Fri Jul 10 05:15:51 2009
New Revision: 41838

URL: http://svn.reactos.org/svn/reactos?rev=41838&view=rev
Log:
 - Use the target hardware address to find the correct DHCP_ADAPTER for the received packet

Modified:
    trunk/reactos/base/services/dhcp/adapter.c
    trunk/reactos/base/services/dhcp/dispatch.c
    trunk/reactos/base/services/dhcp/include/rosdhcp.h

Modified: trunk/reactos/base/services/dhcp/adapter.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/dhcp/adapter.c?rev=41838&r1=41837&r2=41838&view=diff
==============================================================================
--- trunk/reactos/base/services/dhcp/adapter.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/dhcp/adapter.c [iso-8859-1] Fri Jul 10 05:15:51 2009
@@ -355,6 +355,23 @@
     return NULL;
 }
 
+PDHCP_ADAPTER AdapterFindByHardwareAddress( u_int8_t haddr[16], u_int8_t hlen ) {
+    PDHCP_ADAPTER Adapter;
+    PLIST_ENTRY ListEntry;
+
+    for(ListEntry = AdapterList.Flink;
+        ListEntry != &AdapterList;
+        ListEntry = ListEntry->Flink) {
+       Adapter = CONTAINING_RECORD( ListEntry, DHCP_ADAPTER, ListEntry );
+       if (Adapter->DhclientInfo.hw_address.hlen == hlen &&
+           !memcmp(Adapter->DhclientInfo.hw_address.haddr,
+                  haddr,
+                  hlen)) return Adapter;
+    }
+
+    return NULL;
+}
+
 PDHCP_ADAPTER AdapterGetFirst() {
     if( IsListEmpty( &AdapterList ) ) return NULL; else {
         return CONTAINING_RECORD

Modified: trunk/reactos/base/services/dhcp/dispatch.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/dhcp/dispatch.c?rev=41838&r1=41837&r2=41838&view=diff
==============================================================================
--- trunk/reactos/base/services/dhcp/dispatch.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/dhcp/dispatch.c [iso-8859-1] Fri Jul 10 05:15:51 2009
@@ -231,6 +231,7 @@
         struct dhcp_packet packet;
     } u;
     struct interface_info *ip = l->local;
+    PDHCP_ADAPTER adapter;
 
     if ((result = receive_packet(ip, u.packbuf, sizeof(u), &from,
                                  &hfrom)) == -1) {
@@ -257,7 +258,16 @@
         ifrom.len = 4;
         memcpy(ifrom.iabuf, &from.sin_addr, ifrom.len);
 
-        (*bootp_packet_handler)(ip, &u.packet, result,
+        
+        adapter = AdapterFindByHardwareAddress(u.packet.chaddr,
+                                               u.packet.hlen);
+
+        if (!adapter) {
+            warning("Discarding packet with a non-matching target physical address\n");
+            return;
+        }
+
+        (*bootp_packet_handler)(&adapter->DhclientInfo, &u.packet, result,
                                 from.sin_port, ifrom, &hfrom);
     }
 }

Modified: trunk/reactos/base/services/dhcp/include/rosdhcp.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/dhcp/include/rosdhcp.h?rev=41838&r1=41837&r2=41838&view=diff
==============================================================================
--- trunk/reactos/base/services/dhcp/include/rosdhcp.h [iso-8859-1] (original)
+++ trunk/reactos/base/services/dhcp/include/rosdhcp.h [iso-8859-1] Fri Jul 10 05:15:51 2009
@@ -76,6 +76,7 @@
 extern PDHCP_ADAPTER AdapterGetNext(PDHCP_ADAPTER);
 extern PDHCP_ADAPTER AdapterFindIndex( unsigned int AdapterIndex );
 extern PDHCP_ADAPTER AdapterFindInfo( struct interface_info *info );
+extern PDHCP_ADAPTER AdapterFindByHardwareAddress( u_int8_t haddr[16], u_int8_t hlen );
 extern VOID ApiInit();
 extern VOID ApiLock();
 extern VOID ApiUnlock();



More information about the Ros-diffs mailing list