3 * @brief Description of libspf2
4 * The contents of this file is extracted by the documentation
5 * generator, and forms the front matter and introductory text to this
6 * manual. The documentation for this file is, therefore, apparently
11 * @mainpage Introduction to libspf2
15An example client implementation is in spf_example.c with a little
16more error checking. The basic cases are as follows:
18The SPF server is reusable, and thread-safe. It must be freed using
22 SPF_server_t *spf_server = SPF_server_new(SPF_DNS_CACHE, 0);
25Create a request, and set the relevant fields in it. Each setter
26method returns an SPF_errcode_t, which will inform you of error
27conditions, such as out-of-memory or invalid argument.
30 SPF_request_t *spf_request = SPF_request_new(spf_server);
31 SPF_request_set_ipv4_str(spf_request, "123.45.6.7");
32 SPF_request_set_env_from(spf_request, "clientdomain.com");
35Now that we have built a query, we may execute it. It will use the
36SPF_server_t which was passed to the query constructor. As usual, the
37SPF_request_query_mailfrom method returns an error code, although
38much richer errors are returned inside the SPF_response_t - see
39spf_response.h for more details of that API.
42 SPF_response_t *spf_response = NULL;
43 SPF_request_query_mailfrom(spf_request, &spf_response);
44 printf("Result is %s\n",
45 SPF_strresult(SPF_response_result(spf_response)));
48When we have finished with the response, we must free it and the
52 SPF_response_free(spf_response);
53 SPF_request_free(spf_request);
56We can execute many requests in parallel threads on the same server,
57but before the program exits, we must free the server.
60 SPF_server_free(spf_server);
65 - Current maintainer: Shevek <libspf2@anarres.org>
66 - Contributors: Magnus Holmgren, Julian Mehnle, Scott Kitterman
67 - Contributors: Dan Kaminsky, Ben Chelf, Hannah Schroeter
68 - Contributors: Martin Braine, Manish Raje, Stuart Gathman
69 - Original author, 1.0 series: Wayne Schlitt <wayne@midwestcs.com>
73This program is free software; you can redistribute it and/or modify
74it under the terms of either:
76 a) the GNU Lesser General Public License as published by the Free
77 Software Foundation; either version 2.1, or (at your option) any
82 b) The two-clause BSD license.
84Some code in the 'replace' subdirectory was obtained form other sources
85and have different, but compatible, licenses. These routines are
86used only when the native libraries for the OS do not contain these
87functions. You should review the licenses and copyright statments
88in these functions if you are using an OS that needs these functions.
90 * @par Original README from Wayne Schlitt
92Libspf2 is an implementation of the SPF specification as found at
93http://www.ietf.org/internet-drafts/draft-mengwong-spf-00.txt
94or doc/draft-mengwong-spf-00.txt
96Libspf2 is in beta testing and should only be used in production
97systems with caution. It has not been widely compiled and tested on
98machines with different operating systems, CPU architectures, or
99network configurations. It has not been audited for security errors.
101While libspf2 is beta code, a lot of effort has been put into
102making it secure by design, and a great deal of effort has been put
103into the regression tests. Functions such as sprintf() are never
104used, things like snprintf() are used instead. There are few fixed
105sized buffers/arrays, instead, most data structures are dynamically
106allocated with the allocation sized recorded so I can check to make
107sure the buffer isn't overflowed. The return values from malloc() and
108other system calls are checked and handled as gracefully as I can.
109The valgrind program is regularly run to make sure that there are no
110memory leaks and reads/writes to invalid memory.
113This code has been compiled and passed its regression tests on Debian
114Linux (sid/testing) on the x86, FreeBSD 4.3 (x86), FreeBSD 4.9
115(x86??), NetBSD 1.62 (x86?), SunOS 5.8 on the ultrasparc, and a few
116others. It uses the autotools (autoconfig, libtools, automake, etc.)
117to try and make things more portable, so it will likely work on other