26 # ifdef HAVE_STRINGS_H
41 rp = (SPF_response_t *)malloc(
sizeof(SPF_response_t));
44 memset(rp, 0,
sizeof(SPF_response_t));
46 rp->spf_request = spf_request;
58 free(rp->received_spf);
60 if (rp->header_comment)
61 free(rp->header_comment);
63 free(rp->smtp_comment);
65 free(rp->explanation);
68 for (i = 0; i < rp->errors_length; i++) {
69 free(rp->errors[i].message);
77 static SPF_response_t *
78 SPF_response_choose(SPF_response_t *yes, SPF_response_t *no)
95 return SPF_response_choose(r2mx, main);
99 return SPF_response_choose(main, r2mx);
106 return SPF_response_choose(r2mx, main);
109 return SPF_response_choose(main, r2mx);
114 return SPF_response_choose(r2mx, main);
126 return SPF_response_choose(r2mx, main);
129 return SPF_response_choose(main, r2mx);
155 return rp->received_spf;
161 return rp->received_spf_value;
167 return rp->header_comment;
173 return rp->smtp_comment;
179 return rp->explanation;
184 #define SPF_ERRMSGSIZE 4096
187 SPF_response_add_error_v(SPF_response_t *rp,
189 const char *text,
int idx,
190 const char *format, va_list ap)
200 size = vsnprintf(buf,
sizeof(buf), format, ap);
202 snprintf(&buf[size],
sizeof(buf) - size,
203 " near '%.12s'", &text[idx]);
207 if (rp->errors_length == rp->errors_size) {
208 size = rp->errors_size + (rp->errors_size / 4) + 4;
211 SPF_error(
"Failed to allocate memory for extra response error");
215 rp->errors_size = size;
218 rp->errors[rp->errors_length].
code = code;
219 rp->errors[rp->errors_length].is_error = is_error;
221 rp->errors[rp->errors_length].message = strdup(buf);
227 #define SPF_ADD_ERROR(_ise, _txt, _ix) \
228 va_list ap; va_start(ap, format); \
229 SPF_response_add_error_v(rp, code, _ise, _txt, _ix, format, ap); \
231 va_end(ap); return code;
232 #define SPF_ADD_WARN(_ise, _txt, _ix) \
233 va_list ap; va_start(ap, format); \
234 SPF_response_add_error_v(rp, code, _ise, _txt, _ix, format, ap); \
235 va_end(ap); return code;
240 const char *text,
const char *tptr,
241 const char *format, ...)
243 SPF_ADD_ERROR(1, text ? text : tptr, text ? (tptr - text) : 0);
249 const char *text,
int idx,
250 const char *format, ...)
258 const char *format, ...)
266 const char *text,
const char *tptr,
267 const char *format, ...)
269 SPF_ADD_WARN(0, text ? text : tptr, text ? (tptr - text) : 0);
275 const char *text,
int idx,
276 const char *format, ...)
284 const char *format, ...)
292 return rp->errors_length;
298 return rp->num_errors;
304 return rp->errors_length - rp->num_errors;
310 return &rp->errors[idx];