libspf2 1.2.10
|
00001 /* 00002 * This program is free software; you can redistribute it and/or modify 00003 * it under the terms of either: 00004 * 00005 * a) The GNU Lesser General Public License as published by the Free 00006 * Software Foundation; either version 2.1, or (at your option) any 00007 * later version, 00008 * 00009 * OR 00010 * 00011 * b) The two-clause BSD license. 00012 * 00013 * These licenses can be found with the distribution in the file LICENSES 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 00073 #define SPF_MAX_STR_LEN 255 /* limits on SPF_data_str_t.len, */ 00074 /* SPF_mod_t.name_len and */ 00075 /* SPF_mod_t.data_len */ 00076 00077 #define SPF_MAX_MECH_LEN 511 00078 #define SPF_MAX_MOD_LEN 511 00079 00080 00081 00082 00083 00084 00088 #define PARM_LP_FROM 0 00089 #define PARM_ENV_FROM 1 00090 #define PARM_DP_FROM 2 00091 #define PARM_CUR_DOM 3 00092 #define PARM_CLIENT_IP 4 00093 #define PARM_CLIENT_IP_P 5 00094 #define PARM_TIME 6 00095 #define PARM_CLIENT_DOM 7 00096 #define PARM_CLIENT_VER 8 00097 #define PARM_HELO_DOM 9 00098 #define PARM_REC_DOM 10 00099 #define PARM_CIDR 11 00100 #define PARM_STRING 12 00103 typedef 00104 struct SPF_data_str_struct 00105 { 00106 unsigned char parm_type; 00107 unsigned char len; /* XXX Does this need to be size_t? */ 00108 unsigned char __unused0; 00109 unsigned char __unused1; 00110 /* text: (char[len]) follows */ 00111 } SPF_data_str_t; 00112 00113 00114 typedef 00115 struct SPF_data_var_struct 00116 { 00117 unsigned char parm_type; 00118 unsigned char num_rhs; 00119 unsigned short rev: 1; 00120 unsigned short url_encode: 1; 00121 unsigned short delim_dot: 1; 00122 unsigned short delim_dash: 1; 00123 unsigned short delim_plus: 1; 00124 unsigned short delim_equal: 1; 00125 unsigned short delim_bar: 1; 00126 unsigned short delim_under: 1; 00127 } SPF_data_var_t; 00128 00129 typedef 00130 struct SPF_data_cidr_struct 00131 { 00132 unsigned char parm_type; 00133 unsigned char ipv4; 00134 unsigned char ipv6; 00135 unsigned char __unused0; 00138 } SPF_data_cidr_t; 00139 00140 typedef 00141 union SPF_data_union 00142 { 00143 SPF_data_var_t dv; 00144 SPF_data_str_t ds; 00145 SPF_data_cidr_t dc; 00146 } SPF_data_t; 00147 00148 00149 00153 #define PREFIX_PASS SPF_RESULT_PASS 00154 #define PREFIX_FAIL SPF_RESULT_FAIL 00155 #define PREFIX_SOFTFAIL SPF_RESULT_SOFTFAIL 00156 #define PREFIX_NEUTRAL SPF_RESULT_NEUTRAL 00157 #define PREFIX_UNKNOWN SPF_RESULT_PERMERROR 00158 00162 #define MECH_UNKNOWN 0 00163 #define MECH_A 1 00164 #define MECH_MX 2 00165 #define MECH_PTR 3 00166 #define MECH_INCLUDE 4 00167 #define MECH_IP4 5 00168 #define MECH_IP6 6 00169 #define MECH_EXISTS 7 00170 #define MECH_ALL 8 00171 #define MECH_REDIRECT 9 00172 00173 typedef 00174 struct SPF_mech_struct 00175 { 00176 unsigned char prefix_type; 00177 unsigned char mech_type; 00178 unsigned short mech_len; 00180 } SPF_mech_t; 00181 00182 00183 /* 00184 * Modifiers 00185 */ 00186 typedef 00187 struct SPF_mod_struct 00188 { 00189 unsigned short name_len; 00190 unsigned short data_len; 00193 } SPF_mod_t; 00194 00195 00196 00200 struct SPF_record_struct 00201 { 00202 SPF_server_t *spf_server; 00203 00204 /* Header */ 00205 unsigned char version; 00206 unsigned char num_mech; 00207 unsigned char num_mod; 00208 unsigned char num_dns_mech; 00210 /* Data */ 00211 SPF_mech_t *mech_first; 00212 size_t mech_size; 00213 size_t mech_len; 00215 SPF_mod_t *mod_first; 00216 size_t mod_size; 00217 size_t mod_len; 00218 }; 00219 00220 struct SPF_macro_struct 00221 { 00222 size_t macro_len; 00224 }; 00225 00226 00228 SPF_record_t *SPF_record_new(SPF_server_t *spf_server, 00229 const char *text); 00230 void SPF_record_free(SPF_record_t *rp); 00231 void SPF_macro_free(SPF_macro_t *mac); 00232 #if 0 /* static */ 00233 SPF_errcode_t SPF_record_find_mod_data(SPF_server_t *spf_server, 00234 SPF_record_t *spf_record, 00235 const char *mod_name, 00236 SPF_data_t **datap, size_t *datalenp); 00237 #endif 00238 SPF_errcode_t SPF_record_find_mod_value(SPF_server_t *spf_server, 00239 SPF_request_t *spf_request, 00240 SPF_response_t *spf_response, 00241 SPF_record_t *spf_record, 00242 const char *mod_name, 00243 char **bufp, size_t *buflenp); 00244 00246 SPF_errcode_t SPF_record_compile(SPF_server_t *spf_server, 00247 SPF_response_t *spf_response, 00248 SPF_record_t **spf_recordp, 00249 const char *record); 00250 SPF_errcode_t SPF_record_compile_macro(SPF_server_t *spf_server, 00251 SPF_response_t *spf_response, 00252 SPF_macro_t **spf_macrop, 00253 const char *record); 00255 SPF_errcode_t SPF_record_interpret( 00256 SPF_record_t *spf_record, 00257 SPF_request_t *spf_request, 00258 SPF_response_t *spf_response, 00259 int depth); 00261 SPF_errcode_t SPF_record_expand_data(SPF_server_t *spf_server, 00262 SPF_request_t *spf_request, 00263 SPF_response_t *spf_response, 00264 SPF_data_t *data, size_t data_len, 00265 char **bufp, size_t *buflenp); 00267 SPF_errcode_t SPF_record_print(SPF_record_t *spf_record); 00268 SPF_errcode_t SPF_record_stringify(SPF_record_t *spf_record, 00269 char **bufp, size_t *buflenp); 00270 00271 #endif