Main Page | Data Structures | Directories | File List | Data Fields | Globals

spf_response.h File Reference

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

Include dependency graph for spf_response.h:

Include dependency graph

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

Included by dependency graph

Go to the source code of this file.

Data Structures

struct  SPF_error_struct
struct  SPF_response_struct

Typedefs

typedef enum SPF_result_enum SPF_result_t
typedef enum SPF_reason_enum SPF_reason_t
typedef enum SPF_errcode_t SPF_errcode_t
typedef SPF_error_struct SPF_error_t
typedef SPF_response_struct SPF_response_t

Enumerations

enum  SPF_result_enum {
  SPF_RESULT_INVALID = 0, SPF_RESULT_NEUTRAL, SPF_RESULT_PASS, SPF_RESULT_FAIL,
  SPF_RESULT_SOFTFAIL, SPF_RESULT_NONE, SPF_RESULT_TEMPERROR, SPF_RESULT_PERMERROR
}
enum  SPF_reason_enum {
  SPF_REASON_NONE = 0, SPF_REASON_FAILURE, SPF_REASON_LOCALHOST, SPF_REASON_LOCAL_POLICY,
  SPF_REASON_MECH, SPF_REASON_DEFAULT, SPF_REASON_2MX
}
enum  SPF_errcode_t {
  SPF_E_SUCCESS = 0, SPF_E_NO_MEMORY, SPF_E_NOT_SPF, SPF_E_SYNTAX,
  SPF_E_MOD_W_PREF, SPF_E_INVALID_CHAR, SPF_E_UNKNOWN_MECH, SPF_E_INVALID_OPT,
  SPF_E_INVALID_CIDR, SPF_E_MISSING_OPT, SPF_E_INTERNAL_ERROR, SPF_E_INVALID_ESC,
  SPF_E_INVALID_VAR, SPF_E_BIG_SUBDOM, SPF_E_INVALID_DELIM, SPF_E_BIG_STRING,
  SPF_E_BIG_MECH, SPF_E_BIG_MOD, SPF_E_BIG_DNS, SPF_E_INVALID_IP4,
  SPF_E_INVALID_IP6, SPF_E_INVALID_PREFIX, SPF_E_RESULT_UNKNOWN, SPF_E_UNINIT_VAR,
  SPF_E_MOD_NOT_FOUND, SPF_E_NOT_CONFIG, SPF_E_DNS_ERROR, SPF_E_BAD_HOST_IP,
  SPF_E_BAD_HOST_TLD, SPF_E_MECH_AFTER_ALL, SPF_E_INCLUDE_RETURNED_NONE, SPF_E_RECURSIVE,
  SPF_E_MULTIPLE_RECORDS
}

Functions

SPF_response_tSPF_response_new (SPF_request_t *spf_request)
void SPF_response_free (SPF_response_t *rp)
SPF_response_tSPF_response_combine (SPF_response_t *main, SPF_response_t *r2mx)
SPF_result_t SPF_response_result (SPF_response_t *rp)
SPF_reason_t SPF_response_reason (SPF_response_t *rp)
SPF_errcode_t SPF_response_errcode (SPF_response_t *rp)
const char * SPF_response_get_received_spf (SPF_response_t *rp)
const char * SPF_response_get_received_spf_value (SPF_response_t *rp)
const char * SPF_response_get_header_comment (SPF_response_t *rp)
const char * SPF_response_get_smtp_comment (SPF_response_t *rp)
const char * SPF_response_get_explanation (SPF_response_t *rp)
int SPF_response_messages (SPF_response_t *rp)
int SPF_response_errors (SPF_response_t *rp)
int SPF_response_warnings (SPF_response_t *rp)
SPF_error_tSPF_response_message (SPF_response_t *rp, int idx)
SPF_errcode_t SPF_error_code (SPF_error_t *err)
const char * SPF_error_message (SPF_error_t *err)
char SPF_error_errorp (SPF_error_t *err)
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,...)
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 (SPF_response_t *rp, SPF_errcode_t code, 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,...)
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 (SPF_response_t *rp, SPF_errcode_t code, const char *format,...)


Detailed Description

Results from an SPF check

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 Documentation

typedef enum SPF_errcode_t 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.

Referenced by main(), SPF_dns_rr_dup(), SPF_record_compile(), SPF_record_compile_macro(), SPF_record_expand_data(), SPF_record_find_mod_value(), SPF_record_interpret(), SPF_record_stringify(), SPF_request_get_exp(), SPF_request_query_fallback(), SPF_request_query_mailfrom(), SPF_request_query_rcptto(), SPF_server_get_record(), SPF_server_set_explanation(), and SPF_server_set_localpolicy().

