mirror of
https://github.com/xcat2/xNBA.git
synced 2024-11-22 09:31:51 +00:00
[dhcp] Accept filename via DHCP option 67 as well as BOOTP filename field
Allow options with dedicated BOOTP fields to fall back to using the equivalent DHCP option if the relevant field is empty.
This commit is contained in:
parent
cc4363acca
commit
b363d19a16
@ -155,6 +155,8 @@ int dhcppkt_store ( struct dhcp_packet *dhcppkt, unsigned int tag,
|
||||
memset ( field_data, 0, field->len );
|
||||
memcpy ( dhcp_packet_field ( dhcppkt->dhcphdr, field ),
|
||||
data, len );
|
||||
/* Erase any equivalent option from the options block */
|
||||
dhcpopt_store ( &dhcppkt->options, tag, NULL, 0 );
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -181,14 +183,16 @@ int dhcppkt_fetch ( struct dhcp_packet *dhcppkt, unsigned int tag,
|
||||
void *data, size_t len ) {
|
||||
struct dhcp_packet_field *field;
|
||||
void *field_data;
|
||||
size_t field_len;
|
||||
size_t field_len = 0;
|
||||
|
||||
/* If this is a special field, return it */
|
||||
/* Identify special field, if any */
|
||||
if ( ( field = find_dhcp_packet_field ( tag ) ) != NULL ) {
|
||||
field_data = dhcp_packet_field ( dhcppkt->dhcphdr, field );
|
||||
field_len = field->used_len ( field_data, field->len );
|
||||
if ( ! field_len )
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
/* Return special field, if it exists and is populated */
|
||||
if ( field_len ) {
|
||||
if ( len > field_len )
|
||||
len = field_len;
|
||||
memcpy ( data, field_data, len );
|
||||
|
Loading…
Reference in New Issue
Block a user