spf_dns_zone.h File Reference

A local DNS zone layer. More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.


SPF_dns_server_tSPF_dns_zone_new (SPF_dns_server_t *layer_below, const char *name, int debug)
SPF_errcode_t SPF_dns_zone_add_str (SPF_dns_server_t *spf_dns_server, const char *domain, ns_type rr_type, SPF_dns_stat_t herrno, const char *data)

Detailed Description

A local DNS zone layer.

The zone DNS layer allows you to create DNS zone information from scratch, without calling some sort of external DNS resolver.

The primary use is to either override real DNS information, or to provide fallbacks when no DNS information is available. The zone will override the real DNS information if it is above the resolving DNS layer in the stack. It will provide a fallback if it is layered below.

The zone DNS layer supports wildcard domain names, but not in the way that wilcards are supported in real DNS zones. Unlike real DNS zones, a wildcard in the zone layer will match even if there are other records of a different RR type in the same zone. This makes wildcarding much more useful, but could cause confusion.

When using wildcards, it is important to add the most specific DNS zone data first, and the most general data last. Otherwise, the more general information will always be returned. This should probably be considered a bug and may be fixed in the future.

For example, if you want to add entries with the same RR type for "foo.foo.example.com", "*.foo.example.com" and "*.example.com", you should add them in this order.

You can also add entries with the RR type of ns_t_any, which will match any type of RR query. This is most useful when you want to wildcard HOST_NOT_FOUND entries to prevent queries of any type from being fetched from a lower DNS layer.

For an overview of the DNS layer system, see spf_dns.h

Definition in file spf_dns_zone.h.

Function Documentation

SPF_errcode_t SPF_dns_zone_add_str ( SPF_dns_server_t spf_dns_server,
const char *  domain,
ns_type  rr_type,
SPF_dns_stat_t  herrno,
const char *  data 

Adds an entry to a DNS zone.

If a given domain name has multiple records of a given RR type, you can call the add routine multiple times to add to the RR set.

Definition at line 189 of file spf_dns_zone.c.

References SPF_dns_rr_data_t::a, SPF_dns_rr_data_t::aaaa, SPF_dns_server_struct::hook, SPF_dns_rr_data_t::mx, NETDB_SUCCESS, ns_t_a, ns_t_aaaa, ns_t_any, ns_t_mx, ns_t_ptr, ns_t_spf, ns_t_txt, NULL, SPF_dns_rr_t::num_rr, SPF_dns_zone_config_t::num_zone, SPF_dns_rr_data_t::ptr, SPF_dns_rr_t::rr, SPF_dns_rr_new_init(), SPF_E_INVALID_IP4, SPF_E_INVALID_IP6, SPF_E_NO_MEMORY, SPF_E_SUCCESS, SPF_error, SPF_RR_TRY_REALLOC, TRUE, SPF_dns_rr_data_t::txt, SPF_dns_zone_config_t::zone, and SPF_dns_zone_config_t::zone_buf_len.

Referenced by SPF_dns_test_new().

Here is the call graph for this function:

SPF_dns_server_t* SPF_dns_zone_new ( SPF_dns_server_t layer_below,
const char *  name,
int  debug 

These routines take care of creating/destroying/etc. the objects that hold the DNS layer configuration. SPF_dns_server_t objects contain malloc'ed data, so they must be destroyed when you are finished with them, or you will leak memory.

The "name" will be used when displaying debugging information so that you can tell which zone layer in the stack of DNS layers generated the output.

Definition at line 337 of file spf_dns_zone.c.

References SPF_dns_server_struct::add_cache, SPF_dns_server_struct::debug, SPF_dns_server_struct::destroy, SPF_dns_server_struct::get_exp, SPF_dns_server_struct::get_spf, SPF_dns_server_struct::hook, HOST_NOT_FOUND, SPF_dns_server_struct::layer_below, SPF_dns_server_struct::lookup, SPF_dns_server_struct::name, ns_t_any, NULL, SPF_dns_zone_config_t::num_zone, SPF_dns_zone_config_t::nxdomain, SPF_dns_rr_new_init(), SPF_dns_zone_config_t::zone, and SPF_dns_zone_config_t::zone_buf_len.

Referenced by SPF_dns_test_new(), and SPF_server_new().

Here is the call graph for this function:

Generated on Tue Nov 4 13:27:41 2008 for libspf2 by  doxygen 1.5.4