[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