[dhcp] Allow DHCP non-option settings to be cleared
authorMichael Brown <mcb30@etherboot.org>
Tue, 8 Jul 2008 00:13:59 +0000 (01:13 +0100)
committerMichael Brown <mcb30@etherboot.org>
Tue, 8 Jul 2008 00:13:59 +0000 (01:13 +0100)
dhcppkt_store() is supposed to clear the setting if passed NULL for the
setting data.  In the case of fixed-location fields (e.g. client IP
address), this requires setting the content of the field to all-zeros.

src/net/dhcppkt.c

index 2537e25..c8bf215 100644 (file)
@@ -138,12 +138,15 @@ find_dhcp_packet_field ( unsigned int tag ) {
 int dhcppkt_store ( struct dhcp_packet *dhcppkt, unsigned int tag,
                    const void *data, size_t len ) {
        struct dhcp_packet_field *field;
+       void *field_data;
        int rc;
 
        /* If this is a special field, fill it in */
        if ( ( field = find_dhcp_packet_field ( tag ) ) != NULL ) {
                if ( len > field->len )
                        return -ENOSPC;
+               field_data = dhcp_packet_field ( dhcppkt->dhcphdr, field );
+               memset ( field_data, 0, field->len );
                memcpy ( dhcp_packet_field ( dhcppkt->dhcphdr, field ),
                         data, len );
                return 0;