Commit | Line | Data |
---|---|---|
92f1b170 TK |
1 | /* $Cambridge: exim/src/src/lookups/spf.c,v 1.1 2005/05/25 20:07:55 tom Exp $ */ |
2 | ||
3 | /************************************************* | |
4 | * Exim - an Internet mail transport agent * | |
5 | *************************************************/ | |
6 | ||
7 | /* | |
8 | * Exim - SPF lookup module using libspf2 | |
9 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
10 | * | |
11 | * Copyright (c) 2005 Chris Webb, Arachsys Internet Services Ltd | |
12 | * | |
13 | * This program is free software; you can redistribute it and/or | |
14 | * modify it under the terms of the GNU General Public License | |
15 | * as published by the Free Software Foundation; either version 2 | |
16 | * of the License, or (at your option) any later version. | |
17 | * | |
18 | */ | |
19 | ||
20 | #include "../exim.h" | |
21 | ||
22 | #ifndef EXPERIMENTAL_SPF | |
23 | static void dummy(int x) { dummy(x-1); } | |
24 | #else | |
25 | ||
26 | #include "lf_functions.h" | |
27 | #include "spf.h" | |
28 | #include <spf2/spf.h> | |
29 | #include <spf2/spf_dns_resolv.h> | |
30 | #include <spf2/spf_dns_cache.h> | |
31 | ||
32 | void *spf_open(uschar *filename, uschar **errmsg) { | |
33 | SPF_server_t *spf_server = NULL; | |
34 | spf_server = SPF_server_new(SPF_DNS_CACHE, 0); | |
35 | if (spf_server == NULL) { | |
36 | *errmsg = US"SPF_server_new() failed"; | |
37 | return NULL; | |
38 | } | |
39 | return (void *) spf_server; | |
40 | } | |
41 | ||
42 | void spf_close(void *handle) { | |
43 | SPF_server_t *spf_server = handle; | |
44 | if (spf_server) SPF_server_free(spf_server); | |
45 | } | |
46 | ||
47 | int spf_find(void *handle, uschar *filename, uschar *keystring, int key_len, | |
48 | uschar **result, uschar **errmsg, BOOL *do_cache) { | |
49 | SPF_server_t *spf_server = handle; | |
50 | SPF_request_t *spf_request = NULL; | |
51 | SPF_response_t *spf_response = NULL; | |
52 | ||
53 | spf_request = SPF_request_new(spf_server); | |
54 | if (spf_request == NULL) { | |
55 | *errmsg = US"SPF_request_new() failed"; | |
56 | return FAIL; | |
57 | } | |
58 | ||
59 | if (SPF_request_set_ipv4_str(spf_request, filename)) { | |
60 | *errmsg = string_sprintf("invalid IP address '%s'", filename); | |
61 | return FAIL; | |
62 | } | |
63 | if (SPF_request_set_env_from(spf_request, keystring)) { | |
64 | *errmsg = string_sprintf("invalid envelope from address '%s'", keystring); | |
65 | return FAIL; | |
66 | } | |
67 | ||
68 | SPF_request_query_mailfrom(spf_request, &spf_response); | |
69 | *result = string_copy(US SPF_strresult(SPF_response_result(spf_response))); | |
70 | SPF_response_free(spf_response); | |
71 | SPF_request_free(spf_request); | |
72 | return OK; | |
73 | } | |
74 | ||
75 | #endif /* EXPERIMENTAL_SPF */ |