spf_compile.c File Reference

#include "spf_sys_config.h"
#include "spf_internal.h"
#include "spf.h"
#include "spf_response.h"
#include "spf_record.h"

Include dependency graph for spf_compile.c:

Go to the source code of this file.

Data Structures

struct  SPF_mechtype_struct

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
typedef SPF_mechtype_struct SPF_mechtype_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 Documentation

#define ALIGN_DECL ( decl   )     union { double d; long l; decl } __attribute__((aligned(_ALIGN_SZ))) u

Definition at line 64 of file spf_compile.c.

Referenced by SPF_record_compile_macro().

#define ALIGNED_DECL ( var   )     u.var

Definition at line 65 of file spf_compile.c.

Referenced by SPF_record_compile_macro().

#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,
 )     (strncasecmp((a), (b), sizeof( (b) ) - 1) == 0)

Referenced by SPF_record_compile().

#define STREQ_SIZEOF_N ( a,
b,
 )     (((n) == sizeof(b) - 1) && (strncasecmp((a),(b),(n)) == 0))

Referenced by SPF_record_compile().


Typedef Documentation

typedef enum SPF_cidr_enum SPF_cidr_t

typedef enum SPF_domspec_enum SPF_domspec_t

typedef struct SPF_mechtype_struct SPF_mechtype_t


Enumeration Type Documentation

enum SPF_cidr_enum

Enumerator:
CIDR_NONE 
CIDR_OPTIONAL 
CIDR_ONLY 

Definition at line 47 of file spf_compile.c.

enum SPF_domspec_enum

Enumerator:
DOMSPEC_NONE 
DOMSPEC_OPTIONAL 
DOMSPEC_REQUIRED 

Definition at line 52 of file spf_compile.c.


Function Documentation

__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_struct::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(), and SPF_server_set_localpolicy().

Here is the call graph for this function:

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().


Generated on 29 May 2016 for libspf2 by  doxygen 1.4.7