spf_record.h

Go to the documentation of this file.
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

Generated on Sun May 29 13:31:01 2016 for libspf2 by  doxygen 1.5.9