diff options
Diffstat (limited to 'contrib/sendmail/libmilter/docs')
51 files changed, 5772 insertions, 0 deletions
diff --git a/contrib/sendmail/libmilter/docs/api.html b/contrib/sendmail/libmilter/docs/api.html new file mode 100644 index 0000000..578e0ca --- /dev/null +++ b/contrib/sendmail/libmilter/docs/api.html @@ -0,0 +1,322 @@ +<HTML> +<HEAD><TITLE>Milter API</TITLE></HEAD> +<BODY> +<!-- +$Id: api.html,v 1.37 2009/05/19 00:40:52 ca Exp $ +--> +<H1>Milter API</H1> + +<H2>Contents</H2> +<UL> + <LI><A HREF="#LibraryControlFunctions">Library Control Functions</A> + <LI><A HREF="#DataAccessFunctions">Data Access Functions</A> + <LI><A HREF="#MessageModificationFunctions">Message Modification Functions</A> + <LI><A HREF="#Callbacks">Callbacks</A> + <LI><A HREF="#Miscellaneous">Miscellaneous</A> +</UL> + +<H2><A NAME="LibraryControlFunctions">Library Control Functions</A></H2> + +Before handing control to libmilter (by calling +<A HREF="smfi_main.html">smfi_main</A>), a filter may call the following +functions to set libmilter parameters. +In particular, the filter must call +<A HREF="smfi_register.html">smfi_register</A> to register its callbacks. +Each function will return either MI_SUCCESS or MI_FAILURE to +indicate the status of the operation. + +<P> +None of these functions communicate with the MTA. All alter the +library's state, some of which is communicated to the MTA inside +<A HREF="smfi_main.html">smfi_main</A>. + +<P> +<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH></TR> + +<TR><TD><A HREF="smfi_opensocket.html">smfi_opensocket</A></TD><TD>Try to create the interface socket.</TD></TR> + +<TR><TD><A HREF="smfi_register.html">smfi_register</A></TD><TD>Register a filter.</TD></TR> + +<TR><TD><A HREF="smfi_setconn.html">smfi_setconn</A></TD><TD>Specify socket to use.</TD></TR> + +<TR><TD><A HREF="smfi_settimeout.html">smfi_settimeout</A></TD><TD>Set timeout.</TD></TR> + +<TR><TD><A HREF="smfi_setbacklog.html">smfi_setbacklog</A></TD><TD>Define the incoming <CODE>listen(2)</CODE> queue size.</TD></TR> + +<TR><TD><A HREF="smfi_setdbg.html">smfi_setdbg</A></TD><TD>Set the milter library debugging (tracing) level.</TD></TR> + +<TR><TD><A HREF="smfi_stop.html">smfi_stop</A></TD><TD>Cause an orderly shutdown.</TD></TR> + +<TR><TD><A HREF="smfi_main.html">smfi_main</A></TD><TD>Hand control to libmilter.</TD></TR> + +</TABLE> + +<H2><A NAME="DataAccessFunctions">Data Access Functions</A></H2> + +The following functions may be called from within the filter-defined callbacks +to access information about the current connection or message. +<P> +<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR bgcolor="#dddddd"><TH>Function</TH><TH>Description</TH></TR> +<TR><TD><A HREF="smfi_getsymval.html">smfi_getsymval</A></TD><TD>Return the value +of a symbol.</TD></TR> + +<TR><TD><A HREF="smfi_getpriv.html">smfi_getpriv</A></TD><TD>Get the private data +pointer.</TD></TR> + +<TR><TD><A HREF="smfi_setpriv.html">smfi_setpriv</A></TD><TD>Set the private data +pointer.</TD></TR> + +<TR><TD><A HREF="smfi_setreply.html">smfi_setreply</A></TD><TD>Set the specific +reply code to be used.</TD></TR> + +<TR><TD><A HREF="smfi_setmlreply.html">smfi_setmlreply</A></TD><TD>Set the +specific multi-line reply to be used.</TD></TR> + +</TABLE> + +<H2><A NAME="MessageModificationFunctions">Message Modification Functions</A></H2> + +The following functions change a message's contents and attributes. +<EM>They may only be called in <A HREF="xxfi_eom.html">xxfi_eom</A></EM>. +All of these functions may invoke additional communication with the MTA. +They will return either MI_SUCCESS or MI_FAILURE to indicate the status of +the operation. Message data (senders, recipients, headers, body chunks) +passed to these functions via parameters is copied and does not need to be +preserved (i.e., allocated memory can be freed). + +<P> +A filter must have set the appropriate flag (listed below) in the +description passed to <A HREF="smfi_register.html">smfi_register</A> +to call any message modification function. Failure to do so will +cause the MTA to treat a call to the function as a failure of the +filter, terminating its connection. + +<P> +Note that the status returned indicates only whether or not the +filter's message was successfully sent to the MTA, not whether or not +the MTA performed the requested operation. For example, +<A HREF="smfi_addheader.html">smfi_addheader</A>, when called with an +illegal header name, will return MI_SUCCESS even though the MTA may +later refuse to add the illegal header. +<P> +<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH><TH>SMFIF_* flag</TR> +<TR><TD><A HREF="smfi_addheader.html">smfi_addheader</A></TD><TD>Add a header to +the message.</TD><TD>SMFIF_ADDHDRS</TD></TR> + +<TR><TD><A HREF="smfi_chgheader.html">smfi_chgheader</A></TD><TD>Change or delete a header.</TD><TD>SMFIF_CHGHDRS</TD></TR> + +<TR><TD><A HREF="smfi_insheader.html">smfi_insheader</A></TD><TD>Insert a +header into the message.</TD><TD>SMFIF_ADDHDRS</TD></TR> + +<TR><TD><A HREF="smfi_chgfrom.html">smfi_chgfrom</A></TD><TD>Change the +envelope sender address.</TD><TD>SMFIF_CHGFROM</TD></TR> + +<TR><TD><A HREF="smfi_addrcpt.html">smfi_addrcpt</A></TD><TD>Add a recipient to +the envelope.</TD><TD>SMFIF_ADDRCPT</TD></TR> + +<TR><TD><A HREF="smfi_addrcpt_par.html">smfi_addrcpt_par</A></TD><TD>Add +a recipient including ESMTP parameter to the envelope. +</TD><TD>SMFIF_ADDRCPT_PAR</TD></TR> + +<TR><TD><A HREF="smfi_delrcpt.html">smfi_delrcpt</A></TD><TD>Delete a recipient +from the envelope.</TD><TD>SMFIF_DELRCPT</TD></TR> + +<TR><TD><A HREF="smfi_replacebody.html">smfi_replacebody</A></TD><TD>Replace the +body of the message.</TD><TD>SMFIF_CHGBODY</TD></TR> + +</TABLE> + +<H2>Other Message Handling Functions</H2> + +The following functions provide special case handling instructions for +milter or the MTA, without altering the content or status of the message. +<EM>They too may only be called in <A HREF="xxfi_eom.html">xxfi_eom</A></EM>. +All of these functions may invoke additional communication with the MTA. +They will return either MI_SUCCESS or MI_FAILURE to indicate the status of +the operation. + +<P> +Note that the status returned indicates only whether or not the +filter's message was successfully sent to the MTA, not whether or not +the MTA performed the requested operation. + +<P> +<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH></TR> +<TR><TD><A HREF="smfi_progress.html">smfi_progress</A></TD><TD>Report operation in progress.</TD></TR> + +<TR><TD><A HREF="smfi_quarantine.html">smfi_quarantine</A></TD><TD>Quarantine a message.</TD></TR> + +</TABLE> + +<H2><A NAME="Callbacks">Callbacks</A></H2> + +The filter should implement one or more of the following callbacks, +which are registered via <A HREF="smfi_register.html">smfi_register</A>: + +<P> +<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH></TR> + +<TR><TD><A HREF="xxfi_connect.html">xxfi_connect</A></TD><TD>connection info</TD></TR> + +<TR><TD><A HREF="xxfi_helo.html">xxfi_helo</A></TD><TD>SMTP HELO/EHLO command</TD></TR> + +<TR><TD><A HREF="xxfi_envfrom.html">xxfi_envfrom</A></TD><TD>envelope sender</TD></TR> + +<TR><TD><A HREF="xxfi_envrcpt.html">xxfi_envrcpt</A></TD><TD>envelope recipient</TD></TR> + +<TR><TD><A HREF="xxfi_data.html">xxfi_data</A></TD><TD>DATA command</TD></TR> + +<TR><TD><A HREF="xxfi_unknown.html">xxfi_unknown</A></TD><TD>Unknown SMTP command</TD></TR> + +<TR><TD><A HREF="xxfi_header.html">xxfi_header</A></TD><TD>header</TD></TR> + +<TR><TD><A HREF="xxfi_eoh.html">xxfi_eoh</A></TD><TD>end of header</TD></TR> + +<TR><TD><A HREF="xxfi_body.html">xxfi_body</A></TD><TD>body block</TD></TR> + +<TR><TD><A HREF="xxfi_eom.html">xxfi_eom</A></TD><TD>end of message</TD></TR> + +<TR><TD><A HREF="xxfi_abort.html">xxfi_abort</A></TD><TD>message aborted</TD></TR> + +<TR><TD><A HREF="xxfi_close.html">xxfi_close</A></TD><TD>connection cleanup</TD></TR> + +<TR><TD><A HREF="xxfi_negotiate.html">xxfi_negotiate</A></TD><TD>option negotiattion</TD></TR> + +</TABLE> + +<P> +The above callbacks should all return one of the following return values, +having the indicated meanings. Any return other than one of the below +values constitutes an error, and will cause sendmail to terminate its +connection to the offending filter. + +<P><A NAME="conn-spec">Milter</A> distinguishes between recipient-, +message-, and connection-oriented routines. Recipient-oriented +callbacks may affect the processing of a single message recipient; +message-oriented callbacks, a single message; connection-oriented +callbacks, an entire connection (during which multiple messages may be +delivered to multiple sets of recipients). +<A HREF="xxfi_envrcpt.html">xxfi_envrcpt</A> is recipient-oriented. +<A HREF="xxfi_connect.html">xxfi_connect</A>, +<A HREF="xxfi_helo.html">xxfi_helo</A> and +<A HREF="xxfi_close.html">xxfi_close</A> are connection-oriented. All +other callbacks are message-oriented. + +<P> +<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2> + <TR BGCOLOR="#dddddd"><TH>Return value</TH><TH>Description</TH></TR> + <TR VALIGN="TOP"> + <TD>SMFIS_CONTINUE</TD> + <TD>Continue processing the current connection, message, or recipient. + </TD> + </TR> + <TR VALIGN="TOP"> + <TD>SMFIS_REJECT</TD> + <TD>For a connection-oriented routine, reject this connection; call <A HREF="xxfi_close.html">xxfi_close</A>.<BR> + For a message-oriented routine (except + <A HREF="xxfi_eom.html">xxfi_eom</A> or + <A HREF="xxfi_abort.html">xxfi_abort</A>), reject this message.<BR> + For a recipient-oriented routine, reject the current recipient (but continue processing the current message). + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_DISCARD</TD> + <TD>For a message- or recipient-oriented routine, accept this message, but silently discard it.<BR> + SMFIS_DISCARD should not be returned by a connection-oriented routine. + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_ACCEPT</TD> + <TD>For a connection-oriented routine, accept this connection without further filter processing; call <A HREF="xxfi_close.html">xxfi_close</A>.<BR> + For a message- or recipient-oriented routine, accept this message without further filtering.<BR> + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_TEMPFAIL</TD> + <TD>Return a temporary failure, i.e., the corresponding SMTP command will return an appropriate 4xx status code. + For a message-oriented routine (except <A HREF="xxfi_envfrom.html">xxfi_envfrom</A>), fail for this message. <BR> + For a connection-oriented routine, fail for this connection; call <A HREF="xxfi_close.html">xxfi_close</A>. <BR> + For a recipient-oriented routine, only fail for the current recipient; continue message processing. + </TD> + </TR> + + <TR valign="top"> + <TD><A NAME="SMFIS_SKIP">SMFIS_SKIP</A></TD> + <TD>Skip further callbacks of the same type in this transaction. + Currently this return value is only allowed in + <A HREF="xxfi_body.html">xxfi_body()</A>. + It can be used if a milter has received sufficiently many + body chunks to make a decision, but still wants to invoke + message modification functions that are only allowed to be called from + <A HREF="xxfi_eom.html">xxfi_eom()</A>. + Note: the milter <EM>must</EM> + <A HREF="xxfi_negotiate.html">negotiate</A> + this behavior with the MTA, i.e., it must check whether + the protocol action + <A HREF="xxfi_negotiate.html#SMFIP_SKIP"><CODE>SMFIP_SKIP</CODE></A> + is available and if so, the milter must request it. + </TD> + </TR> + + <TR valign="top"> + <TD><A NAME="SMFIS_NOREPLY">SMFIS_NOREPLY</A></TD> + <TD>Do not send a reply back to the MTA. + The milter <EM>must</EM> + <A HREF="xxfi_negotiate.html">negotiate</A> + this behavior with the MTA, i.e., it must check whether + the appropriate protocol action + <A HREF="xxfi_negotiate.html#SMFIP_NR_"><CODE>SMFIP_NR_*</CODE></A> + is available and if so, the milter must request it. + If you set the + <A HREF="xxfi_negotiate.html#SMFIP_NR_"><CODE>SMFIP_NR_*</CODE></A> + protocol action for a callback, that callback <EM>must</EM> + always reply with + SMFIS_NOREPLY. + Using any other reply code is a violation of the API. + If in some cases your callback may return another value + (e.g., due to some resource shortages), then you + <EM>must not</EM> set + <A HREF="xxfi_negotiate.html#SMFIP_NR_"><CODE>SMFIP_NR_*</CODE></A> + and you must use + SMFIS_CONTINUE as the default return code. + (Alternatively you can try to delay reporting the problem to + a later callback for which + <A HREF="xxfi_negotiate.html#SMFIP_NR_"><CODE>SMFIP_NR_*</CODE></A> + is not set.) + </TD> + </TR> + +</TABLE> + +<H2><A NAME="Miscellaneous">Miscellaneous</A></H2> + +<P> +<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Function</TH><TH>Description</TH></TR> + +<TR><TD><A HREF="smfi_version.html">smfi_version</A></TD><TD>libmilter (runtime) version info</TD></TR> + +<TR><TD><A HREF="smfi_setsymlist.html">smfi_setsymlist</A></TD><TD> +Set the list of macros that the milter wants to receive from the MTA +for a protocol stage. +</TD></TR> + +</TABLE> + +<P> +<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=2><TR BGCOLOR="#dddddd"><TH>Constant</TH><TH>Description</TH></TR> + +<TR><TD><A HREF="smfi_version.html">SMFI_VERSION</A></TD><TD>libmilter (compile time) version info</TD></TR> + +</TABLE> + + +<HR SIZE="1"> +<FONT SIZE="-1"> +Copyright (c) 2000, 2003, 2006, 2009 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/design.html b/contrib/sendmail/libmilter/docs/design.html new file mode 100644 index 0000000..f2e5f11 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/design.html @@ -0,0 +1,147 @@ +<HTML> +<HEAD> +<TITLE>Architecture</TITLE> +</HEAD> +<BODY> +<!-- +$Id: design.html,v 1.12 2006/08/08 20:55:57 ca Exp $ +--> + +<H1>Architecture</H1> + +<H2>Contents</H2> + +<UL> + <LI>Design Goals + <LI>Implementing Filtering Policies + <LI>MTA - Filter Communication +</UL> + +<H2>Goals</H2> + +The Sendmail Content Management API (Milter) provides an interface for +third-party software to validate and modify messages as they pass +through the mail transport system. Filters can process messages' +connection (IP) information, envelope protocol elements, message +headers, and/or message body contents, and modify a message's +recipients, headers, and body. The MTA configuration file specifies +which filters are to be applied, and in what order, allowing an +administrator to combine multiple independently-developed filters. + +<P> +We expect to see both vendor-supplied, configurable mail filtering +applications and a multiplicity of script-like filters designed by and +for MTA administrators. A certain degree of coding sophistication and +domain knowledge on the part of the filter provider is assumed. This +allows filters to exercise fine-grained control at the SMTP level. +However, as will be seen in the example, many filtering applications +can be written with relatively little protocol knowledge. + +<P> +Given these expectations, the API is designed to achieve the following +goals: + +<OL> + <LI>Safety/security. + Filter processes should not need to run as root + (of course, they can if required, but that is a local issue); + this will simplify coding + and limit the impact of security flaws in the filter program. +<P> + <LI>Reliability. + Coding failures in a Milter process that cause that process + to hang or core-dump + should not stop mail delivery. + Faced with such a failure, + sendmail should use a default mechanism, + either behaving as if the filter were not present + or as if a required resource were unavailable. + The latter failure mode will generally have sendmail return + a 4xx SMTP code (although in later phases of the SMTP protocol + it may cause the mail to be queued for later processing). +<P> + <LI>Simplicity. + The API should make implementation of a new filter + no more difficult than absolutely necessary. + Subgoals include: + <UL> + <LI>Encourage good thread practice + by defining thread-clean interfaces including local data hooks. + <LI>Provide all interfaces required + while avoiding unnecessary pedanticism. + </UL> +<P> + <LI>Performance. + Simple filters should not seriously impact overall MTA performance. +</OL> + +<H2>Implementing Filtering Policies</H2> + +Milter is designed to allow a server administrator to combine +third-party filters to implement a desired mail filtering policy. For +example, if a site wished to scan incoming mail for viruses on several +platforms, eliminate unsolicited commercial email, and append a mandated +footer to selected incoming messages, the administrator could configure +the MTA to filter messages first through a server based anti-virus +engine, then via a large-scale spam-catching service, and finally +append the desired footer if the message still met requisite criteria. +Any of these filters could be added or changed independently. + +<P> +Thus the site administrator, not the filter writer, controls the +overall mail filtering environment. In particular, he/she must decide +which filters are run, in what order they are run, and how they +communicate with the MTA. These parameters, as well as the +actions to be taken if a filter becomes unavailable, are selectable +during MTA configuration. <A href="installation.html">Further +details</A> are available later in this document. + +<H2>MTA - Filter communication</H2> + +Filters run as separate processes, outside of the sendmail address +space. The benefits of this are threefold: + +<OL> + <LI>The filter need not run with "root" permissions, thereby + avoiding a large family of potential security problems.</LI> + + <LI>Failures in a particular filter will not affect the MTA or + other filters.</LI> + + <LI>The filter can potentially have higher performance because of + the parallelism inherent in multiple processes.</LI> +</OL> + +<P> +Each filter may communicate with multiple MTAs at the same time over +local or remote connections, using multiple threads of execution. +<A HREF="#figure-1">Figure 1</A> illustrates a possible network of +communication channels between a site's filters, its MTAs, and other +MTAs on the network: +</P> +<DIV align="center"> +<A name="figure-1"><IMG src="figure1.jpg" ALT=""></A><BR> +<B>Figure 1: A set of MTA's interacting with a set of filters.</B> +</DIV> +<P> +The Milter library (libmilter) implements the communication protocol. +It accepts connections from various MTAs, passes the relevant data to +the filter through callbacks, then makes appropriate responses based +on return codes. A filter may also send data to the MTA as a result +of library calls. <A href="#figure-2">Figure 2</A> shows a single +filter process processing messages from two MTAs: +</P> +<DIV align="center"> +<IMG src="figure2.jpg" ALT=""><BR> +<B>Figure 2: A filter handling simultaneous requests from two MTA's.</B> +</DIV> +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/figure1.fig b/contrib/sendmail/libmilter/docs/figure1.fig new file mode 100644 index 0000000..e0cbdc8 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/figure1.fig @@ -0,0 +1,56 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +6 975 225 5025 3375 +6 1500 1275 2700 2025 +2 2 0 2 1 7 50 0 -1 0.000 0 0 7 0 0 5 + 1650 1425 2550 1425 2550 1875 1650 1875 1650 1425 +4 0 1 50 0 0 20 0.0000 4 195 645 1800 1725 MTA\001 +-6 +6 1950 2625 3150 3375 +2 2 0 2 4 7 50 0 -1 0.000 0 0 7 0 0 5 + 2100 2775 3000 2775 3000 3225 2100 3225 2100 2775 +4 0 4 50 0 0 20 0.0000 4 195 645 2250 3075 MTA\001 +-6 +6 1050 225 2250 975 +2 2 0 2 14 7 50 0 -1 0.000 0 0 7 0 0 5 + 1200 375 2100 375 2100 825 1200 825 1200 375 +4 0 14 50 0 0 20 0.0000 4 195 645 1350 675 MTA\001 +-6 +2 1 0 2 1 7 50 0 -1 0.000 0 0 7 0 0 2 + 2550 1575 3750 2625 +2 1 0 2 1 7 50 0 -1 0.000 0 0 7 0 0 2 + 2550 1575 3750 1575 +2 1 0 2 1 7 50 0 -1 0.000 0 0 7 0 0 2 + 2550 1575 3750 825 +2 1 0 2 4 7 50 0 -1 0.000 0 0 7 0 0 2 + 3000 2925 3750 2625 +2 1 0 2 14 7 50 0 -1 0.000 0 0 7 0 0 2 + 2100 525 3750 825 +2 1 0 2 14 7 50 0 -1 0.000 0 0 7 0 0 2 + 2100 525 3750 2625 +2 1 0 4 0 7 50 0 -1 0.000 0 0 7 0 0 2 + 1050 3075 2100 3075 +2 1 0 4 0 7 50 0 -1 0.000 0 0 7 0 0 2 + 1050 1725 1650 1725 +2 1 0 4 0 7 50 0 -1 0.000 0 0 7 0 0 2 + 1050 675 1200 675 +2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 3750 2475 4950 2475 4950 2925 3750 2925 3750 2475 +2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 3750 1425 4950 1425 4950 1875 3750 1875 3750 1425 +2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 3750 525 4950 525 4950 975 3750 975 3750 525 +4 0 0 50 0 1 20 0.0000 4 210 795 3900 2775 Filter 3\001 +4 0 0 50 0 1 20 0.0000 4 210 795 3900 1725 Filter 2\001 +4 0 0 50 0 1 20 0.0000 4 210 795 3900 825 Filter 1\001 +-6 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 300 525 1050 525 1050 3225 300 3225 300 525 +4 0 0 50 0 2 24 1.5708 4 255 1950 825 2850 INTERNET\001 diff --git a/contrib/sendmail/libmilter/docs/figure1.jpg b/contrib/sendmail/libmilter/docs/figure1.jpg Binary files differnew file mode 100644 index 0000000..1a5f1de --- /dev/null +++ b/contrib/sendmail/libmilter/docs/figure1.jpg diff --git a/contrib/sendmail/libmilter/docs/figure1.ps b/contrib/sendmail/libmilter/docs/figure1.ps new file mode 100644 index 0000000..ae31760 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/figure1.ps @@ -0,0 +1,173 @@ +%!PS-Adobe-2.0 +%%Title: figure1.fig +%%Creator: fig2dev Version 3.2.3 Patchlevel +%%CreationDate: Tue Jun 6 14:00:04 2000 +%%For: sean@host232.Sendmail.COM (Sean O'rourke,5400) +%%Orientation: Landscape +%%Pages: 1 +%%BoundingBox: 0 0 612 792 +%%BeginSetup +%%IncludeFeature: *PageSize Letter +%%EndSetup +%%Magnification: 1.0000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +newpath 0 792 moveto 0 0 lineto 612 0 lineto 612 792 lineto closepath clip newpath +198.0 238.0 translate + 90 rotate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +%%Page: 1 1 +10 setmiterlimit + 0.06000 0.06000 sc +%%Page: 1 1 +/Times-Bold ff 360.00 scf sf +825 2850 m +gs 1 -1 sc 90.0 rot (INTERNET) col0 sh gr +/Times-Roman ff 300.00 scf sf +1800 1725 m +gs 1 -1 sc (MTA) col1 sh gr +% Polyline +15.000 slw +n 2100 2775 m 3000 2775 l 3000 3225 l 2100 3225 l + cp gs col4 s gr +/Times-Roman ff 300.00 scf sf +2250 3075 m +gs 1 -1 sc (MTA) col4 sh gr +% Polyline +n 1200 375 m 2100 375 l 2100 825 l 1200 825 l + cp gs col14 s gr +/Times-Roman ff 300.00 scf sf +1350 675 m +gs 1 -1 sc (MTA) col14 sh gr +% Polyline +n 2550 1575 m + 3750 2625 l gs col1 s gr +% Polyline +n 2550 1575 m + 3750 1575 l gs col1 s gr +% Polyline +n 2550 1575 m + 3750 825 l gs col1 s gr +% Polyline +n 3000 2925 m + 3750 2625 l gs col4 s gr +% Polyline +n 2100 525 m + 3750 825 l gs col14 s gr +% Polyline +n 2100 525 m + 3750 2625 l gs col14 s gr +% Polyline +45.000 slw +n 1050 3075 m + 2100 3075 l gs col0 s gr +% Polyline +n 1050 1725 m + 1650 1725 l gs col0 s gr +% Polyline +n 1050 675 m + 1200 675 l gs col0 s gr +% Polyline +15.000 slw +n 3750 2475 m 4950 2475 l 4950 2925 l 3750 2925 l + cp gs col0 s gr +% Polyline +n 3750 1425 m 4950 1425 l 4950 1875 l 3750 1875 l + cp gs col0 s gr +% Polyline +n 3750 525 m 4950 525 l 4950 975 l 3750 975 l + cp gs col0 s gr +/Times-Italic ff 300.00 scf sf +3900 2775 m +gs 1 -1 sc (Filter 3) col0 sh gr +/Times-Italic ff 300.00 scf sf +3900 1725 m +gs 1 -1 sc (Filter 2) col0 sh gr +/Times-Italic ff 300.00 scf sf +3900 825 m +gs 1 -1 sc (Filter 1) col0 sh gr +% Polyline +7.500 slw +n 300 525 m 1050 525 l 1050 3225 l 300 3225 l + cp gs col0 s gr +% Polyline +15.000 slw +n 1650 1425 m 2550 1425 l 2550 1875 l 1650 1875 l + cp gs col1 s gr +$F2psEnd +rs +showpage diff --git a/contrib/sendmail/libmilter/docs/figure2.fig b/contrib/sendmail/libmilter/docs/figure2.fig new file mode 100644 index 0000000..c93bfe3 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/figure2.fig @@ -0,0 +1,67 @@ +#FIG 3.2 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +5 1 0 1 0 7 50 0 -1 0.000 0 0 1 0 2981.250 1200.000 2700 1050 3300 1200 2700 1350 + 1 1 1.00 60.00 120.00 +6 4200 900 6450 1350 +2 2 0 1 1 7 50 0 -1 0.000 0 0 7 0 0 5 + 4200 900 6450 900 6450 1350 4200 1350 4200 900 +4 0 1 50 0 0 16 0.0000 4 195 2040 4350 1200 xxfi_header callback\001 +-6 +6 4200 2250 6450 2700 +2 2 0 1 4 7 50 0 -1 0.000 0 0 7 0 0 5 + 4200 2250 6450 2250 6450 2700 4200 2700 4200 2250 +4 0 4 50 0 0 16 0.0000 4 195 2040 4350 2550 xxfi_header callback\001 +-6 +6 600 2100 1800 2850 +2 2 0 2 4 7 50 0 -1 0.000 0 0 7 0 0 5 + 750 2250 1650 2250 1650 2700 750 2700 750 2250 +4 0 4 50 0 0 20 0.0000 4 195 645 900 2550 MTA\001 +-6 +6 600 750 1800 1500 +2 2 0 2 1 7 50 0 -1 0.000 0 0 7 0 0 5 + 750 900 1650 900 1650 1350 750 1350 750 900 +4 0 1 50 0 0 20 0.0000 4 195 645 900 1200 MTA\001 +-6 +2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 4200 1200 3600 1200 +2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 3450 900 4050 900 +2 2 0 2 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2400 300 6600 300 6600 3300 2400 3300 2400 300 +2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5 + 2550 750 3450 750 3450 2700 2550 2700 2550 750 +2 1 0 2 4 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 3450 2700 4050 2700 +2 1 0 2 4 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 4200 2400 3600 2400 +2 1 0 2 4 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 1650 2700 2250 2700 +2 1 0 2 4 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2400 2400 1800 2400 +2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 1650 900 2250 900 +2 1 0 2 1 7 50 0 -1 0.000 0 0 -1 1 0 2 + 1 1 2.00 120.00 240.00 + 2400 1200 1800 1200 +4 0 0 50 0 0 20 0.0000 4 195 630 3900 600 Filter\001 +4 0 4 50 0 0 12 0.0000 4 180 1620 3450 3000 callback (arguments)\001 +4 0 4 50 0 0 12 0.0000 4 180 1575 3900 1950 optional library calls,\001 +4 0 4 50 0 0 12 0.0000 4 135 855 3900 2175 return code\001 +4 0 4 50 0 0 12 0.0000 4 135 780 1500 2100 responses\001 +4 0 0 50 0 0 16 0.0000 4 165 645 2700 2085 Milter\001 +4 0 0 50 0 0 16 0.0000 4 225 675 2700 2400 library\001 +4 0 4 50 0 0 12 0.0000 4 135 510 1500 3000 header\001 diff --git a/contrib/sendmail/libmilter/docs/figure2.jpg b/contrib/sendmail/libmilter/docs/figure2.jpg Binary files differnew file mode 100644 index 0000000..8b11485 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/figure2.jpg diff --git a/contrib/sendmail/libmilter/docs/figure2.ps b/contrib/sendmail/libmilter/docs/figure2.ps new file mode 100644 index 0000000..861a193 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/figure2.ps @@ -0,0 +1,242 @@ +%!PS-Adobe-2.0 +%%Title: figure2.fig +%%Creator: fig2dev Version 3.2.3 Patchlevel +%%CreationDate: Tue Jun 6 13:57:47 2000 +%%For: sean@host232.Sendmail.COM (Sean O'rourke,5400) +%%Orientation: Landscape +%%Pages: 1 +%%BoundingBox: 0 0 612 792 +%%BeginSetup +%%IncludeFeature: *PageSize Letter +%%EndSetup +%%Magnification: 1.5000 +%%EndComments +/$F2psDict 200 dict def +$F2psDict begin +$F2psDict /mtrx matrix put +/col-1 {0 setgray} bind def +/col0 {0.000 0.000 0.000 srgb} bind def +/col1 {0.000 0.000 1.000 srgb} bind def +/col2 {0.000 1.000 0.000 srgb} bind def +/col3 {0.000 1.000 1.000 srgb} bind def +/col4 {1.000 0.000 0.000 srgb} bind def +/col5 {1.000 0.000 1.000 srgb} bind def +/col6 {1.000 1.000 0.000 srgb} bind def +/col7 {1.000 1.000 1.000 srgb} bind def +/col8 {0.000 0.000 0.560 srgb} bind def +/col9 {0.000 0.000 0.690 srgb} bind def +/col10 {0.000 0.000 0.820 srgb} bind def +/col11 {0.530 0.810 1.000 srgb} bind def +/col12 {0.000 0.560 0.000 srgb} bind def +/col13 {0.000 0.690 0.000 srgb} bind def +/col14 {0.000 0.820 0.000 srgb} bind def +/col15 {0.000 0.560 0.560 srgb} bind def +/col16 {0.000 0.690 0.690 srgb} bind def +/col17 {0.000 0.820 0.820 srgb} bind def +/col18 {0.560 0.000 0.000 srgb} bind def +/col19 {0.690 0.000 0.000 srgb} bind def +/col20 {0.820 0.000 0.000 srgb} bind def +/col21 {0.560 0.000 0.560 srgb} bind def +/col22 {0.690 0.000 0.690 srgb} bind def +/col23 {0.820 0.000 0.820 srgb} bind def +/col24 {0.500 0.190 0.000 srgb} bind def +/col25 {0.630 0.250 0.000 srgb} bind def +/col26 {0.750 0.380 0.000 srgb} bind def +/col27 {1.000 0.500 0.500 srgb} bind def +/col28 {1.000 0.630 0.630 srgb} bind def +/col29 {1.000 0.750 0.750 srgb} bind def +/col30 {1.000 0.880 0.880 srgb} bind def +/col31 {1.000 0.840 0.000 srgb} bind def + +end +save +newpath 0 792 moveto 0 0 lineto 612 0 lineto 612 792 lineto closepath clip newpath +144.0 65.5 translate + 90 rotate +1 -1 scale + +/cp {closepath} bind def +/ef {eofill} bind def +/gr {grestore} bind def +/gs {gsave} bind def +/sa {save} bind def +/rs {restore} bind def +/l {lineto} bind def +/m {moveto} bind def +/rm {rmoveto} bind def +/n {newpath} bind def +/s {stroke} bind def +/sh {show} bind def +/slc {setlinecap} bind def +/slj {setlinejoin} bind def +/slw {setlinewidth} bind def +/srgb {setrgbcolor} bind def +/rot {rotate} bind def +/sc {scale} bind def +/sd {setdash} bind def +/ff {findfont} bind def +/sf {setfont} bind def +/scf {scalefont} bind def +/sw {stringwidth} bind def +/tr {translate} bind def +/tnt {dup dup currentrgbcolor + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add + 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} + bind def +/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul + 4 -2 roll mul srgb} bind def +/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def +/$F2psEnd {$F2psEnteredState restore end} def + +$F2psBegin +%%Page: 1 1 +10 setmiterlimit + 0.09000 0.09000 sc +%%Page: 1 1 +/Times-Roman ff 180.00 scf sf +1500 3000 m +gs 1 -1 sc (header) col4 sh gr +/Times-Roman ff 240.00 scf sf +4350 1200 m +gs 1 -1 sc (xxfi_header callback) col1 sh gr +% Polyline +7.500 slw +n 4200 2250 m 6450 2250 l 6450 2700 l 4200 2700 l + cp gs col4 s gr +/Times-Roman ff 240.00 scf sf +4350 2550 m +gs 1 -1 sc (xxfi_header callback) col4 sh gr +% Polyline +15.000 slw +n 750 2250 m 1650 2250 l 1650 2700 l 750 2700 l + cp gs col4 s gr +/Times-Roman ff 300.00 scf sf +900 2550 m +gs 1 -1 sc (MTA) col4 sh gr +% Polyline +n 750 900 m 1650 900 l 1650 1350 l 750 1350 l + cp gs col1 s gr +/Times-Roman ff 300.00 scf sf +900 1200 m +gs 1 -1 sc (MTA) col1 sh gr +% Arc +7.500 slw +gs clippath +2713 1319 m 2667 1357 l 2761 1475 l 2710 1363 l 2808 1437 l cp +eoclip +n 2981.2 1200.0 318.8 -151.9 151.9 arc +gs col0 s gr + gr + +% arrowhead +n 2808 1437 m 2710 1363 l 2761 1475 l 2808 1437 l cp gs 0.00 setgray ef gr col0 s +% Polyline +15.000 slw +gs clippath +3585 1140 m 3585 1260 l 3872 1260 l 3632 1200 l 3872 1140 l cp +eoclip +n 4200 1200 m + 3600 1200 l gs col1 s gr gr + +% arrowhead +n 3872 1140 m 3632 1200 l 3872 1260 l 3872 1140 l cp gs col1 1.00 shd ef gr col1 s +% Polyline +gs clippath +4065 960 m 4065 840 l 3778 840 l 4018 900 l 3778 960 l cp +eoclip +n 3450 900 m + 4050 900 l gs col1 s gr gr + +% arrowhead +n 3778 960 m 4018 900 l 3778 840 l 3778 960 l cp gs col1 1.00 shd ef gr col1 s +% Polyline +n 2400 300 m 6600 300 l 6600 3300 l 2400 3300 l + cp gs col0 s gr +% Polyline +7.500 slw +n 2550 750 m 3450 750 l 3450 2700 l 2550 2700 l + cp gs col0 s gr +% Polyline +15.000 slw +gs clippath +4065 2760 m 4065 2640 l 3778 2640 l 4018 2700 l 3778 2760 l cp +eoclip +n 3450 2700 m + 4050 2700 l gs col4 s gr gr + +% arrowhead +n 3778 2760 m 4018 2700 l 3778 2640 l 3778 2760 l cp gs col4 1.00 shd ef gr col4 s +% Polyline +gs clippath +3585 2340 m 3585 2460 l 3872 2460 l 3632 2400 l 3872 2340 l cp +eoclip +n 4200 2400 m + 3600 2400 l gs col4 s gr gr + +% arrowhead +n 3872 2340 m 3632 2400 l 3872 2460 l 3872 2340 l cp gs col4 1.00 shd ef gr col4 s +% Polyline +gs clippath +2265 2760 m 2265 2640 l 1978 2640 l 2218 2700 l 1978 2760 l cp +eoclip +n 1650 2700 m + 2250 2700 l gs col4 s gr gr + +% arrowhead +n 1978 2760 m 2218 2700 l 1978 2640 l 1978 2760 l cp gs col4 1.00 shd ef gr col4 s +% Polyline +gs clippath +1785 2340 m 1785 2460 l 2072 2460 l 1832 2400 l 2072 2340 l cp +eoclip +n 2400 2400 m + 1800 2400 l gs col4 s gr gr + +% arrowhead +n 2072 2340 m 1832 2400 l 2072 2460 l 2072 2340 l cp gs col4 1.00 shd ef gr col4 s +% Polyline +gs clippath +2265 960 m 2265 840 l 1978 840 l 2218 900 l 1978 960 l cp +eoclip +n 1650 900 m + 2250 900 l gs col1 s gr gr + +% arrowhead +n 1978 960 m 2218 900 l 1978 840 l 1978 960 l cp gs col1 1.00 shd ef gr col1 s +% Polyline +gs clippath +1785 1140 m 1785 1260 l 2072 1260 l 1832 1200 l 2072 1140 l cp +eoclip +n 2400 1200 m + 1800 1200 l gs col1 s gr gr + +% arrowhead +n 2072 1140 m 1832 1200 l 2072 1260 l 2072 1140 l cp gs col1 1.00 shd ef gr col1 s +/Times-Roman ff 300.00 scf sf +3900 600 m +gs 1 -1 sc (Filter) col0 sh gr +/Times-Roman ff 180.00 scf sf +3450 3000 m +gs 1 -1 sc (callback \(arguments\)) col4 sh gr +/Times-Roman ff 180.00 scf sf +3900 1950 m +gs 1 -1 sc (optional library calls,) col4 sh gr +/Times-Roman ff 180.00 scf sf +3900 2175 m +gs 1 -1 sc (return code) col4 sh gr +/Times-Roman ff 180.00 scf sf +1500 2100 m +gs 1 -1 sc (responses) col4 sh gr +/Times-Roman ff 240.00 scf sf +2700 2085 m +gs 1 -1 sc (Milter) col0 sh gr +/Times-Roman ff 240.00 scf sf +2700 2400 m +gs 1 -1 sc (library) col0 sh gr +% Polyline +7.500 slw +n 4200 900 m 6450 900 l 6450 1350 l 4200 1350 l + cp gs col1 s gr +$F2psEnd +rs +showpage diff --git a/contrib/sendmail/libmilter/docs/index.html b/contrib/sendmail/libmilter/docs/index.html new file mode 100644 index 0000000..517d2f6 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/index.html @@ -0,0 +1,92 @@ +<HTML> +<HEAD> +<TITLE>Filtering Mail with Sendmail</TITLE> +</HEAD> +<BODY> +<!-- +$Id: index.html,v 1.13 2006/08/08 20:55:57 ca Exp $ +--> + +<H1>Filtering Mail with Sendmail</H1> + +<!-- +<P><B>Disclaimer</B>: +This preliminary API description is provided for review only. This +specification may change based on feedback from reviewers, and does +not bind Sendmail to offer this functionality in any release. +--> + +<H2>Introduction</H2> + +<P> +Sendmail's Content Management API (milter) provides third-party +programs to access mail messages as they are being processed by the +Mail Transfer Agent (MTA), allowing them to examine and modify message +content and meta-information. Filtering policies implemented by +Milter-conformant filters may then be centrally configured and +composed in an end-user's MTA configuration file. + +<P> +Possible uses for filters include spam rejection, virus +filtering, and content control. In general, Milter seeks to address +site-wide filtering concerns in a scalable way. Individual users' mail +filtering needs (e.g. sorting messages by subject) are left to +client-level programs such as <A href="http://www.procmail.org">Procmail</A>. + +<P> +This document is a technical introduction intended for those +interested in developing Milter filters. It includes: +<UL> +<LI>A description of Milter's design goals. + +<LI>An explanation of Milter application architecture, including +interactions between the support library and user code, and between +filters and the MTA. + +<LI>A specification of the C application programming interface. +<LI>An example of a simple Milter filter. +</UL> + +<H2>Contents</H2> + +<UL> +<LI><A href="design.html">Architecture</A> +<UL> + <LI>Design Goals + <LI>Implementing Filtering Policies + <LI>MTA - Filter communication +</UL> +<LI><A href="overview.html">Technical Overview</A> +<UL> + <LI>Initialization + <LI>Control flow + <LI>Multithreading + <LI>Resource Management + <LI>Signal Handling +</UL> +<LI><A href="api.html">API Documentation</A> +<UL> + <LI>Library Control Functions + <LI>Data Access Functions + <LI>Message Modification Functions + <LI>Callbacks +</UL> +<LI><A href="installation.html">Installation and Configuration</A> +<UL> + <LI>Compiling and Installing Your Filter + <LI>Configuring Sendmail +</UL> +<LI><A href="sample.html">A Sample Filter</A> +<!-- <LI><A href="other.html">Other Sources of Information</A> --> +</UL> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2001, 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/installation.html b/contrib/sendmail/libmilter/docs/installation.html new file mode 100644 index 0000000..07142e9 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/installation.html @@ -0,0 +1,165 @@ +<HTML> +<HEAD><TITLE>Installation and Configuration</TITLE> +</HEAD> +<BODY> +<!-- +$Id: installation.html,v 1.23 2006/08/31 17:16:03 ca Exp $ +--> +<H1>Installation</H1> +<H2>Contents</H2> +<UL> + <LI><A href="#compile">Compiling and Installing Your Filter</A> + <LI><A href="#config">Configuring Sendmail</A> +</UL> + +<H2><A name="compile">Compiling and Installing Your Filter</A></H2> + +To compile a filter, modify the Makefile provided with the sample program, or: +<UL> + <LI>Put the include and Sendmail directories in your include path + (e.g. -I/path/to/include -I/path/to/sendmail). + + <LI>Make sure libmilter.a is in your library path, and link your + application with it (e.g. "-lmilter"). + + <LI>Compile with pthreads, either by using -pthread for gcc, or + linking with a pthreads support library (-lpthread). +</UL> +Your compile command line will look like +<PRE> +cc -I/path/to/include -I/path/to/sendmail -c myfile.c +</PRE> +and your linking command line will look something like +<PRE> +cc -o myfilter [object-files] -L[library-location] -lmilter -pthread +</PRE> + +<H2><A name="config">Configuring Sendmail</A></H2> + +If you use a sendmail version older than 8.13 please see +the instructions for your version. +The default compilation options for sendmail enable support +for milters since 8.13. + +<P> +Next, you must add the desired filters to your sendmail configuration +(.mc) file. +Mail filters have three equates: +The required <CODE>S=</CODE> equate specifies the socket where +sendmail should look for the filter; the optional <CODE>F=</CODE> and +<CODE>T=</CODE> equates specify flags and timeouts, respectively. +All equates names, equate field names, and flag values are case sensitive. + +<P> +The current flags (<CODE>F=</CODE>) are: +<P> +<TABLE cellspacing="1" cellpadding=4 border=1> +<TR bgcolor="#dddddd" align=left valign=top> +<TH>Flag</TH> <TH align="center">Meaning</TH> +</TR> +<TR align="left" valign=top> +<TD>R</TD> <TD>Reject connection if filter unavailable</TD> +</TR> +<TR align="left" valign=top> +<TD>T</TD> <TD>Temporary fail connection if filter unavailable</TD> +</TR> +</TABLE> + +If a filter is unavailable or unresponsive and no flags have been +specified, the MTA will continue normal handling of the current +connection. +The MTA will try to contact the filter again on each new connection. + +<P> +There are three fields inside of the <CODE>T=</CODE> equate: S, R, and E. +Note the separator between each is a ";" (semicolon), as "," +(comma) already separates equates. +The value of each field is a decimal number followed by a single letter +designating the units ("s" for seconds, "m" for minutes). +The fields have the following meanings: +<P> +<TABLE cellspacing="1" cellpadding=4 border=1> +<TR bgcolor="#dddddd" align=left valign=top> +<TH>Flag</TH> <TH align="center">Meaning</TH> +</TR> +<TR align="left" valign=top> +<TD>C</TD> <TD>Timeout for connecting to a filter. If set to 0, the + system's <CODE>connect(2)</CODE> timeout will be used. + Default: 5m</TD> +</TR> +<TR align="left" valign=top> +<TD>S</TD> <TD>Timeout for sending information from the MTA to a + filter. Default: 10s</TD> +</TR> +<TR align="left" valign=top> +<TD>R</TD> <TD>Timeout for reading reply from the filter. Default: 10s</TD> +</TR> +<TR align="left" valign=top> +<TD>E</TD> <TD>Overall timeout between sending end-of-message to + filter and waiting for the final acknowledgment. Default: 5m</TD> +</TR> +</TABLE> + +<P> +The following sendmail.mc example specifies three filters. +The first two rendezvous on Unix-domain sockets in the /var/run directory; +the third uses an IP socket on port 999. +<PRE> + INPUT_MAIL_FILTER(`filter1', `S=unix:/var/run/f1.sock, F=R') + INPUT_MAIL_FILTER(`filter2', `S=unix:/var/run/f2.sock, F=T, T=S:1s;R:1s;E:5m') + INPUT_MAIL_FILTER(`filter3', `S=inet:999@localhost, T=C:2m') + + define(`confINPUT_MAIL_FILTERS', `filter2,filter1,filter3') +<HR width="30%"> + m4 ../m4/cf.m4 myconfig.mc > myconfig.cf +</PRE> +By default, the filters would be run in the order declared, +i.e. "filter1, filter2, filter3"; however, since +<CODE>confINPUT_MAIL_FILTERS</CODE> is defined, the filters will be +run "filter2, filter1, filter3". +Also note that a filter can be defined +without adding it to the input filter list by using +MAIL_FILTER() instead of INPUT_MAIL_FILTER(). + +<P> +The above macros will result in the following lines being added to +your .cf file: +<PRE> + Xfilter1, S=unix:/var/run/f1.sock, F=R + Xfilter2, S=unix:/var/run/f2.sock, F=T, T=S:1s;R:1s;E:5m + Xfilter3, S=inet:999@localhost, T=C:2m + + O InputMailFilters=filter2,filter1,filter3 +</PRE> +<P> +Finally, the sendmail macros accessible via +<A HREF="smfi_getsymval.html">smfi_getsymval</A> can be configured by +defining the following m4 variables (or cf options): +<TABLE cellspacing="1" cellpadding=4 border=1> +<TR bgcolor="#dddddd" align=left valign=top> +<TH align="center">In .mc file</TH> <TH align="center">In .cf file</TH> +<TH align="center">Default Value</TH> +</TR> +<TR><TD>confMILTER_MACROS_CONNECT</TD><TD>Milter.macros.connect</TD> +<TD><CODE>j, _, {daemon_name}, {if_name}, {if_addr}</CODE></TD></TR> +<TR><TD>confMILTER_MACROS_HELO</TD><TD>Milter.macros.helo</TD> +<TD><CODE>{tls_version}, {cipher}, {cipher_bits}, {cert_subject}, +{cert_issuer}</CODE></TD></TR> +<TR><TD>confMILTER_MACROS_ENVFROM</TD><TD>Milter.macros.envfrom</TD> +<TD><CODE>i, {auth_type}, {auth_authen}, {auth_ssf}, {auth_author}, +{mail_mailer}, {mail_host}, {mail_addr}</CODE></TD></TR> +<TR><TD>confMILTER_MACROS_ENVRCPT</TD><TD>Milter.macros.envrcpt</TD> +<TD><CODE>{rcpt_mailer}, {rcpt_host}, {rcpt_addr}</CODE></TD></TR> +</TABLE> +For information about available macros and their meanings, please +consult the sendmail documentation. +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000-2003, 2006 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/other.html b/contrib/sendmail/libmilter/docs/other.html new file mode 100644 index 0000000..c33b536 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/other.html @@ -0,0 +1,18 @@ +<HTML> +<HEAD><TITLE>Other Resources</TITLE> +</HEAD> +<BODY> +<!-- +$Id: other.html,v 1.6 2006/08/08 20:55:57 ca Exp $ +--> +FAQ? Mailing list? More sample filters? +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/overview.html b/contrib/sendmail/libmilter/docs/overview.html new file mode 100644 index 0000000..5c6f21c --- /dev/null +++ b/contrib/sendmail/libmilter/docs/overview.html @@ -0,0 +1,217 @@ +<HTML> +<HEAD> +<TITLE>Technical Overview</TITLE> +</HEAD> +<BODY> +<!-- +$Id: overview.html,v 1.20 2009/11/13 18:15:05 ca Exp $ +--> + +<H1>Technical Overview</H1> + +<H2>Contents</H2> + +<UL> + <LI><A HREF="#Initialization">Initialization</A> + <LI><A HREF="#ControlFlow">Control Flow</A> + <LI><A HREF="#Multithreading">Multithreading</A> + <LI><A HREF="#ResourceManagement">Resource Management</A> + <LI><A HREF="#SignalHandling">Signal Handling</A> +</UL> + +<H2><A NAME="Initialization">Initialization</A></H2> + +In addition to its own initialization, +libmilter expects a filter to initialize several parameters +before calling <A HREF="smfi_main.html">smfi_main</A>: +<UL> + <LI>The callbacks the filter wishes to be called, and the types of + message modification it intends to perform (required, see + <A HREF="smfi_register.html">smfi_register</A>). + + <LI>The socket address to be used when communicating with the MTA + (required, see <A HREF="smfi_setconn.html">smfi_setconn</A>). + + <LI>The number of seconds to wait for MTA connections before + timing out (optional, see + <A HREF="smfi_settimeout.html">smfi_settimeout</A>). +</UL> +<P> +If the filter fails to initialize libmilter, +or if one or more of the parameters it has passed are invalid, +a subsequent call to smfi_main will fail. + +<H2><A NAME="ControlFlow">Control Flow</A></H2> + +<P> +The following pseudocode describes the filtering process from the +perspective of a set of <CODE>N</CODE> MTA's, +each corresponding to a connection. +Callbacks are shown beside the processing stages in which they are invoked; +if no callbacks are defined for a particular stage, +that stage may be bypassed. +Though it is not shown, +processing may be aborted at any time during a message, +in which case the +<A HREF="xxfi_abort.html">xxfi_abort</A> callback is invoked and control +returns to <CODE>MESSAGE</CODE>. +<P> +<PRE> +For each of N connections +{ + For each filter + process connection (<A HREF="xxfi_connect.html">xxfi_connect</A>) + For each filter + process helo/ehlo (<A HREF="xxfi_helo.html">xxfi_helo</A>) +MESSAGE:For each message in this connection (sequentially) + { + For each filter + process sender (<A HREF="xxfi_envfrom.html">xxfi_envfrom</A>) + For each recipient + { + For each filter + process recipient (<A HREF="xxfi_envrcpt.html">xxfi_envrcpt</A>) + } + For each filter + { + process DATA (<A HREF="xxfi_data.html">xxfi_data</A>) + For each header + process header (<A HREF="xxfi_header.html">xxfi_header</A>) + process end of headers (<A HREF="xxfi_eoh.html">xxfi_eoh</A>) + For each body block + process this body block (<A HREF="xxfi_body.html">xxfi_body</A>) + process end of message (<A HREF="xxfi_eom.html">xxfi_eom</A>) + } + } + For each filter + process end of connection (<A HREF="xxfi_close.html">xxfi_close</A>) +} +</PRE> + +<P>Note: Filters are contacted in order defined in config file.</P> + +<P> +To write a filter, a vendor supplies callbacks to process relevant +parts of a message transaction. +The library then controls all sequencing, threading, +and protocol exchange with the MTA. +<A HREF="#figure-3">Figure 3</A> outlines control flow for a filter +process, showing where different callbacks are invoked. +</P> + +<DIV ALIGN="center"><A NAME="figure-3"></A> +<TABLE border=1 cellspacing=0 cellpadding=2 width="70%"> +<TR bgcolor="#dddddd"><TH>SMTP Commands</TH><TH>Milter Callbacks</TH></TR> +<TR><TD>(open SMTP connection)</TD><TD>xxfi_connect</TD></TR> +<TR><TD>HELO ...</TD><TD>xxfi_helo</TD></TR> +<TR><TD>MAIL From: ...</TD><TD>xxfi_envfrom</TD></TR> +<TR><TD>RCPT To: ...</TD><TD>xxfi_envrcpt</TD></TR> +<TR><TD>[more RCPTs]</TD><TD>[xxfi_envrcpt]</TD></TR> +<TR><TD>DATA</TD><TD>xxfi_data</TD></TR> +<TR><TD>Header: ...</TD><TD>xxfi_header</TD></TR> +<TR><TD>[more headers]</TD><TD>[xxfi_header]</TD></TR> +<TR><TD> </TD><TD>xxfi_eoh</TD></TR> +<TR><TD>body... </TD><TD>xxfi_body</TD></TR> +<TR><TD>[more body...]</TD><TD>[xxfi_body]</TD></TR> +<TR><TD>.</TD><TD>xxfi_eom</TD></TR> +<TR><TD>QUIT</TD><TD>xxfi_close</TD></TR> +<TR><TD>(close SMTP connection)</TD><TD> </TD></TR> +</TABLE> +<B>Figure 3: Milter callbacks related to an SMTP transaction.</B> +</DIV> + +<P> +Note that although only a single message is shown above, multiple +messages may be sent in a single connection. +Note also that a message or connection may be aborted by +either the remote host or the MTA +at any point during the SMTP transaction. +f this occurs during a message (between the MAIL command and the final "."), +the filter's +<A HREF="xxfi_abort.html">xxfi_abort</A> routine will be called. +<A HREF="xxfi_close.html">xxfi_close</A> is called any time the +connection closes. + +<H2><A NAME="Multithreading">Multithreading</A></H2> + +<P> +A single filter process may handle any number of connections +simultaneously. +All filtering callbacks must therefore be reentrant, +and use some appropriate external synchronization methods to access +global data. +Furthermore, since there is not a one-to-one correspondence +between threads and connections +(N connections mapped onto M threads, M <= N), +connection-specific data must be accessed +through the handles provided by the Milter library. +The programmer cannot rely on library-supplied thread-specific data blocks +(e.g., <CODE>pthread_getspecific(3)</CODE>) to store connection-specific data. +See the API documentation for +<A HREF="smfi_setpriv.html">smfi_setpriv</A> and +<A HREF="smfi_getpriv.html">smfi_getpriv</A> for details. + +<H2><A NAME="ResourceManagement">Resource Management</A></H2> + +Since filters are likely to be long-lived, +and to handle many connections, +proper deallocation of per-connection resources is important. +The lifetime of a connection is bracketed by calls to the +callbacks <A HREF="xxfi_connect.html">xxfi_connect</A> and +<A HREF="xxfi_close.html">xxfi_close</A>. +Therefore connection-specific +resources (accessed via <A HREF="smfi_getpriv.html">smfi_getpriv</A> +and <A HREF="smfi_setpriv.html">smfi_setpriv</A>) may be allocated in +<A HREF="xxfi_connect.html">xxfi_connect</A>, +and should be freed in +<A HREF="xxfi_close.html">xxfi_close</A>. +For further information see +the <A HREF="api.html#conn-msg">discussion</A> of message- versus +connection-oriented routines. +In particular, +note that there is only one connection-specific data pointer per connection. +<P> + +Each message is bracketed by calls to +<A HREF="xxfi_envfrom.html">xxfi_envfrom</A> and +<A HREF="xxfi_eom.html">xxfi_eom</A> (or +<A HREF="xxfi_abort.html">xxfi_abort</A>), +implying that message-specific resources can be allocated +and reclaimed in these routines. +Since the messages in a connection are processed sequentially by each filter, +there will be only one active message associated with a given +connection and filter (and connection-private data block). +These resources must still be accessed through +<A HREF="smfi_getpriv.html">smfi_getpriv</A> and +<A HREF="smfi_setpriv.html">smfi_setpriv</A>, +and must be reclaimed in +<A HREF="xxfi_abort.html">xxfi_abort</A>. + +<H2><A NAME="SignalHandling">Signal Handling</A></H2> + +libmilter takes care of signal handling, +the filters are not influenced directly by signals. +There are basically two types of signal handlers: + +<OL> +<LI><TT>Stop</TT>: no new connections from the MTA will be accepted, +but existing connections are allowed to continue. +<LI><TT>Abort</TT>: all filters will be stopped as soon as the next +communication with the MTA happens. +</OL> + +Filters are not terminated asynchronously +(except by signals that can't be caught). +In the case of <TT>Abort</TT> the +<A HREF="xxfi_abort.html">xxfi_abort</A> callback is invoked. + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2001, 2003, 2006 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/sample.html b/contrib/sendmail/libmilter/docs/sample.html new file mode 100644 index 0000000..48e25c5 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/sample.html @@ -0,0 +1,537 @@ +<HTML> +<HEAD><TITLE>A Sample Filter</TITLE></HEAD> +<BODY> +<!-- +$Id: sample.html,v 1.22 2006/10/09 23:14:51 ca Exp $ +--> +<H1>A Sample Filter</H1> + +The following sample logs each message to a separate temporary file, +adds a recipient given with the -a flag, +and rejects a disallowed recipient address given with the -r flag. +It recognizes the following options: +<P> +<CENTER> +<TABLE border="1" cellpadding=2 cellspacing=1> +<TR><TD><CODE>-p port</CODE></TD><TD>The port through which the MTA will connect to the filter.</TD></TR> +<TR><TD><CODE>-t sec</CODE></TD><TD>The timeout value.</TD></TR> +<TR><TD><CODE>-r addr</CODE></TD><TD>A recipient to reject.</TD></TR> +<TR><TD><CODE>-a addr</CODE></TD><TD>A recipient to add.</TD></TR> +</TABLE> +</CENTER> +<HR> +<PRE> +#include <sys/types.h> +#include <sys/stat.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sysexits.h> +#include <unistd.h> + +#include "libmilter/mfapi.h" + +#ifndef bool +# define bool int +# define TRUE 1 +# define FALSE 0 +#endif /* ! bool */ + + +struct mlfiPriv +{ + char *mlfi_fname; + char *mlfi_connectfrom; + char *mlfi_helofrom; + FILE *mlfi_fp; +}; + +#define MLFIPRIV ((struct mlfiPriv *) <A href="smfi_getpriv.html">smfi_getpriv</A>(ctx)) + +extern sfsistat mlfi_cleanup(SMFICTX *, bool); + +/* recipients to add and reject (set with -a and -r options) */ +char *add = NULL; +char *reject = NULL; + +sfsistat +<A href="xxfi_connect.html">mlfi_connect</A>(ctx, hostname, hostaddr) + SMFICTX *ctx; + char *hostname; + _SOCK_ADDR *hostaddr; +{ + struct mlfiPriv *priv; + char *ident; + + /* allocate some private memory */ + priv = malloc(sizeof *priv); + if (priv == NULL) + { + /* can't accept this message right now */ + return SMFIS_TEMPFAIL; + } + memset(priv, '\0', sizeof *priv); + + /* save the private data */ + <A href="smfi_setpriv.html">smfi_setpriv</A>(ctx, priv); + + ident = <A href="smfi_getsymval.html">smfi_getsymval</A>(ctx, "_"); + if (ident == NULL) + ident = "???"; + if ((priv->mlfi_connectfrom = strdup(ident)) == NULL) + { + (void) mlfi_cleanup(ctx, FALSE); + return SMFIS_TEMPFAIL; + } + + /* continue processing */ + return SMFIS_CONTINUE; +} + +sfsistat +<A href="xxfi_helo.html">mlfi_helo</A>(ctx, helohost) + SMFICTX *ctx; + char *helohost; +{ + size_t len; + char *tls; + char *buf; + struct mlfiPriv *priv = MLFIPRIV; + + tls = <A href="smfi_getsymval.html">smfi_getsymval</A>(ctx, "{tls_version}"); + if (tls == NULL) + tls = "No TLS"; + if (helohost == NULL) + helohost = "???"; + len = strlen(tls) + strlen(helohost) + 3; + if ((buf = (char*) malloc(len)) == NULL) + { + (void) mlfi_cleanup(ctx, FALSE); + return SMFIS_TEMPFAIL; + } + snprintf(buf, len, "%s, %s", helohost, tls); + if (priv->mlfi_helofrom != NULL) + free(priv->mlfi_helofrom); + priv->mlfi_helofrom = buf; + + /* continue processing */ + return SMFIS_CONTINUE; +} + +sfsistat +<A href="xxfi_envfrom.html">mlfi_envfrom</A>(ctx, argv) + SMFICTX *ctx; + char **argv; +{ + int fd = -1; + int argc = 0; + struct mlfiPriv *priv = MLFIPRIV; + char *mailaddr = <A href="smfi_getsymval.html">smfi_getsymval</A>(ctx, "{mail_addr}"); + + /* open a file to store this message */ + if ((priv->mlfi_fname = strdup("/tmp/msg.XXXXXX")) == NULL) + { + (void) mlfi_cleanup(ctx, FALSE); + return SMFIS_TEMPFAIL; + } + + if ((fd = mkstemp(priv->mlfi_fname)) == -1) + { + (void) mlfi_cleanup(ctx, FALSE); + return SMFIS_TEMPFAIL; + } + + if ((priv->mlfi_fp = fdopen(fd, "w+")) == NULL) + { + (void) close(fd); + (void) mlfi_cleanup(ctx, FALSE); + return SMFIS_TEMPFAIL; + } + + /* count the arguments */ + while (*argv++ != NULL) + ++argc; + + /* log the connection information we stored earlier: */ + if (fprintf(priv->mlfi_fp, "Connect from %s (%s)\n\n", + priv->mlfi_helofrom, priv->mlfi_connectfrom) == EOF) + { + (void) mlfi_cleanup(ctx, FALSE); + return SMFIS_TEMPFAIL; + } + /* log the sender */ + if (fprintf(priv->mlfi_fp, "FROM %s (%d argument%s)\n", + mailaddr ? mailaddr : "???", argc, + (argc == 1) ? "" : "s") == EOF) + { + (void) mlfi_cleanup(ctx, FALSE); + return SMFIS_TEMPFAIL; + } + + /* continue processing */ + return SMFIS_CONTINUE; +} + +sfsistat +<A href="xxfi_envrcpt.html">mlfi_envrcpt</A>(ctx, argv) + SMFICTX *ctx; + char **argv; +{ + struct mlfiPriv *priv = MLFIPRIV; + char *rcptaddr = <A href="smfi_getsymval.html">smfi_getsymval</A>(ctx, "{rcpt_addr}"); + int argc = 0; + + /* count the arguments */ + while (*argv++ != NULL) + ++argc; + + /* log this recipient */ + if (reject != NULL && rcptaddr != NULL && + (strcasecmp(rcptaddr, reject) == 0)) + { + if (fprintf(priv->mlfi_fp, "RCPT %s -- REJECTED\n", + rcptaddr) == EOF) + { + (void) mlfi_cleanup(ctx, FALSE); + return SMFIS_TEMPFAIL; + } + return SMFIS_REJECT; + } + if (fprintf(priv->mlfi_fp, "RCPT %s (%d argument%s)\n", + rcptaddr ? rcptaddr : "???", argc, + (argc == 1) ? "" : "s") == EOF) + { + (void) mlfi_cleanup(ctx, FALSE); + return SMFIS_TEMPFAIL; + } + + /* continue processing */ + return SMFIS_CONTINUE; +} + +sfsistat +<A href="xxfi_header.html">mlfi_header</A>(ctx, headerf, headerv) + SMFICTX *ctx; + char *headerf; + unsigned char *headerv; +{ + /* write the header to the log file */ + if (fprintf(MLFIPRIV->mlfi_fp, "%s: %s\n", headerf, headerv) == EOF) + { + (void) mlfi_cleanup(ctx, FALSE); + return SMFIS_TEMPFAIL; + } + + /* continue processing */ + return SMFIS_CONTINUE; +} + +sfsistat +<A href="xxfi_eoh.html">mlfi_eoh</A>(ctx) + SMFICTX *ctx; +{ + /* output the blank line between the header and the body */ + if (fprintf(MLFIPRIV->mlfi_fp, "\n") == EOF) + { + (void) mlfi_cleanup(ctx, FALSE); + return SMFIS_TEMPFAIL; + } + + /* continue processing */ + return SMFIS_CONTINUE; +} + +sfsistat +<A href="xxfi_body.html">mlfi_body</A>(ctx, bodyp, bodylen) + SMFICTX *ctx; + unsigned char *bodyp; + size_t bodylen; +{ + struct mlfiPriv *priv = MLFIPRIV; + + /* output body block to log file */ + if (fwrite(bodyp, bodylen, 1, priv->mlfi_fp) != 1) + { + /* write failed */ + fprintf(stderr, "Couldn't write file %s: %s\n", + priv->mlfi_fname, strerror(errno)); + (void) mlfi_cleanup(ctx, FALSE); + return SMFIS_TEMPFAIL; + } + + /* continue processing */ + return SMFIS_CONTINUE; +} + +sfsistat +<A href="xxfi_eom.html">mlfi_eom</A>(ctx) + SMFICTX *ctx; +{ + bool ok = TRUE; + + /* change recipients, if requested */ + if (add != NULL) + ok = (<A href="smfi_addrcpt.html">smfi_addrcpt</A>(ctx, add) == MI_SUCCESS); + return mlfi_cleanup(ctx, ok); +} + +sfsistat +<A href="xxfi_abort.html">mlfi_abort</A>(ctx) + SMFICTX *ctx; +{ + return mlfi_cleanup(ctx, FALSE); +} + +sfsistat +mlfi_cleanup(ctx, ok) + SMFICTX *ctx; + bool ok; +{ + sfsistat rstat = SMFIS_CONTINUE; + struct mlfiPriv *priv = MLFIPRIV; + char *p; + char host[512]; + char hbuf[1024]; + + if (priv == NULL) + return rstat; + + /* close the archive file */ + if (priv->mlfi_fp != NULL && fclose(priv->mlfi_fp) == EOF) + { + /* failed; we have to wait until later */ + fprintf(stderr, "Couldn't close archive file %s: %s\n", + priv->mlfi_fname, strerror(errno)); + rstat = SMFIS_TEMPFAIL; + (void) unlink(priv->mlfi_fname); + } + else if (ok) + { + /* add a header to the message announcing our presence */ + if (gethostname(host, sizeof host) < 0) + snprintf(host, sizeof host, "localhost"); + p = strrchr(priv->mlfi_fname, '/'); + if (p == NULL) + p = priv->mlfi_fname; + else + p++; + snprintf(hbuf, sizeof hbuf, "%s@%s", p, host); + if (<A href="smfi_addheader.html">smfi_addheader</A>(ctx, "X-Archived", hbuf) != MI_SUCCESS) + { + /* failed; we have to wait until later */ + fprintf(stderr, + "Couldn't add header: X-Archived: %s\n", + hbuf); + ok = FALSE; + rstat = SMFIS_TEMPFAIL; + (void) unlink(priv->mlfi_fname); + } + } + else + { + /* message was aborted -- delete the archive file */ + fprintf(stderr, "Message aborted. Removing %s\n", + priv->mlfi_fname); + rstat = SMFIS_TEMPFAIL; + (void) unlink(priv->mlfi_fname); + } + + /* release private memory */ + if (priv->mlfi_fname != NULL) + free(priv->mlfi_fname); + + /* return status */ + return rstat; +} + +sfsistat +<A href="xxfi_close.html">mlfi_close</A>(ctx) + SMFICTX *ctx; +{ + struct mlfiPriv *priv = MLFIPRIV; + + if (priv == NULL) + return SMFIS_CONTINUE; + if (priv->mlfi_connectfrom != NULL) + free(priv->mlfi_connectfrom); + if (priv->mlfi_helofrom != NULL) + free(priv->mlfi_helofrom); + free(priv); + <A href="smfi_setpriv.html">smfi_setpriv</A>(ctx, NULL); + return SMFIS_CONTINUE; +} + +sfsistat +<A href="xxfi_unknown.html">mlfi_unknown</A>(ctx, cmd) + SMFICTX *ctx; + char *cmd; +{ + return SMFIS_CONTINUE; +} + +sfsistat +<A href="xxfi_data.html">mlfi_data</A>(ctx) + SMFICTX *ctx; +{ + return SMFIS_CONTINUE; +} + +sfsistat +<A href="xxfi_negotiate.html">mlfi_negotiate</A>(ctx, f0, f1, f2, f3, pf0, pf1, pf2, pf3) + SMFICTX *ctx; + unsigned long f0; + unsigned long f1; + unsigned long f2; + unsigned long f3; + unsigned long *pf0; + unsigned long *pf1; + unsigned long *pf2; + unsigned long *pf3; +{ + return SMFIS_ALL_OPTS; +} + +struct smfiDesc smfilter = +{ + "SampleFilter", /* filter name */ + SMFI_VERSION, /* version code -- do not change */ + SMFIF_ADDHDRS|SMFIF_ADDRCPT, + /* flags */ + <A href="xxfi_connect.html">mlfi_connect</A>, /* connection info filter */ + <A href="xxfi_helo.html">mlfi_helo</A>, /* SMTP HELO command filter */ + <A href="xxfi_envfrom.html">mlfi_envfrom</A>, /* envelope sender filter */ + <A href="xxfi_envrcpt.html">mlfi_envrcpt</A>, /* envelope recipient filter */ + <A href="xxfi_header.html">mlfi_header</A>, /* header filter */ + <A href="xxfi_eoh.html">mlfi_eoh</A>, /* end of header */ + <A href="xxfi_body.html">mlfi_body</A>, /* body block filter */ + <A href="xxfi_eom.html">mlfi_eom</A>, /* end of message */ + <A href="xxfi_abort.html">mlfi_abort</A>, /* message aborted */ + <A href="xxfi_close.html">mlfi_close</A>, /* connection cleanup */ + <A href="xxfi_unknown.html">mlfi_unknown</A>, /* unknown SMTP commands */ + <A href="xxfi_data.html">mlfi_data</A>, /* DATA command */ + <A href="xxfi_negotiate.html">mlfi_negotiate</A> /* Once, at the start of each SMTP connection */ +}; + +static void +usage(prog) + char *prog; +{ + fprintf(stderr, + "Usage: %s -p socket-addr [-t timeout] [-r reject-addr] [-a add-addr]\n", + prog); +} + +int +main(argc, argv) + int argc; + char **argv; +{ + bool setconn = FALSE; + int c; + const char *args = "p:t:r:a:h"; + extern char *optarg; + + /* Process command line options */ + while ((c = getopt(argc, argv, args)) != -1) + { + switch (c) + { + case 'p': + if (optarg == NULL || *optarg == '\0') + { + (void) fprintf(stderr, "Illegal conn: %s\n", + optarg); + exit(EX_USAGE); + } + if (<A href="smfi_setconn.html">smfi_setconn</A>(optarg) == MI_FAILURE) + { + (void) fprintf(stderr, + "smfi_setconn failed\n"); + exit(EX_SOFTWARE); + } + + /* + ** If we're using a local socket, make sure it + ** doesn't already exist. Don't ever run this + ** code as root!! + */ + + if (strncasecmp(optarg, "unix:", 5) == 0) + unlink(optarg + 5); + else if (strncasecmp(optarg, "local:", 6) == 0) + unlink(optarg + 6); + setconn = TRUE; + break; + + case 't': + if (optarg == NULL || *optarg == '\0') + { + (void) fprintf(stderr, "Illegal timeout: %s\n", + optarg); + exit(EX_USAGE); + } + if (<A href="smfi_settimeout.html">smfi_settimeout</A>(atoi(optarg)) == MI_FAILURE) + { + (void) fprintf(stderr, + "smfi_settimeout failed\n"); + exit(EX_SOFTWARE); + } + break; + + case 'r': + if (optarg == NULL) + { + (void) fprintf(stderr, + "Illegal reject rcpt: %s\n", + optarg); + exit(EX_USAGE); + } + reject = optarg; + break; + + case 'a': + if (optarg == NULL) + { + (void) fprintf(stderr, + "Illegal add rcpt: %s\n", + optarg); + exit(EX_USAGE); + } + add = optarg; + smfilter.xxfi_flags |= SMFIF_ADDRCPT; + break; + + case 'h': + default: + usage(argv[0]); + exit(EX_USAGE); + } + } + if (!setconn) + { + fprintf(stderr, "%s: Missing required -p argument\n", argv[0]); + usage(argv[0]); + exit(EX_USAGE); + } + if (<A href="smfi_register.html">smfi_register</A>(smfilter) == MI_FAILURE) + { + fprintf(stderr, "smfi_register failed\n"); + exit(EX_UNAVAILABLE); + } + return <A href="smfi_main.html">smfi_main</A>(); +} + +/* eof */ + +</PRE> +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000-2004, 2006 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_addheader.html b/contrib/sendmail/libmilter/docs/smfi_addheader.html new file mode 100644 index 0000000..460b4ca --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_addheader.html @@ -0,0 +1,130 @@ +<HTML> +<HEAD><TITLE>smfi_addheader</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_addheader.html,v 1.20 2009/05/18 23:51:23 ca Exp $ +--> +<H1>smfi_addheader</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_addheader( + SMFICTX *ctx, + char *headerf, + char *headerv +); +</PRE> +Add a header to the current message. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>Called only from <A href="xxfi_eom.html">xxfi_eom</A>.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>Adds a header to the current message.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>headerf</TD> + <TD>The header name, a non-NULL, null-terminated string. + </TD></TR> + <TR valign="top"><TD>headerv</TD> + <TD>The header value to be added, a non-NULL, null-terminated string. + This may be the empty string. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_addheader returns MI_FAILURE if: +<UL><LI>headerf or headerv is NULL. + <LI>Adding headers in the current connection state is invalid. + <LI>Memory allocation fails. + <LI>A network error occurs. + <LI>SMFIF_ADDHDRS was not set when <A href="smfi_register.html">smfi_register</A> was called. +</UL> +Otherwise, it returns MI_SUCCESS. +</TD> +</TR> + +<!----------- Notes ----------> +<TR align="left" valign=top> +<TH>NOTES</TH> +<TD> +<UL><LI>smfi_addheader does not change a message's existing headers. +To change a header's current value, use +<A HREF="smfi_chgheader.html">smfi_chgheader</A>. + <LI>A filter which calls smfi_addheader must have set the SMFIF_ADDHDRS + flag in the smfiDesc_str passed to + <A href="smfi_register.html">smfi_register</A>. + <LI>For smfi_addheader, filter order is important. + <B>Later filters will see the header changes made by earlier ones.</B> + <LI>Neither the name nor the value of the header is checked for + standards compliance. + However, each line of the header must be under 2048 characters + and should be under 998 characters. + If longer headers are needed, make them multi-line. + To make a multi-line header, + insert a line feed (ASCII 0x0a, or <TT>\n</TT> in C) + followed by at least one whitespace character + such as a space (ASCII 0x20) or tab (ASCII 0x09, or <TT>\t</TT> in C). + The line feed should NOT be preceded by a carriage return (ASCII 0x0d); + the MTA will add this automatically. + <B>It is the filter writer's responsibility to ensure that no standards + are violated.</B> + <LI>The MTA adds a leading space to an added header value unless + the flag +<A HREF="xxfi_negotiate.html#SMFIP_HDR_LEADSPC"><CODE>SMFIP_HDR_LEADSPC</CODE></A> + is set, in which case the milter + must include any desired leading spaces itself. +</UL> +</TD> +</TR> + +<!----------- Example code ----------> +<TR> +<TH valign="top" align=left>EXAMPLE</TH> + +<TD> + <PRE> + int ret; + SMFICTX *ctx; + + ... + + ret = smfi_addheader(ctx, "Content-Type", + "multipart/mixed;\n\tboundary=\"foobar\""); + </PRE> +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000-2003, 2006, 2009 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_addrcpt.html b/contrib/sendmail/libmilter/docs/smfi_addrcpt.html new file mode 100644 index 0000000..cf997e5 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_addrcpt.html @@ -0,0 +1,83 @@ +<HTML> +<HEAD><TITLE>smfi_addrcpt</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_addrcpt.html,v 1.11 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_addrcpt</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_addrcpt( + SMFICTX *ctx, + char *rcpt +); +</PRE> +Add a recipient for the current message. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>Called only from <A href="xxfi_eom.html">xxfi_eom</A>.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>Add a recipient to the message envelope.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>rcpt</TD> + <TD>The new recipient's address. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_addrcpt will fail and return MI_FAILURE if: +<UL><LI>rcpt is NULL. + <LI>Adding recipients in the current connection state is invalid. + <LI>A network error occurs. + <LI>SMFIF_ADDRCPT was not set when <A href="smfi_register.html">smfi_register</A> was called. +</UL> +Otherwise, it will return MI_SUCCESS. +</TD> +</TR> + +<!----------- Notes ----------> +<TR align="left" valign=top> +<TH>NOTES</TH> +<TD> +A filter which calls smfi_addrcpt must have set the SMFIF_ADDRCPT flag +in the smfiDesc_str passed to +<A href="smfi_register.html">smfi_register</A>. +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_addrcpt_par.html b/contrib/sendmail/libmilter/docs/smfi_addrcpt_par.html new file mode 100644 index 0000000..776b02c --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_addrcpt_par.html @@ -0,0 +1,88 @@ +<HTML> +<HEAD><TITLE>smfi_addrcpt_par</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_addrcpt_par.html,v 1.4 2007/03/19 16:38:02 ca Exp $ +--> +<H1>smfi_addrcpt_par</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_addrcpt_par( + SMFICTX *ctx, + char *rcpt, + char *args +); +</PRE> +Add a recipient for the current message including ESMTP arguments. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>Called only from <A href="xxfi_eom.html">xxfi_eom</A>.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>Add a recipient to the message envelope.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>rcpt</TD> + <TD>The new recipient's address. + </TD></TR> + <TR valign="top"><TD>args</TD> + <TD>The new recipient's ESMTP parameters. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_addrcpt will fail and return MI_FAILURE if: +<UL><LI>rcpt is NULL. + <LI>Adding recipients in the current connection state is invalid. + <LI>A network error occurs. + <LI>SMFIF_ADDRCPT_PAR was not set when + <A href="smfi_register.html">smfi_register</A> was called. +</UL> +Otherwise, it will return MI_SUCCESS. +</TD> +</TR> + +<!----------- Notes ----------> +<TR align="left" valign=top> +<TH>NOTES</TH> +<TD> +A filter which calls smfi_addrcpt must have set the SMFIF_ADDRCPT_PAR flag +in the smfiDesc_str passed to +<A href="smfi_register.html">smfi_register</A>. +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2006 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_chgfrom.html b/contrib/sendmail/libmilter/docs/smfi_chgfrom.html new file mode 100644 index 0000000..e8249e0 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_chgfrom.html @@ -0,0 +1,94 @@ +<HTML> +<HEAD><TITLE>smfi_chgfrom</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_chgfrom.html,v 1.3 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_chgfrom</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_chgfrom( + SMFICTX *ctx, + const char *mail, + char *args +); +</PRE> +Change the envelope sender (MAIL From) of the current message. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>Called only from <A href="xxfi_eom.html">xxfi_eom</A>.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>Change the envelope sender (MAIL From) of the current message.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>mail</TD> + <TD>The new sender address. + </TD></TR> + <TR valign="top"><TD>args</TD> + <TD>ESMTP arguments. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_chgfrom will fail and return MI_FAILURE if: +<UL><LI>mail is NULL. + <LI>Changing the sender in the current connection state is invalid. + <LI>A network error occurs. + <LI>SMFIF_CHGFROM was not set when <A href="smfi_register.html">smfi_register</A> was called. +</UL> +Otherwise, it will return MI_SUCCESS. +</TD> +</TR> + +<!----------- Notes ----------> +<TR align="left" valign=top> +<TH>NOTES</TH> +<TD> +A filter which calls smfi_chgfrom must have set the SMFIF_CHGFROM flag +in the smfiDesc_str passed to +<A href="smfi_register.html">smfi_register</A>. +<BR> +Even though all ESMTP arguments could be set via this call, +it does not make sense to do so for many of them, +e.g., SIZE and BODY. +Setting those may cause problems, proper care must be taken. +Moreover, there is no feedback from the MTA to the milter +whether the call was successful. +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2006 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_chgheader.html b/contrib/sendmail/libmilter/docs/smfi_chgheader.html new file mode 100644 index 0000000..517b5ba --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_chgheader.html @@ -0,0 +1,125 @@ +<HTML> +<HEAD><TITLE>smfi_chgheader</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_chgheader.html,v 1.18 2009/05/18 23:51:23 ca Exp $ +--> +<H1>smfi_chgheader</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_chgheader( + SMFICTX *ctx, + char *headerf, + mi_int32 hdridx, + char *headerv +); +</PRE> +Change or delete a message header. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>Called only from <A href="xxfi_eom.html">xxfi_eom</A>.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>Changes a header's value for the current message.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>headerf</TD> + <TD>The header name, a non-NULL, null-terminated string. + </TD></TR> + <TR valign="top"><TD>hdridx</TD> + <TD>Header index value (1-based). A hdridx value of 1 will modify the first occurrence of a header named headerf. If hdridx is greater than the number of times headerf appears, a new copy of headerf will be added. + </TD></TR> + <TR valign="top"><TD>headerv</TD> + <TD>The new value of the given header. headerv == NULL implies that the header should be deleted. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD> +smfi_chgheader will return MI_FAILURE if +<UL><LI>headerf is NULL + <LI>Modifying headers in the current connection state is invalid. + <LI>Memory allocation fails. + <LI>A network error occurs. + <LI>SMFIF_CHGHDRS was not set when <A href="smfi_register.html">smfi_register</A> was called. +</UL> +Otherwise, it returns MI_SUCCESS. +</TR> + +<!----------- Notes ----------> +<TR align="left" valign=top> +<TH>NOTES</TH> +<TD> +<UL><LI>While smfi_chgheader may be used to add new headers, it is more efficient and far safer to use <A href="smfi_addheader.html">smfi_addheader</A>. + <LI>A filter which calls smfi_chgheader must have set the SMFIF_CHGHDRS flag in the smfiDesc_str passed to <A href="smfi_register.html">smfi_register</A>. + <LI>For smfi_chgheader, filter order is important. <B>Later filters will see the header changes made by earlier ones.</B> + <LI>Neither the name nor the value of the header is checked for + standards compliance. However, each line of the header must be under + 2048 characters and should be under 998 characters. If longer headers + are needed, make them multi-line. To make a multi-line header, insert + a line feed (ASCII 0x0a, or <TT>\n</TT> in C) followed by at least + one whitespace character such as a space (ASCII 0x20) or tab (ASCII 0x09, + or <TT>\t</TT> in C). The line feed should NOT be preceded by a + carriage return (ASCII 0x0d); the MTA will add this automatically. + <B>It is the filter writer's responsibility to ensure that no standards + are violated.</B> + <LI>The MTA adds a leading space to a header value unless + the flag +<A HREF="xxfi_negotiate.html#SMFIP_HDR_LEADSPC"><CODE>SMFIP_HDR_LEADSPC</CODE></A> + is set, in which case the milter + must include any desired leading spaces itself. +</UL> +</TD> +</TR> + +<!----------- Example code ----------> +<TR> +<TH valign="top" align=left>EXAMPLE</TH> + +<TD> + <PRE> + int ret; + SMFICTX *ctx; + + ... + + ret = smfi_chgheader(ctx, "Content-Type", 1, + "multipart/mixed;\n\tboundary=\"foobar\""); + </PRE> +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000-2003, 2009 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_delrcpt.html b/contrib/sendmail/libmilter/docs/smfi_delrcpt.html new file mode 100644 index 0000000..c43dcd6 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_delrcpt.html @@ -0,0 +1,82 @@ +<HTML> +<HEAD><TITLE>smfi_delrcpt</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_delrcpt.html,v 1.11 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_delrcpt</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_delrcpt( + SMFICTX *ctx; + char *rcpt; +); +</PRE> +Remove a recipient from the current message's envelope. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>Called only from <A href="xxfi_eom.html">xxfi_eom</A>.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>smfi_delrcpt removes the named recipient from the current message's envelope.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>rcpt</TD> + <TD>The recipient address to be removed, a non-NULL, null-terminated string. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_delrcpt will fail and return MI_FAILURE if: +<UL> + <LI>rcpt is NULL. + <LI>Deleting recipients in the current connection state is invalid. + <LI>A network error occurs. + <LI>SMFIF_DELRCPT was not set when <A href="smfi_register.html">smfi_register</A> was called. +</UL> +Otherwise, it will return MI_SUCCESS +</TD> +</TR> + +<!----------- Notes ----------> +<TR align="left" valign=top> +<TH>NOTES</TH> +<TD> +The addresses to be removed must match exactly. For example, an address and its expanded form do not match. +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_getpriv.html b/contrib/sendmail/libmilter/docs/smfi_getpriv.html new file mode 100644 index 0000000..9584b9e --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_getpriv.html @@ -0,0 +1,62 @@ +<HTML> +<HEAD><TITLE>smfi_getpriv</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_getpriv.html,v 1.9 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_getpriv</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +void* smfi_getpriv( + SMFICTX *ctx +); +</PRE> +Get the connection-specific data pointer for this connection. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>smfi_getpriv may be called in any of the xxfi_* callbacks.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>None.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_getpriv returns the private data pointer stored by a prior call to <A href="smfi_setpriv.html">smfi_setpriv</A>, or NULL if none has been set.</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_getsymval.html b/contrib/sendmail/libmilter/docs/smfi_getsymval.html new file mode 100644 index 0000000..671dbfa --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_getsymval.html @@ -0,0 +1,105 @@ +<HTML> +<HEAD><TITLE>smfi_getsymval</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_getsymval.html,v 1.15 2007/03/19 16:49:11 ca Exp $ +--> +<H1>smfi_getsymval</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +char* smfi_getsymval( + SMFICTX *ctx, + char *symname +); +</PRE> +Get the value of a sendmail macro. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>smfi_getsymval may be called from within any of the xxfi_* callbacks. Which macros are defined will depend on when it is called.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>None.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>The opaque context structure. + </TD></TR> + <TR valign="top"><TD>symname</TD> + <TD>The name of a sendmail macro. + Single letter macros can optionally be enclosed in braces ("{" and "}"), + longer macro names must be enclosed in braces, just as in a + <TT>sendmail.cf</TT> file. + <A href="#notes">See below</A> for default macros. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_getsymval returns the value of the given macro as a null-terminated string, or NULL if the macro is not defined.</TD> +</TR> + +<!----------- Notes ----------> +<TR align="left" valign=top> +<TH><A name="notes">NOTES</A></TH> +<TD> +By default, the following macros are valid in the given contexts: + +<TABLE border="1" cellspacing=0> +<TR bgcolor="#dddddd"><TH>Sent With</TH><TH>Macros</TH></TR> +<TR><TD>xxfi_connect</TD> <TD>daemon_name, if_name, if_addr, j, _</TD></TR> +<TR><TD>xxfi_helo</TD> <TD>tls_version, cipher, cipher_bits, cert_subject, cert_issuer</TD></TR> +<TR><TD>xxfi_envfrom</TD> <TD>i, auth_type, auth_authen, auth_ssf, auth_author, + mail_mailer, mail_host, mail_addr</TD></TR> +<TR><TD>xxfi_envrcpt</TD> <TD>rcpt_mailer, rcpt_host, rcpt_addr</TD></TR> + +<TR><TD>xxfi_data</TD> <TD>(none)</TD></TR> +<TR><TD>xxfi_eoh</TD> <TD>(none)</TD></TR> +<TR><TD>xxfi_eom</TD> <TD>msg_id</TD></TR> +</TABLE> +<P> +All macros stay in effect from the point they are received +until the end of the connection for the first two sets, +the end of the message for the third (xxfi_envfrom) and last (xxfi_eom), +and just for each recipient for xxfi_envrcpt. +<P> +The macro list can be changed using the confMILTER_MACROS_* options in +sendmail.mc. +The scopes of such macros will be determined by when they are set by sendmail. +For descriptions of macros' values, +please see the +"Sendmail Installation and Operation Guide" +provided with your sendmail distribution. + +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2002-2003, 2007 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_insheader.html b/contrib/sendmail/libmilter/docs/smfi_insheader.html new file mode 100644 index 0000000..5962e61 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_insheader.html @@ -0,0 +1,150 @@ +<HTML> +<HEAD><TITLE>smfi_insheader</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_insheader.html,v 1.10 2009/05/18 23:51:23 ca Exp $ +--> +<H1>smfi_insheader</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_insheader( + SMFICTX *ctx, + int hdridx, + char *headerf, + char *headerv +); +</PRE> +Prepend a header to the current message. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>Called only from <A href="xxfi_eom.html">xxfi_eom</A>.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>Prepends a header to the current message.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>hdridx</TD> + <TD>The location in the internal header list where this header should + be inserted; 0 makes it the topmost header, etc. + </TD></TR> + <TR valign="top"><TD>headerf</TD> + <TD>The header name, a non-NULL, null-terminated string. + </TD></TR> + <TR valign="top"><TD>headerv</TD> + <TD>The header value to be added, a non-NULL, null-terminated string. This may be the empty string. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_insheader returns MI_FAILURE if: +<UL><LI>headerf or headerv is NULL. + <LI>Adding headers in the current connection state is invalid. + <LI>Memory allocation fails. + <LI>A network error occurs. + <LI>SMFIF_ADDHDRS was not set when <A href="smfi_register.html">smfi_register</A> was called. +</UL> +Otherwise, it returns MI_SUCCESS. +</TD> +</TR> + +<!----------- Notes ----------> +<TR align="left" valign=top> +<TH>NOTES</TH> +<TD> +<UL> + <LI>smfi_insheader does not change a message's existing headers. + To change a header's current value, use + <A HREF="smfi_chgheader.html">smfi_chgheader</A>. + <LI>A filter which calls smfi_insheader must have set the SMFIF_ADDHDRS + flag in the smfiDesc_str passed to + <A href="smfi_register.html">smfi_register</A>. + <LI>For smfi_insheader, filter order is important. + <B>Later filters will see the header changes made by earlier ones.</B> + <LI>A filter will receive <EM>only</EM> headers that have been sent + by the SMTP client and those header modifications by earlier filters. + It will <EM>not</EM> receive the headers that are inserted by sendmail + itself. + This makes the header insertion position highly dependent on + the headers that exist in the incoming message + and those that are configured to be added by sendmail. + For example, sendmail will always add a + <CODE>Received:</CODE> header to the beginning of the headers. + Setting <CODE>hdridx</CODE> to 0 will actually insert the header + before this <CODE>Received:</CODE> header. + However, later filters can be easily confused as they receive + the added header, but not the <CODE>Received:</CODE> header, + thus making it hard to insert a header at a fixed position. + <LI>If hdridx is a number larger than the number of headers in the message, + the header will simply be appended. + <LI>Neither the name nor the value of the header is checked for + standards compliance. + However, each line of the header must be under 2048 characters + and should be under 998 characters. + If longer headers are needed, make them multi-line. + To make a multi-line header, + insert a line feed (ASCII 0x0a, or <TT>\n</TT> in C) + followed by at least one whitespace character + such as a space (ASCII 0x20) or tab (ASCII 0x09, or <TT>\t</TT> in C). + The line feed should NOT be preceded by a carriage return (ASCII 0x0d); + the MTA will add this automatically. + <B>It is the filter writer's responsibility to ensure that no standards + are violated.</B> + <LI>The MTA adds a leading space to an inserted header value unless + the flag +<A HREF="xxfi_negotiate.html#SMFIP_HDR_LEADSPC"><CODE>SMFIP_HDR_LEADSPC</CODE></A> + is set, in which case the milter + must include any desired leading spaces itself. +</UL> +</TD> +</TR> + +<!----------- Example code ----------> +<TR> +<TH valign="top" align=left>EXAMPLE</TH> + +<TD> + <PRE> + int ret; + SMFICTX *ctx; + + ... + + ret = smfi_insheader(ctx, 0, "First", "See me?"); + </PRE> +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2004, 2006, 2009 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_main.html b/contrib/sendmail/libmilter/docs/smfi_main.html new file mode 100644 index 0000000..a749386 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_main.html @@ -0,0 +1,51 @@ +<HTML> +<HEAD><TITLE>smfi_main</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_main.html,v 1.9 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_main</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_main( +); +</PRE> +Hand control to libmilter event loop. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>smfi_main is called after a filter's initialization is complete.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>smfi_main hands control to the Milter event loop.</TD> +</TR> +</TABLE> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_main will return MI_FAILURE if it fails to establish a connection. This may occur for any of a variety of reasons (e.g. invalid address passed to <A href="smfi_setconn.html">smfi_setconn</A>). The reason for the failure will be logged. Otherwise, smfi_main will return MI_SUCCESS.</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_opensocket.html b/contrib/sendmail/libmilter/docs/smfi_opensocket.html new file mode 100644 index 0000000..53ea62b --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_opensocket.html @@ -0,0 +1,84 @@ +<HTML> +<HEAD><TITLE>smfi_opensocket</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_opensocket.html,v 1.7 2008/01/31 17:29:33 ca Exp $ +--> +<H1>smfi_opensocket</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_opensocket( + bool rmsocket +); +</PRE> +Attempt to create the interface socket MTAs will use to connect to the +filter. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>Called only from program mainline, +after calling <TT>smfi_setconn()</TT> and <TT>smfi_register()</TT>, +but before calling <TT>smfi_main()</TT>. +</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>smfi_opensocket attempts to create the socket specified previously by +a call to <TT>smfi_setconn()</TT> which will be the interface between MTAs +and the filter. +This allows the calling application to ensure that the +socket can be created. +If this is not called, +<TT>smfi_main()</TT> will do so implicitly. +</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>rmsocket</TD> + <TD>A flag indicating whether or not the library should try to + remove any existing UNIX domain socket before trying to create + a new one. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_opensocket will fail and return MI_FAILURE if: +<UL> + <LI>The interface socket could not be created for any reason. + <LI><TT>rmsocket</TT> was <TT>true</TT>, and either the socket could + not be examined, or exists and could not be removed. + <LI><TT>smfi_setconn()</TT> or <TT>smfi_register()</TT> + have not been called. +</UL> +Otherwise, it will return MI_SUCCESS +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2003, 2008 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_progress.html b/contrib/sendmail/libmilter/docs/smfi_progress.html new file mode 100644 index 0000000..801bdf3 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_progress.html @@ -0,0 +1,68 @@ +<HTML> +<HEAD><TITLE>smfi_progress</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_progress.html,v 1.5 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_progress</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_progress( + SMFICTX *ctx; +); +</PRE> +Notify the MTA that an operation is still in progress. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>Called only from <A href="xxfi_eom.html">xxfi_eom</A>.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>smfi_progress notifies the MTA that the filter is still working +on a message, causing the MTA to re-start its timeouts.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_progress will fail and return MI_FAILURE if: +<UL> + <LI>A network error occurs. +</UL> +Otherwise, it will return MI_SUCCESS +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_quarantine.html b/contrib/sendmail/libmilter/docs/smfi_quarantine.html new file mode 100644 index 0000000..656a480 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_quarantine.html @@ -0,0 +1,73 @@ +<HTML> +<HEAD><TITLE>smfi_quarantine</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_quarantine.html,v 1.5 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_quarantine</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_quarantine( + SMFICTX *ctx; + char *reason; +); +</PRE> +Quarantine the message using the given reason. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>Called only from <A href="xxfi_eom.html">xxfi_eom</A>.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>smfi_quarantine quarantines the message using the given reason.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>reason</TD> + <TD>The quarantine reason, a non-NULL and non-empty null-terminated string. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_quarantine will fail and return MI_FAILURE if: +<UL> + <LI>reason is NULL or empty. + <LI>A network error occurs. + <LI>SMFIF_QUARANTINE was not set when <A href="smfi_register.html">smfi_register</A> was called. +</UL> +Otherwise, it will return MI_SUCCESS +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2002-2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_register.html b/contrib/sendmail/libmilter/docs/smfi_register.html new file mode 100644 index 0000000..1a35918 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_register.html @@ -0,0 +1,224 @@ +<HTML> +<HEAD><TITLE>smfi_register</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_register.html,v 1.18 2006/12/20 18:37:11 ca Exp $ +--> +<H1>smfi_register</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_register( + smfiDesc descr +); +</PRE> +Register a set of filter callbacks. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=1> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>smfi_register must be called before smfi_main</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>smfi_register creates a filter using the information given in the +smfiDesc argument. +Multiple (successful) calls to smfi_register within a +single process are not allowed, +i.e., only one filter can be successfully registered. +Note, however, that the library may not check whether this restriction +is obeyed. +</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>descr</TD> + <TD> +A filter descriptor of type smfiDesc describing the filter's functions. +<A NAME="smfiDesc">The structure</A> has the following members: +<PRE> +struct smfiDesc +{ + char *xxfi_name; /* filter name */ + int xxfi_version; /* version code -- do not change */ + unsigned long xxfi_flags; /* <A href="#flags">flags</A> */ + + /* connection info filter */ + sfsistat (*<A href="xxfi_connect.html">xxfi_connect</A>)(SMFICTX *, char *, _SOCK_ADDR *); + /* SMTP HELO command filter */ + sfsistat (*<A href="xxfi_helo.html">xxfi_helo</A>)(SMFICTX *, char *); + /* envelope sender filter */ + sfsistat (*<A href="xxfi_envfrom.html">xxfi_envfrom</A>)(SMFICTX *, char **); + /* envelope recipient filter */ + sfsistat (*<A href="xxfi_envrcpt.html">xxfi_envrcpt</A>)(SMFICTX *, char **); + /* header filter */ + sfsistat (*<A href="xxfi_header.html">xxfi_header</A>)(SMFICTX *, char *, char *); + /* end of header */ + sfsistat (*<A href="xxfi_eoh.html">xxfi_eoh</A>)(SMFICTX *); + /* body block */ + sfsistat (*<A href="xxfi_body.html">xxfi_body</A>)(SMFICTX *, unsigned char *, size_t); + /* end of message */ + sfsistat (*<A href="xxfi_eom.html">xxfi_eom</A>)(SMFICTX *); + /* message aborted */ + sfsistat (*<A href="xxfi_abort.html">xxfi_abort</A>)(SMFICTX *); + /* connection cleanup */ + sfsistat (*<A href="xxfi_close.html">xxfi_close</A>)(SMFICTX *); + + /* any unrecognized or unimplemented command filter */ + sfsistat (*xxfi_unknown)(SMFICTX *, const char *); + + /* SMTP DATA command filter */ + sfsistat (*xxfi_data)(SMFICTX *); + + /* negotiation callback */ + sfsistat (*<A HREF="xxfi_negotiate.html">xxfi_negotiate</A>)(SMFICTX *, + unsigned long, unsigned long, unsigned long, unsigned long, + unsigned long *, unsigned long *, unsigned long *, unsigned long *); +}; +</PRE> + +A NULL value for any callback function indicates that the filter +does not wish to process the given type of information, +simply returning SMFIS_CONTINUE. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD> +smfi_register may return MI_FAILURE for any of the following reasons: +<UL> +<LI>memory allocation failed. +<LI>incompatible version or illegal flags value. +</UL> + +</TD> +</TR> + +<!----------- Notes ----------> +<TR align="left" valign=top> +<TH>NOTES</TH> +<TD> + +<A NAME="flags">The xxfi_flags</A> +field should contain the bitwise OR of zero or more of +the following values, describing the actions the filter may take: +<TABLE BORDER CELLPADDING="1" cellspacing=1> +<TR valign="top" bgcolor="#dddddd"><TH align="left">Flag</TH><TH align="center">Description</TH></TR> + <TR align="left" valign=top> + <TD> + SMFIF_ADDHDRS + </TD> + <TD> + This filter may <A HREF="smfi_addheader.html">add headers</A>. + </TD> + </TR> + <TR align="left" valign=top> + <TD> + SMFIF_CHGHDRS + </TD> + <TD> + This filter may + <A HREF="smfi_chgheader.html">change and/or delete headers</A>. + </TD> + </TR> + <TR align="left" valign=top> + <TD VALIGN="TOP"> + SMFIF_CHGBODY + </TD> + <TD> + This filter may + <A HREF="smfi_replacebody.html">replace the body</A> during filtering. + This may have significant performance impact + if other filters do body filtering after this filter. + </TD> + </TR> + <TR> + <TD VALIGN="TOP"> + SMFIF_ADDRCPT + </TD> + <TD> + This filter may + <A HREF="smfi_addrcpt.html">add recipients</A> + to the message. + </TD> + </TR> + <TR> + <TD VALIGN="TOP"> + SMFIF_ADDRCPT_PAR + </TD> + <TD> + This filter may + <A HREF="smfi_addrcpt_par.html">add recipients including ESMTP args</A>. + </TD> + </TR> + <TR> + <TD VALIGN="TOP"> + SMFIF_DELRCPT + </TD> + <TD> + This filter may + <A HREF="smfi_delrcpt.html">remove recipients</A> from the message. + </TD> + </TR> + <TR> + <TD VALIGN="TOP"> + SMFIF_QUARANTINE + </TD> + <TD> + This filter may + <A HREF="smfi_quarantine.html">quarantine</A> a message. + </TD> + </TR> + + <TR> + <TD VALIGN="TOP"> + SMFIF_CHGFROM + </TD> + <TD> + This filter may + <A HREF="smfi_chgfrom.html">change the envelope sender</A> (MAIL). + </TD> + </TR> + + <TR> + <TD VALIGN="TOP"> + SMFIF_SETSYMLIST + </TD> + <TD> + This filter can + <A HREF="smfi_setsymlist.html">send a set of symbols (macros)</A> + that it wants. + </TD> + </TR> + +</TABLE> + +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000-2001, 2003, 2006 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_replacebody.html b/contrib/sendmail/libmilter/docs/smfi_replacebody.html new file mode 100644 index 0000000..bc8d5ac --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_replacebody.html @@ -0,0 +1,93 @@ +<HTML> +<HEAD><TITLE>smfi_replacebody</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_replacebody.html,v 1.15 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_replacebody</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_replacebody( + SMFICTX *ctx, + unsigned char *bodyp, + int bodylen +); +</PRE> +Replace message-body data. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>Called only from <A href="xxfi_eom.html">xxfi_eom</A>. smfi_replacebody may be called more than once.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>smfi_replacebody replaces the body of the current message. If called +more than once, subsequent calls result in data being appended to the new +body. +</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>bodyp</TD> + <TD>A pointer to the start of the new body data, which does not have to be null-terminated. If bodyp is NULL, it is treated as having length == 0. Body data should be in CR/LF form. + </TD></TR> + <TR valign="top"><TD>bodylen</TD> + <TD>The number of data bytes pointed to by bodyp. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_replacebody fails and returns MI_FAILURE if: +<UL> + <LI>bodyp == NULL and bodylen > 0. + <LI>Changing the body in the current connection state is invalid. + <LI>A network error occurs. + <LI>SMFIF_CHGBODY was not set when <A href="smfi_register.html">smfi_register</A> was called. +</UL> +Otherwise, it will return MI_SUCCESS. +</TD> +</TR> + +<!----------- Notes ----------> +<TR align="left" valign=top> +<TH>NOTES</TH> +<TD> +<UL> + <LI>Since the message body may be very large, setting SMFIF_CHGBODY may significantly affect filter performance. + <LI>If a filter sets SMFIF_CHGBODY but does not call smfi_replacebody, the original body remains unchanged. + <LI>For smfi_replacebody, filter order is important. <B>Later filters will see the new body contents created by earlier ones.</B> +</UL> +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000-2001, 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_setbacklog.html b/contrib/sendmail/libmilter/docs/smfi_setbacklog.html new file mode 100644 index 0000000..8353cac --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_setbacklog.html @@ -0,0 +1,64 @@ +<HTML> +<HEAD><TITLE>smfi_setbacklog</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_setbacklog.html,v 1.6 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_setbacklog</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_setbacklog( + int obacklog +); +</PRE> +Set the filter's <CODE>listen(2)</CODE> backlog value. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>smfi_setbacklog should only be called before <A href="smfi_main.html">smfi_main</A>.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>Sets the incoming socket backlog used by <CODE>listen(2)</CODE>. +If smfi_setbacklog is not called, the operating system default is used.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>obacklog</TD> + <TD>The number of incoming connections to allow in the listen queue. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_setbacklog returns MI_FAILURE if obacklog is less than or equal +to zero.</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2002-2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_setconn.html b/contrib/sendmail/libmilter/docs/smfi_setconn.html new file mode 100644 index 0000000..70a510e --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_setconn.html @@ -0,0 +1,93 @@ +<HTML> +<HEAD><TITLE>smfi_setconn</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_setconn.html,v 1.17 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_setconn</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_setconn( + char *oconn; +); +</PRE> +Set the socket through which this filter should communicate with sendmail. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>smfi_setconn must be called once before <A href="smfi_main.html">smfi_main</A>.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>Sets the socket through which the filter communicates with sendmail.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>oconn</TD> + <TD>The address of the desired communication socket. + The address should be a NULL-terminated string in "proto:address" + format: + <UL> + <LI><CODE>{unix|local}:/path/to/file</CODE> -- A named pipe. + <LI><CODE>inet:port@{hostname|ip-address}</CODE> -- An IPV4 socket. + <LI><CODE>inet6:port@{hostname|ip-address}</CODE> -- An IPV6 socket. + </UL> + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_setconn will not fail on an invalid address. +The failure will only be detected in <A href="smfi_main.html">smfi_main</A>. +Nevertheless, smfi_setconn may fail for other reasons, e.g., +due to a lack of memory. +</TD> +</TR> + +<TR> +<TH valign="top" align=left>NOTES</TH> + +<TD> +<UL> + <LI>If possible, filters should not run as root when communicating + over unix/local domain sockets. + <LI>Unix/local sockets should have their permissions set to + 0600 (read/write permission only for the socket's owner) or + 0660 (read/write permission for the socket's owner and group) + which is useful if the sendmail RunAsUser option is used. + The permissions for a unix/local domain socket are determined as + usual by <CODE>umask</CODE>, which should be set to 007 or 077. + Note some operating systems (e.g, Solaris) don't use the + permissions of the socket. On those systems, place the socket in a + protected directory. +</UL> +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_setdbg.html b/contrib/sendmail/libmilter/docs/smfi_setdbg.html new file mode 100644 index 0000000..e001d3f --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_setdbg.html @@ -0,0 +1,67 @@ +<HTML> +<HEAD><TITLE>smfi_setdbg</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_setdbg.html,v 1.3 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_setdbg</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_setdbg( + int level; +); +</PRE> +Set the debugging (tracing) level for the milter library. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>Called from any any routine at any time.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>smfi_setdbg sets the milter library's internal debugging level +to a new level so that code details may be traced. +A level of zero turns off debugging. The greater +(more positive) the level the more detailed the debugging. Six is +the current, highest, useful value.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>level</TD> + <TD>The new debugging level + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_setdbg returns MI_SUCCESS by default. +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_setmlreply.html b/contrib/sendmail/libmilter/docs/smfi_setmlreply.html new file mode 100644 index 0000000..b01bacf --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_setmlreply.html @@ -0,0 +1,145 @@ +<HTML> +<HEAD><TITLE>smfi_setmlreply</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_setmlreply.html,v 1.4 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_setmlreply</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_setmlreply( + SMFICTX *ctx, + char *rcode, + char *xcode, + ... +); +</PRE> +Set the default SMTP error reply code to a multi-line response. Only 4XX +and 5XX replies are accepted. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>smfi_setmlreply may be called from any of the xxfi_ callbacks +other than xxfi_connect.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>Directly set the SMTP error reply code for this connection to the given +lines after the xcode. The list of arguments must be NULL terminated. +This code will be used on subsequent error replies resulting from actions +taken by this filter.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>rcode</TD> + <TD>The three-digit (RFC 821/2821) SMTP reply code, as a + null-terminated string. rcode cannot be NULL, and must be a valid + 4XX or 5XX reply code. + </TD></TR> + <TR valign="top"><TD>xcode</TD> + <TD>The extended (RFC 1893/2034) reply code. If xcode is NULL, no + extended code is used. Otherwise, xcode must conform to RFC 1893/2034. + </TD></TR> + <TR valign="top"><TD>...</TD> + <TD>The remainder of the arguments are single lines of text, up to + 32 arguments, which will be used as the text part of the SMTP + reply. The list must be NULL terminated. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Example ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> +<TD> +For example, the code:<BR> +<PRE> + ret = smfi_setmlreply(ctx, "550", "5.7.0", + "Spammer access rejected", + "Please see our policy at:", + "http://www.example.com/spampolicy.html", + NULL); +</PRE> +<BR>would give the SMTP response:<BR> +<PRE> +550-5.7.0 Spammer access rejected +550-5.7.0 Please see our policy at: +550 5.7.0 http://www.example.com/spampolicy.html +</PRE> +</TD> +</TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_setmlreply will fail and return MI_FAILURE if: +<UL> + <LI>The rcode or xcode argument is invalid. + <LI>A memory-allocation failure occurs. + <LI>If any text line contains a carraige return or line feed. + <LI>The length of any text line is more than MAXREPLYLEN (980). + <LI>More than 32 lines of text replies are given. +</UL> +Otherwise, it return MI_SUCCESS. +</TD> +</TR> + +<!----------- Notes ----------> +<TR align="left" valign=top> +<TH>NOTES</TH> +<TD> +<UL> +<LI>Values passed to smfi_setmlreply are not checked for standards compliance. +<LI>The message parameter should contain only printable characters, +other characters may lead to undefined behavior. +For example, CR or LF will cause the call to fail, +single '%' characters will cause the text to be ignored +(if there really should be a '%' in the string, +use '%%' just like for <TT>printf(3)</TT>). +<LI>For details about reply codes and their meanings, please see RFC's +<A href="http://www.rfc-editor.org/rfc/rfc821.txt">821</A>/ +<A href="http://www.rfc-editor.org/rfc/rfc2821.txt">2821</A> +and +<A href="http://www.rfc-editor.org/rfc/rfc1893.txt">1893</A>/ +<A href="http://www.rfc-editor.org/rfc/rfc2034.txt">2034</A>. +<LI>If the reply code (rcode) given is a '4XX' code but SMFI_REJECT is used +for the message, the custom reply is not used. +<LI>Similarly, if the reply code (rcode) given is a '5XX' code but +SMFI_TEMPFAIL is used for the message, the custom reply is not used. +<BR> +Note: in neither of the last two cases an error is returned to the milter, +libmilter silently ignores the reply code. +<LI>If the milter returns SMFI_TEMPFAIL and sets the reply code to '421', +then the SMTP server will terminate the SMTP session with a 421 error code. +</UL> +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2002-2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_setpriv.html b/contrib/sendmail/libmilter/docs/smfi_setpriv.html new file mode 100644 index 0000000..1c287eb --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_setpriv.html @@ -0,0 +1,80 @@ +<HTML> +<HEAD><TITLE>smfi_setpriv</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_setpriv.html,v 1.11 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_setpriv</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_setpriv( + SMFICTX *ctx, + void *privatedata +); +</PRE> +Set the private data pointer for this connection. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>smfi_setpriv may be called in any of the xxfi_* callbacks.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>Sets the private data pointer for the context ctx.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>privatedata</TD> + <TD>Pointer to private data. This value will be returned by subsequent calls to <A href="smfi_getpriv.html">smfi_getpriv</A> using ctx. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_setpriv returns MI_FAILURE if ctx is an invalid context. +Otherwise, it returns MI_SUCCESS.</TD> +</TR> + +<TR> +<TH valign="top" align=left>NOTES</TH> + +<TD>There is only one private data pointer per connection; multiple +calls to smfi_setpriv with different values will cause previous values +to be lost. +<P> +Before a filter terminates it should release the private data +and set the pointer to NULL. +</TD> + +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000-2001, 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_setreply.html b/contrib/sendmail/libmilter/docs/smfi_setreply.html new file mode 100644 index 0000000..d857815 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_setreply.html @@ -0,0 +1,117 @@ +<HTML> +<HEAD><TITLE>smfi_setreply</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_setreply.html,v 1.17 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_setreply</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_setreply( + SMFICTX *ctx, + char *rcode, + char *xcode, + char *message +); +</PRE> +Set the default SMTP error reply code. Only 4XX and 5XX replies are accepted. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>smfi_setreply may be called from any of the xxfi_ callbacks +other than xxfi_connect.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>Directly set the SMTP error reply code for this connection. This code +will be used on subsequent error replies resulting from actions taken by +this filter.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>rcode</TD> + <TD>The three-digit (RFC 821/2821) SMTP reply code, as a + null-terminated string. rcode cannot be NULL, and must be a valid + 4XX or 5XX reply code. + </TD></TR> + <TR valign="top"><TD>xcode</TD> + <TD>The extended (RFC 1893/2034) reply code. If xcode is NULL, no + extended code is used. Otherwise, xcode must conform to RFC 1893/2034. + </TD></TR> + <TR valign="top"><TD>message</TD> + <TD>The text part of the SMTP reply. If message is NULL, an empty message is used. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_setreply will fail and return MI_FAILURE if: +<UL> + <LI>The rcode or xcode argument is invalid. + <LI>A memory-allocation failure occurs. +</UL> +Otherwise, it return MI_SUCCESS. +</TD> +</TR> + +<!----------- Notes ----------> +<TR align="left" valign=top> +<TH>NOTES</TH> +<TD> +<UL> +<LI>Values passed to smfi_setreply are not checked for standards compliance. +<LI>The message parameter should contain only printable characters, +other characters may lead to undefined behavior. +For example, CR or LF will cause the call to fail, +single '%' characters will cause the text to be ignored +(if there really should be a '%' in the string, +use '%%' just like for <TT>printf(3)</TT>). +<LI>For details about reply codes and their meanings, please see RFC's +<A href="http://www.rfc-editor.org/rfc/rfc821.txt">821</A>/ +<A href="http://www.rfc-editor.org/rfc/rfc2821.txt">2821</A> +and +<A href="http://www.rfc-editor.org/rfc/rfc1893.txt">1893</A>/ +<A href="http://www.rfc-editor.org/rfc/rfc2034.txt">2034</A>. +<LI>If the reply code (rcode) given is a '4XX' code but SMFI_REJECT is used +for the message, the custom reply is not used. +<LI>Similarly, if the reply code (rcode) given is a '5XX' code but +SMFI_TEMPFAIL is used for the message, the custom reply is not used. +<BR> +Note: in neither of the last two cases an error is returned to the milter, +libmilter silently ignores the reply code. +<LI>If the milter returns SMFI_TEMPFAIL and sets the reply code to '421', +then the SMTP server will terminate the SMTP session with a 421 error code. +</UL> +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2002-2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_setsymlist.html b/contrib/sendmail/libmilter/docs/smfi_setsymlist.html new file mode 100644 index 0000000..7e8edff --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_setsymlist.html @@ -0,0 +1,107 @@ +<HTML> +<HEAD><TITLE>smfi_setsymlist</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_setsymlist.html,v 1.5 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_setsymlist</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_setsymlist( + SMFICTX *ctx, + int stage, + char *macros +); +</PRE> +Set the list of macros that the milter wants to receive from the MTA +for a protocol stage. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>This function must only be called during +<A HREF="xxfi_negotiate.html">xxfi_negotiate()</A>. +</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>This function can be used to override the list of macros that the +milter wants to receive from the MTA. +</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + + <TR><TD>ctx</TD> + <TD>the opaque context structure. + </TD></TR> + + <TR><TD>stage</TD> + <TD>the protocol stage during which the macro list should be used. + See the file + <CODE>include/libmilter/mfapi.h</CODE> for legal values, + look for the C macros with the prefix + <CODE>SMFIM_</CODE>. + Available protocol stages are at least + the initial connection, HELO/EHLO, MAIL, RCPT, DATA, + end of header, and + the end of a message. + </TD></TR> + + <TR><TD>macros</TD> + <TD>list of macros (separated by space). + Example: "{rcpt_mailer} {rcpt_host}" + </TD></TR> + + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>MI_FAILURE is returned if +<UL> +<LI>there is not enough free memory to make a copy of the macro list, +<LI><CODE>macros</CODE> is <CODE>NULL</CODE> or empty, +<LI><CODE>stage</CODE> is not a valid protocol stage, +<LI>the macro list for +<CODE>stage</CODE> has been set before. +</UL> +Otherwise MI_SUCCESS is returned. +</TD> +</TR> + +<!----------- Notes ----------> +<TR align="left" valign=top> +<TH>NOTES</TH> +<TD>There is an internal limit on the number of macros that can be +set (currently 5), +however, this limit is not enforced by libmilter, only by the MTA, +but a possible violation of this restriction is not communicated back to +the milter.</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2006 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_settimeout.html b/contrib/sendmail/libmilter/docs/smfi_settimeout.html new file mode 100644 index 0000000..97d41cb --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_settimeout.html @@ -0,0 +1,66 @@ +<HTML> +<HEAD><TITLE>smfi_settimeout</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_settimeout.html,v 1.14 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_settimeout</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_settimeout( + int otimeout +); +</PRE> +Set the filter's I/O timeout value. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>smfi_settimeout should only be called before <A href="smfi_main.html">smfi_main</A>.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>Sets the number of seconds libmilter will wait +for an MTA communication (read or write) before timing out. +If smfi_settimeout is not called, a default timeout of 7210 seconds is used. +</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>otimeout</TD> + <TD>The number of seconds to wait before timing out (> 0). + Zero means no wait, <B>not</B> "wait forever". + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_settimeout always returns MI_SUCCESS.</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2002-2003, 2006 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_stop.html b/contrib/sendmail/libmilter/docs/smfi_stop.html new file mode 100644 index 0000000..87ecdb2 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_stop.html @@ -0,0 +1,74 @@ +<HTML> +<HEAD><TITLE>smfi_stop</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_stop.html,v 1.6 2006/12/21 18:30:35 ca Exp $ +--> +<H1>smfi_stop</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_stop(void); +</PRE> +Shutdown the milter. +No connections will be accepted after this call. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>Called from any of the <A href="api.html#Callbacks">Callback</A> routines +or any error-handling routines at any time.</TD> +</TR> +<TR align="left" valign=top> +<TH width="80">Effects</TH> +<TD>The smfi_stop routine prevents that new connections +will be accepted, +however, it does not wait for existing connections (threads) to terminate. +It will cause +<A href="smfi_main.html">smfi_main</A> to return to the calling program, +which may then exit or warm-restart. +</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>void</TD> + <TD>Takes no arguement. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>RETURN VALUES</TH> + +<TD>smfi_stop always returns SMFI_CONTINUE. But note: +<UL> + <LI>Another internal routine may already have asked the milter to abort. + <LI>Another routine may already have asked the milter to stop. + <LI>There is no way to cancel the stop process once it has begun. +</UL> +</TD> +</TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2003, 2005 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/smfi_version.html b/contrib/sendmail/libmilter/docs/smfi_version.html new file mode 100644 index 0000000..6dd451d --- /dev/null +++ b/contrib/sendmail/libmilter/docs/smfi_version.html @@ -0,0 +1,92 @@ +<HTML> +<HEAD><TITLE>smfi_version()</TITLE></HEAD> +<BODY> +<!-- +$Id: smfi_version.html,v 1.6 2008/05/02 23:06:26 ca Exp $ +--> +<H1>smfi_version()</H1> + +<TABLE BORDER="0" CELLSPACING=4 CELLPADDING=4> +<!---------- Synopsis -----------> +<TR><TH VALIGN="TOP" ALIGN=LEFT WIDTH=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +int smfi_version( + unsigned int *pmajor, + unsigned int *pminor, + unsigned int *ppl +); +</PRE> +Get the (runtime) version of libmilter. +</TD></TR> + +<!----------- Description ----------> +<TR><TH VALIGN="TOP" ALIGN=LEFT>DESCRIPTION</TH><TD> +<TABLE BORDER="1" CELLSPACING=1 CELLPADDING=4> +<TR ALIGN="LEFT" VALIGN=TOP> +<TH WIDTH="80">Called When</TH> +<TD>smfi_version may be called at any time.</TD> +</TR> +<TR ALIGN="LEFT" VALIGN=TOP> +<TH WIDTH="80">Effects</TH> +<TD>None.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH VALIGN="TOP" ALIGN=LEFT>ARGUMENTS</TH><TD> + <TABLE BORDER="1" CELLSPACING=0> + <TR BGCOLOR="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR VALIGN="TOP"><TD>pmajor</TD> + <TD>Pointer to an unsigned int variable to store major version number. + </TD></TR> + <TR VALIGN="TOP"><TD>pminor</TD> + <TD>Pointer to an unsigned int variable to store minor version number. + </TD></TR> + <TR VALIGN="TOP"><TD>ppl</TD> + <TD>Pointer to an unsigned int variable to store patch level number. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH VALIGN="TOP" ALIGN=LEFT>RETURN VALUES</TH> +<TD>smfi_version returns MI_SUCCESS.</TD> +</TR> + +</TABLE> + +Note: the compile time version of libmilter is available in the macro +<CODE>SMFI_VERSION</CODE>. +To extract the major and minor version as well as the current patch level +from this macro, the macros +<CODE>SM_LM_VRS_MAJOR(v)</CODE>, +<CODE>SM_LM_VRS_MINOR(v)</CODE>, and +<CODE>SM_LM_VRS_PLVL(v)</CODE> +can be used, respectively. +A milter can check the +<CODE>SMFI_VERSION</CODE> +macro to determine which functions to use +(at compile time via C preprocessor statements). +Using this macro and the +<CODE>smfi_version()</CODE> +function, +a milter can determine at runtime whether it has been (dynamically) +linked against the expected libmilter version. +Such a function should only compare the major and minor version, +not the patch level, +i.e., the libmilter library will be compatible despite +different patch levels. + + +<HR SIZE="1"> +<FONT SIZE="-1"> +Copyright (c) 2006-2008 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/xxfi_abort.html b/contrib/sendmail/libmilter/docs/xxfi_abort.html new file mode 100644 index 0000000..0664dc1 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/xxfi_abort.html @@ -0,0 +1,83 @@ +<HTML> +<HEAD><TITLE>xxfi_abort</TITLE></HEAD> +<BODY> +<!-- +$Id: xxfi_abort.html,v 1.12 2006/12/21 18:30:35 ca Exp $ +--> +<H1>xxfi_abort</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +sfsistat (*xxfi_abort)( + SMFICTX *ctx +); +</PRE> +Handle the current message's being aborted. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>xxfi_abort may be called at any time during message processing (i.e. between some message-oriented routine and <A href="xxfi_eom.html">xxfi_eom</A>).</TD> +</TR> +<TR align="left" valign=top> +<TH>Default Behavior</TH> +<TD>Do nothing; return SMFIS_CONTINUE.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Notes ----------> +<TR> +<TH valign="top" align=left>NOTES</TH> +<TD> +<UL> +<LI>xxfi_abort must reclaim any resources allocated on a per-message +basis, and must be tolerant of being called between any two +message-oriented callbacks. + +<LI>Calls to xxfi_abort and <A href="xxfi_eom.html">xxfi_eom</A> are +mutually exclusive. + +<LI>xxfi_abort is not responsible for reclaiming connection-specific +data, since <A href="xxfi_close.html">xxfi_close</A> is always called +when a connection is closed. + +<LI>Since the current message is already being aborted, the return +value is currently ignored. + +<LI>xxfi_abort is only called if the message is aborted outside the +filter's control <B>and</B> the filter has not completed its +message-oriented processing. For example, if a filter has already +returned SMFIS_ACCEPT, SMFIS_REJECT, or SMFIS_DISCARD from a +message-oriented routine, xxfi_abort will not be called even if the +message is later aborted outside its control. +</UL> +</TD> +</TR> +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/xxfi_body.html b/contrib/sendmail/libmilter/docs/xxfi_body.html new file mode 100644 index 0000000..0a5f0f3 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/xxfi_body.html @@ -0,0 +1,97 @@ +<HTML> +<HEAD><TITLE>xxfi_body</TITLE></HEAD> +<BODY> +<!-- +$Id: xxfi_body.html,v 1.17 2007/03/26 20:12:46 ca Exp $ +--> +<H1>xxfi_body</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +sfsistat (*xxfi_body)( + SMFICTX *ctx, + unsigned char *bodyp, + size_t len +); +</PRE> +Handle a piece of a message's body. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>xxfi_body is called zero or more times between xxfi_eoh and xxfi_eom.</TD> +</TR> +<TR align="left" valign=top> +<TH>Default Behavior</TH> +<TD>Do nothing; return SMFIS_CONTINUE.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>bodyp</TD> + <TD>Pointer to the start of this block of body data. bodyp is not valid outside this call to xxfi_body. + </TD></TR> + <TR valign="top"><TD>len</TD> + <TD>The amount of data pointed to by bodyp. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Notes ----------> +<TR> +<TH valign="top" align=left>NOTES</TH> +<TD> +<UL> +<LI>bodyp points to a sequence of bytes. +It is <EM>not</EM> a C string (a sequence of characters that is terminated by '\0'). +Therefore, do not use the usual C string functions like <CODE>strlen(3)</CODE> +on this byte block. +Moreover, the byte sequence may contain '\0' characters inside the block. +Hence even if a trailing '\0' is added, C string functions may still fail +to work as expected. +<LI>Since message bodies can be very large, defining xxfi_body can +significantly impact filter performance. +<LI>End-of-lines are represented as received from SMTP (normally CR/LF). +<LI>Later filters will see body changes made by earlier ones. +<LI>Message bodies may be sent in multiple chunks, with one call to + xxfi_body per chunk. +<LI>Return +<A HREF="api.html#SMFIS_SKIP">SMFIS_SKIP</A> +if a milter has received sufficiently many +body chunks to make a decision, +but still wants to invoke +message modification functions that are only allowed to be called from +<A HREF="xxfi_eom.html">xxfi_eom()</A>. +Note: the milter <EM>must</EM> +<A HREF="xxfi_negotiate.html">negotiate</A> +this behavior with the MTA, i.e., it must check whether +the protocol action +<A HREF="xxfi_negotiate.html#SMFIP_SKIP"><CODE>SMFIP_SKIP</CODE></A> +is available and if so, the milter must request it. +</UL> +</TD> +</TR> +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000-2003, 2007 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/xxfi_close.html b/contrib/sendmail/libmilter/docs/xxfi_close.html new file mode 100644 index 0000000..2c2ae77 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/xxfi_close.html @@ -0,0 +1,81 @@ +<HTML> +<HEAD><TITLE>xxfi_close</TITLE></HEAD> +<BODY> +<!-- +$Id: xxfi_close.html,v 1.13 2006/12/21 18:30:35 ca Exp $ +--> +<H1>xxfi_close</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +sfsistat (*xxfi_close)( + SMFICTX *ctx +); +</PRE> +The current connection is being closed. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>xxfi_close is always called once at the end of each connection.</TD> +</TR> +<TR align="left" valign=top> +<TH>Default Behavior</TH> +<TD>Do nothing; return SMFIS_CONTINUE.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Notes ----------> +<TR> +<TH valign="top" align=left>NOTES</TH> +<TD> +<UL> +<LI>xxfi_close may be called "out-of-order", i.e. before even the +xxfi_connect is called. +After a connection is established by the MTA to the filter, +if the MTA decides this connection's traffic will be discarded +(e.g. via an access_db result), no data will be passed to the +filter from the MTA until the client closes down. +At that time, xxfi_close is called. +It can therefore be the only callback ever used for a given connection, +and developers should anticipate this possibility when crafting their +xxfi_close code. +In particular, it is incorrect to assume the private context pointer +will be something other than NULL in this callback. +<LI>xxfi_close is called on close even if the previous mail +transaction was aborted. +<LI>xxfi_close is responsible for freeing any resources allocated on a +per-connection basis. +<LI>Since the connection is already closing, the return value is +currently ignored. +</UL> +</TD> +</TR> +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003, 2004 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/xxfi_connect.html b/contrib/sendmail/libmilter/docs/xxfi_connect.html new file mode 100644 index 0000000..87d5eeb --- /dev/null +++ b/contrib/sendmail/libmilter/docs/xxfi_connect.html @@ -0,0 +1,121 @@ +<HTML> +<HEAD><TITLE>xxfi_connect</TITLE></HEAD> +<BODY> +<!-- +$Id: xxfi_connect.html,v 1.19 2007/01/15 22:24:45 ca Exp $ +--> +<H1>xxfi_connect</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +sfsistat (*xxfi_connect)( + SMFICTX *ctx, + char *hostname, + _SOCK_ADDR *hostaddr); +</PRE> +</TD></TR> +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR> +<TH valign="top" align=left width=80>Called When</TH> +<TD>Once, at the start of each SMTP connection.</TD> +</TR> +<TR> +<TH valign="top" align=left width=80>Default Behavior</TH> +<TD>Do nothing; return SMFIS_CONTINUE.</TD> +</TR> +</TABLE> +<!-- +This callback function is invoked on each connection to the mail +filter program. +The callback is to be implemented by the Milter application developers. +The name of the callback can be any valid function name. +The function pointer is to be assigned to the +smfiDesc.xxfi_connect and the pointer to the smfiDesc structure +is passed to smfi_register(). +</TD></TR> +--> +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR><TD>ctx</TD> + <TD>the opaque context structure. + </TD></TR> + <TR><TD>hostname</TD> + <TD>the host name of the message sender, as determined by a + reverse lookup on the host address. + If the reverse lookup fails + or if none of the IP addresses of the resolved host name + matches the original IP address, + hostname will contain the message sender's IP + address enclosed in square brackets (e.g. `[a.b.c.d]'). + If the SMTP connection is made via stdin the value is + <CODE>localhost</CODE>. + </TD></TR> + <TR><TD>hostaddr</TD> + <TD>the host address, + as determined by a <CODE>getpeername(2)</CODE> call on the SMTP socket. + NULL if the type is not supported in the current version or if + the SMTP connection is made via stdin. + </TD></TR> + </TABLE> +</TD></TR> +<!----------- Return values ----------> +<!-- +<TR> +<TH valign="top" align=left>SPECIAL RETURN VALUES</TH> +<TD><TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Return value</TH><TH>Description</TH></TR> + <TR valign="top"> + <TD>SMFIS_ACCEPT</TD> + <TD>Accept all commands and messages from this client without any + further contact with the filter. </TD> + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_CONTINUE</TD> + <TD>Continue normal processing. </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_DISCARD</TD> + <TD>Undefined behaviour; do not use. </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_TEMPFAIL</TD> + <TD>Reject all commands and messages from this client with a + temporary failure reply code. + If also used in conjunction with <CODE>smfi_setreply()</CODE> + to set a reply whose SMTP code is 421, + the MTA will drop the connection immediately. </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_REJECT</TD> + <TD>Reject all commands and messages from this client with a + permanent failure reply code. </TD> + </TR> +</TABLE> +</TR> +--> +<!----------- Notes ----------> +<TR> +<TH valign="top" align=left>NOTES</TH> +<TD>If an earlier filter rejects the connection in its xxfi_connect() +routine, this filter's xxfi_connect() will not be called.</TD> +</TR> +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000-2001, 2003, 2007 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/xxfi_data.html b/contrib/sendmail/libmilter/docs/xxfi_data.html new file mode 100644 index 0000000..2633ee5 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/xxfi_data.html @@ -0,0 +1,89 @@ +<HTML> +<HEAD><TITLE>xxfi_data</TITLE></HEAD> +<BODY> +<!-- +$Id: xxfi_data.html,v 1.4 2007/01/25 01:00:20 ca Exp $ +--> +<H1>xxfi_data</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +sfsistat (*xxfi_data)( + SMFICTX *ctx +); +</PRE> +Handle the DATA command. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>xxfi_data is called when the client uses the DATA command. +</TR> +<TR align="left" valign=top> +<TH>Default Behavior</TH> +<TD>Do nothing; return SMFIS_CONTINUE.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>SPECIAL RETURN VALUES</TH> +<TD><TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Return value</TH><TH>Description</TH></TR> + <TR valign="top"> + <TD>SMFIS_TEMPFAIL</TD> + <TD>Reject this message with a temporary error. + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_REJECT</TD> + <TD>Reject this message. + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_DISCARD</TD> + <TD>Accept and silently discard this message. + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_ACCEPT</TD> + <TD>Accept this message. + </TD> + </TR> +</TABLE> +</TR> + +<!----------- Notes ----------> +<TR> +<TH valign="top" align=left>NOTES</TH> +<TD>For more details on ESMTP responses, please see RFC +<A href="http://www.rfc-editor.org/rfc/rfc1869.txt">1869</A>.</TD> +</TR> +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2006 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/xxfi_envfrom.html b/contrib/sendmail/libmilter/docs/xxfi_envfrom.html new file mode 100644 index 0000000..6ae88cf --- /dev/null +++ b/contrib/sendmail/libmilter/docs/xxfi_envfrom.html @@ -0,0 +1,97 @@ +<HTML> +<HEAD><TITLE>xxfi_envfrom</TITLE></HEAD> +<BODY> +<!-- +$Id: xxfi_envfrom.html,v 1.14 2007/01/25 01:00:20 ca Exp $ +--> +<H1>xxfi_envfrom</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +sfsistat (*xxfi_envfrom)( + SMFICTX *ctx, + char **argv +); +</PRE> +Handle the MAIL (envelope sender) command. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>xxfi_envfrom is called once at the beginning of each message +(MAIL command), +before xxfi_envrcpt.</TD> +</TR> +<TR align="left" valign=top> +<TH>Default Behavior</TH> +<TD>Do nothing; return SMFIS_CONTINUE.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>argv</TD> + <TD>Null-terminated SMTP command arguments; + argv[0] is guaranteed to be the sender address. + Later arguments are the ESMTP arguments. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>SPECIAL RETURN VALUES</TH> +<TD><TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Return value</TH><TH>Description</TH></TR> + <TR valign="top"> + <TD>SMFIS_TEMPFAIL</TD> + <TD>Reject this sender and message with a temporary error; a new sender (and hence a new message) may subsequently be specified. <A href="xxfi_abort.html">xxfi_abort</A> is not called. + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_REJECT</TD> + <TD>Reject this sender and message; a new sender/message may be specified. <A href="xxfi_abort.html">xxfi_abort</A> is not called. + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_DISCARD</TD> + <TD>Accept and silently discard this message. <A href="xxfi_abort.html">xxfi_abort</A> is not called. + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_ACCEPT</TD> + <TD>Accept this message. <A href="xxfi_abort.html">xxfi_abort</A> is not called. + </TD> + </TR> +</TABLE> +</TR> + +<!----------- Notes ----------> +<TR> +<TH valign="top" align=left>NOTES</TH> +<TD>For more details on ESMTP responses, please see RFC +<A href="http://www.rfc-editor.org/rfc/rfc1869.txt">1869</A>.</TD> +</TR> +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003, 2006 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/xxfi_envrcpt.html b/contrib/sendmail/libmilter/docs/xxfi_envrcpt.html new file mode 100644 index 0000000..9fb4ce8 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/xxfi_envrcpt.html @@ -0,0 +1,97 @@ +<HTML> +<HEAD><TITLE>xxfi_envrcpt</TITLE></HEAD> +<BODY> +<!-- +$Id: xxfi_envrcpt.html,v 1.15 2007/01/25 01:00:20 ca Exp $ +--> +<H1>xxfi_envrcpt</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +sfsistat (*xxfi_envrcpt)( + SMFICTX *ctx, + char **argv +); +</PRE> +Handle the envelope RCPT command. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>xxfi_envrcpt is called once per recipient, hence one or more times per message, immediately after xxfi_envfrom.</TD> +</TR> +<TR align="left" valign=top> +<TH>Default Behavior</TH> +<TD>Do nothing; return SMFIS_CONTINUE.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>argv</TD> + <TD>Null-terminated SMTP command arguments; + argv[0] is guaranteed to be the recipient address. + Later arguments are the ESMTP arguments. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>SPECIAL RETURN VALUES</TH> +<TD><TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Return value</TH><TH>Description</TH></TR> + <TR valign="top"> + <TD>SMFIS_TEMPFAIL</TD> + <TD>Temporarily fail for this particular recipient; further recipients + may still be sent. <A href="xxfi_abort.html">xxfi_abort</A> is not called. + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_REJECT</TD> + <TD>Reject this particular recipient; further recipients may still be sent. + <A href="xxfi_abort.html">xxfi_abort</A> is not called. + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_DISCARD</TD> + <TD>Accept and discard the message. <A href="xxfi_abort.html">xxfi_abort</A> will be called. + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_ACCEPT</TD> + <TD>Accept recipient. <A href="xxfi_abort.html">xxfi_abort</A> will not be called. + </TD> + </TR> +</TABLE> +</TR> + +<!----------- Notes ----------> +<TR> +<TH valign="top" align=left>NOTES</TH> +<TD>For more details on ESMTP responses, please see RFC +<A href="http://www.rfc-editor.org/rfc/rfc1869.txt">1869</A>.</TD> +</TR> +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/xxfi_eoh.html b/contrib/sendmail/libmilter/docs/xxfi_eoh.html new file mode 100644 index 0000000..2a74e7a --- /dev/null +++ b/contrib/sendmail/libmilter/docs/xxfi_eoh.html @@ -0,0 +1,56 @@ +<HTML> +<HEAD><TITLE>xxfi_eoh</TITLE></HEAD> +<BODY> +<!-- +$Id: xxfi_eoh.html,v 1.11 2006/12/21 18:30:35 ca Exp $ +--> +<H1>xxfi_eoh</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +sfsistat (*xxfi_eoh)( + SMFICTX *ctx +); +</PRE> +Handle the end of message headers. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>xxfi_eoh is called once after all headers have been sent and processed. +</TD> +</TR> +<TR align="left" valign=top> +<TH>Default Behavior</TH> +<TD>Do nothing; return SMFIS_CONTINUE.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + </TABLE> +</TD></TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/xxfi_eom.html b/contrib/sendmail/libmilter/docs/xxfi_eom.html new file mode 100644 index 0000000..b5aee8b --- /dev/null +++ b/contrib/sendmail/libmilter/docs/xxfi_eom.html @@ -0,0 +1,62 @@ +<HTML> +<HEAD><TITLE>xxfi_eom</TITLE></HEAD> +<BODY> +<!-- +$Id: xxfi_eom.html,v 1.12 2006/12/21 18:30:36 ca Exp $ +--> +<H1>xxfi_eom</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +sfsistat (*xxfi_eom)( + SMFICTX *ctx +); +</PRE> +End of a message. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>xxfi_eom is called once after all calls to <A href="xxfi_body.html">xxfi_body</A> for a given message.</TD> +</TR> +<TR align="left" valign=top> +<TH>Default Behavior</TH> +<TD>Do nothing; return SMFIS_CONTINUE.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Notes ----------> +<TR> +<TH valign="top" align=left>NOTES</TH> +<TD>A filter is required to make all its modifications to the message headers, body, and envelope in xxfi_eom. +Modifications are made via the smfi_* routines. +</TD> +</TR> +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/xxfi_header.html b/contrib/sendmail/libmilter/docs/xxfi_header.html new file mode 100644 index 0000000..8a5462f --- /dev/null +++ b/contrib/sendmail/libmilter/docs/xxfi_header.html @@ -0,0 +1,111 @@ +<HTML> +<HEAD><TITLE>xxfi_header</TITLE></HEAD> +<BODY> +<!-- +$Id: xxfi_header.html,v 1.17 2006/12/21 18:30:36 ca Exp $ +--> +<H1>xxfi_header</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +sfsistat (*xxfi_header)( + SMFICTX *ctx, + char *headerf, + char *headerv +); +</PRE> +Handle a message header. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>xxfi_header is called once for each message header.</TD> +</TR> +<TR align="left" valign=top> +<TH>Default Behavior</TH> +<TD>Do nothing; return SMFIS_CONTINUE.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>headerf</TD> + <TD> Header field name. + </TD></TR> + <TR valign="top"><TD>headerv</TD> + <TD>Header field value. + The content of the header may include folded white space, + i.e., multiple lines with following white space + where lines are separated by LF (not CR/LF). + The trailing line terminator (CR/LF) is removed. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Notes ----------> +<TR> +<TH valign="top" align=left>NOTES</TH> +<TD> +<UL> +<LI>Starting with sendmail 8.14, spaces after the colon in a header +field are preserved if requested using the flag +<A HREF="xxfi_negotiate.html#SMFIP_HDR_LEADSPC"><CODE>SMFIP_HDR_LEADSPC</CODE></A>. +That is, the header + +<PRE> +From: sender <f@example.com> +To: user <t@example.com> +Subject:no +</PRE> + +will be sent to a milter as + +<PRE> +"From", " sender <f@example.com>" +"To", " user <t@example.com>" +"Subject", "no" +</PRE> + +while previously +(or without the flag +<A HREF="xxfi_negotiate.html#SMFIP_HDR_LEADSPC"><CODE>SMFIP_HDR_LEADSPC</CODE></A>) +it was: + +<PRE> +"From", "sender <f@example.com>" +"To", "user <t@example.com>" +"Subject", "no" +</PRE> + + +<LI>Later filters will see header changes/additions made by earlier ones. +<LI>For much more detail about header format, please see +RFC <A href="http://www.rfc-editor.org/rfc/rfc822.html">822</A> +and +RFC <A href="http://www.rfc-editor.org/rfc/rfc2822.html">2822</A> +</UL> +</TD> +</TR> +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003, 2006 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/xxfi_helo.html b/contrib/sendmail/libmilter/docs/xxfi_helo.html new file mode 100644 index 0000000..613cb19 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/xxfi_helo.html @@ -0,0 +1,64 @@ +<HTML> +<HEAD><TITLE>xxfi_helo</TITLE></HEAD> +<BODY> +<!-- +$Id: xxfi_helo.html,v 1.12 2006/12/21 18:30:36 ca Exp $ +--> +<H1>xxfi_helo</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +sfsistat (*xxfi_helo)( + SMFICTX *ctx, + char *helohost +); +</PRE> +Handle the HELO/EHLO command. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> <TD>xxfi_helo is called whenever the client +sends a HELO/EHLO command. +It may therefore be called several times or even not at all; +some restrictions can be imposed by the MTA configuration. +</TD> +</TR> +<TR align="left" valign=top> +<TH>Default Behavior</TH> +<TD>Do nothing; return SMFIS_CONTINUE.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>helohost</TD> + <TD>Value passed to HELO/EHLO command, which should be + the domain name of the sending host (but is, in practice, + anything the sending host wants to send). + </TD></TR> + </TABLE> +</TD></TR> + +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2000, 2003, 2005 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/xxfi_negotiate.html b/contrib/sendmail/libmilter/docs/xxfi_negotiate.html new file mode 100644 index 0000000..0f69f70 --- /dev/null +++ b/contrib/sendmail/libmilter/docs/xxfi_negotiate.html @@ -0,0 +1,277 @@ +<HTML> +<HEAD><TITLE>xxfi_negotiate</TITLE></HEAD> +<BODY> +<!-- +$Id: xxfi_negotiate.html,v 1.23 2006/12/20 18:57:08 ca Exp $ +--> +<H1>xxfi_negotiate</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +#include <libmilter/mfdef.h> +sfsistat (*xxfi_negotiate)( + SMFICTX *ctx, + unsigned long f0, + unsigned long f1, + unsigned long f2, + unsigned long f3, + unsigned long *pf0, + unsigned long *pf1, + unsigned long *pf2, + unsigned long *pf3); +</PRE> +</TD></TR> +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR> +<TH valign="top" align=left width=80>Called When</TH> +<TD>Once, at the start of each SMTP connection.</TD> +</TR> +<TR> +<TH valign="top" align=left width=80>Default Behavior</TH> +<TD>Return SMFIS_ALL_OPTS to change nothing.</TD> +</TR> +</TABLE> +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR><TD>ctx</TD> + <TD>the opaque context structure. + </TD></TR> + <TR><TD>f0</TD> + <TD>the actions offered by the MTA. + </TD></TR> + <TR><TD>f1</TD> + <TD>the protocol steps offered by the MTA. + <TR><TD>f2</TD> + <TD>for future extensions. + </TD></TR> + <TR><TD>f3</TD> + <TD>for future extensions. + </TD></TR> + <TR><TD>pf0</TD> + <TD>the actions requested by the milter. + </TD></TR> + <TR><TD>pf1</TD> + <TD>the protocol steps requested by the milter. + <TR><TD>pf2</TD> + <TD>for future extensions. + </TD></TR> + <TR><TD>pf3</TD> + <TD>for future extensions. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>SPECIAL RETURN VALUES</TH> +<TD><TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Return value</TH><TH>Description</TH></TR> + <TR valign="top"> + <TD>SMFIS_ALL_OPTS</TD> + <TD> +If a milter just wants to inspect the available protocol steps +and actions, then it can return +SMFIS_ALL_OPTS +and the MTA will make all protocol steps and actions available +to the milter. +In this case, no values should be assigned to the output parameters +<CODE>pf0</CODE> - <CODE>pf3</CODE> +as they will be ignored. + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_REJECT</TD> + <TD>Milter startup fails and it will not be contacted again +(for the current connection). + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_CONTINUE</TD> + <TD>Continue processing. + In this case the milter <EM>must</EM> set all output parameters + <CODE>pf0</CODE> - <CODE>pf3</CODE>. + See below for an explanation how to set those output parameters. + </TD> + </TR> +</TABLE> +</TR> + +<!----------- Notes ----------> +<TR> +<TH valign="top" align=left>NOTES</TH> +<TD>This function allows a milter to dynamically determine and +request operations and actions during startup. +In previous versions, the actions (f0) were fixed in the +<A HREF="smfi_register.html#flags">flags</A> field of the +<A HREF="smfi_register.html#smfiDesc">smfiDesc</A> +structure +and the protocol steps (f1) were implicitly derived by checking whether +a callback was defined. +Due to the extensions in the new milter version, +such a static selection will not work if a milter requires +new actions that are not available when talking to an older MTA. +Hence in the negotiation callback a milter can determine +which operations are available and dynamically select +those which it needs and which are offered. +If some operations are not available, the milter may either fall back +to an older mode or abort the session and ask the user to upgrade. + +<!-- +<P> +The protocol steps are defined in +<CODE>include/libmilter/mfdef.h</CODE>: +the macros start with +<CODE>SMFIP_</CODE>. +--> + +<P> +Protocol steps +(<CODE>f1</CODE>, <CODE>*pf1</CODE>): +<UL> +<LI><A NAME="SMFIP_RCPT_REJ"><CODE>SMFIP_RCPT_REJ</CODE></A>: +By setting this bit, a milter can request that the +MTA should also send <CODE>RCPT</CODE> commands that have been rejected +because the user is unknown (or similar reasons), but not those +which have been rejected because of syntax errors etc. +If a milter requests this protocol step, +then it should check the macro +<CODE>{rcpt_mailer}</CODE>: +if that is set to +<CODE>error</CODE>, +then the recipient will be rejected by the MTA. +Usually the macros +<CODE>{rcpt_host}</CODE> and <CODE>{rcpt_addr}</CODE> +will contain an enhanced status code and an error text +in that case, respectively. + +<LI><A NAME="SMFIP_SKIP"><CODE>SMFIP_SKIP</CODE></A> +indicates that the MTA understand the +<A HREF="api.html#SMFIS_SKIP">SMFIS_SKIP</A> +return code. + +<LI><A NAME="SMFIP_NR_"><CODE>SMFIP_NR_*</CODE></A> +indicates that the MTA understand the +<A HREF="api.html#SMFIS_NOREPLY">SMFIS_NOREPLY</A> +return code. +There are flags for various protocol stages: + +<UL> + +<LI><A NAME="SMFIP_NR_CONN"><CODE>SMFIP_NR_CONN</CODE></A>: +<A HREF="xxfi_connect.html">xxfi_connect()</A> + +<LI><A NAME="SMFIP_NR_HELO"><CODE>SMFIP_NR_HELO</CODE></A>: +<A HREF="xxfi_helo.html">xxfi_helo()</A> + +<LI><A NAME="SMFIP_NR_MAIL"><CODE>SMFIP_NR_MAIL</CODE></A>: +<A HREF="xxfi_envfrom.html">xxfi_envfrom()</A> + +<LI><A NAME="SMFIP_NR_RCPT"><CODE>SMFIP_NR_RCPT</CODE></A>: +<A HREF="xxfi_envrcpt.html">xxfi_envrcpt()</A> + +<LI><A NAME="SMFIP_NR_DATA"><CODE>SMFIP_NR_DATA</CODE></A>: +<A HREF="xxfi_data.html">xxfi_data()</A> + +<LI><A NAME="SMFIP_NR_UNKN"><CODE>SMFIP_NR_UNKN</CODE></A>: +<A HREF="xxfi_unknown.html">xxfi_unknown()</A> + +<LI><A NAME="SMFIP_NR_EOH"><CODE>SMFIP_NR_EOH</CODE></A>: +<A HREF="xxfi_eoh.html">xxfi_eoh()</A> + +<LI><A NAME="SMFIP_NR_BODY"><CODE>SMFIP_NR_BODY</CODE></A>: +<A HREF="xxfi_body.html">xxfi_body()</A> + +<LI><A NAME="SMFIP_NR_HDR"><CODE>SMFIP_NR_HDR</CODE></A>: +<A HREF="xxfi_header.html">xxfi_header()</A> + +</UL> + +<LI><A NAME="SMFIP_HDR_LEADSPC"><CODE>SMFIP_HDR_LEADSPC</CODE></A> +indicates that the MTA can send header values with leading space intact. +If this protocol step is requested, then the MTA will also not add a leading +space to headers when they are added, inserted, or changed. + +<!-- +:'a,.s;^#define \(SMFIP_NO[A-Z]*\)[ ].*;<LI><A NAME="\1"><CODE>\1</CODE></A>:; +--> +<LI>The MTA can be instructed not to send information about +various SMTP stages, these flags start with: +<A NAME="SMFIP_NO"><CODE>SMFIP_NO*</CODE></A>. +<UL> +<LI><A NAME="SMFIP_NOCONNECT"><CODE>SMFIP_NOCONNECT</CODE></A>: +<A HREF="xxfi_connect.html">xxfi_connect()</A> +<LI><A NAME="SMFIP_NOHELO"><CODE>SMFIP_NOHELO</CODE></A>: +<A HREF="xxfi_header.html">xxfi_header()</A> +<LI><A NAME="SMFIP_NOMAIL"><CODE>SMFIP_NOMAIL</CODE></A>: +<A HREF="xxfi_envfrom.html">xxfi_envfrom()</A> +<LI><A NAME="SMFIP_NORCPT"><CODE>SMFIP_NORCPT</CODE></A>: +<A HREF="xxfi_envrcpt.html">xxfi_envrcpt()</A> +<LI><A NAME="SMFIP_NOBODY"><CODE>SMFIP_NOBODY</CODE></A>: +<A HREF="xxfi_body.html">xxfi_body()</A> +<LI><A NAME="SMFIP_NOHDRS"><CODE>SMFIP_NOHDRS</CODE></A>: +<A HREF="xxfi_header.html">xxfi_header()</A> +<LI><A NAME="SMFIP_NOEOH"><CODE>SMFIP_NOEOH</CODE></A>: +<A HREF="xxfi_eoh.html">xxfi_eoh()</A> +<LI><A NAME="SMFIP_NOUNKNOWN"><CODE>SMFIP_NOUNKNOWN</CODE></A>: +<A HREF="xxfi_unknown.html">xxfi_unknown()</A> +<LI><A NAME="SMFIP_NODATA"><CODE>SMFIP_NODATA</CODE></A>: +<A HREF="xxfi_data.html">xxfi_data()</A> +</UL> + +For each of these xxfi_* callbacks that a milter does not use +the corresponding flag <EM>should</EM> be set in +<CODE>*pf1</CODE>. + +</UL> + +<P> +The available actions +(<CODE>f0</CODE>, <CODE>*pf0</CODE>) +are +<!-- +defined in +<CODE>include/libmilter/mfapi.h</CODE>: +the macros start with +<CODE>SMFIF_</CODE>; +these are +--> +described +<A HREF="smfi_register.html#flags">elsewhere (xxfi_flags)</A>. + +<P> +If a milter returns SMFIS_CONTINUE, then it <EM>must</EM> +set the desired actions and protocol steps +via the (output) parameters +<CODE>pf0</CODE> +and +<CODE>pf1</CODE> +(which correspond to +<CODE>f0</CODE> +and +<CODE>f1</CODE>, respectively). +The (output) parameters +<CODE>pf2</CODE> and +<CODE>pf3</CODE> +should be set to 0 for compatibility with future versions. + +</TD> +</TR> +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2006 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> diff --git a/contrib/sendmail/libmilter/docs/xxfi_unknown.html b/contrib/sendmail/libmilter/docs/xxfi_unknown.html new file mode 100644 index 0000000..0455dfd --- /dev/null +++ b/contrib/sendmail/libmilter/docs/xxfi_unknown.html @@ -0,0 +1,84 @@ +<HTML> +<HEAD><TITLE>xxfi_unknown</TITLE></HEAD> +<BODY> +<!-- +$Id: xxfi_unknown.html,v 1.4 2007/04/23 16:30:42 ca Exp $ +--> +<H1>xxfi_unknown</H1> + +<TABLE border="0" cellspacing=4 cellpadding=4> +<!---------- Synopsis -----------> +<TR><TH valign="top" align=left width=100>SYNOPSIS</TH><TD> +<PRE> +#include <libmilter/mfapi.h> +sfsistat (*xxfi_unknown)( + SMFICTX *ctx, + const char *arg +); +</PRE> +Handle unknown and unimplemented SMTP commands. +</TD></TR> + +<!----------- Description ----------> +<TR><TH valign="top" align=left>DESCRIPTION</TH><TD> +<TABLE border="1" cellspacing=1 cellpadding=4> +<TR align="left" valign=top> +<TH width="80">Called When</TH> +<TD>xxfi_unknown is called when the client uses an SMTP command +that is either unknown or not implemented by the MTA. +</TR> +<TR align="left" valign=top> +<TH>Default Behavior</TH> +<TD>Do nothing; return SMFIS_CONTINUE.</TD> +</TR> +</TABLE> + +<!----------- Arguments ----------> +<TR><TH valign="top" align=left>ARGUMENTS</TH><TD> + <TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Argument</TH><TH>Description</TH></TR> + <TR valign="top"><TD>ctx</TD> + <TD>Opaque context structure. + </TD></TR> + <TR valign="top"><TD>arg</TD> + <TD>SMTP command including all arguments. + </TD></TR> + </TABLE> +</TD></TR> + +<!----------- Return values ----------> +<TR> +<TH valign="top" align=left>SPECIAL RETURN VALUES</TH> +<TD><TABLE border="1" cellspacing=0> + <TR bgcolor="#dddddd"><TH>Return value</TH><TH>Description</TH></TR> + <TR valign="top"> + <TD>SMFIS_TEMPFAIL</TD> + <TD>Reject this command with a temporary error. + </TD> + </TR> + <TR valign="top"> + <TD>SMFIS_REJECT</TD> + <TD>Reject this command. + </TD> + </TR> +</TABLE> +</TR> + +<!----------- Notes ----------> +<TR> +<TH valign="top" align=left>NOTES</TH> +<TD>The SMTP command will always be rejected by the server, +it is only possible to return a different error code. +</TR> +</TABLE> + +<HR size="1"> +<FONT size="-1"> +Copyright (c) 2006 Sendmail, Inc. and its suppliers. +All rights reserved. +<BR> +By using this file, you agree to the terms and conditions set +forth in the LICENSE. +</FONT> +</BODY> +</HTML> |