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 */
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;
128 
129 typedef
130 struct SPF_data_cidr_struct
131 {
132  unsigned char parm_type;
133  unsigned char ipv4;
134  unsigned char ipv6;
135  unsigned char __unused0;
139 
140 typedef
141 union SPF_data_union
142 {
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 */
212  size_t mech_size;
213  size_t mech_len;
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_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_errcode_t SPF_record_print(SPF_record_t *spf_record)
Definition: spf_print.c:45
void SPF_macro_free(SPF_macro_t *mac)
Definition: spf_record.c:73
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
SPF_errcode_t SPF_record_stringify(SPF_record_t *spf_record, char **bufp, size_t *buflenp)
Definition: spf_id2str.c:245
SPF_errcode_t SPF_record_interpret(SPF_record_t *spf_record, SPF_request_t *spf_request, SPF_response_t *spf_response, int depth)
SPF_record_t * SPF_record_new(SPF_server_t *spf_server, const char *text)
Definition: spf_record.c:48
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
void SPF_record_free(SPF_record_t *rp)
Definition: spf_record.c:63
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_errcode_t
Definition: spf_response.h:119
unsigned char __unused1
Definition: spf_record.h:109
unsigned char __unused0
Definition: spf_record.h:108
unsigned char parm_type
Definition: spf_record.h:106
unsigned char len
Definition: spf_record.h:107
unsigned short rev
Definition: spf_record.h:119
unsigned short delim_under
Definition: spf_record.h:126
unsigned short delim_dot
Definition: spf_record.h:121
unsigned char num_rhs
Definition: spf_record.h:118
unsigned short delim_bar
Definition: spf_record.h:125
unsigned char parm_type
Definition: spf_record.h:117
unsigned short delim_dash
Definition: spf_record.h:122
unsigned short delim_plus
Definition: spf_record.h:123
unsigned short delim_equal
Definition: spf_record.h:124
unsigned short url_encode
Definition: spf_record.h:120
unsigned char ipv6
Definition: spf_record.h:134
unsigned char ipv4
Definition: spf_record.h:133
unsigned char parm_type
Definition: spf_record.h:132
unsigned char __unused0
Definition: spf_record.h:135
SPF_data_str_t ds
Definition: spf_record.h:144
SPF_data_cidr_t dc
Definition: spf_record.h:145
SPF_data_var_t dv
Definition: spf_record.h:143
unsigned char mech_type
Definition: spf_record.h:177
unsigned char prefix_type
Definition: spf_record.h:176
unsigned short mech_len
Definition: spf_record.h:178
unsigned short name_len
Definition: spf_record.h:189
unsigned short data_len
Definition: spf_record.h:190
SPF_mech_t * mech_first
Definition: spf_record.h:211
unsigned char num_mech
Definition: spf_record.h:206
unsigned char version
Definition: spf_record.h:205
unsigned char num_mod
Definition: spf_record.h:207
unsigned char num_dns_mech
Definition: spf_record.h:208
SPF_mod_t * mod_first
Definition: spf_record.h:215
SPF_server_t * spf_server
Definition: spf_record.h:202