[klibc] [PATCH] ipconfig truncates dhcp response
Olaf Hering
olh at suse.de
Thu Sep 2 13:43:15 PDT 2004
We get 3 dns servers in our network. ipconfig will take only the first
2. It doesnt advance the pointer correctly, As a result, the following
entries in the reply will be parsed incorrectly.
len must not change.
diff -p -purN klibc-0.171.orig/ipconfig/bootp_proto.c klibc-0.171/ipconfig/bootp_proto.c
--- klibc-0.171.orig/ipconfig/bootp_proto.c 2004-06-16 20:30:05.000000000 +0200
+++ klibc-0.171/ipconfig/bootp_proto.c 2004-09-02 12:38:19.000000000 +0200
@@ -89,19 +89,13 @@ bootp_parse(struct netdev *dev, struct b
switch (opt) {
case 1: /* subnet mask */
- if (len > 4)
- len = 4;
- memcpy(&dev->ip_netmask, ext, len);
+ memcpy(&dev->ip_netmask, ext, len > 4 ? 4 : len);
break;
case 3: /* default gateway */
- if (len > 4)
- len = 4;
- memcpy(&dev->ip_gateway, ext, len);
+ memcpy(&dev->ip_gateway, ext, len > 4 ? 4 : len);
break;
case 6: /* DNS server */
- if (len > 8)
- len = 8;
- memcpy(&dev->ip_nameserver, ext, len);
+ memcpy(&dev->ip_nameserver, ext, len > 8 ? 8 : len);
break;
case 12: /* host name */
if (len > sizeof(dev->hostname) - 1)
@@ -126,9 +120,7 @@ bootp_parse(struct netdev *dev, struct b
dev->mtu = (ext[0] << 8) + ext[1];
break;
case 28: /* broadcast addr */
- if (len > 4)
- len = 4;
- memcpy(&dev->ip_broadcast, ext, len);
+ memcpy(&dev->ip_broadcast, ext, len > 4 ? 4 : len);
break;
case 40: /* NIS domain name */
if (len > sizeof(dev->nisdomainname) - 1)
--
USB is for mice, FireWire is for men!
sUse lINUX ag, nÜRNBERG
More information about the klibc
mailing list