Commit 87985855 authored by Simon Kelley's avatar Simon Kelley

Remove pre-existing EDNS0_OPTION_NOMDEVICEID if MAC address unknown.

parent a2bc254b
...@@ -95,6 +95,8 @@ unsigned char *find_pseudoheader(struct dns_header *header, size_t plen, size_t ...@@ -95,6 +95,8 @@ unsigned char *find_pseudoheader(struct dns_header *header, size_t plen, size_t
return ret; return ret;
} }
/* replace == 2 ->delete existing option only. */
size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *limit, size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *limit,
unsigned short udp_sz, int optno, unsigned char *opt, size_t optlen, int set_do, int replace) unsigned short udp_sz, int optno, unsigned char *opt, size_t optlen, int set_do, int replace)
{ {
...@@ -151,7 +153,7 @@ size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *l ...@@ -151,7 +153,7 @@ size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *l
if (code == optno) if (code == optno)
{ {
if (!replace) if (replace == 0)
return plen; return plen;
/* delete option if we're to replace it. */ /* delete option if we're to replace it. */
...@@ -213,7 +215,7 @@ size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *l ...@@ -213,7 +215,7 @@ size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *l
return plen; /* Too big */ return plen; /* Too big */
/* Add new option */ /* Add new option */
if (optno != 0) if (optno != 0 && replace != 2)
{ {
PUTSHORT(optno, p); PUTSHORT(optno, p);
PUTSHORT(optlen, p); PUTSHORT(optlen, p);
...@@ -244,12 +246,14 @@ static void encoder(unsigned char *in, char *out) ...@@ -244,12 +246,14 @@ static void encoder(unsigned char *in, char *out)
static size_t add_dns_client(struct dns_header *header, size_t plen, unsigned char *limit, union mysockaddr *l3, time_t now) static size_t add_dns_client(struct dns_header *header, size_t plen, unsigned char *limit, union mysockaddr *l3, time_t now)
{ {
int maclen; int maclen, replace = 2; /* can't get mac address, just delete any incoming. */
unsigned char mac[DHCP_CHADDR_MAX]; unsigned char mac[DHCP_CHADDR_MAX];
char encode[18]; /* handle 6 byte MACs */ char encode[18]; /* handle 6 byte MACs */
if ((maclen = find_mac(l3, mac, 1, now)) == 6) if ((maclen = find_mac(l3, mac, 1, now)) == 6)
{ {
replace = 1;
if (option_bool(OPT_MAC_HEX)) if (option_bool(OPT_MAC_HEX))
print_mac(encode, mac, maclen); print_mac(encode, mac, maclen);
else else
...@@ -258,10 +262,9 @@ static size_t add_dns_client(struct dns_header *header, size_t plen, unsigned ch ...@@ -258,10 +262,9 @@ static size_t add_dns_client(struct dns_header *header, size_t plen, unsigned ch
encoder(mac+3, encode+4); encoder(mac+3, encode+4);
encode[8] = 0; encode[8] = 0;
} }
plen = add_pseudoheader(header, plen, limit, PACKETSZ, EDNS0_OPTION_NOMDEVICEID, (unsigned char *)encode, strlen(encode), 0, 1);
} }
return plen; return add_pseudoheader(header, plen, limit, PACKETSZ, EDNS0_OPTION_NOMDEVICEID, (unsigned char *)encode, strlen(encode), 0, replace);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment