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, 10 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

# User Rev Content
1 root 1.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>