Electroneum
Loading...
Searching...
No Matches
authzone.h File Reference
#include "util/rbtree.h"
#include "util/locks.h"
#include "services/mesh.h"
Include dependency graph for authzone.h:

Go to the source code of this file.

Classes

struct  auth_zones
struct  auth_zone
struct  auth_data
struct  auth_rrset
struct  auth_xfer
struct  auth_nextprobe
struct  auth_probe
struct  auth_transfer
struct  auth_addr
struct  auth_master
struct  auth_chunk

Functions

struct auth_zones * auth_zones_create (void)
int auth_zones_apply_cfg (struct auth_zones *az, struct config_file *cfg, int setup)
void auth_xfer_pickup_initial (struct auth_zones *az, struct module_env *env)
void auth_zones_cleanup (struct auth_zones *az)
void auth_zones_delete (struct auth_zones *az)
int auth_zone_write_file (struct auth_zone *z, const char *fname)
int auth_zones_lookup (struct auth_zones *az, struct query_info *qinfo, struct regional *region, struct dns_msg **msg, int *fallback, uint8_t *dp_nm, size_t dp_nmlen)
int auth_zones_answer (struct auth_zones *az, struct module_env *env, struct query_info *qinfo, struct edns_data *edns, struct sldns_buffer *buf, struct regional *temp)
struct auth_zone * auth_zones_find_zone (struct auth_zones *az, uint8_t *name, size_t name_len, uint16_t dclass)
struct auth_zone * auth_zone_find (struct auth_zones *az, uint8_t *nm, size_t nmlen, uint16_t dclass)
struct auth_xfer * auth_xfer_find (struct auth_zones *az, uint8_t *nm, size_t nmlen, uint16_t dclass)
struct auth_zone * auth_zone_create (struct auth_zones *az, uint8_t *nm, size_t nmlen, uint16_t dclass)
int auth_zone_set_zonefile (struct auth_zone *z, char *zonefile)
int auth_zone_set_fallback (struct auth_zone *z, char *fallbackstr)
int auth_zones_can_fallback (struct auth_zones *az, uint8_t *nm, size_t nmlen, uint16_t dclass)
int auth_zones_notify (struct auth_zones *az, struct module_env *env, uint8_t *nm, size_t nmlen, uint16_t dclass, struct sockaddr_storage *addr, socklen_t addrlen, int has_serial, uint32_t serial, int *refused)
int auth_zone_parse_notify_serial (struct sldns_buffer *pkt, uint32_t *serial)
int auth_zone_read_zonefile (struct auth_zone *z)
int auth_zone_get_serial (struct auth_zone *z, uint32_t *serial)
int auth_zone_cmp (const void *z1, const void *z2)
int auth_data_cmp (const void *z1, const void *z2)
int auth_xfer_cmp (const void *z1, const void *z2)
struct auth_xfer * auth_xfer_create (struct auth_zones *az, struct auth_zone *z)
int xfer_set_masters (struct auth_master **list, struct config_auth *c, int with_http)
void auth_xfer_timer (void *arg)
int auth_xfer_probe_udp_callback (struct comm_point *c, void *arg, int err, struct comm_reply *repinfo)
int auth_xfer_transfer_tcp_callback (struct comm_point *c, void *arg, int err, struct comm_reply *repinfo)
int auth_xfer_transfer_http_callback (struct comm_point *c, void *arg, int err, struct comm_reply *repinfo)
void auth_xfer_probe_timer_callback (void *arg)
void auth_xfer_probe_lookup_callback (void *arg, int rcode, struct sldns_buffer *buf, enum sec_status sec, char *why_bogus)
void auth_xfer_transfer_lookup_callback (void *arg, int rcode, struct sldns_buffer *buf, enum sec_status sec, char *why_bogus)
int compare_serial (uint32_t a, uint32_t b)

Detailed Description

This file contains the functions for an authority zone. This zone is queried by the iterator, just like a stub or forward zone, but then the data is locally held.

Definition in file authzone.h.

Function Documentation

◆ auth_data_cmp()

int auth_data_cmp ( const void * z1,
const void * z2 )

compare auth_data for sorted rbtree

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_xfer_cmp()

int auth_xfer_cmp ( const void * z1,
const void * z2 )

