libspf2  1.2.11
spf_record.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of either:
4  *
5  * a) The GNU Lesser General Public License as published by the Free
6  * Software Foundation; either version 2.1, or (at your option) any
7  * later version,
8  *
9  * OR
10  *
11  * b) The two-clause BSD license.
12  *
13  * These licenses can be found with the distribution in the file LICENSES
14  */
15 
16 
17 
18 
19 #ifndef INC_SPF_RECORD
20 #define INC_SPF_RECORD
21 
22 typedef struct SPF_record_struct SPF_record_t;
23 typedef struct SPF_macro_struct SPF_macro_t;
24 
25 #include "spf_response.h"
26 #include "spf_request.h"
27 #include "spf_server.h"
28 
73 #define SPF_MAX_STR_LEN 255 /* limits on SPF_data_str_t.len, */
74  /* SPF_mod_t.name_len and */
75  /* SPF_mod_t.data_len */
76 
77 #define SPF_MAX_MECH_LEN 511
78 #define SPF_MAX_MOD_LEN 511
79 
80 
81 
82 
83 
84 
88 #define PARM_LP_FROM 0
89 #define PARM_ENV_FROM 1
90 #define PARM_DP_FROM 2
91 #define PARM_CUR_DOM 3
92 #define PARM_CLIENT_IP 4
93 #define PARM_CLIENT_IP_P 5
94 #define PARM_TIME 6
95 #define PARM_CLIENT_DOM 7
96 #define PARM_CLIENT_VER 8
97 #define PARM_HELO_DOM 9
98 #define PARM_REC_DOM 10
99 #define PARM_CIDR 11
100 #define PARM_STRING 12
103 typedef
104 struct SPF_data_str_struct
105 {
106  unsigned char parm_type;
107  unsigned char len; /* XXX Does this need to be size_t? */
108  unsigned char __unused0;
109  unsigned char __unused1;
110  /* text: (char[len]) follows */
111 } SPF_data_str_t;
112 
113 
114 typedef
115 struct SPF_data_var_struct
116 {
117  unsigned char parm_type;
118  unsigned char num_rhs;
119  unsigned short rev: 1;
120  unsigned short url_encode: 1;
121  unsigned short delim_dot: 1;
122  unsigned short delim_dash: 1;
123  unsigned short delim_plus: 1;
124  unsigned short delim_equal: 1;
125  unsigned short delim_bar: 1;
126  unsigned short delim_under: 1;
127 } SPF_data_var_t;
128 
129 typedef
131 {
132  unsigned char parm_type;
133  unsigned char ipv4;
134  unsigned char ipv6;
135  unsigned char __unused0;
138 } SPF_data_cidr_t;
139 
140 typedef
141 union SPF_data_union
142 {
143  SPF_data_var_t dv;
144  SPF_data_str_t ds;
145  SPF_data_cidr_t dc;
146 } SPF_data_t;
147 
148 
149 
153 #define PREFIX_PASS SPF_RESULT_PASS
154 #define PREFIX_FAIL SPF_RESULT_FAIL
155 #define PREFIX_SOFTFAIL SPF_RESULT_SOFTFAIL
156 #define PREFIX_NEUTRAL SPF_RESULT_NEUTRAL
157 #define PREFIX_UNKNOWN SPF_RESULT_PERMERROR
158 
162 #define MECH_UNKNOWN 0
163 #define MECH_A 1
164 #define MECH_MX 2
165 #define MECH_PTR 3
166 #define MECH_INCLUDE 4
167 #define MECH_IP4 5
168 #define MECH_IP6 6
169 #define MECH_EXISTS 7
170 #define MECH_ALL 8
171 #define MECH_REDIRECT 9
172 
173 typedef
174 struct SPF_mech_struct
175 {
176  unsigned char prefix_type;
177  unsigned char mech_type;
178  unsigned short mech_len;
180 } SPF_mech_t;
181 
182 
183 /*
184  * Modifiers
185  */
186 typedef
187 struct SPF_mod_struct
188 {
189  unsigned short name_len;
190  unsigned short data_len;
193 } SPF_mod_t;
194 
195 
196 
201 {
202  SPF_server_t *spf_server;
203 
204  /* Header */
205  unsigned char version;
206  unsigned char num_mech;
207  unsigned char num_mod;
208  unsigned char num_dns_mech;
210  /* Data */
211  SPF_mech_t *mech_first;
212  size_t mech_size;
213  size_t mech_len;
215  SPF_mod_t *mod_first;
216  size_t mod_size;
217  size_t mod_len;
218 };
219 
221 {
222  size_t macro_len;
224 };
225 
226 
228 SPF_record_t *SPF_record_new(SPF_server_t *spf_server,
229  const char *text);
230 void SPF_record_free(SPF_record_t *rp);
231 void SPF_macro_free(SPF_macro_t *mac);
232 #if 0 /* static */
233 SPF_errcode_t SPF_record_find_mod_data(SPF_server_t *spf_server,
234  SPF_record_t *spf_record,
235  const char *mod_name,
236  SPF_data_t **datap, size_t *datalenp);
237 #endif
238 SPF_errcode_t SPF_record_find_mod_value(SPF_server_t *spf_server,
239  SPF_request_t *spf_request,
240  SPF_response_t *spf_response,
241  SPF_record_t *spf_record,
242  const char *mod_name,
243  char **bufp, size_t *buflenp);
244 
246 SPF_errcode_t SPF_record_compile(SPF_server_t *spf_server,
247  SPF_response_t *spf_response,
248  SPF_record_t **spf_recordp,
249  const char *record);
250 SPF_errcode_t SPF_record_compile_macro(SPF_server_t *spf_server,
251  SPF_response_t *spf_response,
252  SPF_macro_t **spf_macrop,
253  const char *record);
256  SPF_record_t *spf_record,
257  SPF_request_t *spf_request,
258  SPF_response_t *spf_response,
259  int depth);
261 SPF_errcode_t SPF_record_expand_data(SPF_server_t *spf_server,
262  SPF_request_t *spf_request,
263  SPF_response_t *spf_response,
264  SPF_data_t *data, size_t data_len,
265  char **bufp, size_t *buflenp);
267 SPF_errcode_t SPF_record_print(SPF_record_t *spf_record);
268 SPF_errcode_t SPF_record_stringify(SPF_record_t *spf_record,
269  char **bufp, size_t *buflenp);
270 
271 #endif
SPF_data_cidr_struct::ipv6
unsigned char ipv6
Definition: spf_record.h:134
spf_request.h
SPF_record_find_mod_value
SPF_errcode_t SPF_record_find_mod_value(SPF_server_t *spf_server, SPF_request_t *spf_request, SPF_response_t *spf_response, SPF_record_t *spf_record, const char *mod_name, char **bufp, size_t *buflenp)
Definition: spf_record.c:126
SPF_mech_struct::prefix_type
unsigned char prefix_type
Definition: spf_record.h:176
SPF_record_struct
Definition: spf_record.h:200
SPF_errcode_t
SPF_errcode_t
Definition: spf_response.h:118
SPF_data_var_struct::parm_type
unsigned char parm_type
Definition: spf_record.h:117
SPF_record_print
SPF_errcode_t SPF_record_print(SPF_record_t *spf_record)
Definition: spf_print.c:45
SPF_data_union::ds
SPF_data_str_t ds
Definition: spf_record.h:144
SPF_mech_struct
Definition: spf_record.h:173
SPF_data_var_struct
Definition: spf_record.h:114
SPF_data_union::dc
SPF_data_cidr_t dc
Definition: spf_record.h:145
SPF_mech_struct::mech_len
unsigned short mech_len
Definition: spf_record.h:178
SPF_mod_struct::data_len
unsigned short data_len
Definition: spf_record.h:190
SPF_data_var_struct::rev
unsigned short rev
Definition: spf_record.h:119
SPF_record_struct::spf_server
SPF_server_t * spf_server
Definition: spf_record.h:202
SPF_record_compile
SPF_errcode_t SPF_record_compile(SPF_server_t *spf_server, SPF_response_t *spf_response, SPF_record_t **spf_recordp, const char *record)
Definition: spf_compile.c:1184
SPF_record_struct::mech_first
SPF_mech_t * mech_first
Definition: spf_record.h:211
SPF_data_str_struct::len
unsigned char len
Definition: spf_record.h:107
SPF_macro_free
void SPF_macro_free(SPF_macro_t *mac)
Definition: spf_record.c:73
SPF_record_stringify
SPF_errcode_t SPF_record_stringify(SPF_record_t *spf_record, char **bufp, size_t *buflenp)
Definition: spf_id2str.c:245
SPF_record_struct::mech_size
size_t mech_size
Definition: spf_record.h:212
SPF_record_compile_macro
SPF_errcode_t SPF_record_compile_macro(SPF_server_t *spf_server, SPF_response_t *spf_response, SPF_macro_t **spf_macrop, const char *record)
Definition: spf_compile.c:1503
SPF_record_struct::num_mech
unsigned char num_mech
Definition: spf_record.h:206
SPF_record_struct::num_dns_mech
unsigned char num_dns_mech
Definition: spf_record.h:208
SPF_data_union
Definition: spf_record.h:140
SPF_macro_struct
Definition: spf_record.h:220
SPF_data_str_struct::__unused1
unsigned char __unused1
Definition: spf_record.h:109
SPF_record_interpret
SPF_errcode_t SPF_record_interpret(SPF_record_t *spf_record, SPF_request_t *spf_request, SPF_response_t *spf_response, int depth)
Definition: spf_interpret.c:585
SPF_data_str_struct::__unused0
unsigned char __unused0
Definition: spf_record.h:108
SPF_data_var_struct::delim_plus
unsigned short delim_plus
Definition: spf_record.h:123
SPF_data_var_struct::num_rhs
unsigned char num_rhs
Definition: spf_record.h:118
SPF_mod_struct
Definition: spf_record.h:186
SPF_record_struct::version
unsigned char version
Definition: spf_record.h:205
SPF_data_cidr_struct
Definition: spf_record.h:129
SPF_data_var_struct::delim_dash
unsigned short delim_dash
Definition: spf_record.h:122
SPF_data_var_struct::delim_dot
unsigned short delim_dot
Definition: spf_record.h:121
SPF_data_cidr_struct::parm_type
unsigned char parm_type
Definition: spf_record.h:132
SPF_data_str_struct
Definition: spf_record.h:103
SPF_mod_struct::name_len
unsigned short name_len
Definition: spf_record.h:189
SPF_record_struct::mod_first
SPF_mod_t * mod_first
Definition: spf_record.h:215
spf_response.h
SPF_mech_struct::mech_type
unsigned char mech_type
Definition: spf_record.h:177
SPF_data_var_struct::url_encode
unsigned short url_encode
Definition: spf_record.h:120
SPF_record_struct::mech_len
size_t mech_len
Definition: spf_record.h:213
spf_server.h
SPF_record_free
void SPF_record_free(SPF_record_t *rp)
Definition: spf_record.c:63
SPF_data_var_struct::delim_equal
unsigned short delim_equal
Definition: spf_record.h:124
SPF_data_str_struct::parm_type
unsigned char parm_type
Definition: spf_record.h:106
SPF_record_struct::num_mod
unsigned char num_mod
Definition: spf_record.h:207
SPF_record_struct::mod_len
size_t mod_len
Definition: spf_record.h:217
SPF_data_cidr_struct::__unused0
unsigned char __unused0
Definition: spf_record.h:135
SPF_record_struct::mod_size
size_t mod_size
Definition: spf_record.h:216
SPF_data_union::dv
SPF_data_var_t dv
Definition: spf_record.h:143
SPF_record_new
SPF_record_t * SPF_record_new(SPF_server_t *spf_server, const char *text)
Definition: spf_record.c:48
SPF_data_var_struct::delim_under
unsigned short delim_under
Definition: spf_record.h:126
SPF_data_cidr_struct::ipv4
unsigned char ipv4
Definition: spf_record.h:133
SPF_data_var_struct::delim_bar
unsigned short delim_bar
Definition: spf_record.h:125
SPF_macro_struct::macro_len
size_t macro_len
Definition: spf_record.h:222
SPF_record_expand_data
SPF_errcode_t SPF_record_expand_data(SPF_server_t *spf_server, SPF_request_t *spf_request, SPF_response_t *spf_response, SPF_data_t *data, size_t data_len, char **bufp, size_t *buflenp)
Definition: spf_expand.c:81