48SPF_dns_debug_pre(SPF_dns_server_t *spf_dns_server,
const char *domain,
49 ns_type rr_type,
int should_cache)
51 if (spf_dns_server->debug) {
53 spf_dns_server->name, domain,
59SPF_dns_debug_post(SPF_dns_server_t *spf_dns_server,
SPF_dns_rr_t *spfrr)
61 if (spf_dns_server->debug) {
62 char ip4_buf[ INET_ADDRSTRLEN ];
63 char ip6_buf[ INET6_ADDRSTRLEN ];
66 SPF_debugf(
"DNS[%s] found record", spf_dns_server->name);
70 SPF_debugf(
" TTL: %ld RR found: %d herrno: %d source: %s",
77 for (i = 0; i < spfrr->
num_rr; i++) {
81 inet_ntop(AF_INET, &(spfrr->
rr[i]->
a),
82 ip4_buf,
sizeof(ip4_buf)));
103 inet_ntop(AF_INET6, &(spfrr->
rr[i]->
aaaa),
104 ip6_buf,
sizeof(ip6_buf)));
118 SPF_dns_server_t *layer_below;
122 layer_below = spf_dns_server->layer_below;
125 if (spf_dns_server->destroy) {
126 spf_dns_server->destroy(spf_dns_server);
127 if (layer_below !=
NULL)
134 ns_type rr_type,
int should_cache)
139 SPF_dns_debug_pre(spf_dns_server, domain, rr_type, should_cache);
141 spfrr = spf_dns_server->lookup(spf_dns_server,
142 domain, rr_type, should_cache);
144 SPF_error(
"SPF DNS layer return NULL during a lookup." );
145 SPF_dns_debug_post(spf_dns_server, spfrr);
151 ns_type rr_type,
int should_cache)
153 char domain[
sizeof(
"111.222.333.444.in-addr.arpa") ];
164 snprintf(domain,
sizeof(domain),
"%d.%d.%d.%d.in-addr.arpa",
165 tmp.x[3], tmp.x[2], tmp.x[1], tmp.x[0]);
167 return SPF_dns_lookup(spf_dns_server, domain, rr_type,should_cache);
172 struct in6_addr ipv6,
ns_type rr_type,
int should_cache)
174 char domain[
sizeof(
struct in6_addr) * 4 +
sizeof(
".ip6.arpa" ) + 1];
179 p_end = p +
sizeof( domain );
181 for (i =
sizeof(
struct in6_addr) - 1; i >= 0; i--) {
182 p += snprintf(p, p_end - p,
"%.1x.%.1x.",
183 ipv6.s6_addr[i] & 0xf,
184 ipv6.s6_addr[i] >> 4);
188 p += snprintf(p, p_end - p,
"ip6.arpa");
190 return SPF_dns_lookup(spf_dns_server, domain, rr_type, should_cache);
238 if ( sr->client_ver == AF_INET ) {
252 for (i = 0; i < max_ptr; i++) {
255 for (j = 0; j < rr_a->
num_rr; j++) {
256 if (rr_a->
rr[j]->
a.s_addr == sr->ipv4.s_addr) {
257 client_dom = strdup(rr_ptr->
rr[i]->
ptr);
268 else if ( sr->client_ver == AF_INET6 ) {
282 for( i = 0; i < max_ptr; i++ ) {
285 for( j = 0; j < rr_aaaa->
num_rr; j++ ) {
286 if ( memcmp( &rr_aaaa->
rr[j]->
aaaa, &sr->ipv6,
287 sizeof( sr->ipv6 ) ) == 0 ) {
288 client_dom = strdup( rr_ptr->
rr[i]->
ptr );
299 return strdup(
"unknown" );
const char * SPF_strrrtype(ns_type rr_type)
void SPF_dns_rr_free(SPF_dns_rr_t *spfrr)
#define SPF_ASSERT_NOTNULL(x)
#define SPF_error(errmsg)
SPF_dns_rr_t * SPF_dns_rlookup(SPF_dns_server_t *spf_dns_server, struct in_addr ipv4, ns_type rr_type, int should_cache)
SPF_dns_rr_t * SPF_dns_rlookup6(SPF_dns_server_t *spf_dns_server, struct in6_addr ipv6, ns_type rr_type, int should_cache)
char * SPF_dns_get_client_dom(SPF_dns_server_t *spf_dns_server, SPF_request_t *sr)
void SPF_dns_free(SPF_dns_server_t *spf_dns_server)
SPF_dns_rr_t * SPF_dns_lookup(SPF_dns_server_t *spf_dns_server, const char *domain, ns_type rr_type, int should_cache)
SPF_dns_server_t * source