compare auth_xfer for sorted rbtree

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_xfer_create()

struct auth_xfer * auth_xfer_create ( struct auth_zones * az,
struct auth_zone * z )

Create auth_xfer structure. Caller must have wrlock on az. Returns locked xfer zone.

Parameters
azzones structure.
zzone with name and class
Returns
xfer zone or NULL
Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_xfer_find()

struct auth_xfer * auth_xfer_find ( struct auth_zones * az,
uint8_t * nm,
size_t nmlen,
uint16_t dclass )

find an xfer zone by name (exact match by name or NULL returned)

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_xfer_pickup_initial()

void auth_xfer_pickup_initial ( struct auth_zones * az,
struct module_env * env )

initial pick up of worker timeouts, ties events to worker event loop

Parameters
azauth zones structure
envworker env, of first worker that receives the events (if any) in its eventloop.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_xfer_probe_lookup_callback()

void auth_xfer_probe_lookup_callback ( void * arg,
int rcode,
struct sldns_buffer * buf,
enum sec_status sec,
char * why_bogus )

mesh callback for task_probe on lookup of host names

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_xfer_probe_timer_callback()

void auth_xfer_probe_timer_callback ( void * arg)

xfer probe timeout callback, part of task_probe

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_xfer_probe_udp_callback()

int auth_xfer_probe_udp_callback ( struct comm_point * c,
void * arg,
int err,
struct comm_reply * repinfo )

callback for commpoint udp replies to task_probe

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_xfer_timer()

void auth_xfer_timer ( void * arg)

xfer nextprobe timeout callback, this is part of task_nextprobe

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_xfer_transfer_http_callback()

int auth_xfer_transfer_http_callback ( struct comm_point * c,
void * arg,
int err,
struct comm_reply * repinfo )

callback for task_transfer http connections

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_xfer_transfer_lookup_callback()

void auth_xfer_transfer_lookup_callback ( void * arg,
int rcode,
struct sldns_buffer * buf,
enum sec_status sec,
char * why_bogus )

mesh callback for task_transfer on lookup of host names

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_xfer_transfer_tcp_callback()

int auth_xfer_transfer_tcp_callback ( struct comm_point * c,
void * arg,
int err,
struct comm_reply * repinfo )

callback for task_transfer tcp connections

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zone_cmp()

int auth_zone_cmp ( const void * z1,
const void * z2 )

compare auth_zones for sorted rbtree

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zone_create()

struct auth_zone * auth_zone_create ( struct auth_zones * az,
uint8_t * nm,
size_t nmlen,
uint16_t dclass )

create an auth zone. returns wrlocked zone. caller must have wrlock on az. returns NULL on malloc failure

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zone_find()

struct auth_zone * auth_zone_find ( struct auth_zones * az,
uint8_t * nm,
size_t nmlen,
uint16_t dclass )

find an auth zone by name (exact match by name or NULL returned)

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zone_get_serial()

int auth_zone_get_serial ( struct auth_zone * z,
uint32_t * serial )

find serial number of zone or false if none (no SOA record)

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zone_parse_notify_serial()

int auth_zone_parse_notify_serial ( struct sldns_buffer * pkt,
uint32_t * serial )

process notify packet and read serial number from SOA. returns 0 if no soa record in the notify

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zone_read_zonefile()

int auth_zone_read_zonefile ( struct auth_zone * z)

read auth zone from zonefile. caller must lock zone. false on failure

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zone_set_fallback()

int auth_zone_set_fallback ( struct auth_zone * z,
char * fallbackstr )

set auth zone fallback. caller must have lock on zone. fallbackstr is "yes" or "no". false on parse failure.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zone_set_zonefile()

int auth_zone_set_zonefile ( struct auth_zone * z,
char * zonefile )

set auth zone zonefile string. caller must have lock on zone

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zone_write_file()

int auth_zone_write_file ( struct auth_zone * z,
const char * fname )

Write auth zone data to file, in zonefile format.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zones_answer()

int auth_zones_answer ( struct auth_zones * az,
struct module_env * env,
struct query_info * qinfo,
struct edns_data * edns,
struct sldns_buffer * buf,
struct regional * temp )

Answer query from auth zone. Create authoritative answer.

