xref: /freebsd/contrib/sendmail/libmilter/docs/api.html (revision e2c0e292e8a7ca00ba99bcfccc9e637f45c3e8b1)
1d0cef73dSGregory Neil Shapiro<HTML>
2d0cef73dSGregory Neil Shapiro<HEAD><TITLE>Milter API</TITLE></HEAD>
3d0cef73dSGregory Neil Shapiro<BODY>
4e92d3f3fSGregory Neil Shapiro<!--
54313cc83SGregory Neil Shapiro$Id: api.html,v 1.39 2013-11-22 20:51:39 ca Exp $
6e92d3f3fSGregory Neil Shapiro-->
7d0cef73dSGregory Neil Shapiro<H1>Milter API</H1>
840266059SGregory Neil Shapiro
9d0cef73dSGregory Neil Shapiro<H2>Contents</H2>
10d0cef73dSGregory Neil Shapiro<UL>
11d0cef73dSGregory Neil Shapiro    <LI><A HREF="#LibraryControlFunctions">Library Control Functions</A>
12d0cef73dSGregory Neil Shapiro    <LI><A HREF="#DataAccessFunctions">Data Access Functions</A>
13d0cef73dSGregory Neil Shapiro    <LI><A HREF="#MessageModificationFunctions">Message Modification Functions</A>
14d0cef73dSGregory Neil Shapiro    <LI><A HREF="#Callbacks">Callbacks</A>
15d0cef73dSGregory Neil Shapiro    <LI><A HREF="#Miscellaneous">Miscellaneous</A>
16d0cef73dSGregory Neil Shapiro</UL>
1740266059SGregory Neil Shapiro
18d0cef73dSGregory Neil Shapiro<H2><A NAME="LibraryControlFunctions">Library Control Functions</A></H2>
1940266059SGregory Neil Shapiro
20d0cef73dSGregory Neil ShapiroBefore handing control to libmilter (by calling
21d0cef73dSGregory Neil Shapiro<A HREF="smfi_main.html">smfi_main</A>), a filter may call the following
22d0cef73dSGregory Neil Shapirofunctions to set libmilter parameters.
23d0cef73dSGregory Neil ShapiroIn particular, the filter must call
24d0cef73dSGregory Neil Shapiro<A HREF="smfi_register.html">smfi_register</A> to register its callbacks.
25d0cef73dSGregory Neil ShapiroEach function will return either MI_SUCCESS or MI_FAILURE to
2640266059SGregory Neil Shapiroindicate the status of the operation.
27d0cef73dSGregory Neil Shapiro
28d0cef73dSGregory Neil Shapiro<P>
29*5b0945b5SGregory Neil ShapiroNone of these functions communicate with the MTA.
30*5b0945b5SGregory Neil ShapiroAll alter the library's state, some of which
31*5b0945b5SGregory Neil Shapirois communicated to the MTA inside
32d0cef73dSGregory Neil Shapiro<A HREF="smfi_main.html">smfi_main</A>.
3340266059SGregory Neil Shapiro
34d0cef73dSGregory Neil Shapiro<P>
35d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH></TR>
36e92d3f3fSGregory Neil Shapiro
37d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_opensocket.html">smfi_opensocket</A></TD><TD>Try to create the interface socket.</TD></TR>
3840266059SGregory Neil Shapiro
39d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_register.html">smfi_register</A></TD><TD>Register a filter.</TD></TR>
4040266059SGregory Neil Shapiro
41d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_setconn.html">smfi_setconn</A></TD><TD>Specify socket to use.</TD></TR>
4240266059SGregory Neil Shapiro
43d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_settimeout.html">smfi_settimeout</A></TD><TD>Set timeout.</TD></TR>
44e92d3f3fSGregory Neil Shapiro
45d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_setbacklog.html">smfi_setbacklog</A></TD><TD>Define the incoming <CODE>listen(2)</CODE> queue size.</TD></TR>
46e92d3f3fSGregory Neil Shapiro
47d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_setdbg.html">smfi_setdbg</A></TD><TD>Set the milter library debugging (tracing) level.</TD></TR>
48e92d3f3fSGregory Neil Shapiro
49d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_stop.html">smfi_stop</A></TD><TD>Cause an orderly shutdown.</TD></TR>
5040266059SGregory Neil Shapiro
51d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_main.html">smfi_main</A></TD><TD>Hand control to libmilter.</TD></TR>
5240266059SGregory Neil Shapiro
53d0cef73dSGregory Neil Shapiro</TABLE>
54d0cef73dSGregory Neil Shapiro
55d0cef73dSGregory Neil Shapiro<H2><A NAME="DataAccessFunctions">Data Access Functions</A></H2>
5640266059SGregory Neil Shapiro
5740266059SGregory Neil ShapiroThe following functions may be called from within the filter-defined callbacks
5840266059SGregory Neil Shapiroto access information about the current connection or message.
59d0cef73dSGregory Neil Shapiro<P>
60d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR bgcolor="#dddddd"><TH>Function</TH><TH>Description</TH></TR>
61d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_getsymval.html">smfi_getsymval</A></TD><TD>Return the value
62d0cef73dSGregory Neil Shapiroof a symbol.</TD></TR>
6340266059SGregory Neil Shapiro
64d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_getpriv.html">smfi_getpriv</A></TD><TD>Get the private data
65d0cef73dSGregory Neil Shapiropointer.</TD></TR>
6640266059SGregory Neil Shapiro
67d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_setpriv.html">smfi_setpriv</A></TD><TD>Set the private data
68d0cef73dSGregory Neil Shapiropointer.</TD></TR>
6940266059SGregory Neil Shapiro
70d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_setreply.html">smfi_setreply</A></TD><TD>Set the specific
71d0cef73dSGregory Neil Shapiroreply code to be used.</TD></TR>
7240266059SGregory Neil Shapiro
73d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_setmlreply.html">smfi_setmlreply</A></TD><TD>Set the
74d0cef73dSGregory Neil Shapirospecific multi-line reply to be used.</TD></TR>
75e92d3f3fSGregory Neil Shapiro
76d0cef73dSGregory Neil Shapiro</TABLE>
7740266059SGregory Neil Shapiro
78d0cef73dSGregory Neil Shapiro<H2><A NAME="MessageModificationFunctions">Message Modification Functions</A></H2>
7940266059SGregory Neil Shapiro
8040266059SGregory Neil ShapiroThe following functions change a message's contents and attributes.
81d0cef73dSGregory Neil Shapiro<EM>They may only be called in <A HREF="xxfi_eom.html">xxfi_eom</A></EM>.
8240266059SGregory Neil ShapiroAll of these functions may invoke additional communication with the MTA.
8340266059SGregory Neil ShapiroThey will return either MI_SUCCESS or MI_FAILURE to indicate the status of
84*5b0945b5SGregory Neil Shapirothe operation.
85*5b0945b5SGregory Neil ShapiroMessage data (senders, recipients, headers, body chunks)
869bd497b8SGregory Neil Shapiropassed to these functions via parameters is copied and does not need to be
879bd497b8SGregory Neil Shapiropreserved (i.e., allocated memory can be freed).
8840266059SGregory Neil Shapiro
89d0cef73dSGregory Neil Shapiro<P>
90*5b0945b5SGregory Neil ShapiroA filter which might call a message modification function
91*5b0945b5SGregory Neil Shapiromust set the appropriate flag
92*5b0945b5SGregory Neil Shapiro(<A HREF="#SMFIF">listed below</A>),
93*5b0945b5SGregory Neil Shapiroeither
94*5b0945b5SGregory Neil Shapiroin the description passed to <A HREF="smfi_register.html">smfi_register</A>
95*5b0945b5SGregory Neil Shapiroor via <A HREF="xxfi_negotiate.html">xxfi_negotiate</A>.
96*5b0945b5SGregory Neil ShapiroFailure to do so will cause the MTA to treat a call to the function
97*5b0945b5SGregory Neil Shapiroas a failure of the filter, terminating its connection.
9840266059SGregory Neil Shapiro
99d0cef73dSGregory Neil Shapiro<P>
10040266059SGregory Neil ShapiroNote that the status returned indicates only whether or not the
10140266059SGregory Neil Shapirofilter's message was successfully sent to the MTA, not whether or not
102*5b0945b5SGregory Neil Shapirothe MTA performed the requested operation.
103*5b0945b5SGregory Neil ShapiroFor example,
104d0cef73dSGregory Neil Shapiro<A HREF="smfi_addheader.html">smfi_addheader</A>, when called with an
10540266059SGregory Neil Shapiroillegal header name, will return MI_SUCCESS even though the MTA may
10640266059SGregory Neil Shapirolater refuse to add the illegal header.
107d0cef73dSGregory Neil Shapiro<P>
108*5b0945b5SGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH><TH><A NAME="SMFIF">SMFIF_* flag</A></TH></TR>
109d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_addheader.html">smfi_addheader</A></TD><TD>Add a header to
110d0cef73dSGregory Neil Shapirothe message.</TD><TD>SMFIF_ADDHDRS</TD></TR>
11140266059SGregory Neil Shapiro
112d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_chgheader.html">smfi_chgheader</A></TD><TD>Change or delete a header.</TD><TD>SMFIF_CHGHDRS</TD></TR>
11340266059SGregory Neil Shapiro
114d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_insheader.html">smfi_insheader</A></TD><TD>Insert a
115d0cef73dSGregory Neil Shapiroheader into the message.</TD><TD>SMFIF_ADDHDRS</TD></TR>
116e92d3f3fSGregory Neil Shapiro
117d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_chgfrom.html">smfi_chgfrom</A></TD><TD>Change the
118d0cef73dSGregory Neil Shapiroenvelope sender address.</TD><TD>SMFIF_CHGFROM</TD></TR>
11940266059SGregory Neil Shapiro
120d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_addrcpt.html">smfi_addrcpt</A></TD><TD>Add a recipient to
121d0cef73dSGregory Neil Shapirothe envelope.</TD><TD>SMFIF_ADDRCPT</TD></TR>
12240266059SGregory Neil Shapiro
123d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_addrcpt_par.html">smfi_addrcpt_par</A></TD><TD>Add
124d0cef73dSGregory Neil Shapiroa recipient including ESMTP parameter to the envelope.
125d0cef73dSGregory Neil Shapiro</TD><TD>SMFIF_ADDRCPT_PAR</TD></TR>
12640266059SGregory Neil Shapiro
127d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_delrcpt.html">smfi_delrcpt</A></TD><TD>Delete a recipient
128d0cef73dSGregory Neil Shapirofrom the envelope.</TD><TD>SMFIF_DELRCPT</TD></TR>
12940266059SGregory Neil Shapiro
130d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_replacebody.html">smfi_replacebody</A></TD><TD>Replace the
131d0cef73dSGregory Neil Shapirobody of the message.</TD><TD>SMFIF_CHGBODY</TD></TR>
132d0cef73dSGregory Neil Shapiro
133d0cef73dSGregory Neil Shapiro</TABLE>
134d0cef73dSGregory Neil Shapiro
135d0cef73dSGregory Neil Shapiro<H2>Other Message Handling Functions</H2>
136e92d3f3fSGregory Neil Shapiro
137e92d3f3fSGregory Neil ShapiroThe following functions provide special case handling instructions for
138e92d3f3fSGregory Neil Shapiromilter or the MTA, without altering the content or status of the message.
139d0cef73dSGregory Neil Shapiro<EM>They too may only be called in <A HREF="xxfi_eom.html">xxfi_eom</A></EM>.
140e92d3f3fSGregory Neil ShapiroAll of these functions may invoke additional communication with the MTA.
141e92d3f3fSGregory Neil ShapiroThey will return either MI_SUCCESS or MI_FAILURE to indicate the status of
142e92d3f3fSGregory Neil Shapirothe operation.
143e92d3f3fSGregory Neil Shapiro
144d0cef73dSGregory Neil Shapiro<P>
145e92d3f3fSGregory Neil ShapiroNote that the status returned indicates only whether or not the
146e92d3f3fSGregory Neil Shapirofilter's message was successfully sent to the MTA, not whether or not
147e92d3f3fSGregory Neil Shapirothe MTA performed the requested operation.
148e92d3f3fSGregory Neil Shapiro
149d0cef73dSGregory Neil Shapiro<P>
150d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH></TR>
151d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_progress.html">smfi_progress</A></TD><TD>Report operation in progress.</TD></TR>
152e92d3f3fSGregory Neil Shapiro
153d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_quarantine.html">smfi_quarantine</A></TD><TD>Quarantine a message.</TD></TR>
154e92d3f3fSGregory Neil Shapiro
155d0cef73dSGregory Neil Shapiro</TABLE>
156e92d3f3fSGregory Neil Shapiro
157d0cef73dSGregory Neil Shapiro<H2><A NAME="Callbacks">Callbacks</A></H2>
15840266059SGregory Neil Shapiro
15940266059SGregory Neil ShapiroThe filter should implement one or more of the following callbacks,
160d0cef73dSGregory Neil Shapirowhich are registered via <A HREF="smfi_register.html">smfi_register</A>:
16140266059SGregory Neil Shapiro
162d0cef73dSGregory Neil Shapiro<P>
163d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH></TR>
16440266059SGregory Neil Shapiro
165d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_connect.html">xxfi_connect</A></TD><TD>connection info</TD></TR>
16640266059SGregory Neil Shapiro
167d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_helo.html">xxfi_helo</A></TD><TD>SMTP HELO/EHLO command</TD></TR>
16840266059SGregory Neil Shapiro
169d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_envfrom.html">xxfi_envfrom</A></TD><TD>envelope sender</TD></TR>
17040266059SGregory Neil Shapiro
171d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_envrcpt.html">xxfi_envrcpt</A></TD><TD>envelope recipient</TD></TR>
17240266059SGregory Neil Shapiro
173d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_data.html">xxfi_data</A></TD><TD>DATA command</TD></TR>
17440266059SGregory Neil Shapiro
175d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_unknown.html">xxfi_unknown</A></TD><TD>Unknown SMTP command</TD></TR>
17640266059SGregory Neil Shapiro
177d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_header.html">xxfi_header</A></TD><TD>header</TD></TR>
17840266059SGregory Neil Shapiro
179d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_eoh.html">xxfi_eoh</A></TD><TD>end of header</TD></TR>
18040266059SGregory Neil Shapiro
181d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_body.html">xxfi_body</A></TD><TD>body block</TD></TR>
18240266059SGregory Neil Shapiro
183d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_eom.html">xxfi_eom</A></TD><TD>end of message</TD></TR>
18440266059SGregory Neil Shapiro
185d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_abort.html">xxfi_abort</A></TD><TD>message aborted</TD></TR>
186d0cef73dSGregory Neil Shapiro
187d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_close.html">xxfi_close</A></TD><TD>connection cleanup</TD></TR>
188d0cef73dSGregory Neil Shapiro
189*5b0945b5SGregory Neil Shapiro<TR><TD><A HREF="xxfi_negotiate.html">xxfi_negotiate</A></TD><TD>option negotiation</TD></TR>
190d0cef73dSGregory Neil Shapiro
191d0cef73dSGregory Neil Shapiro</TABLE>
192d0cef73dSGregory Neil Shapiro
193d0cef73dSGregory Neil Shapiro<P>
19440266059SGregory Neil ShapiroThe above callbacks should all return one of the following return values,
195*5b0945b5SGregory Neil Shapirohaving the indicated meanings.
196*5b0945b5SGregory Neil ShapiroAny return other than one of the below values constitutes an error,
197*5b0945b5SGregory Neil Shapiroand will cause sendmail to terminate its connection to the offending filter.
19840266059SGregory Neil Shapiro
199d0cef73dSGregory Neil Shapiro<P><A NAME="conn-spec">Milter</A> distinguishes between recipient-,
200*5b0945b5SGregory Neil Shapiromessage-, and connection-oriented routines.
201*5b0945b5SGregory Neil ShapiroRecipient-oriented callbacks may affect the processing
202*5b0945b5SGregory Neil Shapiroof a single message recipient;
203*5b0945b5SGregory Neil Shapiromessage-oriented callbacks, a single message;
204*5b0945b5SGregory Neil Shapiroconnection-oriented callbacks, an entire connection
205*5b0945b5SGregory Neil Shapiro(during which multiple messages may be delivered
206*5b0945b5SGregory Neil Shapiroto multiple sets of recipients).
207d0cef73dSGregory Neil Shapiro<A HREF="xxfi_envrcpt.html">xxfi_envrcpt</A> is recipient-oriented.
208*5b0945b5SGregory Neil Shapiro<A HREF="xxfi_negotiate.html">xxfi_negotiate</A>,
209d0cef73dSGregory Neil Shapiro<A HREF="xxfi_connect.html">xxfi_connect</A>,
210d0cef73dSGregory Neil Shapiro<A HREF="xxfi_helo.html">xxfi_helo</A> and
211*5b0945b5SGregory Neil Shapiro<A HREF="xxfi_close.html">xxfi_close</A> are connection-oriented.
212*5b0945b5SGregory Neil ShapiroAll other callbacks are message-oriented.
21340266059SGregory Neil Shapiro
214d0cef73dSGregory Neil Shapiro<P>
215d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2>
216d0cef73dSGregory Neil Shapiro  <TR BGCOLOR="#dddddd"><TH>Return value</TH><TH>Description</TH></TR>
217d0cef73dSGregory Neil Shapiro  <TR VALIGN="TOP">
218d0cef73dSGregory Neil Shapiro     <TD>SMFIS_CONTINUE</TD>
219d0cef73dSGregory Neil Shapiro     <TD>Continue processing the current connection, message, or recipient.
220d0cef73dSGregory Neil Shapiro     </TD>
221d0cef73dSGregory Neil Shapiro  </TR>
222d0cef73dSGregory Neil Shapiro  <TR VALIGN="TOP">
223d0cef73dSGregory Neil Shapiro     <TD>SMFIS_REJECT</TD>
224d0cef73dSGregory Neil Shapiro     <TD>For a connection-oriented routine, reject this connection; call <A HREF="xxfi_close.html">xxfi_close</A>.<BR>
22540266059SGregory Neil Shapiro        For a message-oriented routine (except
226d0cef73dSGregory Neil Shapiro        <A HREF="xxfi_abort.html">xxfi_abort</A>), reject this message.<BR>
22740266059SGregory Neil Shapiro	For a recipient-oriented routine, reject the current recipient (but continue processing the current message).
228d0cef73dSGregory Neil Shapiro     </TD>
229d0cef73dSGregory Neil Shapiro  </TR>
230d0cef73dSGregory Neil Shapiro  <TR valign="top">
231d0cef73dSGregory Neil Shapiro     <TD>SMFIS_DISCARD</TD>
232d0cef73dSGregory Neil Shapiro     <TD>For a message- or recipient-oriented routine, accept this message, but silently discard it.<BR>
23340266059SGregory Neil Shapiro     SMFIS_DISCARD should not be returned by a connection-oriented routine.
234d0cef73dSGregory Neil Shapiro     </TD>
235d0cef73dSGregory Neil Shapiro  </TR>
236d0cef73dSGregory Neil Shapiro  <TR valign="top">
237d0cef73dSGregory Neil Shapiro     <TD>SMFIS_ACCEPT</TD>
238d0cef73dSGregory Neil Shapiro     <TD>For a connection-oriented routine, accept this connection without further filter processing; call <A HREF="xxfi_close.html">xxfi_close</A>.<BR>
239d0cef73dSGregory Neil Shapiro         For a message- or recipient-oriented routine, accept this message without further filtering.<BR>
240d0cef73dSGregory Neil Shapiro     </TD>
241d0cef73dSGregory Neil Shapiro  </TR>
242d0cef73dSGregory Neil Shapiro  <TR valign="top">
243d0cef73dSGregory Neil Shapiro     <TD>SMFIS_TEMPFAIL</TD>
244d0cef73dSGregory Neil Shapiro     <TD>Return a temporary failure, i.e., the corresponding SMTP command will return an appropriate 4xx status code.
245d0cef73dSGregory Neil Shapiro	 For a message-oriented routine (except <A HREF="xxfi_envfrom.html">xxfi_envfrom</A>), fail for this message.<BR>
246d0cef73dSGregory Neil Shapiro	 For a connection-oriented routine, fail for this connection; call <A HREF="xxfi_close.html">xxfi_close</A>.<BR>
24740266059SGregory Neil Shapiro	 For a recipient-oriented routine, only fail for the current recipient; continue message processing.
248d0cef73dSGregory Neil Shapiro     </TD>
249d0cef73dSGregory Neil Shapiro  </TR>
25040266059SGregory Neil Shapiro
251d0cef73dSGregory Neil Shapiro  <TR valign="top">
252d0cef73dSGregory Neil Shapiro     <TD><A NAME="SMFIS_SKIP">SMFIS_SKIP</A></TD>
253d0cef73dSGregory Neil Shapiro     <TD>Skip further callbacks of the same type in this transaction.
254d0cef73dSGregory Neil Shapiro	Currently this return value is only allowed in
255d0cef73dSGregory Neil Shapiro	<A HREF="xxfi_body.html">xxfi_body()</A>.
256d0cef73dSGregory Neil Shapiro	It can be used if a milter has received sufficiently many
257d0cef73dSGregory Neil Shapiro	body chunks to make a decision, but still wants to invoke
258d0cef73dSGregory Neil Shapiro 	message modification functions that are only allowed to be called from
259d0cef73dSGregory Neil Shapiro	<A HREF="xxfi_eom.html">xxfi_eom()</A>.
260d0cef73dSGregory Neil Shapiro	Note: the milter <EM>must</EM>
261d0cef73dSGregory Neil Shapiro	<A HREF="xxfi_negotiate.html">negotiate</A>
262d0cef73dSGregory Neil Shapiro	this behavior with the MTA, i.e., it must check whether
263d0cef73dSGregory Neil Shapiro	the protocol action
264d0cef73dSGregory Neil Shapiro	<A HREF="xxfi_negotiate.html#SMFIP_SKIP"><CODE>SMFIP_SKIP</CODE></A>
265d0cef73dSGregory Neil Shapiro	is available and if so, the milter must request it.
266d0cef73dSGregory Neil Shapiro     </TD>
267d0cef73dSGregory Neil Shapiro  </TR>
268d0cef73dSGregory Neil Shapiro
269d0cef73dSGregory Neil Shapiro  <TR valign="top">
270d0cef73dSGregory Neil Shapiro     <TD><A NAME="SMFIS_NOREPLY">SMFIS_NOREPLY</A></TD>
271d0cef73dSGregory Neil Shapiro     <TD>Do not send a reply back to the MTA.
272d0cef73dSGregory Neil Shapiro	The milter <EM>must</EM>
273d0cef73dSGregory Neil Shapiro	<A HREF="xxfi_negotiate.html">negotiate</A>
274d0cef73dSGregory Neil Shapiro	this behavior with the MTA, i.e., it must check whether
275d0cef73dSGregory Neil Shapiro	the appropriate protocol action
276d0cef73dSGregory Neil Shapiro	<A HREF="xxfi_negotiate.html#SMFIP_NR_"><CODE>SMFIP_NR_*</CODE></A>
277d0cef73dSGregory Neil Shapiro	is available and if so, the milter must request it.
278d0cef73dSGregory Neil Shapiro	If you set the
279d0cef73dSGregory Neil Shapiro	<A HREF="xxfi_negotiate.html#SMFIP_NR_"><CODE>SMFIP_NR_*</CODE></A>
280d0cef73dSGregory Neil Shapiro	protocol action for a callback, that callback <EM>must</EM>
281d0cef73dSGregory Neil Shapiro	always reply with
282d0cef73dSGregory Neil Shapiro	SMFIS_NOREPLY.
283d0cef73dSGregory Neil Shapiro	Using any other reply code is a violation of the API.
284d0cef73dSGregory Neil Shapiro	If in some cases your callback may return another value
285d0cef73dSGregory Neil Shapiro	(e.g., due to some resource shortages), then you
286d0cef73dSGregory Neil Shapiro	<EM>must not</EM> set
287d0cef73dSGregory Neil Shapiro	<A HREF="xxfi_negotiate.html#SMFIP_NR_"><CODE>SMFIP_NR_*</CODE></A>
288d0cef73dSGregory Neil Shapiro	and you must use
289d0cef73dSGregory Neil Shapiro	SMFIS_CONTINUE as the default return code.
290d0cef73dSGregory Neil Shapiro	(Alternatively you can try to delay reporting the problem to
291d0cef73dSGregory Neil Shapiro	a later callback for which
292d0cef73dSGregory Neil Shapiro	<A HREF="xxfi_negotiate.html#SMFIP_NR_"><CODE>SMFIP_NR_*</CODE></A>
293d0cef73dSGregory Neil Shapiro	is not set.)
294d0cef73dSGregory Neil Shapiro     </TD>
295d0cef73dSGregory Neil Shapiro  </TR>
296d0cef73dSGregory Neil Shapiro
297d0cef73dSGregory Neil Shapiro</TABLE>
298d0cef73dSGregory Neil Shapiro
299d0cef73dSGregory Neil Shapiro<H2><A NAME="Miscellaneous">Miscellaneous</A></H2>
300d0cef73dSGregory Neil Shapiro
301d0cef73dSGregory Neil Shapiro<P>
302d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH></TR>
303d0cef73dSGregory Neil Shapiro
304d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_version.html">smfi_version</A></TD><TD>libmilter (runtime) version info</TD></TR>
305d0cef73dSGregory Neil Shapiro
306d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_setsymlist.html">smfi_setsymlist</A></TD><TD>
307d0cef73dSGregory Neil ShapiroSet the list of macros that the milter wants to receive from the MTA
308d0cef73dSGregory Neil Shapirofor a protocol stage.
309d0cef73dSGregory Neil Shapiro</TD></TR>
310d0cef73dSGregory Neil Shapiro
311d0cef73dSGregory Neil Shapiro</TABLE>
312d0cef73dSGregory Neil Shapiro
313d0cef73dSGregory Neil Shapiro<P>
314d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Constant</TH><TH>Description</TH></TR>
315d0cef73dSGregory Neil Shapiro
316d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_version.html">SMFI_VERSION</A></TD><TD>libmilter (compile time) version info</TD></TR>
317d0cef73dSGregory Neil Shapiro
318d0cef73dSGregory Neil Shapiro</TABLE>
319d0cef73dSGregory Neil Shapiro
320d0cef73dSGregory Neil Shapiro
321d0cef73dSGregory Neil Shapiro<HR SIZE="1">
322d0cef73dSGregory Neil Shapiro<FONT SIZE="-1">
3235dd76dd0SGregory Neil ShapiroCopyright (c) 2000, 2003, 2006, 2009 Proofpoint, Inc. and its suppliers.
32440266059SGregory Neil ShapiroAll rights reserved.
325d0cef73dSGregory Neil Shapiro<BR>
32640266059SGregory Neil ShapiroBy using this file, you agree to the terms and conditions set
3275ef517c0SGregory Neil Shapiroforth in the LICENSE.
328d0cef73dSGregory Neil Shapiro</FONT>
329d0cef73dSGregory Neil Shapiro</BODY>
330d0cef73dSGregory Neil Shapiro</HTML>
331