Add --add-mac=text option.

This commit is contained in:
Simon Kelley
2016-02-17 20:26:32 +00:00
parent fdc97e1383
commit 9e4cf47ee8
4 changed files with 18 additions and 11 deletions

View File

@@ -604,7 +604,7 @@ configured a zero is added in front of the label. ::1 becomes 0--1.
The address range can be of the form The address range can be of the form
<ip address>,<ip address> or <ip address>/<netmask> <ip address>,<ip address> or <ip address>/<netmask>
.TP .TP
.B --add-mac[=base64] .B --add-mac[=base64|text]
Add the MAC address of the requestor to DNS queries which are Add the MAC address of the requestor to DNS queries which are
forwarded upstream. This may be used to DNS filtering by the upstream forwarded upstream. This may be used to DNS filtering by the upstream
server. The MAC address can only be added if the requestor is on the same server. The MAC address can only be added if the requestor is on the same
@@ -613,7 +613,7 @@ is not yet standardised, so this should be considered
experimental. Also note that exposing MAC addresses in this way may experimental. Also note that exposing MAC addresses in this way may
have security and privacy implications. The warning about caching have security and privacy implications. The warning about caching
given for --add-subnet applies to --add-mac too. An alternative encoding of the given for --add-subnet applies to --add-mac too. An alternative encoding of the
MAC, as base64, is enabled by adding the "base64" parameter. MAC, as base64, is enabled by adding the "base64" parameter and a human-readable encoding of hex-and-colons is enabled by added the "text" parameter.
.TP .TP
.B --add-cpe-id=<string> .B --add-cpe-id=<string>
Add a arbitrary identifying string to o DNS queries which are Add a arbitrary identifying string to o DNS queries which are

View File

@@ -237,7 +237,8 @@ struct event_desc {
#define OPT_TFTP_NO_FAIL 52 #define OPT_TFTP_NO_FAIL 52
#define OPT_SCRIPT_ARP 53 #define OPT_SCRIPT_ARP 53
#define OPT_MAC_B64 54 #define OPT_MAC_B64 54
#define OPT_LAST 55 #define OPT_MAC_HEX 55
#define OPT_LAST 56
/* extra flags for my_syslog, we use a couple of facilities since they are known /* extra flags for my_syslog, we use a couple of facilities since they are known
not to occupy the same bits as priorities, no matter how syslog.h is set up. */ not to occupy the same bits as priorities, no matter how syslog.h is set up. */

View File

@@ -223,14 +223,19 @@ static size_t add_dns_client(struct dns_header *header, size_t plen, unsigned ch
{ {
int maclen; int maclen;
unsigned char mac[DHCP_CHADDR_MAX]; unsigned char mac[DHCP_CHADDR_MAX];
char encode[8]; /* 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)
{ {
encoder(mac, encode); if (option_bool(OPT_MAC_HEX))
encoder(mac+3, encode+4); print_mac(encode, mac, maclen);
else
plen = add_pseudoheader(header, plen, limit, PACKETSZ, EDNS0_OPTION_NOMDEVICEID, (unsigned char *)encode, 8, 0); {
encoder(mac, encode);
encoder(mac+3, encode+4);
encode[8] = 0;
}
plen = add_pseudoheader(header, plen, limit, PACKETSZ, EDNS0_OPTION_NOMDEVICEID, (unsigned char *)encode, strlen(encode), 0);
} }
return plen; return plen;
@@ -377,7 +382,7 @@ size_t add_edns0_config(struct dns_header *header, size_t plen, unsigned char *l
if (option_bool(OPT_ADD_MAC)) if (option_bool(OPT_ADD_MAC))
plen = add_mac(header, plen, limit, source, now); plen = add_mac(header, plen, limit, source, now);
if (option_bool(OPT_MAC_B64)) if (option_bool(OPT_MAC_B64) || option_bool(OPT_MAC_HEX))
plen = add_dns_client(header, plen, limit, source, now); plen = add_dns_client(header, plen, limit, source, now);
if (daemon->dns_client_id) if (daemon->dns_client_id)

View File

@@ -2172,8 +2172,9 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
unhide_metas(arg); unhide_metas(arg);
if (strcmp(arg, "base64") == 0) if (strcmp(arg, "base64") == 0)
set_option_bool(OPT_MAC_B64); set_option_bool(OPT_MAC_B64);
else else if (strcmp(arg, "text") == 0)
ret_err(gen_err); set_option_bool(OPT_MAC_HEX);
ret_err(gen_err);
} }
break; break;