1d0cef73dSGregory Neil Shapiro<HTML> 2d0cef73dSGregory Neil Shapiro<HEAD><TITLE>Milter API</TITLE></HEAD> 3d0cef73dSGregory Neil Shapiro<BODY> 4e92d3f3fSGregory Neil Shapiro<!-- 5d0cef73dSGregory Neil Shapiro$Id: api.html,v 1.35 2006/11/30 23:09:23 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> 2940266059SGregory Neil ShapiroNone of these functions communicate with the MTA. All alter the 30d0cef73dSGregory Neil Shapirolibrary's state, some of which is communicated to the MTA inside 31d0cef73dSGregory Neil Shapiro<A HREF="smfi_main.html">smfi_main</A>. 3240266059SGregory Neil Shapiro 33d0cef73dSGregory Neil Shapiro<P> 34d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH></TR> 35e92d3f3fSGregory Neil Shapiro 36d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_opensocket.html">smfi_opensocket</A></TD><TD>Try to create the interface socket.</TD></TR> 3740266059SGregory Neil Shapiro 38d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_register.html">smfi_register</A></TD><TD>Register a filter.</TD></TR> 3940266059SGregory Neil Shapiro 40d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_setconn.html">smfi_setconn</A></TD><TD>Specify socket to use.</TD></TR> 4140266059SGregory Neil Shapiro 42d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_settimeout.html">smfi_settimeout</A></TD><TD>Set timeout.</TD></TR> 43e92d3f3fSGregory Neil Shapiro 44d0cef73dSGregory 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> 45e92d3f3fSGregory Neil Shapiro 46d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_setdbg.html">smfi_setdbg</A></TD><TD>Set the milter library debugging (tracing) level.</TD></TR> 47e92d3f3fSGregory Neil Shapiro 48d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_stop.html">smfi_stop</A></TD><TD>Cause an orderly shutdown.</TD></TR> 4940266059SGregory Neil Shapiro 50d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_main.html">smfi_main</A></TD><TD>Hand control to libmilter.</TD></TR> 5140266059SGregory Neil Shapiro 52d0cef73dSGregory Neil Shapiro</TABLE> 53d0cef73dSGregory Neil Shapiro 54d0cef73dSGregory Neil Shapiro<H2><A NAME="DataAccessFunctions">Data Access Functions</A></H2> 5540266059SGregory Neil Shapiro 5640266059SGregory Neil ShapiroThe following functions may be called from within the filter-defined callbacks 5740266059SGregory Neil Shapiroto access information about the current connection or message. 58d0cef73dSGregory Neil Shapiro<P> 59d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR bgcolor="#dddddd"><TH>Function</TH><TH>Description</TH></TR> 60d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_getsymval.html">smfi_getsymval</A></TD><TD>Return the value 61d0cef73dSGregory Neil Shapiroof a symbol.</TD></TR> 6240266059SGregory Neil Shapiro 63d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_getpriv.html">smfi_getpriv</A></TD><TD>Get the private data 64d0cef73dSGregory Neil Shapiropointer.</TD></TR> 6540266059SGregory Neil Shapiro 66d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_setpriv.html">smfi_setpriv</A></TD><TD>Set the private data 67d0cef73dSGregory Neil Shapiropointer.</TD></TR> 6840266059SGregory Neil Shapiro 69d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_setreply.html">smfi_setreply</A></TD><TD>Set the specific 70d0cef73dSGregory Neil Shapiroreply code to be used.</TD></TR> 7140266059SGregory Neil Shapiro 72d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_setmlreply.html">smfi_setmlreply</A></TD><TD>Set the 73d0cef73dSGregory Neil Shapirospecific multi-line reply to be used.</TD></TR> 74e92d3f3fSGregory Neil Shapiro 75d0cef73dSGregory Neil Shapiro</TABLE> 7640266059SGregory Neil Shapiro 77d0cef73dSGregory Neil Shapiro<H2><A NAME="MessageModificationFunctions">Message Modification Functions</A></H2> 7840266059SGregory Neil Shapiro 7940266059SGregory Neil ShapiroThe following functions change a message's contents and attributes. 80d0cef73dSGregory Neil Shapiro<EM>They may only be called in <A HREF="xxfi_eom.html">xxfi_eom</A></EM>. 8140266059SGregory Neil ShapiroAll of these functions may invoke additional communication with the MTA. 8240266059SGregory Neil ShapiroThey will return either MI_SUCCESS or MI_FAILURE to indicate the status of 8340266059SGregory Neil Shapirothe operation. 8440266059SGregory Neil Shapiro 85d0cef73dSGregory Neil Shapiro<P> 8640266059SGregory Neil ShapiroA filter must have set the appropriate flag (listed below) in the 87d0cef73dSGregory Neil Shapirodescription passed to <A HREF="smfi_register.html">smfi_register</A> 8840266059SGregory Neil Shapiroto call any message modification function. Failure to do so will 8940266059SGregory Neil Shapirocause the MTA to treat a call to the function as a failure of the 9040266059SGregory Neil Shapirofilter, terminating its connection. 9140266059SGregory Neil Shapiro 92d0cef73dSGregory Neil Shapiro<P> 9340266059SGregory Neil ShapiroNote that the status returned indicates only whether or not the 9440266059SGregory Neil Shapirofilter's message was successfully sent to the MTA, not whether or not 95d0cef73dSGregory Neil Shapirothe MTA performed the requested operation. For example, 96d0cef73dSGregory Neil Shapiro<A HREF="smfi_addheader.html">smfi_addheader</A>, when called with an 9740266059SGregory Neil Shapiroillegal header name, will return MI_SUCCESS even though the MTA may 9840266059SGregory Neil Shapirolater refuse to add the illegal header. 99d0cef73dSGregory Neil Shapiro<P> 100d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH><TH>SMFIF_* flag</TR> 101d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_addheader.html">smfi_addheader</A></TD><TD>Add a header to 102d0cef73dSGregory Neil Shapirothe message.</TD><TD>SMFIF_ADDHDRS</TD></TR> 10340266059SGregory Neil Shapiro 104d0cef73dSGregory 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> 10540266059SGregory Neil Shapiro 106d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_insheader.html">smfi_insheader</A></TD><TD>Insert a 107d0cef73dSGregory Neil Shapiroheader into the message.</TD><TD>SMFIF_ADDHDRS</TD></TR> 108e92d3f3fSGregory Neil Shapiro 109d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_chgfrom.html">smfi_chgfrom</A></TD><TD>Change the 110d0cef73dSGregory Neil Shapiroenvelope sender address.</TD><TD>SMFIF_CHGFROM</TD></TR> 11140266059SGregory Neil Shapiro 112d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_addrcpt.html">smfi_addrcpt</A></TD><TD>Add a recipient to 113d0cef73dSGregory Neil Shapirothe envelope.</TD><TD>SMFIF_ADDRCPT</TD></TR> 11440266059SGregory Neil Shapiro 115d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_addrcpt_par.html">smfi_addrcpt_par</A></TD><TD>Add 116d0cef73dSGregory Neil Shapiroa recipient including ESMTP parameter to the envelope. 117d0cef73dSGregory Neil Shapiro</TD><TD>SMFIF_ADDRCPT_PAR</TD></TR> 11840266059SGregory Neil Shapiro 119d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_delrcpt.html">smfi_delrcpt</A></TD><TD>Delete a recipient 120d0cef73dSGregory Neil Shapirofrom the envelope.</TD><TD>SMFIF_DELRCPT</TD></TR> 12140266059SGregory Neil Shapiro 122d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_replacebody.html">smfi_replacebody</A></TD><TD>Replace the 123d0cef73dSGregory Neil Shapirobody of the message.</TD><TD>SMFIF_CHGBODY</TD></TR> 124d0cef73dSGregory Neil Shapiro 125d0cef73dSGregory Neil Shapiro</TABLE> 126d0cef73dSGregory Neil Shapiro 127d0cef73dSGregory Neil Shapiro<H2>Other Message Handling Functions</H2> 128e92d3f3fSGregory Neil Shapiro 129e92d3f3fSGregory Neil ShapiroThe following functions provide special case handling instructions for 130e92d3f3fSGregory Neil Shapiromilter or the MTA, without altering the content or status of the message. 131d0cef73dSGregory Neil Shapiro<EM>They too may only be called in <A HREF="xxfi_eom.html">xxfi_eom</A></EM>. 132e92d3f3fSGregory Neil ShapiroAll of these functions may invoke additional communication with the MTA. 133e92d3f3fSGregory Neil ShapiroThey will return either MI_SUCCESS or MI_FAILURE to indicate the status of 134e92d3f3fSGregory Neil Shapirothe operation. 135e92d3f3fSGregory Neil Shapiro 136d0cef73dSGregory Neil Shapiro<P> 137e92d3f3fSGregory Neil ShapiroNote that the status returned indicates only whether or not the 138e92d3f3fSGregory Neil Shapirofilter's message was successfully sent to the MTA, not whether or not 139e92d3f3fSGregory Neil Shapirothe MTA performed the requested operation. 140e92d3f3fSGregory Neil Shapiro 141d0cef73dSGregory Neil Shapiro<P> 142d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH></TR> 143d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_progress.html">smfi_progress</A></TD><TD>Report operation in progress.</TD></TR> 144e92d3f3fSGregory Neil Shapiro 145d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_quarantine.html">smfi_quarantine</A></TD><TD>Quarantine a message.</TD></TR> 146e92d3f3fSGregory Neil Shapiro 147d0cef73dSGregory Neil Shapiro</TABLE> 148e92d3f3fSGregory Neil Shapiro 149d0cef73dSGregory Neil Shapiro<H2><A NAME="Callbacks">Callbacks</A></H2> 15040266059SGregory Neil Shapiro 15140266059SGregory Neil ShapiroThe filter should implement one or more of the following callbacks, 152d0cef73dSGregory Neil Shapirowhich are registered via <A HREF="smfi_register.html">smfi_register</A>: 15340266059SGregory Neil Shapiro 154d0cef73dSGregory Neil Shapiro<P> 155d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH></TR> 15640266059SGregory Neil Shapiro 157d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_connect.html">xxfi_connect</A></TD><TD>connection info</TD></TR> 15840266059SGregory Neil Shapiro 159d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_helo.html">xxfi_helo</A></TD><TD>SMTP HELO/EHLO command</TD></TR> 16040266059SGregory Neil Shapiro 161d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_envfrom.html">xxfi_envfrom</A></TD><TD>envelope sender</TD></TR> 16240266059SGregory Neil Shapiro 163d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_envrcpt.html">xxfi_envrcpt</A></TD><TD>envelope recipient</TD></TR> 16440266059SGregory Neil Shapiro 165d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_data.html">xxfi_data</A></TD><TD>DATA command</TD></TR> 16640266059SGregory Neil Shapiro 167d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_unknown.html">xxfi_unknown</A></TD><TD>Unknown SMTP command</TD></TR> 16840266059SGregory Neil Shapiro 169d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_header.html">xxfi_header</A></TD><TD>header</TD></TR> 17040266059SGregory Neil Shapiro 171d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_eoh.html">xxfi_eoh</A></TD><TD>end of header</TD></TR> 17240266059SGregory Neil Shapiro 173d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_body.html">xxfi_body</A></TD><TD>body block</TD></TR> 17440266059SGregory Neil Shapiro 175d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_eom.html">xxfi_eom</A></TD><TD>end of message</TD></TR> 17640266059SGregory Neil Shapiro 177d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_abort.html">xxfi_abort</A></TD><TD>message aborted</TD></TR> 178d0cef73dSGregory Neil Shapiro 179d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_close.html">xxfi_close</A></TD><TD>connection cleanup</TD></TR> 180d0cef73dSGregory Neil Shapiro 181d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="xxfi_negotiate.html">xxfi_negotiate</A></TD><TD>option negotiattion</TD></TR> 182d0cef73dSGregory Neil Shapiro 183d0cef73dSGregory Neil Shapiro</TABLE> 184d0cef73dSGregory Neil Shapiro 185d0cef73dSGregory Neil Shapiro<P> 18640266059SGregory Neil ShapiroThe above callbacks should all return one of the following return values, 18740266059SGregory Neil Shapirohaving the indicated meanings. Any return other than one of the below 18840266059SGregory Neil Shapirovalues constitutes an error, and will cause sendmail to terminate its 18940266059SGregory Neil Shapiroconnection to the offending filter. 19040266059SGregory Neil Shapiro 191d0cef73dSGregory Neil Shapiro<P><A NAME="conn-spec">Milter</A> distinguishes between recipient-, 19240266059SGregory Neil Shapiromessage-, and connection-oriented routines. Recipient-oriented 19340266059SGregory Neil Shapirocallbacks may affect the processing of a single message recipient; 19440266059SGregory Neil Shapiromessage-oriented callbacks, a single message; connection-oriented 19540266059SGregory Neil Shapirocallbacks, an entire connection (during which multiple messages may be 19640266059SGregory Neil Shapirodelivered to multiple sets of recipients). 197d0cef73dSGregory Neil Shapiro<A HREF="xxfi_envrcpt.html">xxfi_envrcpt</A> is recipient-oriented. 198d0cef73dSGregory Neil Shapiro<A HREF="xxfi_connect.html">xxfi_connect</A>, 199d0cef73dSGregory Neil Shapiro<A HREF="xxfi_helo.html">xxfi_helo</A> and 200d0cef73dSGregory Neil Shapiro<A HREF="xxfi_close.html">xxfi_close</A> are connection-oriented. All 20140266059SGregory Neil Shapiroother callbacks are message-oriented. 20240266059SGregory Neil Shapiro 203d0cef73dSGregory Neil Shapiro<P> 204d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2> 205d0cef73dSGregory Neil Shapiro <TR BGCOLOR="#dddddd"><TH>Return value</TH><TH>Description</TH></TR> 206d0cef73dSGregory Neil Shapiro <TR VALIGN="TOP"> 207d0cef73dSGregory Neil Shapiro <TD>SMFIS_CONTINUE</TD> 208d0cef73dSGregory Neil Shapiro <TD>Continue processing the current connection, message, or recipient. 209d0cef73dSGregory Neil Shapiro </TD> 210d0cef73dSGregory Neil Shapiro </TR> 211d0cef73dSGregory Neil Shapiro <TR VALIGN="TOP"> 212d0cef73dSGregory Neil Shapiro <TD>SMFIS_REJECT</TD> 213d0cef73dSGregory Neil Shapiro <TD>For a connection-oriented routine, reject this connection; call <A HREF="xxfi_close.html">xxfi_close</A>.<BR> 21440266059SGregory Neil Shapiro For a message-oriented routine (except 215d0cef73dSGregory Neil Shapiro <A HREF="xxfi_eom.html">xxfi_eom</A> or 216d0cef73dSGregory Neil Shapiro <A HREF="xxfi_abort.html">xxfi_abort</A>), reject this message.<BR> 21740266059SGregory Neil Shapiro For a recipient-oriented routine, reject the current recipient (but continue processing the current message). 218d0cef73dSGregory Neil Shapiro </TD> 219d0cef73dSGregory Neil Shapiro </TR> 220d0cef73dSGregory Neil Shapiro <TR valign="top"> 221d0cef73dSGregory Neil Shapiro <TD>SMFIS_DISCARD</TD> 222d0cef73dSGregory Neil Shapiro <TD>For a message- or recipient-oriented routine, accept this message, but silently discard it.<BR> 22340266059SGregory Neil Shapiro SMFIS_DISCARD should not be returned by a connection-oriented routine. 224d0cef73dSGregory Neil Shapiro </TD> 225d0cef73dSGregory Neil Shapiro </TR> 226d0cef73dSGregory Neil Shapiro <TR valign="top"> 227d0cef73dSGregory Neil Shapiro <TD>SMFIS_ACCEPT</TD> 228d0cef73dSGregory 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> 229d0cef73dSGregory Neil Shapiro For a message- or recipient-oriented routine, accept this message without further filtering.<BR> 230d0cef73dSGregory Neil Shapiro </TD> 231d0cef73dSGregory Neil Shapiro </TR> 232d0cef73dSGregory Neil Shapiro <TR valign="top"> 233d0cef73dSGregory Neil Shapiro <TD>SMFIS_TEMPFAIL</TD> 234d0cef73dSGregory Neil Shapiro <TD>Return a temporary failure, i.e., the corresponding SMTP command will return an appropriate 4xx status code. 235d0cef73dSGregory Neil Shapiro For a message-oriented routine (except <A HREF="xxfi_envfrom.html">xxfi_envfrom</A>), fail for this message. <BR> 236d0cef73dSGregory Neil Shapiro For a connection-oriented routine, fail for this connection; call <A HREF="xxfi_close.html">xxfi_close</A>. <BR> 23740266059SGregory Neil Shapiro For a recipient-oriented routine, only fail for the current recipient; continue message processing. 238d0cef73dSGregory Neil Shapiro </TD> 239d0cef73dSGregory Neil Shapiro </TR> 24040266059SGregory Neil Shapiro 241d0cef73dSGregory Neil Shapiro <TR valign="top"> 242d0cef73dSGregory Neil Shapiro <TD><A NAME="SMFIS_SKIP">SMFIS_SKIP</A></TD> 243d0cef73dSGregory Neil Shapiro <TD>Skip further callbacks of the same type in this transaction. 244d0cef73dSGregory Neil Shapiro Currently this return value is only allowed in 245d0cef73dSGregory Neil Shapiro <A HREF="xxfi_body.html">xxfi_body()</A>. 246d0cef73dSGregory Neil Shapiro It can be used if a milter has received sufficiently many 247d0cef73dSGregory Neil Shapiro body chunks to make a decision, but still wants to invoke 248d0cef73dSGregory Neil Shapiro message modification functions that are only allowed to be called from 249d0cef73dSGregory Neil Shapiro <A HREF="xxfi_eom.html">xxfi_eom()</A>. 250d0cef73dSGregory Neil Shapiro Note: the milter <EM>must</EM> 251d0cef73dSGregory Neil Shapiro <A HREF="xxfi_negotiate.html">negotiate</A> 252d0cef73dSGregory Neil Shapiro this behavior with the MTA, i.e., it must check whether 253d0cef73dSGregory Neil Shapiro the protocol action 254d0cef73dSGregory Neil Shapiro <A HREF="xxfi_negotiate.html#SMFIP_SKIP"><CODE>SMFIP_SKIP</CODE></A> 255d0cef73dSGregory Neil Shapiro is available and if so, the milter must request it. 256d0cef73dSGregory Neil Shapiro </TD> 257d0cef73dSGregory Neil Shapiro </TR> 258d0cef73dSGregory Neil Shapiro 259d0cef73dSGregory Neil Shapiro <TR valign="top"> 260d0cef73dSGregory Neil Shapiro <TD><A NAME="SMFIS_NOREPLY">SMFIS_NOREPLY</A></TD> 261d0cef73dSGregory Neil Shapiro <TD>Do not send a reply back to the MTA. 262d0cef73dSGregory Neil Shapiro The milter <EM>must</EM> 263d0cef73dSGregory Neil Shapiro <A HREF="xxfi_negotiate.html">negotiate</A> 264d0cef73dSGregory Neil Shapiro this behavior with the MTA, i.e., it must check whether 265d0cef73dSGregory Neil Shapiro the appropriate protocol action 266d0cef73dSGregory Neil Shapiro <A HREF="xxfi_negotiate.html#SMFIP_NR_"><CODE>SMFIP_NR_*</CODE></A> 267d0cef73dSGregory Neil Shapiro is available and if so, the milter must request it. 268d0cef73dSGregory Neil Shapiro If you set the 269d0cef73dSGregory Neil Shapiro <A HREF="xxfi_negotiate.html#SMFIP_NR_"><CODE>SMFIP_NR_*</CODE></A> 270d0cef73dSGregory Neil Shapiro protocol action for a callback, that callback <EM>must</EM> 271d0cef73dSGregory Neil Shapiro always reply with 272d0cef73dSGregory Neil Shapiro SMFIS_NOREPLY. 273d0cef73dSGregory Neil Shapiro Using any other reply code is a violation of the API. 274d0cef73dSGregory Neil Shapiro If in some cases your callback may return another value 275d0cef73dSGregory Neil Shapiro (e.g., due to some resource shortages), then you 276d0cef73dSGregory Neil Shapiro <EM>must not</EM> set 277d0cef73dSGregory Neil Shapiro <A HREF="xxfi_negotiate.html#SMFIP_NR_"><CODE>SMFIP_NR_*</CODE></A> 278d0cef73dSGregory Neil Shapiro and you must use 279d0cef73dSGregory Neil Shapiro SMFIS_CONTINUE as the default return code. 280d0cef73dSGregory Neil Shapiro (Alternatively you can try to delay reporting the problem to 281d0cef73dSGregory Neil Shapiro a later callback for which 282d0cef73dSGregory Neil Shapiro <A HREF="xxfi_negotiate.html#SMFIP_NR_"><CODE>SMFIP_NR_*</CODE></A> 283d0cef73dSGregory Neil Shapiro is not set.) 284d0cef73dSGregory Neil Shapiro </TD> 285d0cef73dSGregory Neil Shapiro </TR> 286d0cef73dSGregory Neil Shapiro 287d0cef73dSGregory Neil Shapiro</TABLE> 288d0cef73dSGregory Neil Shapiro 289d0cef73dSGregory Neil Shapiro<H2><A NAME="Miscellaneous">Miscellaneous</A></H2> 290d0cef73dSGregory Neil Shapiro 291d0cef73dSGregory Neil Shapiro<P> 292d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH></TR> 293d0cef73dSGregory Neil Shapiro 294d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_version.html">smfi_version</A></TD><TD>libmilter (runtime) version info</TD></TR> 295d0cef73dSGregory Neil Shapiro 296d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_setsymlist.html">smfi_setsymlist</A></TD><TD> 297d0cef73dSGregory Neil ShapiroSet the list of macros that the milter wants to receive from the MTA 298d0cef73dSGregory Neil Shapirofor a protocol stage. 299d0cef73dSGregory Neil Shapiro</TD></TR> 300d0cef73dSGregory Neil Shapiro 301d0cef73dSGregory Neil Shapiro</TABLE> 302d0cef73dSGregory Neil Shapiro 303d0cef73dSGregory Neil Shapiro<P> 304d0cef73dSGregory Neil Shapiro<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Constant</TH><TH>Description</TH></TR> 305d0cef73dSGregory Neil Shapiro 306d0cef73dSGregory Neil Shapiro<TR><TD><A HREF="smfi_version.html">SMFI_VERSION</A></TD><TD>libmilter (compile time) version info</TD></TR> 307d0cef73dSGregory Neil Shapiro 308d0cef73dSGregory Neil Shapiro</TABLE> 309d0cef73dSGregory Neil Shapiro 310d0cef73dSGregory Neil Shapiro 311d0cef73dSGregory Neil Shapiro<HR SIZE="1"> 312d0cef73dSGregory Neil Shapiro<FONT SIZE="-1"> 313d0cef73dSGregory Neil ShapiroCopyright (c) 2000, 2003, 2006 Sendmail, Inc. and its suppliers. 31440266059SGregory Neil ShapiroAll rights reserved. 315d0cef73dSGregory Neil Shapiro<BR> 31640266059SGregory Neil ShapiroBy using this file, you agree to the terms and conditions set 3175ef517c0SGregory Neil Shapiroforth in the LICENSE. 318d0cef73dSGregory Neil Shapiro</FONT> 319d0cef73dSGregory Neil Shapiro</BODY> 320d0cef73dSGregory Neil Shapiro</HTML> 321