iter_priv.c File Reference

This file contains functions to assist the iterator module. More...

#include "config.h"
#include "iterator/iter_priv.h"
#include "util/regional.h"
#include "util/log.h"
#include "util/config_file.h"
#include "util/data/dname.h"
#include "util/data/msgparse.h"
#include "util/net_help.h"
#include "util/storage/dnstree.h"
#include "sldns/str2wire.h"
#include "sldns/sbuffer.h"

Functions

struct iter_privpriv_create (void)
 Create priv structure. More...
 
void priv_delete (struct iter_priv *priv)
 Delete priv structure. More...
 
static int read_addrs (struct iter_priv *priv, struct config_file *cfg)
 Read private-addr declarations from config.
 
static int read_names (struct iter_priv *priv, struct config_file *cfg)
 Read private-domain declarations from config.
 
int priv_apply_cfg (struct iter_priv *priv, struct config_file *cfg)
 Process priv config. More...
 
static int priv_lookup_addr (struct iter_priv *priv, struct sockaddr_storage *addr, socklen_t addrlen)
 See if an address is blocked. More...
 
static int priv_lookup_name (struct iter_priv *priv, sldns_buffer *pkt, uint8_t *name, size_t name_len, uint16_t dclass)
 See if a name is whitelisted. More...
 
size_t priv_get_mem (struct iter_priv *priv)
 Get memory used by priv structure. More...
 
int priv_rrset_bad (struct iter_priv *priv, sldns_buffer *pkt, struct rrset_parse *rrset)
 See if rrset is bad. More...
 

Detailed Description

This file contains functions to assist the iterator module.

Keep track of the private addresses and lookup fast.

Function Documentation

◆ priv_create()

struct iter_priv* priv_create ( void  )

Create priv structure.

Returns
new structure or NULL on error.

References iter_priv::a, addr_tree_init(), iter_priv::n, name_tree_init(), priv_delete(), iter_priv::region, and regional_create().

Referenced by iter_apply_cfg().

◆ priv_delete()

void priv_delete ( struct iter_priv priv)

Delete priv structure.

Parameters
privto delete.

References iter_priv::region, and regional_destroy().

Referenced by iter_deinit(), and priv_create().

◆ priv_apply_cfg()

int priv_apply_cfg ( struct iter_priv priv,
struct config_file cfg 
)

Process priv config.

Parameters
privwhere to store.
cfgconfig options.
Returns
0 on error.

References iter_priv::a, addr_tree_init(), addr_tree_init_parents(), iter_priv::n, name_tree_init(), name_tree_init_parents(), read_addrs(), read_names(), iter_priv::region, and regional_free_all().

Referenced by iter_apply_cfg().

◆ priv_lookup_addr()

static int priv_lookup_addr ( struct iter_priv priv,
struct sockaddr_storage *  addr,
socklen_t  addrlen 
)
static

See if an address is blocked.

Parameters
privstructure for address storage.
addraddress to check
addrlenlength of addr.
Returns
: true if the address must not be queried. false if unlisted.

References iter_priv::a, and addr_tree_lookup().

◆ priv_lookup_name()

static int priv_lookup_name ( struct iter_priv priv,
sldns_buffer pkt,
uint8_t *  name,
size_t  name_len,
uint16_t  dclass 
)
static

See if a name is whitelisted.

Parameters
privstructure for address storage.
pktthe packet (for compression ptrs).
namename to check.
name_lenuncompressed length of the name to check.
dclassclass to check.
Returns
: true if the name is OK. false if unlisted.

References name_tree_node::dclass, dname_count_size_labels(), dname_pkt_copy(), name_tree_node::labs, name_tree_node::len, log_assert, iter_priv::n, name_tree_node::name, and name_tree_lookup().

Referenced by priv_rrset_bad().

◆ priv_get_mem()

size_t priv_get_mem ( struct iter_priv priv)

Get memory used by priv structure.

Parameters
privstructure for address storage.
Returns
bytes in use.

References iter_priv::region, and regional_get_mem().

◆ priv_rrset_bad()

int priv_rrset_bad ( struct iter_priv priv,
struct sldns_buffer pkt,
struct rrset_parse rrset 
)

See if rrset is bad.

Will remove individual RRs that are bad (if possible) to sanitize the RRset without removing it completely.

Parameters
privstructure for private address storage.
pktpacket to decompress rrset name in.
rrsetthe rrset to examine, A or AAAA.
Returns
true if the rrset is bad and should be removed.

References iter_priv::a, rbtree_type::count, rrset_parse::dname, rrset_parse::dname_len, LDNS_RR_TYPE_A, name_tree_node::len, rr_parse::next, priv_lookup_name(), rrset_parse::rr_first, rrset_parse::rrset_class, and rrset_parse::type.