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
22typedef struct SPF_record_struct SPF_record_t;
23typedef 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
103typedef
104struct 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
114typedef
115struct 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
129typedef
130struct SPF_data_cidr_struct
131{
132 unsigned char parm_type;
133 unsigned char ipv4;
134 unsigned char ipv6;
135 unsigned char __unused0;
139
140typedef
141union 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
173typedef
174struct 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 */
186typedef
187struct 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
228SPF_record_t *SPF_record_new(SPF_server_t *spf_server,
229 const char *text);
230void SPF_record_free(SPF_record_t *rp);
231void SPF_macro_free(SPF_macro_t *mac);
232#if 0 /* static */
233SPF_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
238SPF_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
246SPF_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);
250SPF_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);
261SPF_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);
267SPF_errcode_t SPF_record_print(SPF_record_t *spf_record);
268SPF_errcode_t SPF_record_stringify(SPF_record_t *spf_record,
269 char **bufp, size_t *buflenp);
270
271#endif
SPF_errcode_t
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_errcode_t SPF_record_compile(SPF_server_t *spf_server, SPF_response_t *spf_response, SPF_record_t **spf_recordp, const char *record)
void SPF_record_free(SPF_record_t *rp)
Definition spf_record.c:63
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_macro(SPF_server_t *spf_server, SPF_response_t *spf_response, SPF_macro_t **spf_macrop, const char *record)
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