ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libspf/docs/API/doxygen/html/spfquery_8c-source.html
Revision: 1.1
Committed: Tue Nov 13 00:51:29 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 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2     <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
3     <title>libspf v1.0: spfquery.c Source File</title>
4     <link href="doxygen.css" rel="stylesheet" type="text/css">
5     </head><body>
6     <!-- Generated by Doxygen 1.3.7 -->
7     <div class="qindex"> <form class="search" action="search.php" method="get">
8     <a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <span class="search"><u>S</u>earch&nbsp;for&nbsp;<input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div>
9     <h1>spfquery.c</h1><a href="spfquery_8c.html">Go to the documentation of this file.</a><pre class="fragment"><div>00001 <span class="comment">/* libspf - Sender Policy Framework library</span>
10     00002 <span class="comment">*</span>
11     00003 <span class="comment">* ANSI C implementation of spf-draft-200405.txt</span>
12     00004 <span class="comment">*</span>
13     00005 <span class="comment">* Author: James Couzens &lt;jcouzens@codeshare.ca&gt;</span>
14     00006 <span class="comment">*</span>
15     00007 <span class="comment">* File: spfquery.c</span>
16     00008 <span class="comment">* Desc: SPF Query Tool (an example implementation of libSPF)</span>
17     00009 <span class="comment">*</span>
18     00010 <span class="comment">* License:</span>
19     00011 <span class="comment">*</span>
20     00012 <span class="comment">* The libspf Software License, Version 1.0</span>
21     00013 <span class="comment">*</span>
22     00014 <span class="comment">* Copyright (c) 2004 James Couzens &amp; Sean Comeau All rights</span>
23     00015 <span class="comment">* reserved.</span>
24     00016 <span class="comment">*</span>
25     00017 <span class="comment">* Redistribution and use in source and binary forms, with or without</span>
26     00018 <span class="comment">* modification, are permitted provided that the following conditions</span>
27     00019 <span class="comment">* are met:</span>
28     00020 <span class="comment">*</span>
29     00021 <span class="comment">* 1. Redistributions of source code must retain the above copyright</span>
30     00022 <span class="comment">* notice, this list of conditions and the following disclaimer.</span>
31     00023 <span class="comment">*</span>
32     00024 <span class="comment">* 2. Redistributions in binary form must reproduce the above copyright</span>
33     00025 <span class="comment">* notice, this list of conditions and the following disclaimer in</span>
34     00026 <span class="comment">* the documentation and/or other materials provided with the</span>
35     00027 <span class="comment">* distribution.</span>
36     00028 <span class="comment">*</span>
37     00029 <span class="comment">* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED</span>
38     00030 <span class="comment">* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES</span>
39     00031 <span class="comment">* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE</span>
40     00032 <span class="comment">* DISCLAIMED. IN NO EVENT SHALL THE AUTHORS MAKING USE OF THIS LICESEN</span>
41     00033 <span class="comment">* OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span>
42     00034 <span class="comment">* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span>
43     00035 <span class="comment">* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF</span>
44     00036 <span class="comment">* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND</span>
45     00037 <span class="comment">* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,</span>
46     00038 <span class="comment">* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT</span>
47     00039 <span class="comment">* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
48     00040 <span class="comment">* SUCH DAMAGE.</span>
49     00041 <span class="comment">*</span>
50     00042 <span class="comment">*/</span>
51     00043
52     00044 <span class="preprocessor">#include "<a class="code" href="spfquery_8h.html">spfquery.h</a>"</span>
53     00045
54     00046
55     00047 <span class="comment">/* SPF_usage</span>
56     00048 <span class="comment">*</span>
57     00049 <span class="comment">* Author: James Couzens &lt;jcouzens@6o4.ca&gt;</span>
58     00050 <span class="comment">*</span>
59     00051 <span class="comment">* Date: 07/04/04</span>
60     00052 <span class="comment">*</span>
61     00053 <span class="comment">* Desc:</span>
62     00054 <span class="comment">* Main function, allocates memory and makes calls to the libSPF </span>
63     00055 <span class="comment">* library which parses the "fake" query.</span>
64     00056 <span class="comment">*</span>
65     00057 <span class="comment">*/</span>
66     <a name="l00058"></a><a class="code" href="spfquery_8h.html#a4">00058</a> <span class="keywordtype">int</span> <a class="code" href="spfquery_8h.html#a4">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])
67     00059 {
68     00060 <a class="code" href="spf_8h.html#a35">u_int8_t</a> i = 0; <span class="comment">/* utility */</span>
69     00061 <a class="code" href="spf_8h.html#a35">u_int8_t</a> res = 0; <span class="comment">/* libSPF result code */</span>
70     00062
71     00063 <span class="keywordtype">char</span> *margv = NULL; <span class="comment">/* pointer to current argv element */</span>
72     00064 <span class="keywordtype">char</span> *ip = NULL; <span class="comment">/* ip address to test connecting from */</span>
73     00065 <span class="keywordtype">char</span> *address = NULL; <span class="comment">/* email address to test sending from */</span>
74     00066 <span class="keywordtype">char</span> *helo = NULL; <span class="comment">/* helo hostname to test sending from */</span>
75     00067
76     00068 <span class="keywordtype">char</span> *tmp = NULL; <span class="comment">/* utility pointer */</span>
77     00069
78     00070 <a class="code" href="structpeer__info__s.html">peer_info_t</a> *pinfo = NULL; <span class="comment">/* libSPF peer_info structure */</span>
79     00071
80     00072 <span class="keywordflow">if</span> (argc &lt;= 1)
81     00073 {
82     00074 <a class="code" href="spfquery_8c.html#a1">SPF_usage</a>();
83     00075 <span class="keywordflow">return</span>(<a class="code" href="spf_8h.html#a92a53">FALSE</a>);
84     00076 }
85     00077
86     00078 <span class="keywordflow">for</span> (i = 1; i &lt; argc; i++)
87     00079 {
88     00080 tmp = argv[i];
89     00081
90     00082 <span class="keywordflow">if</span> (*tmp == <span class="charliteral">'-'</span>)
91     00083 {
92     00084 margv = (tmp + 3);
93     00085
94     00086 <span class="keywordflow">switch</span> (*(tmp + 1))
95     00087 {
96     00088 <span class="keywordflow">case</span> <span class="charliteral">'d'</span> :
97     00089 <a class="code" href="main_8c.html#a0">confg</a>.<a class="code" href="structspf__config__s.html#o0">level</a> = atoi(margv);
98     00090 <span class="keywordflow">break</span>;
99     00091 <span class="keywordflow">case</span> <span class="charliteral">'i'</span> :
100     00092 ip = strdup(margv);
101     00093 <span class="keywordflow">break</span>;
102     00094 <span class="keywordflow">case</span> <span class="charliteral">'s'</span> :
103     00095 address = strdup(margv);
104     00096 <span class="keywordflow">break</span>;
105     00097 <span class="keywordflow">case</span> <span class="charliteral">'h'</span> :
106     00098 helo = strdup(margv);
107     00099 <span class="keywordflow">break</span>;
108     00100 }
109     00101 }
110     00102 }
111     00103
112     00104 <span class="keywordflow">if</span> (ip == NULL)
113     00105 {
114     00106 printf(<span class="stringliteral">"You need to specify an IP Address to test against\n\n"</span>);
115     00107 <a class="code" href="spfquery_8c.html#a1">SPF_usage</a>();
116     00108 <span class="keywordflow">return</span>(<a class="code" href="spf_8h.html#a92a53">FALSE</a>);
117     00109 }
118     00110 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (address == NULL)
119     00111 {
120     00112 printf(<span class="stringliteral">"You need to specify a from email address\n\n"</span>);
121     00113 <a class="code" href="spfquery_8c.html#a1">SPF_usage</a>();
122     00114 <span class="keywordflow">return</span>(<a class="code" href="spf_8h.html#a92a53">FALSE</a>);
123     00115 }
124     00116 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (helo == NULL)
125     00117 {
126     00118 helo = strdup(<a class="code" href="spfquery_8h.html#a2">HELO_HOST</a>);
127     00119 printf(<span class="stringliteral">"You didn't give me a helo host, using (%s)\n"</span>, helo);
128     00120 <span class="keywordflow">return</span>(<a class="code" href="spf_8h.html#a92a53">FALSE</a>);
129     00121 }
130     00122
131     00123 <span class="keywordflow">if</span> (<a class="code" href="main_8c.html#a0">confg</a>.<a class="code" href="structspf__config__s.html#o0">level</a> &gt;= 1)
132     00124 {
133     00125 printf(<span class="stringliteral">"SPF Query v%s - James Couzens &lt;jcouzens@codeshare.ca&gt;\n\n"</span>,
134     00126 <a class="code" href="spfquery_8h.html#a1">SPFQUERY_VERSION</a>);
135     00127
136     00128 printf(<span class="stringliteral">"DEBUG: %u\n"</span>, <a class="code" href="main_8c.html#a0">confg</a>.<a class="code" href="structspf__config__s.html#o0">level</a>);
137     00129 printf(<span class="stringliteral">"IP address: %s\n"</span>, ip);
138     00130 printf(<span class="stringliteral">"MAIL FROM: %s\n"</span>, address);
139     00131 printf(<span class="stringliteral">"HELO: %s\n"</span>, helo);
140     00132 }
141     00133
142     00134 <span class="keywordflow">if</span> ((pinfo = <a class="code" href="spf_8h.html#a82">SPF_init</a>(helo, ip, NULL, NULL, NULL, <a class="code" href="spf_8h.html#a92a53">FALSE</a>, <a class="code" href="spf_8h.html#a92a53">FALSE</a>)) != NULL)
143     00135 {
144     00136 <span class="comment">/* perform fake HELO */</span>
145     00137 <a class="code" href="spf_8h.html#a89">SPF_smtp_helo</a>(pinfo, helo);
146     00138
147     00139 <span class="comment">/* perform fake MAIL FROM */</span>
148     00140 <a class="code" href="spf_8h.html#a88">SPF_smtp_from</a>(pinfo, address);
149     00141
150     00142 <span class="comment">/* perform SPF parse */</span>
151     00143 pinfo-&gt;<a class="code" href="structpeer__info__s.html#o3">RES</a> = <a class="code" href="spf_8h.html#a84">SPF_policy_main</a>(pinfo);
152     00144
153     00145 <span class="comment">/* assign result of SPF parse */</span>
154     00146 res = pinfo-&gt;<a class="code" href="structpeer__info__s.html#o3">RES</a>;
155     00147
156     00148 <span class="comment">/* print the results */</span>
157     00149 printf( <span class="stringliteral">"%s\n%s\n%s\n"</span>,
158     00150 pinfo-&gt;<a class="code" href="structpeer__info__s.html#o5">rs</a> ? pinfo-&gt;<a class="code" href="structpeer__info__s.html#o5">rs</a> : <span class="stringliteral">"NULL"</span>,
159     00151 pinfo-&gt;<a class="code" href="structpeer__info__s.html#o26">error</a> ? pinfo-&gt;<a class="code" href="structpeer__info__s.html#o26">error</a> : <span class="stringliteral">"NULL"</span>,
160     00152 pinfo-&gt;<a class="code" href="structpeer__info__s.html#o12">explain</a> ? pinfo-&gt;<a class="code" href="structpeer__info__s.html#o12">explain</a> : <span class="stringliteral">"NULL"</span>);
161     00153
162     00154 <span class="comment">/* close SPF session (free memory associated with parse) */</span>
163     00155 <a class="code" href="spf_8h.html#a83">SPF_close</a>(pinfo);
164     00156
165     00157 }
166     00158
167     00159 free(ip);
168     00160 free(address);
169     00161 free(helo);
170     00162
171     00163 <span class="keywordflow">return</span>(<a class="code" href="spf_8h.html#a92a53">FALSE</a>);
172     00164 }
173     00165
174     00166
175     00167 <span class="comment">/* SPF_usage</span>
176     00168 <span class="comment">*</span>
177     00169 <span class="comment">* Author: James Couzens &lt;jcouzens@6o4.ca&gt;</span>
178     00170 <span class="comment">*</span>
179     00171 <span class="comment">* Date: 12/25/03</span>
180     00172 <span class="comment">*</span>
181     00173 <span class="comment">* Desc:</span>
182     00174 <span class="comment">* Displays usage help information when the binary is called with</span>
183     00175 <span class="comment">* no arguments.</span>
184     00176 <span class="comment">*</span>
185     00177 <span class="comment">*/</span>
186     <a name="l00178"></a><a class="code" href="spfquery_8h.html#a5">00178</a> <span class="keywordtype">void</span> <a class="code" href="spfquery_8c.html#a1">SPF_usage</a>()
187     00179 {
188     00180 printf(<span class="stringliteral">"Usage:\n"</span>);
189     00181 printf(<span class="stringliteral">"\n"</span>);
190     00182 printf(<span class="stringliteral">"spfquery [dish]\n"</span>);
191     00183 printf(<span class="stringliteral">"\n"</span>);
192     00184 printf(<span class="stringliteral">"-d [x] - DEBUG where x is a number between 1 and 255\n"</span>);
193     00185 printf(<span class="stringliteral">"-i [addr] - IP Address where the fake connection will come from\n"</span>);
194     00186 printf(<span class="stringliteral">"-s [email] - What email address to test with\n"</span>);
195     00187 printf(<span class="stringliteral">"-h [host] - HELO hostname to test with\n"</span>);
196     00188 printf(<span class="stringliteral">"\n"</span>);
197     00189 printf(<span class="stringliteral">"spfquery -i 10.0.0.2 -s jcouzens@6o4.ca -h spftools.net\n"</span>);
198     00190
199     00191 <span class="keywordflow">return</span>;
200     00192 }
201     00193
202     00194 <span class="comment">/* end spfquery.c */</span>
203     </div></pre><hr size="1"><address style="align: right;"><small>Generated on Sun Aug 8 11:36:48 2004 for libspf v1.0 by
204     <a href="http://www.doxygen.org/index.html">
205     <img src="doxygen.png" alt="doxygen" align="middle" border=0 ></a> 1.3.7 </small></address>
206     </body>
207     </html>