typedef struct SPF_error_struct SPF_error_t
 

Referenced by main(), SPF_error_code(), SPF_error_errorp(), SPF_error_message(), and SPF_record_compile().

typedef enum SPF_reason_enum SPF_reason_t
 

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.

typedef struct SPF_response_struct SPF_response_t
 

Definition at line 164 of file spf_response.h.

Referenced by main(), SPF_i_done(), SPF_record_compile(), SPF_record_compile_macro(), SPF_record_expand_data(), SPF_record_find_mod_value(), SPF_record_interpret(), SPF_request_get_exp(), SPF_request_query_fallback(), SPF_request_query_mailfrom(), SPF_request_query_rcptto(), SPF_response_add_error(), SPF_response_add_error_idx(), SPF_response_add_error_ptr(), SPF_response_add_warn(), SPF_response_add_warn_idx(), SPF_response_add_warn_ptr(), SPF_response_combine(), SPF_response_errcode(), SPF_response_errors(), SPF_response_free(), SPF_response_get_explanation(), SPF_response_get_header_comment(), SPF_response_get_received_spf(), SPF_response_get_received_spf_value(), SPF_response_get_smtp_comment(), SPF_response_message(), SPF_response_messages(), SPF_response_new(), SPF_response_reason(), SPF_response_result(), SPF_response_warnings(), SPF_server_get_record(), SPF_server_set_explanation(), and SPF_server_set_localpolicy().

typedef enum SPF_result_enum SPF_result_t
 


Enumeration Type Documentation

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.

Enumeration values:
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.

Enumeration values:
SPF_REASON_NONE 
SPF_REASON_FAILURE 
SPF_REASON_LOCALHOST  localhost always gets a free ride
SPF_REASON_LOCAL_POLICY  local policy caused the match
SPF_REASON_MECH  mechanism caused the match
SPF_REASON_DEFAULT  ran off the end of the rec
SPF_REASON_2MX  sent from a secondary MX

Definition at line 99 of file spf_response.h.

enum SPF_result_enum
 

Enumeration values:
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.


Function Documentation

SPF_errcode_t SPF_error_code SPF_error_t err  ) 
 

Definition at line 314 of file spf_response.c.

References SPF_error_struct::code, and SPF_error_t.

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_struct::is_error, and SPF_error_t.

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_struct::message, and SPF_error_t.

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, SPF_ADD_ERROR, and SPF_response_t.

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,
  ...
 

Definition at line 247 of file spf_response.c.

References SPF_ADD_ERROR, and SPF_response_t.

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, and SPF_response_t.

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, SPF_ADD_WARN, and SPF_response_t.

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,
  ...
 

Definition at line 273 of file spf_response.c.

References SPF_ADD_WARN, and SPF_response_t.

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, and SPF_response_t.

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 main(), SPF_response_result(), SPF_response_t, 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().

Here is the call graph for this function:

SPF_errcode_t SPF_response_errcode SPF_response_t rp  ) 
 

Definition at line 147 of file spf_response.c.

References SPF_response_struct::err, and SPF_response_t.

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, and SPF_response_t.

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_struct::message, SPF_response_struct::received_spf, SPF_response_struct::smtp_comment, and SPF_response_t.

Referenced by main(), and SPF_record_interpret().

const char* SPF_response_get_explanation SPF_response_t rp  ) 
 

Definition at line 177 of file spf_response.c.

References SPF_response_struct::explanation, and SPF_response_t.

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, and SPF_response_t.

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, and SPF_response_t.

Referenced by main().

const char* SPF_response_get_received_spf_value SPF_response_t rp  ) 
 

Definition at line 159 of file spf_response.c.

References SPF_response_struct::received_spf_value, and SPF_response_t.

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, and SPF_response_t.

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, and SPF_response_t.

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, and SPF_response_t.

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, SPF_request_t, and SPF_response_t.

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  ) 
 

Definition at line 141 of file spf_response.c.

References SPF_response_struct::reason, and SPF_response_t.

SPF_result_t SPF_response_result SPF_response_t rp  ) 
 

Definition at line 135 of file spf_response.c.

References SPF_response_struct::result, and SPF_response_t.

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, SPF_response_struct::num_errors, and SPF_response_t.


Generated on Fri Jun 25 18:57:33 2010 for libspf2 by  doxygen 1.3.9.1