44#define SPF_LAME_EXP "SPF failure: no explanation available"
47SPF_server_get_default_explanation(SPF_server_t *spf_server,
48 SPF_request_t *spf_request,
49 SPF_response_t *spf_response,
50 char **bufp,
size_t *buflenp)
53 SPF_macro_t *spf_macro;
55 spf_macro = spf_server->explanation;
56 if (spf_macro !=
NULL) {
58 spf_request, spf_response,
59 SPF_macro_data(spf_macro), spf_macro->macro_len,
65 if (*bufp ==
NULL || *buflenp < len) {
66 char *tmp = realloc(*bufp, len);
77#define RETURN_DEFAULT_EXP() do { \
78 return SPF_server_get_default_explanation(spf_server, \
79 spf_request, spf_response, bufp, buflenp); \
84 SPF_request_t *spf_request,
85 SPF_response_t *spf_response,
86 SPF_record_t *spf_record,
87 char **bufp,
size_t *buflenp)
89 SPF_macro_t *spf_macro;
90 SPF_dns_server_t *resolver;
108 domain = spf_request->cur_dom;
110 if ( domain ==
NULL )
112 "Could not identify current domain for explanation");
119 spf_response, spf_record,
130 spf_response, spf_record,
131 "exp", bufp, buflenp );
139 if (*bufp ==
NULL || (*bufp)[0] ==
'\0') {
144 "Explanation is blank!");
153 resolver = spf_server->resolver;
155 if (resolver->get_exp)
156 return resolver->get_exp(spf_server, *bufp, bufp, buflenp);
159 if (rr_txt ==
NULL) {
186 if (rr_txt->
num_rr == 0) {
188 "No TXT records returned from DNS lookup");
211 spf_request, spf_response,
212 SPF_macro_data(spf_macro), spf_macro->macro_len,
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_errcode_t SPF_response_add_warn(SPF_response_t *rp, SPF_errcode_t code, const char *format,...)
SPF_errcode_t SPF_record_find_mod_value(SPF_server_t *spf_server, SPF_request_t *spf_request, SPF_response_t *spf_response, SPF_record_t *spf_record, const char *mod_name, char **bufp, size_t *buflenp)
void SPF_macro_free(SPF_macro_t *mac)
SPF_errcode_t SPF_record_expand_data(SPF_server_t *spf_server, SPF_request_t *spf_request, SPF_response_t *spf_response, SPF_data_t *data, size_t data_len, char **bufp, size_t *buflenp)
SPF_errcode_t SPF_record_compile_macro(SPF_server_t *spf_server, SPF_response_t *spf_response, SPF_macro_t **spf_macrop, const char *record)
void SPF_dns_rr_free(SPF_dns_rr_t *spfrr)
#define SPF_ASSERT_NOTNULL(x)
#define SPF_warning(errmsg)
#define RETURN_DEFAULT_EXP()
SPF_errcode_t SPF_request_get_exp(SPF_server_t *spf_server, SPF_request_t *spf_request, SPF_response_t *spf_response, SPF_record_t *spf_record, char **bufp, size_t *buflenp)