spf_interpret.c File Reference

#include "spf_sys_config.h"
#include <ctype.h>
#include "spf.h"
#include "spf_dns.h"
#include "spf_internal.h"
#include "spf_dns_internal.h"
#include "spf_server.h"

Include dependency graph for spf_interpret.c:

Go to the source code of this file.

Defines

#define DONE(result, reason, err)   SPF_i_done(spf_response, result, reason, err)
#define DONE_TEMPERR(err)   DONE(SPF_RESULT_TEMPERROR,SPF_REASON_NONE,err)
#define DONE_PERMERR(err)   DONE(SPF_RESULT_PERMERROR,SPF_REASON_NONE,err)
#define DONE_MECH(result)   DONE(result, SPF_REASON_MECH, SPF_E_SUCCESS)
#define INET_NTOP(af, src, dst, cnt)
#define SPF_ADD_DNS_MECH()   do { spf_response->num_dns_mech++; } while(0)
#define SPF_MAYBE_SKIP_CIDR()
#define SPF_GET_LOOKUP_DATA()
#define SPF_FREE_LOOKUP_DATA()   do { if (buf != NULL) { free(buf); buf = NULL; } } while(0)

Functions

SPF_errcode_t SPF_i_done (SPF_response_t *spf_response, SPF_result_t result, SPF_reason_t reason, SPF_errcode_t err)
SPF_errcode_t SPF_record_interpret (SPF_record_t *spf_record, SPF_request_t *spf_request, SPF_response_t *spf_response, int depth)


Define Documentation

#define DONE result,
reason,
err   )     SPF_i_done(spf_response, result, reason, err)
 

Definition at line 374 of file spf_interpret.c.

Referenced by SPF_record_interpret().

#define DONE_MECH result   )     DONE(result, SPF_REASON_MECH, SPF_E_SUCCESS)
 

Definition at line 377 of file spf_interpret.c.

#define DONE_PERMERR err   )     DONE(SPF_RESULT_PERMERROR,SPF_REASON_NONE,err)
 

Definition at line 376 of file spf_interpret.c.

Referenced by SPF_record_interpret().

#define DONE_TEMPERR err   )     DONE(SPF_RESULT_TEMPERROR,SPF_REASON_NONE,err)
 

Definition at line 375 of file spf_interpret.c.

#define INET_NTOP af,
src,
dst,
cnt   ) 
 

Value:

do { \
        if (inet_ntop(af, src, dst, cnt) == NULL) \
                snprintf(dst, cnt, "ip-error" ); \
                        } while(0)

Definition at line 418 of file spf_interpret.c.

 
#define SPF_ADD_DNS_MECH  )     do { spf_response->num_dns_mech++; } while(0)
 

 
#define SPF_FREE_LOOKUP_DATA  )     do { if (buf != NULL) { free(buf); buf = NULL; } } while(0)
 

 
#define SPF_GET_LOOKUP_DATA  ) 
 

Value:

do {                                                                                            \
                if ( data == data_end )                                                 \
                        lookup = spf_request->cur_dom;                          \
                else {                                                                                  \
                        err = SPF_record_expand_data( spf_server,       \
                                                        spf_request, spf_response,      \
                                                        data, ((char *)data_end - (char *)data),        \
                                                        &buf, &buf_len );                       \
                        if (err == SPF_E_NO_MEMORY) {                           \
                                SPF_FREE_LOOKUP_DATA();                                 \
                                return DONE_TEMPERR(err);                               \
                        }                                                                                       \
                        if (err) {                                                                      \
                                SPF_FREE_LOOKUP_DATA();                                 \
                                return DONE_PERMERR(err);                               \
                        }                                                                                       \
                        lookup = buf;                                                           \
                }                                                                                               \
        } while(0)

 
#define SPF_MAYBE_SKIP_CIDR  ) 
 

Value:

do { \
                if ( data < data_end && data->dc.parm_type == PARM_CIDR ) \
                        data = SPF_data_next( data ); \
        } while(0)


Function Documentation

SPF_errcode_t SPF_i_done SPF_response_t spf_response,
SPF_result_t  result,
SPF_reason_t  reason,
SPF_errcode_t  err
 

This must be called with EITHER spf_response->spf_record_exp != NULL OR result in { SPF_RESULT_PASS SPF_RESULT_INVALID SPF_RESULT_TEMPERROR SPF_RESULT_PERMERROR } or the library will abort when it tries to generate an explanation.

Definition at line 388 of file spf_interpret.c.

References SPF_response_struct::err, SPF_response_struct::reason, SPF_response_struct::result, SPF_ASSERT_NOTNULL, SPF_response_struct::spf_request, and SPF_request_struct::spf_server.

Referenced by SPF_request_query_fallback(), SPF_request_query_mailfrom(), and SPF_request_query_rcptto().

SPF_errcode_t SPF_record_interpret SPF_record_t spf_record,
SPF_request_t spf_request,
SPF_response_t spf_response,
int  depth
 

In spf_interpret.c

Definition at line 585 of file spf_interpret.c.

References SPF_request_struct::client_ver, SPF_request_struct::cur_dom, DONE, DONE_PERMERR, FALSE, SPF_server_struct::local_policy, MECH_ALL, SPF_record_struct::mech_first, SPF_mech_struct::mech_type, NULL, SPF_record_struct::num_mech, PREFIX_FAIL, PREFIX_SOFTFAIL, SPF_mech_struct::prefix_type, PREFIX_UNKNOWN, SPF_ASSERT_NOTNULL, SPF_E_NOT_CONFIG, SPF_E_RECURSIVE, SPF_E_SUCCESS, SPF_REASON_LOCALHOST, SPF_response_struct::spf_record_exp, SPF_request_is_loopback(), SPF_RESULT_PASS, SPF_record_struct::spf_server, TRUE, and SPF_request_struct::use_local_policy.

Here is the call graph for this function:


Generated on Sun May 29 13:26:48 2016 for libspf2 by  doxygen 1.4.6