#include "spf_sys_config.h"
#include "spf_internal.h"
#include "spf.h"
#include "spf_response.h"
#include "spf_record.h"
Go to the source code of this file.
Data Structures | |
struct | SPF_mechtype_t |
Defines | |
#define | SPF_RECORD_BUFSIZ 4096 |
#define | ALIGN_DECL(decl) union { double d; long l; decl } __attribute__((aligned(_ALIGN_SZ))) u |
#define | ALIGNED_DECL(var) u.var |
#define | spf_num_mechanisms sizeof(spf_mechtypes) / sizeof(spf_mechtypes[0]) |
#define | SPF_CHECK_IN_MODIFIER() |
#define | SPF_ADD_LEN_TO(_val, _len, _max) |
#define | SPF_INIT_STRING_LITERAL(_avail) |
#define | SPF_ENSURE_STRING_AVAIL(_len) |
#define | SPF_FINI_STRING_LITERAL() |
#define | STREQ_SIZEOF(a, b) (strncasecmp((a), (b), sizeof( (b) ) - 1) == 0) |
#define | STREQ_SIZEOF_N(a, b, n) (((n) == sizeof(b) - 1) && (strncasecmp((a),(b),(n)) == 0)) |
Typedefs | |
typedef enum SPF_cidr_enum | SPF_cidr_t |
typedef enum SPF_domspec_enum | SPF_domspec_t |
Enumerations | |
enum | SPF_cidr_enum { CIDR_NONE, CIDR_OPTIONAL, CIDR_ONLY } |
enum | SPF_domspec_enum { DOMSPEC_NONE, DOMSPEC_OPTIONAL, DOMSPEC_REQUIRED } |
Functions | |
__attribute__ ((warn_unused_result)) | |
SPF_errcode_t | SPF_record_compile (SPF_server_t *spf_server, SPF_response_t *spf_response, SPF_record_t **spf_recordp, const char *record) |
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) |
#define ALIGN_DECL | ( | decl | ) | union { double d; long l; decl } __attribute__((aligned(_ALIGN_SZ))) u |
#define ALIGNED_DECL | ( | var | ) | u.var |
#define SPF_ADD_LEN_TO | ( | _val, | |||
_len, | |||||
_max | ) |
Value:
do { if ( (_val) + _align_sz(_len) > (_max) ) { return SPF_response_add_error_ptr(spf_response, big_err, NULL, src, "SPF domainspec too long " "(%d chars, %d max)", (_val) + (_len), _max); } (_val) += _align_sz(_len); } while(0)
Definition at line 441 of file spf_compile.c.
#define SPF_CHECK_IN_MODIFIER | ( | ) |
Value:
if ( !is_mod ) return SPF_response_add_error_ptr(spf_response, SPF_E_INVALID_VAR, NULL, p, "'%c' macro is only valid in modifiers", c);
#define SPF_ENSURE_STRING_AVAIL | ( | _len | ) |
Value:
do { if (ds_len + _len > ds_avail) return SPF_response_add_error_ptr(spf_response, SPF_E_BIG_STRING, NULL, src, "String literal fragment too long " "(%d chars, %d max)", ds_len, ds_avail); } while(0)
Definition at line 462 of file spf_compile.c.
#define SPF_FINI_STRING_LITERAL | ( | ) |
Value:
do { if ( ds_len > 0 ) { if ( ds_len > SPF_MAX_STR_LEN ) { return SPF_response_add_error_ptr(spf_response, SPF_E_BIG_STRING, NULL, src, "String literal too long " "(%d chars, %d max)", ds_len, SPF_MAX_STR_LEN); } data->ds.len = ds_len; len = sizeof( *data ) + ds_len; SPF_ADD_LEN_TO(*data_used, len, data_avail); data = SPF_data_next( data ); ds_len = 0; } } while(0)
Definition at line 471 of file spf_compile.c.
#define SPF_INIT_STRING_LITERAL | ( | _avail | ) |
Value:
do { data->ds.parm_type = PARM_STRING; data->ds.len = 0; /* Magic numbers for x/Nc in gdb. */ data->ds.__unused0 = 0xba; data->ds.__unused1 = 0xbe; dst = SPF_data_str( data ); ds_avail = _avail; ds_len = 0; } while(0)
Definition at line 452 of file spf_compile.c.
#define spf_num_mechanisms sizeof(spf_mechtypes) / sizeof(spf_mechtypes[0]) |
Definition at line 91 of file spf_compile.c.
#define SPF_RECORD_BUFSIZ 4096 |
This is greater than any possible total mechanism or modifier. SPF_MAX_MOD_LEN + SPF_MAX_STR_LEN SPF_MAX_MECH_LEN + SPF_MAX_STR_LEN
Definition at line 62 of file spf_compile.c.
#define STREQ_SIZEOF | ( | a, | |||
b | ) | (strncasecmp((a), (b), sizeof( (b) ) - 1) == 0) |
Referenced by SPF_record_compile().
#define STREQ_SIZEOF_N | ( | a, | |||
b, | |||||
n | ) | (((n) == sizeof(b) - 1) && (strncasecmp((a),(b),(n)) == 0)) |
Referenced by SPF_record_compile().
typedef enum SPF_cidr_enum SPF_cidr_t |
typedef enum SPF_domspec_enum SPF_domspec_t |
enum SPF_cidr_enum |
enum SPF_domspec_enum |
Definition at line 52 of file spf_compile.c.
__attribute__ | ( | (warn_unused_result) | ) |
Definition at line 105 of file spf_compile.c.
SPF_errcode_t SPF_record_compile | ( | SPF_server_t * | spf_server, | |
SPF_response_t * | spf_response, | |||
SPF_record_t ** | spf_recordp, | |||
const char * | record | |||
) |
The SPF compiler.
It converts the SPF record in string format that is easy for people to deal with into a compact binary format that is easy for computers to deal with.
Definition at line 1180 of file spf_compile.c.
References SPF_server_struct::debug, MECH_A, MECH_ALL, MECH_EXISTS, MECH_INCLUDE, MECH_IP4, MECH_IP6, MECH_MX, MECH_PTR, MECH_REDIRECT, SPF_mechtype_t::mech_type, NULL, PREFIX_FAIL, PREFIX_NEUTRAL, PREFIX_PASS, PREFIX_SOFTFAIL, PREFIX_UNKNOWN, SPF_ASSERT_NOTNULL, SPF_debugf, SPF_E_INTERNAL_ERROR, SPF_E_INVALID_CHAR, SPF_E_INVALID_OPT, SPF_E_INVALID_PREFIX, SPF_E_MOD_W_PREF, SPF_E_NO_MEMORY, SPF_E_NOT_SPF, SPF_E_SUCCESS, SPF_E_UNKNOWN_MECH, SPF_error_code(), SPF_error_errorp(), SPF_record_new(), SPF_response_add_error(), SPF_response_add_error_ptr(), SPF_response_add_warn_ptr(), SPF_response_errors(), SPF_response_message(), SPF_response_messages(), SPF_VER_STR, STREQ_SIZEOF, STREQ_SIZEOF_N, strncasecmp(), and SPF_record_struct::version.
Referenced by main(), SPF_request_query_fallback(), SPF_request_query_rcptto(), SPF_server_get_record(), and SPF_server_set_localpolicy().
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 | |||
) |
Definition at line 1499 of file spf_compile.c.
References ALIGN_DECL, ALIGNED_DECL, SPF_E_BIG_MOD, SPF_E_NO_MEMORY, SPF_E_SUCCESS, SPF_MAX_MOD_LEN, and TRUE.
Referenced by SPF_request_get_exp(), and SPF_server_set_explanation().