1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
/*
** Copyright 2004 Double Precision, Inc.
** See COPYING for distribution information.
*/
#ifndef rfc1035_spf_h
#define rfc1035_spf_h
#include "rfc1035/rfc1035.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
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 SHOULD 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.
*/
#define SPF_NONE 0
#define SPF_NEUTRAL '?'
#define SPF_PASS '+'
#define SPF_FAIL '-'
#define SPF_SOFTFAIL '~'
#define SPF_ERROR '4'
/* Everything else is SPF_UNKNOWN */
#define SPF_UNKNOWN '5'
char rfc1035_spf_lookup(const char *mailfrom,
const char *tcpremoteip,
const char *tcpremotehost,
const char *helodomain,
const char *mydomain,
char *errmsg_buf,
size_t errmsg_buf_size);
#ifdef __cplusplus
}
#endif
#endif
|