ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/libspf/docs/spfqtool/spfqtool.html
Revision: 1.1
Committed: Tue Nov 13 00:51:35 2007 UTC (18 years, 11 months ago) by root
Content type: text/html
Branch: MAIN
CVS Tags: HEAD
Log Message:
initial import of libspf-1.0.0-p5 from freebsd ports

File Contents

# Content
1 <html>
2 <head>
3 <title>spfqtool.c</title>
4 </head>
5 <body bgcolor="#ffffff" text="#000000">
6 <pre>
7 <font color="#444444">/* libspf - Sender Policy Framework library
8 *
9 * ANSI C implementation of spf-draft-200405.txt
10 *
11 * Author: James Couzens &lt;jcouzens@codeshare.ca&gt;
12 *
13 * File: spfqtool.c
14 * Desc: SPF Query Tool (an example implementation of libSPF)
15 *
16 * License:
17 *
18 * The libspf Software License, Version 1.0
19 *
20 * Copyright (c) 2004 James Couzens &amp; Sean Comeau All rights
21 * reserved.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 *
27 * 1. Redistributions of source code must retain the above copyright
28 * notice, this list of conditions and the following disclaimer.
29 *
30 * 2. Redistributions in binary form must reproduce the above copyright
31 * notice, this list of conditions and the following disclaimer in
32 * the documentation and/or other materials provided with the
33 * distribution.
34 *
35 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38 * DISCLAIMED. IN NO EVENT SHALL THE AUTHORS MAKING USE OF THIS LICESEN
39 * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46 * SUCH DAMAGE.
47 *
48 */</font>
49
50 <font color="0000ff"><strong>#include <font color="#008000">&quot;<a href=spfqtool.h target=_blank>spfqtool.h</a>&quot;</font></strong></font>
51
52
53 <font color="#444444">/* SPF_usage
54 *
55 * Author: James Couzens &lt;jcouzens@6o4.ca&gt;
56 *
57 * Date: 07/04/04
58 * Date: 07/28/04 - Renamed to spfqtool
59 * Date: 09/08/04 - Added SPF_build_header call
60 *
61 * Desc:
62 * Main function, allocates memory and makes calls to the libSPF
63 * library which parses the &quot;fake&quot; query.
64 *
65 */</font>
66 <strong>int</strong> <font color="#2040a0">main</font><font color="4444FF">(</font><strong>int</strong> <font color="#2040a0">argc</font>, <strong>char</strong> <font color="4444FF">*</font><font color="#2040a0">argv</font><font color="4444FF">[</font><font color="4444FF">]</font><font color="4444FF">)</font>
67 <font color="4444FF"><strong>{</strong></font>
68 <font color="#2040a0">u_int8_t</font> <font color="#2040a0">i</font> <font color="4444FF">=</font> <font color="#FF0000">0</font><font color="4444FF">;</font> <font color="#444444">/* utility */</font>
69
70 <font color="#2040a0">SPF_RESULT</font> <font color="#2040a0">res</font> <font color="4444FF">=</font> <font color="#2040a0">SPF_UNKNOWN</font><font color="4444FF">;</font> <font color="#444444">/* libSPF result code */</font>
71
72 <font color="#2040a0">SPF_BOOL</font> <font color="#2040a0">use_explain</font> <font color="4444FF">=</font> <font color="#2040a0">SPF_FALSE</font><font color="4444FF">;</font> <font color="#444444">/* T / F provide SPF Explanation */</font>
73 <font color="#2040a0">SPF_BOOL</font> <font color="#2040a0">use_trusted</font> <font color="4444FF">=</font> <font color="#2040a0">SPF_FALSE</font><font color="4444FF">;</font> <font color="#444444">/* T / F attempt Trusted Forwarder */</font>
74 <font color="#2040a0">SPF_BOOL</font> <font color="#2040a0">use_guess</font> <font color="4444FF">=</font> <font color="#2040a0">SPF_FALSE</font><font color="4444FF">;</font> <font color="#444444">/* T / F attempt Best Guess */</font>
75 <font color="#2040a0">SPF_BOOL</font> <font color="#2040a0">test_mode</font> <font color="4444FF">=</font> <font color="#2040a0">SPF_FALSE</font><font color="4444FF">;</font> <font color="#444444">/* T / F enable test mode */</font>
76
77 <strong>char</strong> <font color="4444FF">*</font><font color="#2040a0">margv</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font> <font color="#444444">/* pointer to current argv element */</font>
78 <strong>char</strong> <font color="4444FF">*</font><font color="#2040a0">ip</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font> <font color="#444444">/* ip address to test connecting from */</font>
79 <strong>char</strong> <font color="4444FF">*</font><font color="#2040a0">address</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font> <font color="#444444">/* email address to test sending from */</font>
80 <strong>char</strong> <font color="4444FF">*</font><font color="#2040a0">helo</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font> <font color="#444444">/* helo hostname to test sending from */</font>
81 <strong>char</strong> <font color="4444FF">*</font><font color="#2040a0">tmp</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font> <font color="#444444">/* utility pointer */</font>
82 <strong>char</strong> <font color="4444FF">*</font><font color="#2040a0">buf</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font> <font color="#444444">/* buffer to store generated SPF header */</font>
83
84 <font color="#2040a0">peer_info_t</font> <font color="4444FF">*</font><font color="#2040a0">pinfo</font> <font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">;</font> <font color="#444444">/* libSPF peer_info structure */</font>
85
86 <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">argc</font> <font color="4444FF">&lt;</font><font color="4444FF">=</font> <font color="#FF0000">1</font><font color="4444FF">)</font>
87 <font color="4444FF"><strong>{</strong></font>
88 <font color="#2040a0">SPF_usage</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
89
90 <strong>return</strong><font color="4444FF">(</font><font color="#2040a0">SPF_FALSE</font><font color="4444FF">)</font><font color="4444FF">;</font>
91 <font color="4444FF"><strong>}</strong></font>
92
93 <strong>for</strong> <font color="4444FF">(</font><font color="#2040a0">i</font> <font color="4444FF">=</font> <font color="#FF0000">1</font><font color="4444FF">;</font> <font color="#2040a0">i</font> <font color="4444FF">&lt;</font> <font color="#2040a0">argc</font><font color="4444FF">;</font> <font color="#2040a0">i</font><font color="4444FF">+</font><font color="4444FF">+</font><font color="4444FF">)</font>
94 <font color="4444FF"><strong>{</strong></font>
95 <font color="#2040a0">tmp</font> <font color="4444FF">=</font> <font color="#2040a0">argv</font><font color="4444FF">[</font><font color="#2040a0">i</font><font color="4444FF">]</font><font color="4444FF">;</font>
96
97 <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">*</font><font color="#2040a0">tmp</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#008000">'-'</font><font color="4444FF">)</font>
98 <font color="4444FF"><strong>{</strong></font>
99 <font color="#2040a0">margv</font> <font color="4444FF">=</font> <font color="4444FF">(</font><font color="#2040a0">tmp</font> <font color="4444FF">+</font> <font color="#FF0000">3</font><font color="4444FF">)</font><font color="4444FF">;</font>
100
101 <strong>switch</strong> <font color="4444FF">(</font><font color="4444FF">*</font><font color="4444FF">(</font><font color="#2040a0">tmp</font> <font color="4444FF">+</font> <font color="#FF0000">1</font><font color="4444FF">)</font><font color="4444FF">)</font>
102 <font color="4444FF"><strong>{</strong></font>
103 <font color="#444444">/* best guess */</font>
104 <strong>case</strong> <font color="#008000">'b'</font> <font color="4444FF">:</font>
105 <font color="4444FF"><strong>{</strong></font>
106 <font color="#2040a0">use_guess</font> <font color="4444FF">=</font> <font color="#2040a0">atoi</font><font color="4444FF">(</font><font color="#2040a0">margv</font><font color="4444FF">)</font><font color="4444FF">;</font>
107
108 <strong>break</strong><font color="4444FF">;</font>
109 <font color="4444FF"><strong>}</strong></font> <font color="#444444">/* 'b' */</font>
110
111 <font color="#444444">/* debug */</font>
112 <strong>case</strong> <font color="#008000">'d'</font> <font color="4444FF">:</font>
113 <font color="4444FF"><strong>{</strong></font>
114 <font color="#2040a0">confg</font>.<font color="#2040a0">level</font> <font color="4444FF">=</font> <font color="#2040a0">atoi</font><font color="4444FF">(</font><font color="#2040a0">margv</font><font color="4444FF">)</font><font color="4444FF">;</font>
115
116 <strong>break</strong><font color="4444FF">;</font>
117 <font color="4444FF"><strong>}</strong></font> <font color="#444444">/* 'd' */</font>
118
119 <font color="#444444">/* explanation */</font>
120 <strong>case</strong> <font color="#008000">'e'</font> <font color="4444FF">:</font>
121 <font color="4444FF"><strong>{</strong></font>
122 <font color="#2040a0">use_explain</font> <font color="4444FF">=</font> <font color="#2040a0">atoi</font><font color="4444FF">(</font><font color="#2040a0">margv</font><font color="4444FF">)</font><font color="4444FF">;</font>
123
124 <strong>break</strong><font color="4444FF">;</font>
125 <font color="4444FF"><strong>}</strong></font> <font color="#444444">/* 'e' */</font>
126
127 <font color="#444444">/* RFC2821 HELO */</font>
128 <strong>case</strong> <font color="#008000">'h'</font> <font color="4444FF">:</font>
129 <font color="4444FF"><strong>{</strong></font>
130 <font color="#2040a0">helo</font> <font color="4444FF">=</font> <font color="#2040a0">strdup</font><font color="4444FF">(</font><font color="#2040a0">margv</font><font color="4444FF">)</font><font color="4444FF">;</font>
131
132 <strong>break</strong><font color="4444FF">;</font>
133 <font color="4444FF"><strong>}</strong></font> <font color="#444444">/* 'h' */</font>
134
135 <font color="#444444">/* ip address */</font>
136 <strong>case</strong> <font color="#008000">'i'</font> <font color="4444FF">:</font>
137 <font color="4444FF"><strong>{</strong></font>
138 <font color="#2040a0">ip</font> <font color="4444FF">=</font> <font color="#2040a0">strdup</font><font color="4444FF">(</font><font color="#2040a0">margv</font><font color="4444FF">)</font><font color="4444FF">;</font>
139
140 <strong>break</strong><font color="4444FF">;</font>
141 <font color="4444FF"><strong>}</strong></font> <font color="#444444">/* 'i' */</font>
142
143 <font color="#444444">/* source email address */</font>
144 <strong>case</strong> <font color="#008000">'s'</font> <font color="4444FF">:</font>
145 <font color="4444FF"><strong>{</strong></font>
146 <font color="#2040a0">address</font> <font color="4444FF">=</font> <font color="#2040a0">strdup</font><font color="4444FF">(</font><font color="#2040a0">margv</font><font color="4444FF">)</font><font color="4444FF">;</font>
147
148 <strong>break</strong><font color="4444FF">;</font>
149 <font color="4444FF"><strong>}</strong></font> <font color="#444444">/* 's' */</font>
150
151 <font color="#444444">/* trusted forwarder */</font>
152 <strong>case</strong> <font color="#008000">'t'</font> <font color="4444FF">:</font>
153 <font color="4444FF"><strong>{</strong></font>
154 <font color="#2040a0">use_trusted</font> <font color="4444FF">=</font> <font color="#2040a0">atoi</font><font color="4444FF">(</font><font color="#2040a0">margv</font><font color="4444FF">)</font><font color="4444FF">;</font>
155
156 <strong>break</strong><font color="4444FF">;</font>
157 <font color="4444FF"><strong>}</strong></font> <font color="#444444">/* 't' */</font>
158
159 <font color="#444444">/* version */</font>
160 <strong>case</strong> <font color="#008000">'v'</font> <font color="4444FF">:</font>
161 <font color="4444FF"><strong>{</strong></font>
162 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;SPF Query Tool v%s - James Couzens &lt;jcouzens@codeshare.ca&gt;<font color="#77dd77">\n</font><font color="#77dd77">\n</font>&quot;</font>,
163 <font color="#2040a0">SPFQTOOL_VERSION</font><font color="4444FF">)</font><font color="4444FF">;</font>
164
165 <strong>return</strong><font color="4444FF">(</font><font color="#FF0000">0</font><font color="4444FF">)</font><font color="4444FF">;</font>
166 <font color="4444FF"><strong>}</strong></font> <font color="#444444">/* 'v' */</font>
167
168 <font color="#444444">/* test mode */</font>
169 <strong>case</strong> <font color="#008000">'z'</font> <font color="4444FF">:</font>
170 <font color="4444FF"><strong>{</strong></font>
171 <font color="#2040a0">test_mode</font> <font color="4444FF">=</font> <font color="#2040a0">SPF_TRUE</font><font color="4444FF">;</font>
172
173 <strong>break</strong><font color="4444FF">;</font>
174 <font color="4444FF"><strong>}</strong></font> <font color="#444444">/* 'z' */</font>
175
176 <strong>default</strong><font color="4444FF">:</font>
177 <font color="4444FF"><strong>{</strong></font>
178 <strong>break</strong><font color="4444FF">;</font>
179 <font color="4444FF"><strong>}</strong></font> <font color="#444444">/* default */</font>
180 <font color="4444FF"><strong>}</strong></font>
181 <font color="4444FF"><strong>}</strong></font>
182 <font color="4444FF"><strong>}</strong></font> <font color="#444444">/* for */</font>
183
184 <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">ip</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">)</font>
185 <font color="4444FF"><strong>{</strong></font>
186 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;You need to specify an IP Address to test against<font color="#77dd77">\n</font><font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
187
188 <font color="#2040a0">SPF_usage</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
189
190 <font color="#2040a0">free</font><font color="4444FF">(</font><font color="#2040a0">address</font><font color="4444FF">)</font><font color="4444FF">;</font>
191
192 <strong>return</strong><font color="4444FF">(</font><font color="#2040a0">SPF_FALSE</font><font color="4444FF">)</font><font color="4444FF">;</font>
193 <font color="4444FF"><strong>}</strong></font>
194 <strong>else</strong> <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">address</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">)</font>
195 <font color="4444FF"><strong>{</strong></font>
196 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;You need to specify a from email address<font color="#77dd77">\n</font><font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
197
198 <font color="#2040a0">SPF_usage</font><font color="4444FF">(</font><font color="4444FF">)</font><font color="4444FF">;</font>
199
200 <font color="#2040a0">free</font><font color="4444FF">(</font><font color="#2040a0">ip</font><font color="4444FF">)</font><font color="4444FF">;</font>
201
202 <strong>return</strong><font color="4444FF">(</font><font color="#2040a0">SPF_FALSE</font><font color="4444FF">)</font><font color="4444FF">;</font>
203 <font color="4444FF"><strong>}</strong></font>
204 <strong>else</strong> <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">helo</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">)</font>
205 <font color="4444FF"><strong>{</strong></font>
206 <font color="#2040a0">helo</font> <font color="4444FF">=</font> <font color="#2040a0">strdup</font><font color="4444FF">(</font><font color="#2040a0">HELO_HOST</font><font color="4444FF">)</font><font color="4444FF">;</font>
207
208 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;You didn't give me a helo host, using (%s)<font color="#77dd77">\n</font>&quot;</font>, <font color="#2040a0">helo</font><font color="4444FF">)</font><font color="4444FF">;</font>
209 <font color="4444FF"><strong>}</strong></font>
210
211 <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">confg</font>.<font color="#2040a0">level</font> <font color="4444FF">&gt;</font><font color="4444FF">=</font> <font color="#FF0000">1</font><font color="4444FF">)</font>
212 <font color="4444FF"><strong>{</strong></font>
213 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;SPF Query Tool v%s - James Couzens &lt;jcouzens@codeshare.ca&gt;<font color="#77dd77">\n</font>&quot;</font>,
214 <font color="#2040a0">SPFQTOOL_VERSION</font><font color="4444FF">)</font><font color="4444FF">;</font>
215
216 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;[DEBUG]: Debugging level: %u<font color="#77dd77">\n</font>&quot;</font>, <font color="#2040a0">confg</font>.<font color="#2040a0">level</font><font color="4444FF">)</font><font color="4444FF">;</font>
217 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;[DEBUG]: RFC2821 Mail From: %s<font color="#77dd77">\n</font>&quot;</font>, <font color="#2040a0">address</font><font color="4444FF">)</font><font color="4444FF">;</font>
218 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;[DEBUG]: RFC2821 HELO: %s<font color="#77dd77">\n</font>&quot;</font>, <font color="#2040a0">helo</font><font color="4444FF">)</font><font color="4444FF">;</font>
219 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;[DEBUG]: Purported address: %s<font color="#77dd77">\n</font>&quot;</font>, <font color="#2040a0">ip</font><font color="4444FF">)</font><font color="4444FF">;</font>
220
221 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;[DEBUG]: SPF Explanation: %s<font color="#77dd77">\n</font>&quot;</font>,
222 <font color="#2040a0">use_explain</font> ? <font color="#008000">&quot;Enabled&quot;</font> <font color="4444FF">:</font> <font color="#008000">&quot;Disabled&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
223
224 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;[DEBUG]: Trusted Forwarder: %s<font color="#77dd77">\n</font>&quot;</font>,
225 <font color="#2040a0">use_trusted</font> ? <font color="#008000">&quot;Enabled&quot;</font> <font color="4444FF">:</font> <font color="#008000">&quot;Disabled&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
226
227 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;[DEBUG]: Best Guess: %s<font color="#77dd77">\n</font>&quot;</font>,
228 <font color="#2040a0">use_guess</font> ? <font color="#008000">&quot;Enabled&quot;</font> <font color="4444FF">:</font> <font color="#008000">&quot;Disabled&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
229
230 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
231 <font color="4444FF"><strong>}</strong></font>
232
233 <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">(</font><font color="#2040a0">pinfo</font> <font color="4444FF">=</font> <font color="#2040a0">SPF_init</font><font color="4444FF">(</font><font color="#2040a0">helo</font>, <font color="#2040a0">ip</font>, <font color="#2040a0">NULL</font>, <font color="#2040a0">NULL</font>, <font color="#2040a0">NULL</font>,
234 <font color="#2040a0">use_trusted</font>, <font color="#2040a0">use_guess</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">)</font>
235 <font color="4444FF"><strong>{</strong></font>
236 <font color="#444444">/* perform fake HELO */</font>
237 <font color="#2040a0">SPF_smtp_helo</font><font color="4444FF">(</font><font color="#2040a0">pinfo</font>, <font color="#2040a0">helo</font><font color="4444FF">)</font><font color="4444FF">;</font>
238
239 <font color="#444444">/* perform fake MAIL FROM */</font>
240 <font color="#2040a0">SPF_smtp_from</font><font color="4444FF">(</font><font color="#2040a0">pinfo</font>, <font color="#2040a0">address</font><font color="4444FF">)</font><font color="4444FF">;</font>
241
242 <font color="#444444">/* assign and perform SPF parse */</font>
243 <font color="#2040a0">res</font> <font color="4444FF">=</font> <font color="#2040a0">pinfo</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">RES</font> <font color="4444FF">=</font> <font color="#2040a0">SPF_policy_main</font><font color="4444FF">(</font><font color="#2040a0">pinfo</font><font color="4444FF">)</font><font color="4444FF">;</font>
244
245 <font color="#444444">/* print the results of the query. The NULL check on the output is
246 * to the benefit of SOLARIS users where printf is unable to handle
247 * a NULL variable. Linux users can omit this check.
248 */</font>
249
250 <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">test_mode</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#2040a0">SPF_TRUE</font><font color="4444FF">)</font>
251 <font color="4444FF"><strong>{</strong></font>
252 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;SPF short result: %s<font color="#77dd77">\n</font>&quot;</font>,
253 <font color="#2040a0">pinfo</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">rs</font> ? <font color="#2040a0">pinfo</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">rs</font> <font color="4444FF">:</font> <font color="#008000">&quot;NULL&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
254
255 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;SPF verbose result: %s<font color="#77dd77">\n</font>&quot;</font>,
256 <font color="#2040a0">pinfo</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">error</font> ? <font color="#2040a0">pinfo</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">error</font> <font color="4444FF">:</font> <font color="#008000">&quot;NULL&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
257 <font color="4444FF"><strong>}</strong></font>
258 <strong>else</strong>
259 <font color="4444FF"><strong>{</strong></font>
260 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;%s<font color="#77dd77">\n</font>%s<font color="#77dd77">\n</font>%s<font color="#77dd77">\n</font>&quot;</font>,
261 <font color="#2040a0">pinfo</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">rs</font> ? <font color="#2040a0">pinfo</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">rs</font> <font color="4444FF">:</font> <font color="#008000">&quot;NULL&quot;</font>,
262 <font color="#2040a0">pinfo</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">error</font> ? <font color="#2040a0">pinfo</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">error</font> <font color="4444FF">:</font> <font color="#008000">&quot;NULL&quot;</font>,
263 <font color="#2040a0">pinfo</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">explain</font> ? <font color="#2040a0">pinfo</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">explain</font> <font color="4444FF">:</font> <font color="#008000">&quot;NULL&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
264 <font color="4444FF"><strong>}</strong></font>
265
266 <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">use_explain</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">SPF_TRUE</font><font color="4444FF">)</font>
267 <font color="4444FF"><strong>{</strong></font>
268 <font color="#2040a0">buf</font> <font color="4444FF">=</font> <font color="#2040a0">SPF_get_explain</font><font color="4444FF">(</font><font color="#2040a0">pinfo</font><font color="4444FF">)</font><font color="4444FF">;</font>
269
270 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;SPF explanation: %s<font color="#77dd77">\n</font>&quot;</font>,
271 <font color="#2040a0">pinfo</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">explain</font> ? <font color="#2040a0">pinfo</font><font color="4444FF">-</font><font color="4444FF">&gt;</font><font color="#2040a0">explain</font> <font color="4444FF">:</font> <font color="#008000">&quot;NULL&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
272
273 <font color="#2040a0">free</font><font color="4444FF">(</font><font color="#2040a0">buf</font><font color="4444FF">)</font><font color="4444FF">;</font>
274 <font color="4444FF"><strong>}</strong></font>
275
276 <font color="#444444">/* for the tests we need to be silent :-) */</font>
277 <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">test_mode</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#2040a0">SPF_TRUE</font><font color="4444FF">)</font>
278 <font color="4444FF"><strong>{</strong></font>
279 <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">use_trusted</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">SPF_TRUE</font><font color="4444FF">)</font>
280 <font color="4444FF"><strong>{</strong></font>
281 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;Trusted Forwarder: Attempted.<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
282 <font color="4444FF"><strong>}</strong></font>
283
284 <strong>if</strong> <font color="4444FF">(</font><font color="#2040a0">use_guess</font> <font color="4444FF">=</font><font color="4444FF">=</font> <font color="#2040a0">SPF_TRUE</font><font color="4444FF">)</font>
285 <font color="4444FF"><strong>{</strong></font>
286 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;Best Guess: Attempted.<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
287 <font color="4444FF"><strong>}</strong></font>
288
289 <strong>if</strong> <font color="4444FF">(</font><font color="4444FF">(</font><font color="#2040a0">buf</font> <font color="4444FF">=</font> <font color="#2040a0">SPF_build_header</font><font color="4444FF">(</font><font color="#2040a0">pinfo</font><font color="4444FF">)</font><font color="4444FF">)</font> <font color="4444FF">!</font><font color="4444FF">=</font> <font color="#2040a0">NULL</font><font color="4444FF">)</font>
290 <font color="4444FF"><strong>{</strong></font>
291 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;RFC2822 header: %s<font color="#77dd77">\n</font>&quot;</font>, <font color="#2040a0">buf</font><font color="4444FF">)</font><font color="4444FF">;</font>
292 <font color="#2040a0">free</font><font color="4444FF">(</font><font color="#2040a0">buf</font><font color="4444FF">)</font><font color="4444FF">;</font>
293 <font color="4444FF"><strong>}</strong></font>
294 <font color="4444FF"><strong>}</strong></font>
295
296 <font color="#444444">/* close SPF session (free memory associated with parse) */</font>
297 <font color="#2040a0">SPF_close</font><font color="4444FF">(</font><font color="#2040a0">pinfo</font><font color="4444FF">)</font><font color="4444FF">;</font>
298 <font color="4444FF"><strong>}</strong></font>
299
300 <font color="#2040a0">free</font><font color="4444FF">(</font><font color="#2040a0">ip</font><font color="4444FF">)</font><font color="4444FF">;</font>
301 <font color="#2040a0">free</font><font color="4444FF">(</font><font color="#2040a0">address</font><font color="4444FF">)</font><font color="4444FF">;</font>
302 <font color="#2040a0">free</font><font color="4444FF">(</font><font color="#2040a0">helo</font><font color="4444FF">)</font><font color="4444FF">;</font>
303
304 <strong>return</strong><font color="4444FF">(</font><font color="#2040a0">SPF_FALSE</font><font color="4444FF">)</font><font color="4444FF">;</font>
305 <font color="4444FF"><strong>}</strong></font>
306
307
308 <font color="#444444">/* SPF_usage
309 *
310 * Author: James Couzens &lt;jcouzens@6o4.ca&gt;
311 *
312 * Date: 12/25/03
313 * Date: 07/28/04 - Renamed to spfqtool
314 *
315 * Desc:
316 * Displays usage help information when the binary is called with
317 * no arguments.
318 *
319 */</font>
320 <strong>void</strong> <font color="#2040a0">SPF_usage</font><font color="4444FF">(</font><font color="4444FF">)</font>
321 <font color="4444FF"><strong>{</strong></font>
322 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;spfqtool usage:<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
323 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
324 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;spfqtool [b|d|e|i|s|t|h|v]<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
325 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
326 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;-b [0,1] - Enable Best Guess support (True (0) or False (1))<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
327 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;-d [x] - DEBUG where x is a number between 1 and 255<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
328 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;-e [0,1] - Enable SPF explanation (True (0) or False (1))<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
329 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;-h [host] - HELO hostname to test with<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
330 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;-i [addr] - IP Address where the fake connection will come from<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
331 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;-s [email] - What email address to test with<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
332 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;-t [0,1] - Enable Trusted Forwarder support (True (0) or False (1))<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
333 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;-v - Display version string<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
334 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
335 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;Example: ./spfqtool -i 10.0.0.2 -s jcouzens@6o4.ca -h spftools.net<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
336 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
337 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;Minimum required arguments are 'i', and 's'<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
338 <font color="#2040a0">printf</font><font color="4444FF">(</font><font color="#008000">&quot;<font color="#77dd77">\n</font>&quot;</font><font color="4444FF">)</font><font color="4444FF">;</font>
339
340 <strong>return</strong><font color="4444FF">;</font>
341 <font color="4444FF"><strong>}</strong></font>
342
343 <font color="#444444">/* end spfqtool.c */</font>
344
345 </pre>
346 </body>
347 </html>