00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef INC_SPF_RECORD
00020 #define INC_SPF_RECORD
00021
00022 typedef struct SPF_record_struct SPF_record_t;
00023 typedef struct SPF_macro_struct SPF_macro_t;
00024
00025 #include "spf_response.h"
00026 #include "spf_request.h"
00027 #include "spf_server.h"
00028
00071 #define SPF_MAX_STR_LEN 255
00072
00073
00074
00075 #define SPF_MAX_MECH_LEN 511
00076 #define SPF_MAX_MOD_LEN 511
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 #define PARM_LP_FROM 0
00093 #define PARM_ENV_FROM 1
00094 #define PARM_DP_FROM 2
00095 #define PARM_CUR_DOM 3
00096 #define PARM_CLIENT_IP 4
00097 #define PARM_CLIENT_IP_P 5
00098 #define PARM_TIME 6
00099 #define PARM_CLIENT_DOM 7
00100 #define PARM_CLIENT_VER 8
00101 #define PARM_HELO_DOM 9
00102 #define PARM_REC_DOM 10
00103 #define PARM_CIDR 11
00104 #define PARM_STRING 12
00105
00106
00107 typedef
00108 struct SPF_data_str_struct
00109 {
00110 unsigned char parm_type;
00111 unsigned char len;
00112 unsigned char __unused0;
00113 unsigned char __unused1;
00114
00115 } SPF_data_str_t;
00116
00117
00118 typedef
00119 struct SPF_data_var_struct
00120 {
00121 unsigned char parm_type;
00122 unsigned char num_rhs;
00123 unsigned short rev: 1;
00124 unsigned short url_encode: 1;
00125 unsigned short delim_dot: 1;
00126 unsigned short delim_dash: 1;
00127 unsigned short delim_plus: 1;
00128 unsigned short delim_equal: 1;
00129 unsigned short delim_bar: 1;
00130 unsigned short delim_under: 1;
00131 } SPF_data_var_t;
00132
00133 typedef
00134 struct SPF_data_cidr_struct
00135 {
00136 unsigned char parm_type;
00137 unsigned char ipv4;
00138 unsigned char ipv6;
00139 unsigned char __unused0;
00140
00141
00142 } SPF_data_cidr_t;
00143
00144 typedef
00145 union SPF_data_union
00146 {
00147 SPF_data_var_t dv;
00148 SPF_data_str_t ds;
00149 SPF_data_cidr_t dc;
00150 } SPF_data_t;
00151
00152
00153
00154
00155
00156
00157 #define PREFIX_PASS SPF_RESULT_PASS
00158 #define PREFIX_FAIL SPF_RESULT_FAIL
00159 #define PREFIX_SOFTFAIL SPF_RESULT_SOFTFAIL
00160 #define PREFIX_NEUTRAL SPF_RESULT_NEUTRAL
00161 #define PREFIX_UNKNOWN SPF_RESULT_PERMERROR
00162
00163
00164
00165
00166 #define MECH_UNKNOWN 0
00167 #define MECH_A 1
00168 #define MECH_MX 2
00169 #define MECH_PTR 3
00170 #define MECH_INCLUDE 4
00171 #define MECH_IP4 5
00172 #define MECH_IP6 6
00173 #define MECH_EXISTS 7
00174 #define MECH_ALL 8
00175 #define MECH_REDIRECT 9
00176
00177 typedef
00178 struct SPF_mech_struct
00179 {
00180 unsigned char prefix_type;
00181 unsigned char mech_type;
00182 unsigned short mech_len;
00183
00184 } SPF_mech_t;
00185
00186
00187
00188
00189
00190 typedef
00191 struct SPF_mod_struct
00192 {
00193 unsigned short name_len;
00194 unsigned short data_len;
00195
00196
00197 } SPF_mod_t;
00198
00199
00200
00201
00202
00203
00204
00205 struct SPF_record_struct
00206 {
00207 SPF_server_t *spf_server;
00208
00209
00210 unsigned char version;
00211 unsigned char num_mech;
00212 unsigned char num_mod;
00213 unsigned char num_dns_mech;
00214
00215
00216 SPF_mech_t *mech_first;
00217 size_t mech_size;
00218 size_t mech_len;
00219
00220 SPF_mod_t *mod_first;
00221 size_t mod_size;
00222 size_t mod_len;
00223 };
00224
00225 struct SPF_macro_struct
00226 {
00227 size_t macro_len;
00228
00229 };
00230
00231
00232
00233 SPF_record_t *SPF_record_new(SPF_server_t *spf_server,
00234 const char *text);
00235 void SPF_record_free(SPF_record_t *rp);
00236 void SPF_macro_free(SPF_macro_t *mac);
00237 #if 0
00238 SPF_errcode_t SPF_record_find_mod_data(SPF_server_t *spf_server,
00239 SPF_record_t *spf_record,
00240 const char *mod_name,
00241 SPF_data_t **datap, size_t *datalenp);
00242 #endif
00243 SPF_errcode_t SPF_record_find_mod_value(SPF_server_t *spf_server,
00244 SPF_request_t *spf_request,
00245 SPF_response_t *spf_response,
00246 SPF_record_t *spf_record,
00247 const char *mod_name,
00248 char **bufp, size_t *buflenp);
00249
00250
00251 SPF_errcode_t SPF_record_compile(SPF_server_t *spf_server,
00252 SPF_response_t *spf_response,
00253 SPF_record_t **spf_recordp,
00254 const char *record);
00255 SPF_errcode_t SPF_record_compile_macro(SPF_server_t *spf_server,
00256 SPF_response_t *spf_response,
00257 SPF_macro_t **spf_macrop,
00258 const char *record);
00259
00260 SPF_errcode_t SPF_record_interpret(
00261 SPF_record_t *spf_record,
00262 SPF_request_t *spf_request,
00263 SPF_response_t *spf_response,
00264 int depth);
00265
00266 SPF_errcode_t SPF_record_expand_data(SPF_server_t *spf_server,
00267 SPF_request_t *spf_request,
00268 SPF_response_t *spf_response,
00269 SPF_data_t *data, size_t data_len,
00270 char **bufp, size_t *buflenp);
00271
00272 SPF_errcode_t SPF_record_print(SPF_record_t *spf_record);
00273 SPF_errcode_t SPF_record_stringify(SPF_record_t *spf_record,
00274 char **bufp, size_t *buflenp);
00275
00276 #endif