summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorclaudio <claudio@openbsd.org>2005-01-31 21:23:08 +0000
committerclaudio <claudio@openbsd.org>2005-01-31 21:23:08 +0000
commitcc55341fd42c8b3214b38678b78f93c1245c4110 (patch)
tree3499c422625eb65db056beb75601cb1bdf51bd1e
parentWarn if the user tries to use the -u option w/o running a command. (diff)
downloadwireguard-openbsd-cc55341fd42c8b3214b38678b78f93c1245c4110.tar.xz
wireguard-openbsd-cc55341fd42c8b3214b38678b78f93c1245c4110.zip
Simply use the ethernet source address of the request as new ethernet
destination instead of the one included in the dhcp packet. Especially because there are to many cases where the supplied address is wrong. This hopefully solves all problems with gateways involved, like the one reported by Dylan Martin. OK krw@ henning@ millert@
-rw-r--r--usr.sbin/dhcpd/bootp.c10
-rw-r--r--usr.sbin/dhcpd/dhcp.c15
2 files changed, 4 insertions, 21 deletions
diff --git a/usr.sbin/dhcpd/bootp.c b/usr.sbin/dhcpd/bootp.c
index 2021976dc91..037f1f4973e 100644
--- a/usr.sbin/dhcpd/bootp.c
+++ b/usr.sbin/dhcpd/bootp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: bootp.c,v 1.11 2004/09/16 18:35:42 deraadt Exp $ */
+/* $OpenBSD: bootp.c,v 1.12 2005/01/31 21:23:08 claudio Exp $ */
/*
* BOOTP Protocol support.
@@ -52,7 +52,6 @@ bootp(struct packet *packet)
struct dhcp_packet raw;
struct sockaddr_in to;
struct in_addr from;
- struct hardware hto;
struct tree_cache *options[256];
struct subnet *subnet = NULL;
struct lease *lease;
@@ -307,11 +306,6 @@ lose:
else
memcpy(raw.file, packet->raw->file, sizeof(raw.file));
- /* Set up the hardware destination address... */
- hto.htype = packet->raw->htype;
- hto.hlen = packet->raw->hlen;
- memcpy(hto.haddr, packet->raw->chaddr, hto.hlen);
-
from = packet->interface->primary_address;
/* Report what we're doing... */
@@ -353,5 +347,5 @@ lose:
errno = 0;
(void) send_packet(packet->interface, &raw,
- outgoing.packet_length, from, &to, &hto);
+ outgoing.packet_length, from, &to, packet->haddr);
}
diff --git a/usr.sbin/dhcpd/dhcp.c b/usr.sbin/dhcpd/dhcp.c
index e8533de5268..3946fd80686 100644
--- a/usr.sbin/dhcpd/dhcp.c
+++ b/usr.sbin/dhcpd/dhcp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dhcp.c,v 1.17 2005/01/29 16:29:09 millert Exp $ */
+/* $OpenBSD: dhcp.c,v 1.18 2005/01/31 21:23:08 claudio Exp $ */
/*
* Copyright (c) 1995, 1996, 1997, 1998, 1999
@@ -483,7 +483,6 @@ nak_lease(struct packet *packet, struct iaddr *cip)
struct dhcp_packet raw;
unsigned char nak = DHCPNAK;
struct packet outgoing;
- struct hardware hto;
struct tree_cache *options[256], dhcpnak_tree, dhcpmsg_tree;
memset(options, 0, sizeof options);
@@ -537,10 +536,6 @@ nak_lease(struct packet *packet, struct iaddr *cip)
packet->raw->chaddr), packet->raw->giaddr.s_addr ?
inet_ntoa(packet->raw->giaddr) : packet->interface->name);
- hto.htype = packet->raw->htype;
- hto.hlen = packet->raw->hlen;
- memcpy(hto.haddr, packet->raw->chaddr, hto.hlen);
-
/* Set up the common stuff... */
memset(&to, 0, sizeof to);
to.sin_family = AF_INET;
@@ -1099,7 +1094,6 @@ dhcp_reply(struct lease *lease)
struct dhcp_packet raw;
struct sockaddr_in to;
struct in_addr from;
- struct hardware hto;
struct lease_state *state = lease->state;
int nulltp, bootpp;
u_int8_t *prl;
@@ -1196,11 +1190,6 @@ dhcp_reply(struct lease *lease)
lease->hardware_addr.haddr),
state->giaddr.s_addr ? inet_ntoa(state->giaddr) : state->ip->name);
- /* Set up the hardware address... */
- hto.htype = lease->hardware_addr.htype;
- hto.hlen = lease->hardware_addr.hlen;
- memcpy(hto.haddr, lease->hardware_addr.haddr, hto.hlen);
-
memset(&to, 0, sizeof to);
to.sin_family = AF_INET;
#ifdef HAVE_SA_LEN
@@ -1263,7 +1252,7 @@ dhcp_reply(struct lease *lease)
memcpy(&from, state->from.iabuf, sizeof from);
(void) send_packet(state->ip, &raw, packet_length,
- from, &to, &hto);
+ from, &to, &state->haddr);
free_lease_state(state, "dhcp_reply");
lease->state = NULL;