| 1 |
root |
1.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 |