summaryrefslogtreecommitdiff
path: root/util/edns.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/edns.c')
-rw-r--r--util/edns.c73
1 files changed, 38 insertions, 35 deletions
diff --git a/util/edns.c b/util/edns.c
index c83a4a545fe3..ddbb46e892ce 100644
--- a/util/edns.c
+++ b/util/edns.c
@@ -48,81 +48,84 @@
#include "util/data/msgparse.h"
#include "util/data/msgreply.h"
-struct edns_tags* edns_tags_create(void)
+struct edns_strings* edns_strings_create(void)
{
- struct edns_tags* edns_tags = calloc(1, sizeof(struct edns_tags));
- if(!edns_tags)
+ struct edns_strings* edns_strings = calloc(1,
+ sizeof(struct edns_strings));
+ if(!edns_strings)
return NULL;
- if(!(edns_tags->region = regional_create())) {
- edns_tags_delete(edns_tags);
+ if(!(edns_strings->region = regional_create())) {
+ edns_strings_delete(edns_strings);
return NULL;
}
- return edns_tags;
+ return edns_strings;
}
-void edns_tags_delete(struct edns_tags* edns_tags)
+void edns_strings_delete(struct edns_strings* edns_strings)
{
- if(!edns_tags)
+ if(!edns_strings)
return;
- regional_destroy(edns_tags->region);
- free(edns_tags);
+ regional_destroy(edns_strings->region);
+ free(edns_strings);
}
static int
-edns_tags_client_insert(struct edns_tags* edns_tags,
+edns_strings_client_insert(struct edns_strings* edns_strings,
struct sockaddr_storage* addr, socklen_t addrlen, int net,
- uint16_t tag_data)
+ const char* string)
{
- struct edns_tag_addr* eta = regional_alloc_zero(edns_tags->region,
- sizeof(struct edns_tag_addr));
- if(!eta)
+ struct edns_string_addr* esa = regional_alloc_zero(edns_strings->region,
+ sizeof(struct edns_string_addr));
+ if(!esa)
return 0;
- eta->tag_data = tag_data;
- if(!addr_tree_insert(&edns_tags->client_tags, &eta->node, addr, addrlen,
- net)) {
- verbose(VERB_QUERY, "duplicate EDNS client tag ignored.");
+ esa->string_len = strlen(string);
+ esa->string = regional_alloc_init(edns_strings->region, string,
+ esa->string_len);
+ if(!esa->string)
+ return 0;
+ if(!addr_tree_insert(&edns_strings->client_strings, &esa->node, addr,
+ addrlen, net)) {
+ verbose(VERB_QUERY, "duplicate EDNS client string ignored.");
}
return 1;
}
-int edns_tags_apply_cfg(struct edns_tags* edns_tags,
+int edns_strings_apply_cfg(struct edns_strings* edns_strings,
struct config_file* config)
{
struct config_str2list* c;
- regional_free_all(edns_tags->region);
- addr_tree_init(&edns_tags->client_tags);
+ regional_free_all(edns_strings->region);
+ addr_tree_init(&edns_strings->client_strings);
- for(c=config->edns_client_tags; c; c=c->next) {
+ for(c=config->edns_client_strings; c; c=c->next) {
struct sockaddr_storage addr;
socklen_t addrlen;
int net;
- uint16_t tag_data;
log_assert(c->str && c->str2);
if(!netblockstrtoaddr(c->str, UNBOUND_DNS_PORT, &addr, &addrlen,
&net)) {
- log_err("cannot parse EDNS client tag IP netblock: %s",
- c->str);
+ log_err("cannot parse EDNS client string IP netblock: "
+ "%s", c->str);
return 0;
}
- tag_data = atoi(c->str2); /* validated in config parser */
- if(!edns_tags_client_insert(edns_tags, &addr, addrlen, net,
- tag_data)) {
- log_err("out of memory while adding EDNS tags");
+ if(!edns_strings_client_insert(edns_strings, &addr, addrlen,
+ net, c->str2)) {
+ log_err("out of memory while adding EDNS strings");
return 0;
}
}
- edns_tags->client_tag_opcode = config->edns_client_tag_opcode;
+ edns_strings->client_string_opcode = config->edns_client_string_opcode;
- addr_tree_init_parents(&edns_tags->client_tags);
+ addr_tree_init_parents(&edns_strings->client_strings);
return 1;
}
-struct edns_tag_addr*
-edns_tag_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr,
+struct edns_string_addr*
+edns_string_addr_lookup(rbtree_type* tree, struct sockaddr_storage* addr,
socklen_t addrlen)
{
- return (struct edns_tag_addr*)addr_tree_lookup(tree, addr, addrlen);
+ return (struct edns_string_addr*)addr_tree_lookup(tree, addr, addrlen);
}
static int edns_keepalive(struct edns_data* edns_out, struct edns_data* edns_in,