Parameters
azauth zones structure.
envthe module environment.
qinfoquery info (parsed).
ednsedns info (parsed).
bufbuffer with query ID and flags, also for reply.
temptemporary storage region.
Returns
false if not answered
Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zones_apply_cfg()

int auth_zones_apply_cfg ( struct auth_zones * az,
struct config_file * cfg,
int setup )

Apply configuration to auth zones. Reads zonefiles.

Parameters
azauth zones structure
cfgconfig to apply.
setupif true, also sets up values in the auth zones structure
Returns
false on failure.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zones_can_fallback()

int auth_zones_can_fallback ( struct auth_zones * az,
uint8_t * nm,
size_t nmlen,
uint16_t dclass )

see if the auth zone for the name can fallback

Parameters
azauth zones
nmname of delegation point.
nmlenlength of nm.
dclassclass of zone to look for.
Returns
true if fallback_enabled is true. false if not. if the zone does not exist, fallback is true (more lenient) also true if zone does not do upstream requests.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zones_cleanup()

void auth_zones_cleanup ( struct auth_zones * az)

Cleanup auth zones. This removes all events from event bases. Stops the xfr tasks. But leaves zone data.

Parameters
azauth zones structure.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zones_create()

struct auth_zones * auth_zones_create ( void )

Create auth zones structure

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zones_delete()

void auth_zones_delete ( struct auth_zones * az)

Delete auth zones structure

Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zones_find_zone()

struct auth_zone * auth_zones_find_zone ( struct auth_zones * az,
uint8_t * name,
size_t name_len,
uint16_t dclass )

Find the auth zone that is above the given qname. Return NULL when there is no auth_zone above the give name, otherwise returns the closest auth_zone above the qname that pertains to it.

Parameters
azauth zones structure.
namequery to look up for.
name_lenlength of name.
dclassclass of zone to find.
Returns
NULL or auth_zone that pertains to the query.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zones_lookup()

int auth_zones_lookup ( struct auth_zones * az,
struct query_info * qinfo,
struct regional * region,
struct dns_msg ** msg,
int * fallback,
uint8_t * dp_nm,
size_t dp_nmlen )

Use auth zones to lookup the answer to a query. The query is from the iterator. And the auth zones attempts to provide the answer instead of going to the internet.

Parameters
azauth zones structure.
qinfoquery info to lookup.
regionregion to use to allocate the reply in.
msgreply is stored here (if one).
fallbackif true, fallback to making a query to the internet.
dp_nmname of delegation point to look for. This zone is used to answer the query. If the dp_nm is not found, fallback is set to true and false returned.
dp_nmlenlength of dp_nm.
Returns
0: failure (an error of some sort, like servfail). if 0 and fallback is true, fallback to the internet. if 0 and fallback is false, like getting servfail. If true, an answer is available.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ auth_zones_notify()

int auth_zones_notify ( struct auth_zones * az,
struct module_env * env,
uint8_t * nm,
size_t nmlen,
uint16_t dclass,
struct sockaddr_storage * addr,
socklen_t addrlen,
int has_serial,
uint32_t serial,
int * refused )

process notify for auth zones. first checks the access list. Then processes the notify. This starts the probe sequence or it notes the serial number (if any)

Parameters
azauth zones structure.
envmodule env of the worker that is handling the notify. it will pick up the task probe (or transfer), unless already in progress by another worker.
nmname of the zone. Uncompressed. from query.
nmlenlength of name.
dclassclass of zone.
addrsource address of notify
addrlenlength of addr.
has_serialif true, the notify has a serial attached.
serialthe serial number, if has_serial is true.
refusedis set to true on failure to note refused access.
Returns
fail on failures (refused is false) and when access is denied (refused is true). True when processed.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ compare_serial()

int compare_serial ( uint32_t a,
uint32_t b )
Here is the call graph for this function:
Here is the caller graph for this function:

◆ xfer_set_masters()

int xfer_set_masters ( struct auth_master ** list,
struct config_auth * c,
int with_http )

Set masters in auth xfer structure from config.

Parameters
listpointer to start of list. The malloced list is returned here.
cthe config items to copy over.
with_httpif true, http urls are also included, before the masters.
Returns
false on failure.
Here is the call graph for this function:
Here is the caller graph for this function: