#include "spf.h"#include "spf_request.h"


Go to the source code of this file.
The results of the SPF check (as defined by the official SPF spec)
To quote from doc/draft-mengwong-spf-00.txt Section 3:
3. SPF Record Evaluation
An SPF client evaluates an SPF record and produces one of seven results:
None: The domain does not publish SPF data.
Neutral (?): The SPF client MUST proceed as if a domain did not publish SPF data. This result occurs if the domain explicitly specifies a "?" value, or if processing "falls off the end" of the SPF record.
Pass (+): the message meets the publishing domain's definition of legitimacy. MTAs proceed to apply local policy and MAY accept or reject the message accordingly.
Fail (-): the message does not meet a domain's definition of legitimacy. MTAs MAY reject the message using a permanent failure reply code. (Code 550 is RECOMMENDED. See RFC2821 section 7.1.)
Softfail (~): the message does not meet a domain's strict definition of legitimacy, but the domain cannot confidently state that the message is a forgery. MTAs SHOULD accept the message but MAY subject it to a higher transaction cost, deeper scrutiny, or an unfavourable score.
There are two error conditions, one temporary and one permanent.
Error: indicates an error during lookup; an MTA MAY reject the message using a transient failure code, such as 450.
Unknown: indicates incomplete processing: an MTA MUST proceed as if a domain did not publish SPF data.
When SPF-aware SMTP receivers accept a message, they SHOULD prepend a Received-SPF header. See section 6.
SPF clients MUST use the algorithm described in this section or its functional equivalent.
If an SPF client encounters a syntax error in an SPF record, it must terminate processing and return a result of "unknown".
note: SPF_RESULT_* values are constrained by the internal PREFIX_* values
Definition in file spf_response.h.
| typedef enum SPF_reason_enum SPF_reason_t |
| typedef struct SPF_response_struct SPF_response_t |
Definition at line 164 of file spf_response.h.
| typedef enum SPF_result_enum SPF_result_t |
| enum SPF_errcode_t |
error codes returned by various SPF functions. (including SPF_compile() and SPF_id2str(), spf_result(), etc.).
The function SPF_strerror() will return a longer explanation of these errors.
| SPF_E_SUCCESS | No errors |
| SPF_E_NO_MEMORY | Out of memory |
| SPF_E_NOT_SPF | Could not find a valid SPF record |
| SPF_E_SYNTAX | Syntax error |
| SPF_E_MOD_W_PREF | Modifiers can not have prefixes |
| SPF_E_INVALID_CHAR | Invalid character found |
| SPF_E_UNKNOWN_MECH | Unknown mechanism found |
| SPF_E_INVALID_OPT | Invalid option found |
| SPF_E_INVALID_CIDR | Invalid CIDR length |
| SPF_E_MISSING_OPT | Required option is missing |
| SPF_E_INTERNAL_ERROR | Internal programming error |
| SPF_E_INVALID_ESC | Invalid -escape character |
| SPF_E_INVALID_VAR | Invalid macro variable |
| SPF_E_BIG_SUBDOM | Subdomain truncation depth too large |
| SPF_E_INVALID_DELIM | Invalid delimiter character |
| SPF_E_BIG_STRING | Option string too long |
| SPF_E_BIG_MECH | Too many mechanisms |
| SPF_E_BIG_MOD | Too many modifiers |
| SPF_E_BIG_DNS | Mechanisms used too many DNS lookups |
| SPF_E_INVALID_IP4 | Invalid IPv4 address literal |
| SPF_E_INVALID_IP6 | Invalid IPv6 address literal |
| SPF_E_INVALID_PREFIX | Invalid mechanism prefix |
| SPF_E_RESULT_UNKNOWN | SPF result is \"unknown\" |
| SPF_E_UNINIT_VAR | Uninitialized variable |
| SPF_E_MOD_NOT_FOUND | Modifier not found |
| SPF_E_NOT_CONFIG | Not configured |
| SPF_E_DNS_ERROR | DNS lookup failure |
| SPF_E_BAD_HOST_IP | Invalid hostname (an IP address?) |
| SPF_E_BAD_HOST_TLD | Hostname has a missing or invalid TLD |
| SPF_E_MECH_AFTER_ALL | Mechanisms found after the \"all:\" mechanism will be ignored |
| SPF_E_INCLUDE_RETURNED_NONE | If an include recursive query returns none it's a perm error |
| SPF_E_RECURSIVE | Recursive include |
| SPF_E_MULTIPLE_RECORDS | Multiple SPF or TXT records found |
Definition at line 118 of file spf_response.h.
| enum SPF_reason_enum |
The reason that the result was returned
This is what triggered the SPF result. Usually, it is a mechanism in the SPF record that causes the result, but if it was something else, the calling program will often want to take a different action or issue a different message.
Definition at line 99 of file spf_response.h.
| enum SPF_result_enum |
| SPF_RESULT_INVALID | We should never return this. |
| SPF_RESULT_NEUTRAL | |
| SPF_RESULT_PASS | |
| SPF_RESULT_FAIL | |
| SPF_RESULT_SOFTFAIL | |
| SPF_RESULT_NONE | |
| SPF_RESULT_TEMPERROR | |
| SPF_RESULT_PERMERROR |
Definition at line 78 of file spf_response.h.
| SPF_errcode_t SPF_error_code | ( | SPF_error_t * | err | ) |
Definition at line 314 of file spf_response.c.
References SPF_error_t::code.
Referenced by main(), and SPF_record_compile().
| char SPF_error_errorp | ( | SPF_error_t * | err | ) |
Definition at line 326 of file spf_response.c.
References SPF_error_t::is_error.
Referenced by main(), and SPF_record_compile().
| const char* SPF_error_message | ( | SPF_error_t * | err | ) |
Definition at line 320 of file spf_response.c.
References SPF_error_t::message.
Referenced by main().
| SPF_errcode_t SPF_response_add_error | ( | SPF_response_t * | rp, | |
| SPF_errcode_t | code, | |||
| const char * | format, | |||
| ... | ||||
| ) |
Definition at line 256 of file spf_response.c.
References NULL, and SPF_ADD_ERROR.
Referenced by SPF_record_compile(), SPF_server_get_record(), SPF_server_set_explanation(), and SPF_server_set_localpolicy().
| SPF_errcode_t SPF_response_add_error_idx | ( | SPF_response_t * | rp, | |
| SPF_errcode_t | code, | |||
| const char * | text, | |||
| int | idx, | |||
| const char * | format, | |||
| ... | ||||
| ) |
| SPF_errcode_t SPF_response_add_error_ptr | ( | SPF_response_t * | rp, | |
| SPF_errcode_t | code, | |||
| const char * | text, | |||
| const char * | tptr, | |||
| const char * | format, | |||
| ... | ||||
| ) |
Internal functions for adding errors.
Definition at line 238 of file spf_response.c.
References SPF_ADD_ERROR.
Referenced by SPF_record_compile().
| SPF_errcode_t SPF_response_add_warn | ( | SPF_response_t * | rp, | |
| SPF_errcode_t | code, | |||
| const char * | format, | |||
| ... | ||||
| ) |
Definition at line 282 of file spf_response.c.
References NULL, and SPF_ADD_WARN.
Referenced by SPF_request_get_exp().
| SPF_errcode_t SPF_response_add_warn_idx | ( | SPF_response_t * | rp, | |
| SPF_errcode_t | code, | |||
| const char * | text, | |||
| int | idx, | |||
| const char * | format, | |||
| ... | ||||
| ) |
| SPF_errcode_t SPF_response_add_warn_ptr | ( | SPF_response_t * | rp, | |
| SPF_errcode_t | code, | |||
| const char * | text, | |||
| const char * | tptr, | |||
| const char * | format, | |||
| ... | ||||
| ) |
Definition at line 264 of file spf_response.c.
References SPF_ADD_WARN.
Referenced by SPF_record_compile().
| SPF_response_t* SPF_response_combine | ( | SPF_response_t * | main, | |
| SPF_response_t * | r2mx | |||
| ) |
Definition at line 90 of file spf_response.c.
References SPF_response_result(), SPF_RESULT_FAIL, SPF_RESULT_INVALID, SPF_RESULT_NEUTRAL, SPF_RESULT_PASS, SPF_RESULT_PERMERROR, SPF_RESULT_SOFTFAIL, and SPF_RESULT_TEMPERROR.
Referenced by main().

| SPF_errcode_t SPF_response_errcode | ( | SPF_response_t * | rp | ) |
Definition at line 147 of file spf_response.c.
References SPF_response_struct::err.
Referenced by main(), and SPF_record_interpret().
| int SPF_response_errors | ( | SPF_response_t * | rp | ) |
How many errors were generated?
Definition at line 296 of file spf_response.c.
References SPF_response_struct::num_errors.
Referenced by main(), and SPF_record_compile().
| void SPF_response_free | ( | SPF_response_t * | rp | ) |
Definition at line 53 of file spf_response.c.
References SPF_response_struct::errors, SPF_response_struct::errors_length, SPF_response_struct::explanation, SPF_response_struct::header_comment, SPF_error_t::message, SPF_response_struct::received_spf, and SPF_response_struct::smtp_comment.
Referenced by main(), and SPF_record_interpret().
| const char* SPF_response_get_explanation | ( | SPF_response_t * | rp | ) |
| const char* SPF_response_get_header_comment | ( | SPF_response_t * | rp | ) |
Definition at line 165 of file spf_response.c.
References SPF_response_struct::header_comment.
Referenced by main().
| const char* SPF_response_get_received_spf | ( | SPF_response_t * | rp | ) |
Definition at line 153 of file spf_response.c.
References SPF_response_struct::received_spf.
Referenced by main().
| const char* SPF_response_get_received_spf_value | ( | SPF_response_t * | rp | ) |
| const char* SPF_response_get_smtp_comment | ( | SPF_response_t * | rp | ) |
Definition at line 171 of file spf_response.c.
References SPF_response_struct::smtp_comment.
Referenced by main().
| SPF_error_t* SPF_response_message | ( | SPF_response_t * | rp, | |
| int | idx | |||
| ) |
Returns an individual message
Definition at line 308 of file spf_response.c.
References SPF_response_struct::errors.
Referenced by main(), and SPF_record_compile().
| int SPF_response_messages | ( | SPF_response_t * | rp | ) |
How many warnings were generated?
Definition at line 290 of file spf_response.c.
References SPF_response_struct::errors_length.
Referenced by main(), and SPF_record_compile().
| SPF_response_t* SPF_response_new | ( | SPF_request_t * | spf_request | ) |
Definition at line 37 of file spf_response.c.
References SPF_response_struct::result, SPF_response_struct::spf_request, and SPF_RESULT_INVALID.
Referenced by main(), SPF_record_interpret(), SPF_request_query_fallback(), SPF_request_query_mailfrom(), SPF_request_query_rcptto(), SPF_server_set_explanation(), and SPF_server_set_localpolicy().
| SPF_reason_t SPF_response_reason | ( | SPF_response_t * | rp | ) |
| SPF_result_t SPF_response_result | ( | SPF_response_t * | rp | ) |
Definition at line 135 of file spf_response.c.
References SPF_response_struct::result.
Referenced by main(), SPF_record_interpret(), and SPF_response_combine().
| int SPF_response_warnings | ( | SPF_response_t * | rp | ) |
Errors + warnings
Definition at line 302 of file spf_response.c.
References SPF_response_struct::errors_length, and SPF_response_struct::num_errors.
1.5.4