1 |
|
2 |
oooo o8o .o8 .oooooo..o ooooooooo. oooooooooooo |
3 |
`888 `"' "888 d8P' `Y8 `888 `Y88. `888' `8 |
4 |
888 oooo 888oooo. Y88bo. 888 .d88' 888 |
5 |
888 `888 d88' `88b `"Y8888o. 888ooo88P' 888oooo8 |
6 |
888 888 888 888 `"Y88b 888 888 " |
7 |
888 888 888 888 oo .d8P 888 888 |
8 |
o888o o888o `Y8bod8P' 8""88888P' o888o o888o |
9 |
|
10 |
-------------------------------------------------------------------------------- |
11 |
An ANSI C Implementation of the Sender Policy Framework |
12 |
-------------------------------------------------------------------------------- |
13 |
|
14 |
|
15 |
Table of Contents |
16 |
----------------- |
17 |
|
18 |
1.0 ............. Installation |
19 |
2.0 ............. Patches |
20 |
3.0 ............. Examples |
21 |
4.0 ............. Documentation |
22 |
4.1 ............ MTA specific |
23 |
4.2 ............ API specific |
24 |
4.3 ............ Resources |
25 |
5.0 ............. Source Code |
26 |
6.0 ............. License |
27 |
7.0 ............. Portability |
28 |
8.0 ............. Resources |
29 |
8.1 ............ Email |
30 |
8.2 ............ Developer Forums |
31 |
8.3 ............ Mailinglist |
32 |
9.0 ............. Contact |
33 |
10.0 ............ Donating |
34 |
|
35 |
|
36 |
1. Installation: |
37 |
---------------- |
38 |
|
39 |
./configure && make |
40 |
|
41 |
You will find the static and dynamic libraries in the directory libtool |
42 |
will have created off of the libspf src dir.: |
43 |
|
44 |
Example: ./libspf-1_0_0/src/libpf/.libs/ |
45 |
|
46 |
You will find the libSPF Query Tool binaries (both static and dynamic) in |
47 |
a directory created by make in the libSPF root directory called 'bin'. |
48 |
|
49 |
Example: ./libspf-1_0_0/bin/ |
50 |
|
51 |
Outside of the generic available configure options you have the following |
52 |
at your disposal: |
53 |
|
54 |
|
55 |
--enable-pthreads - Default = disabled |
56 |
|
57 |
Enable linux posix threading support which in turn switches from gethostbyname |
58 |
to gethostbyname_r (if available, if not a custom reentrant wrapper is used) |
59 |
and several mutexes are employed to facilitate a thread-safe environment. |
60 |
|
61 |
|
62 |
--enable-spfmilter - Default = disabled |
63 |
|
64 |
Enable the libSPF fork of Jef Poskanzer's Sendmail spfmilter. The milter was |
65 |
forked at version 0.90. Problems with the milter are NOT to be directed to |
66 |
Jef as its not fair to ask him to support a fork when he is plenty busy with |
67 |
his own. Please forward bugs, questions, etc.. to myself (James). |
68 |
|
69 |
|
70 |
--enable-spfqtool - Default = enabled |
71 |
|
72 |
Enable the libSPF Query Tool. spfqtool is a fully functional binary SPF |
73 |
parser which you can call from userland or even call from a CGI or your |
74 |
MTA if you so wished. Since its written in the same language as libSPF |
75 |
its very lightweight and inexpensive to call repeatedly. |
76 |
|
77 |
The above switches also work in reverse, so if for example you wished |
78 |
to disable to building of the query tool you would do: |
79 |
|
80 |
./configure --disable-spfqtool |
81 |
|
82 |
|
83 |
--enable-debug - Default = disabled |
84 |
|
85 |
Enable debugging output. For a detailed document on how debugging works |
86 |
within libSPF please see the internal documenation or the online document |
87 |
available at http://libSPF.org/debugging_libspf.pdf/html By default |
88 |
debug output is pushed to /var/log/spf.log. If you wish to change this see |
89 |
the AutoConf configuration handle '--enable-debug-logfile' and disable it. |
90 |
|
91 |
|
92 |
--enable-debug-logfile - Default = enabled |
93 |
|
94 |
Enables logging debug output to /var/log/spf.log |
95 |
|
96 |
|
97 |
--enable-logfile-stats - Default = disabled |
98 |
|
99 |
Enables logfile stats to /var/log/spflog.txt which look like this: |
100 |
|
101 |
[2005-04-18 14:24:48] result: unknown :: NievNeal3864@jlist.com [82.120.84.13], ver: 10, depth: 1, error: (policy result: (unknown) from rule (-all)) |
102 |
[2005-04-18 14:24:48] result: unknown :: NievNeal3864@jlist.com [82.120.84.13], ver: 10, depth: 1, error: (policy result: (unknown) from rule (-all)) |
103 |
[2005-04-18 17:10:49] result: softfail :: emgdxfwavxzwhk@hotmail.com [201.15.156.75], ver: 5, depth: 1, error: (policy result: (softfail) from rule (~all)) |
104 |
[2005-04-18 21:14:00] result: neutral :: test@spftools.infinitepenguins.net [220.117.245.29], ver: 2, depth: 1, error: (policy result: (neutral) from rule (?all)) |
105 |
[2005-04-18 21:14:07] result: neutral :: test@spftools.infinitepenguins.net [220.117.245.29], ver: 2, depth: 1, error: (policy result: (neutral) from rule (?all)) |
106 |
|
107 |
I've got code to do this to MySQL if anyone is interested.. I'll try to |
108 |
include it in subsequent releases to 1.0 final. |
109 |
|
110 |
|
111 |
--enable-rfc-recursion - Default = disabled |
112 |
|
113 |
Change SPF recursion to 20 (as per RFC). This level has been deemed by members |
114 |
of the SPF-DISCUSS mailing list to be excessively high, although as far as I |
115 |
know Meng still believes it to be reasonable. I personally believe that its |
116 |
excessive, at least for now, which is why I've added this option to re-enable |
117 |
RFC recursion limits. |
118 |
|
119 |
|
120 |
--enable-res_search - Default = disasbled |
121 |
|
122 |
Enables DNS queries to follow default and search rules. This turned out to cause |
123 |
all sorts of problems for people who were employing default and search fules in |
124 |
their resolv.conf and was causing SPF queries to return improper results. Its |
125 |
honestly a bit of a feature if you are aware of it, and since most people never |
126 |
seem to read documentation or be aware of their surroundings, this is disabled |
127 |
by default. |
128 |
|
129 |
|
130 |
--enable-paranoid-malloc - Default = enabled |
131 |
|
132 |
Enable memsetting of every malloc called through the wrapper functions |
133 |
through wrapper functions that handle memory allocation. |
134 |
|
135 |
|
136 |
--enable-libbind - Default = disabled |
137 |
|
138 |
Link libbind instead of libresolv |
139 |
|
140 |
|
141 |
--enable-full-optimizations - Default = disabled [DEPRECATED] |
142 |
|
143 |
Enables building of an optimized library through the employment of various GCC |
144 |
compile time macros. I currently advise against this as they are architecture |
145 |
specific but in the future it is intended that they will be intelligent and |
146 |
will result in the right set of macros to result in the most optimized code |
147 |
generated for whatever architecture it is compiled on. [DEPRECATED] |
148 |
|
149 |
|
150 |
2. Patches: |
151 |
----------- |
152 |
|
153 |
Patches for each respective supported MTA are found within the patches |
154 |
directory, followed by the name of the MTA, and then optionally should |
155 |
there have been support long enough, there will be where applicable |
156 |
additional directories per MAJOR.MINOR.INCREMENTAL. |
157 |
|
158 |
Example: ./libspf-1_0_0/patches/Sendmail/8.13.x/ |
159 |
|
160 |
The above example contains patches against Sendmail 8.13.x (the x is literal) |
161 |
and infers that a patch against any 8.13 version will be located there. |
162 |
|
163 |
|
164 |
3. Examples: |
165 |
------------ |
166 |
|
167 |
Examples follow the same layout as Patches. The examples directory contains |
168 |
example configuration files for the various MTA's supported by libSPF. |
169 |
|
170 |
Example: ./libspf-1_0_0/examples/Sendmail/8.13.x/sendmail.cf.example |
171 |
|
172 |
|
173 |
4. Documentation: |
174 |
----------------- |
175 |
|
176 |
Documentation also follows the same layout as Patches and examples. The |
177 |
Documentation directory is called 'docs' and is also found in the root of the |
178 |
unpack libspf archive. Documentation is split up into two categories. |
179 |
|
180 |
|
181 |
4.1 MTA specific documentation: |
182 |
------------------------------- |
183 |
|
184 |
There is a basic HOWTO document which details step-by-step how to patch and |
185 |
install a copy of the respective MTA's supported by libSPF. The documents |
186 |
follow the following naming convention: |
187 |
|
188 |
<mta>-<mta_version>-libspf-<libspf_version>-HOWTO.[html|txt|pdf] |
189 |
|
190 |
Example: ./libspf-1_0_0/docs/qmail/net-1.05/netqmail-1.05-libspf-1.0-HOWTO.txt |
191 |
|
192 |
|
193 |
4.2 API specific documentation: |
194 |
------------------------------- |
195 |
|
196 |
API specific documentation is found in the 'API' directory inside of the |
197 |
'docs' directory. You can point your favorite web browser to this folder |
198 |
or simply use your favorite shell or file explorer to traverse through the |
199 |
content. |
200 |
|
201 |
The primary support for learning the API can be had through the HTML doxygen |
202 |
content available within each release of libSPF starting with libSPF-1.0-RC3, |
203 |
and the most up to date version will always be available from the libSPF.org |
204 |
website. |
205 |
|
206 |
Secondary documentation is available from within this directory structure also |
207 |
and consists of papers that will go into specific detail on a particular |
208 |
topic. |
209 |
|
210 |
Example: ./libspf-1_0_0/docs/API/debugging_libspf.pdf |
211 |
|
212 |
|
213 |
4.3 Resources: |
214 |
-------------- |
215 |
|
216 |
Please see the section entitled "libSPF Resources" |
217 |
|
218 |
|
219 |
5.0 Source code: |
220 |
---------------- |
221 |
|
222 |
All source code can be found from within the 'src' directory off the root of |
223 |
the unpacked libspf 1.0 archive. From there each individual library or |
224 |
binary will be located in its own directory. |
225 |
|
226 |
Example: ./libspf-1_0_0/src/libspf |
227 |
|
228 |
|
229 |
6.0 License: |
230 |
------------ |
231 |
|
232 |
libSPF is released under our own license, which is a modified version of the |
233 |
Apache Software Foundation's license. This license was chosen because we* wanted |
234 |
SPF implemented as fast and as easily as possible, and it was felt that licensing |
235 |
under the GPL would inhibit use by commertial entities wishing to support |
236 |
something like SPF but being unable to do so due to a restrictive license such |
237 |
as the GPL. |
238 |
|
239 |
*we (Sean Comeau and myself) |
240 |
|
241 |
License: ./libspf-1_0_0/LICENSE |
242 |
|
243 |
|
244 |
7.0 Portability: |
245 |
---------------- |
246 |
|
247 |
libSPF is coded in accordance with the ANSI C/89 and ANSI C/99 Standards. The |
248 |
library entirely complies with C/89, and I had to move to employ standards |
249 |
from C/99 to facilitate the debugging and standard function replacements that |
250 |
are implemented. For more information please read "Debugging libSPF" which can |
251 |
be found within the archive this README was enclosed in, inside of the 'docs' |
252 |
directory off its root. |
253 |
|
254 |
libSPF is easily portable to win32 although because windows has not been the |
255 |
focus of interest its lagged behind more important things such as API |
256 |
documentation and getting near a stable release. If win32 portability |
257 |
interests you feel free to contact me, all thats necessary is to finish off |
258 |
a patch altering the DNS functionality. |
259 |
|
260 |
libSPF is known to 'configure', 'compile' and work on the following |
261 |
architectures and the distributions associated with them: |
262 |
|
263 |
[+--------------------------------------------------------------------------+] |
264 |
| Architecture | Distro | Version | Kernel | Compiler Version | |
265 |
[+-------------+----------------+----------+-----------+------------------+] |
266 |
| x86 | Fedora Core | 1 | 2.6.3 | GCC 3.3.2 | |
267 |
| x86_64 | Fedora Core | 1 | 2.6.7 | GCC 3.3.4 #$ | |
268 |
| x86 | Fedora Core | 2 | 2.6.7 | GCC 3.3.3/4 | |
269 |
| x86_64 | Fedora Core | 2 | 2.6.7 | GCC 3.3.3/4 #$ | |
270 |
| x86_64 | Fedora Core | 3 | 2.6.11 | GCC 3.4.3 #$ | |
271 |
| x86 | Gentoo | 1.4 | 2.6.7 | GCC 3.3.3/4 @#$ | |
272 |
| x86_64 | Gentoo | 2004.1 | 2.6.7-r11 | GCC 3.3.3/4 @#$ | |
273 |
| x86_64 | Gentoo | 2005.1 | 2.6.10-g6 | GCC 3.4.3 @#$ | |
274 |
| x86 | Mandrake | 9.2 | ? | GCC 3.3.1 | |
275 |
| x86 | Slackware | 8.0 | 2.6.7 | GCC 2.95.3 | |
276 |
| x86 | Slackware | 8.1 | 2.6.7 | GCC 2.95.3 | |
277 |
| x86 | Slackware | 9.0 | 2.6.7 | GCC 3.2.2 | |
278 |
| x86 | Slackware | 9.1 | 2.6.7 | GCC 3.3.1 | |
279 |
| x86 | Slackware | 10.0 | 2.6.7 | GCC 3.3.4 | |
280 |
| x86 | Red Hat Linux | 3.2.3-34 | 2.4.21-15 | GCC 3.2.3 030502 | |
281 |
[+-------------+----------------+----------+-----------+------------------+] |
282 |
| x86 | OpenBSD | 3.5 | 3.5 | GCC 2.95.3 @ | |
283 |
| x86_64 | OpenBSD | 3.5 | 3.5 | GCC 2.95.3 @ | |
284 |
| x86 | FreeBSD | 4.4 | 4.4 | GCC 2.95.3 | |
285 |
| x86 | FreeBSD | 4.10-PRE | 4.10-PRE | GCC 2.95.4 | |
286 |
| x86 | FreeBSD | 4.11-STA | 4.11-STAB | GCC 2.95.4 | |
287 |
| x86 | FreeBSD | 5.3 | 5.3 | GCC ?????? | |
288 |
[+-------------+----------------+----------+-----------+------------------+] |
289 |
| PPC | OSX/Darwin | 10.3 | 10.3 | GCC 3.3 | |
290 |
[+-------------+----------------+----------+-----------+------------------+] |
291 |
| SPARC | SunOS/Solaris | 5.8/8.0 | 5.8/8.0 | GCC/SC 3.0.1/5.3 | |
292 |
| x86 | SunOS/Solaris | 5.8/8.0 | 5.8/8.0 | GCC 2.95.3 | |
293 |
| SPARC | SunOS/Solaris | 5.9/9.0 | 5.9/9.0 | GCC 3.3 | |
294 |
| x86 | SunOS/Solaris | 5.9/9.0 | 5.9/9.0 | GCC/SC 3.3.2/5.5 | |
295 |
[+-------------+----------------+----------+-----------+------------------+] |
296 |
| @ = Propolice # = ssp $ = pie | Submit: <libspf-support@codeshare.ca> | |
297 |
[+--------------------------------------------------------------------------+] |
298 |
|
299 |
|
300 |
8.0 Resources: |
301 |
-------------- |
302 |
|
303 |
I've tried to provide as much support as I can through the means at my disposal. |
304 |
This being said you have access to the following: |
305 |
|
306 |
8.1 Email: |
307 |
---------- |
308 |
|
309 |
I'm readily available via E-Mail both on and off the list to help answer |
310 |
any questions that are not blatantly answered through a little reading. |
311 |
|
312 |
If you are a developer looking to implement and have a question, bug, |
313 |
feature, idea, etc.. DO NOT HESITATE to contact me! |
314 |
|
315 |
If you are an Administrator and you are trying to implement libSPF on |
316 |
your network, and you have exhausted the available help, DO NOT |
317 |
HESITATE to contact me! |
318 |
|
319 |
Contact E-Mail: jcouzens@codeshare.ca |
320 |
|
321 |
|
322 |
8.2 Developer Forums: |
323 |
--------------------- |
324 |
|
325 |
The developer forums are aimed to promoting further patch work implementing |
326 |
libSPF in other MTA's and in other ways. Its also a venue of bug-fix |
327 |
releases and feature-testing. |
328 |
|
329 |
Developers will find this site most useful, but this doesn't exclude any |
330 |
particular party from participating, all are welcome to be involved. |
331 |
|
332 |
Developer Foruyms: http://forums.codeshare.ca |
333 |
|
334 |
8.3 Mailing List: |
335 |
----------------- |
336 |
|
337 |
As of August 1, 2004 there is now a mailing list hosted by codeshare.ca |
338 |
entitled 'libspf'. You can subscribe to this mailginglist quite easily |
339 |
by submitting an email to 'libspf-subscribe@codeshare.ca' with an empty |
340 |
body and the subject: 'libspf subscribe'. |
341 |
|
342 |
There is also an announcesments list which is 'receive only' in that |
343 |
only libSPF developers will post to it in announcement of a new |
344 |
release or bugfix. To subscriber to this list submit and email to |
345 |
'libspf-announce-subscribe@codeshare.ca' with an empty body and the |
346 |
subject: 'libspf announce subscribe'. |
347 |
|
348 |
|
349 |
9.0 Contact: |
350 |
------------ |
351 |
|
352 |
Forums ....................... http://forums.codeshare.ca |
353 |
WWW .......................... http://libspf.org |
354 |
Bugs ......................... James Couzens <jcouzens@codeshare.ca> |
355 |
|
356 |
|
357 |
10.0 Donations: |
358 |
--------------- |
359 |
|
360 |
Honestly the best donation you can give is to provide feedback, |
361 |
patches, or aide the project in one fashion or another. If you |
362 |
do wish to show your appreciation in a more tangible form, I |
363 |
personally enjoy books and small electronic devices which you |
364 |
can find on my Amazon wishlist. |
365 |
|
366 |
http://libspf.org/wishlist.html |
367 |
|
368 |
Link seems to break from time to time, so if it does you could |
369 |
search for my name if you were so motivated, or drop me a line :) |
370 |
|
371 |
UPDATED: Mon Apr 18 21:32:45 PDT 2005 |
372 |
|
373 |
EOF |