an effective anti-spam with milter - milter manager

libmilter/mfapi.h

libmilter/mfapi.h — libmilter compatible API.

Functions

#define SM_LM_VRS_MAJOR()
#define SM_LM_VRS_MINOR()
#define SM_LM_VRS_PLVL()
int smfi_opensocket ()
int smfi_register ()
int smfi_main ()
int smfi_setbacklog ()
int smfi_setdbg ()
int smfi_settimeout ()
int smfi_setconn ()
int smfi_stop ()
int smfi_version ()
char * smfi_getsymval ()
int smfi_setreply ()
int smfi_setmlreply ()
int smfi_addheader ()
int smfi_chgheader ()
int smfi_insheader ()
int smfi_chgfrom ()
int smfi_addrcpt ()
int smfi_addrcpt_par ()
int smfi_delrcpt ()
int smfi_progress ()
int smfi_replacebody ()
int smfi_quarantine ()
int smfi_setpriv ()
void * smfi_getpriv ()
int smfi_setsymlist ()

Types and Values

#define SMFI_VERSION
#define MI_SUCCESS
#define MI_FAILURE
typedef SMFICTX
typedef SMFICTX_PTR
typedef smfiDesc_str
typedef smfiDesc_ptr
typedef sfsistat
#define bool
#define true
#define false
struct smfiDesc
#define SMFIF_ADDHDRS
#define SMFIF_CHGBODY
#define SMFIF_MODBODY
#define SMFIF_ADDRCPT
#define SMFIF_DELRCPT
#define SMFIF_CHGHDRS
#define SMFIF_QUARANTINE
#define SMFIF_CHGFROM
#define SMFIF_ADDRCPT_PAR
#define SMFIF_SETSYMLIST
#define SMFIS_CONTINUE
#define SMFIS_REJECT
#define SMFIS_DISCARD
#define SMFIS_ACCEPT
#define SMFIS_TEMPFAIL
#define SMFIS_NOREPLY
#define SMFIS_SKIP
#define SMFIS_ALL_OPTS
#define SMFIM_CONNECT
#define SMFIM_HELO
#define SMFIM_ENVFROM
#define SMFIM_ENVRCPT
#define SMFIM_DATA
#define SMFIM_EOM
#define SMFIM_EOH
#define SMFIP_NOCONNECT
#define SMFIP_NOHELO
#define SMFIP_NOMAIL
#define SMFIP_NORCPT
#define SMFIP_NOBODY
#define SMFIP_NOHDRS
#define SMFIP_NOEOH
#define SMFIP_NR_HDR
#define SMFIP_NOHREPL
#define SMFIP_NOUNKNOWN
#define SMFIP_NODATA
#define SMFIP_SKIP
#define SMFIP_RCPT_REJ
#define SMFIP_NR_CONN
#define SMFIP_NR_HELO
#define SMFIP_NR_MAIL
#define SMFIP_NR_RCPT
#define SMFIP_NR_DATA
#define SMFIP_NR_UNKN
#define SMFIP_NR_EOH
#define SMFIP_NR_BODY
#define SMFIP_HDR_LEADSPC

Description

libmilter/mfapi.h provides Sendmail's libmilter compatible API. You can use this library instead of Sendmail's libmilter. See also API Documentation on milter.org.

Functions

SM_LM_VRS_MAJOR()

#define SM_LM_VRS_MAJOR(version) (((version) & 0x7f000000) >> 24)

Extracts major version number from version .

Parameters

version

the version number.

 

Returns

major version number.


SM_LM_VRS_MINOR()

#define SM_LM_VRS_MINOR(version) (((version) & 0x007fff00) >> 8)

Extracts minor version number from version .

Parameters

version

the version number.

 

Returns

minor version number.


SM_LM_VRS_PLVL()

#define SM_LM_VRS_PLVL(version)		((version) & 0x0000007f)

Extracts patch level from version .

Parameters

version

the version number.

 

Returns

patch level.


smfi_opensocket ()

int
smfi_opensocket (bool remove_socket);

Creates the socket that is used to connect from MTA.

Normally, smfi_opensocket() isn't needed to call explicitly. The socket is created in smfi_main() implicitly.

Here are the fail conditions:

  • smfi_register() hasn't called successfully.

  • smfi_setconn() hasn't called successfully.

  • smfi_opensocket() fails to remove existing UNIX domain socket if connection spec is for UNIX domain socket and remove_socket is true.

  • smfi_opensocket() fails to create the new socket.

See also smfi_opensocket on milter.org.

Parameters

remove_socket

Whether or not trying to remove existing UNIX domain socket before creating a new socket.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_register ()

int
smfi_register (struct smfiDesc description);

Registers the milter implementation as callbacks.

Here are the fail conditions:

  • incompatible xxfi_version.

  • illegal xxfi_flags value.

See also smfi_register on milter.org.

Parameters

description

The milter description.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_main ()

int
smfi_main (void);

Enters event loop. The milter should be initialized with smfi_register(), smfi_setconn() and so on before smfi_main() is called.

Here are the fail conditions:

  • failed to create the socket.

See also smfi_main on milter.org.

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_setbacklog ()

int
smfi_setbacklog (int backlog);

Sets the milters' backlog value that is used for listen(2).

Here are the fail conditions:

  • backlog <= 0.

See also smfi_setbacklog on milter.org.

Parameters

backlog

The maximum length of the pending connections queue.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_setdbg ()

int
smfi_setdbg (int level);

Sets the log level. If level is 0, turns off any log message. The greater value is specified, more log messages are output.

See also smfi_setdbg on milter.org.

Parameters

level

The log level.

 

Returns

always MI_SUCCESS.


smfi_settimeout ()

int
smfi_settimeout (int timeout);

Sets the I/O timeout value in seconds. The default value is 7210 seconds. timeout == 0 means no wait, not "wait forever".

See also smfi_settimeout on milter.org.

Parameters

timeout

The timeout value in seconds.

 

Returns

always MI_SUCCESS.


smfi_setconn ()

int
smfi_setconn (char *connection_spec);

Sets the connection spec.

connection_spec format is one of them:

  • "unix:/PATH/TO/SOCKET": UNIX domain socket.

  • "inet:PORT", "inet:PORT@HOST_NAME" or "inet:PORT@IP_ADDRESS": IPv4.

  • "inet6:PORT", "inet6:PORT@HOST_NAME" or "inet6:PORT@IP_ADDRESS": IPv6.

Here are the fail conditions:

  • invalid format.

  • connection_spec is NULL.

See also smfi_setconn on milter.org.

Parameters

connection_spec

The connection spec for communicating MTA.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_stop ()

int
smfi_stop (void);

Stops the milter. No more connections are accepted but processing connections are continued until they are finished.

See also smfi_stop on milter.org.

Returns

always MI_SUCCESS.


smfi_version ()

int
smfi_version (unsigned int *major,
              unsigned int *minor,
              unsigned int *patch_level);

Gets the libmilter version. The version is for using libmilter not built libmilter.

See also smfi_version on milter.org.

Parameters

major

return location for major version.

 

minor

return location for minor version.

 

patch_level

return location for patch level.

 

Returns

always MI_SUCCESS.


smfi_getsymval ()

char *
smfi_getsymval (SMFICTX *context,
                char *name);

Gets a value of the macro named name in the current milter session context. smfi_getsymval() can be called in xxfi_XXX callbacks. (e.g. xxfi_connect(), xxfi_helo(), ...)

name should be enclosed in braces ("{" and "}") like "{if_name}" except name contains a character like "i".

See also smfi_getsymval on milter.org. Sendmail's default macros are also shown in the page.

Parameters

context

the context for the current milter session.

 

name

the name of a macro.

 

Returns

a value of the macro named name if it exists, NULL otherwise.


smfi_setreply ()

int
smfi_setreply (SMFICTX *context,
               char *return_code,
               char *extended_code,
               char *message);

Sets the error reply code. 4xx return_code is used on SMFIS_TEMPFAIL. 5xx return_code is used on SMFIS_REJECT.

Here are the fail conditions:

  • return_code is neither 4xx nor 5xx.

  • extended_code is neither 4.x.x nor 5.x.x.

See also smfi_setreply on milter.org.

Parameters

context

the context for the current milter session.

 

return_code

the three-digit SMTP error reply code. (RFC 2821) Only 4xx and 5xx are accepted.

 

extended_code

the extended reply code (RFC 1893/2034), or NULL. Only 4.x.x and 5.x.x are available.

 

message

the text part of the SMTP reply, or NULL.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_setmlreply ()

int
smfi_setmlreply (SMFICTX *context,
                 const char *return_code,
                 const char *extended_code,
                 ...);

Sets the error reply code. 4xx return_code is used on SMFIS_TEMPFAIL. 5xx return_code is used on SMFIS_REJECT.

Here are the fail conditions:

  • return_code is neither 4xx nor 5xx.

  • extended_code is neither 4.x.x nor 5.x.x.

See also smfi_setmlreply on milter.org.

Parameters

context

the context for the current milter session.

 

return_code

the three-digit SMTP error reply code. (RFC 2821) Only 4xx and 5xx are accepted.

 

extended_code

the extended reply code (RFC 1893/2034), or NULL. Only 4.x.x and 5.x.x are available.

 

...

the single lines of text part of the SMTP reply, terminated by NULL.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_addheader ()

int
smfi_addheader (SMFICTX *context,
                char *name,
                char *value);

Adds a header to the current message's header list. smfi_addheader() can be called in xxfi_eom().

Here are the fail conditions:

See also smfi_addheader on milter.org.

Parameters

context

the context for the current milter session.

 

name

the header name.

 

value

the header value.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_chgheader ()

int
smfi_chgheader (SMFICTX *context,
                char *name,
                int index,
                char *value);

Changes a header that is located at index in headers that all of them are named name . If value is NULL, the header is deleted. smfi_chgheader() can be called in xxfi_eom().

Here are the fail conditions:

  • name is NULL.

  • called in except xxfi_eom(). FIXME: not-implemented yet.

  • SMFIF_CHGHDRS flag isn't set in smfi_register() or xxfi_negotiate(). FIXME: not-implemented yet.

  • network error is occurred.

See also smfi_chgheader on milter.org.

Parameters

context

the context for the current milter session.

 

name

the header name.

 

index

the index of headers that all of them are named name . (1-based)

 

value

the header value. Use NULL to delete the target header.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_insheader ()

int
smfi_insheader (SMFICTX *context,
                int index,
                char *name,
                char *value);

Inserts a header to index in headers. smfi_insheader() can be called in xxfi_eom().

Here are the fail conditions:

  • name is NULL.

  • value is NULL. FIXME: not-implemented yet.

  • called in except xxfi_eom(). FIXME: not-implemented yet.

  • SMFIF_ADDHDRS flag isn't set in smfi_register() or xxfi_negotiate(). FIXME: not-implemented yet.

  • network error is occurred.

See also smfi_insheader on milter.org.

Parameters

context

the context for the current milter session.

 

index

the index of inserted header. 0 means that the header is prepended.

 

name

the header name.

 

value

the header value.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_chgfrom ()

int
smfi_chgfrom (SMFICTX *context,
              char *mail,
              char *arguments);

Changes a sender address. smfi_chgfrom() can be called in xxfi_eom().

Here are the fail conditions:

  • mail is NULL. FIXME: not-implemented yet.

  • called in except xxfi_eom(). FIXME: not-implemented yet.

  • SMFIF_CHGFROM flag isn't set in smfi_register() or xxfi_negotiate(). FIXME: not-implemented yet.

  • network error is occurred.

See also smfi_chgfrom on milter.org.

Parameters

context

the context for the current milter session.

 

mail

the new sender address.

 

arguments

the extra arguments for ESMTP.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_addrcpt ()

int
smfi_addrcpt (SMFICTX *context,
              char *recipient);

Adds a recipient address. smfi_addrcpt() can be called in xxfi_eom().

Here are the fail conditions:

  • recipient is NULL. FIXME: not-implemented yet.

  • called in except xxfi_eom(). FIXME: not-implemented yet.

  • SMFIF_ADDRCPT flag isn't set in smfi_register() or xxfi_negotiate(). FIXME: not-implemented yet.

  • network error is occurred.

See also smfi_addrcpt on milter.org.

Parameters

context

the context for the current milter session.

 

recipient

the new recipient address.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_addrcpt_par ()

int
smfi_addrcpt_par (SMFICTX *context,
                  char *recipient,
                  char *arguments);

Adds a recipient address with extra ESMTP arguments. smfi_addrcpt_par() can be called in xxfi_eom().

Here are the fail conditions:

  • recipient is NULL. FIXME: not-implemented yet.

  • called in except xxfi_eom(). FIXME: not-implemented yet.

  • SMFIF_ADDRCPT_PAR flag isn't set in smfi_register() or xxfi_negotiate(). FIXME: not-implemented yet.

  • network error is occurred.

See also smfi_addrcpt_par on milter.org.

Parameters

context

the context for the current milter session.

 

recipient

the recipient address.

 

arguments

the extra arguments for ESMTP.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_delrcpt ()

int
smfi_delrcpt (SMFICTX *context,
              char *recipient);

Deletes a recipient address. smfi_delrcpt() can be called in xxfi_eom().

Here are the fail conditions:

  • recipient is NULL. FIXME: not-implemented yet.

  • called in except xxfi_eom(). FIXME: not-implemented yet.

  • SMFIF_DELRCPT flag isn't set in smfi_register() or xxfi_negotiate(). FIXME: not-implemented yet.

  • network error is occurred.

See also smfi_delrcpt on milter.org.

Parameters

context

the context for the current milter session.

 

recipient

the recipient address.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_progress ()

int
smfi_progress (SMFICTX *context);

Keeps the current connection. smfi_progress() can be called in xxfi_eom().

Here are the fail conditions:

  • called in except xxfi_eom(). FIXME: not-implemented yet.

  • network error is occurred.

See also smfi_progress on milter.org.

Parameters

context

the context for the current milter session.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_replacebody ()

int
smfi_replacebody (SMFICTX *context,
                  unsigned char *new_body,
                  int new_body_size);

Replaces the current body data with new_body . smfi_replacebody() can be called in xxfi_eom().

Here are the fail conditions:

  • new_body == NULL and new_body_size > 0. FIXME: not-implemented yet.

  • called in except xxfi_eom(). FIXME: not-implemented yet.

  • SMFIF_CHGBODY flag isn't set in smfi_register() or xxfi_negotiate(). FIXME: not-implemented yet.

  • network error is occurred.

See also smfi_replacebody on milter.org.

Parameters

context

the context for the current milter session.

 

new_body

the new body data.

 

new_body_size

the size of new_body .

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_quarantine ()

int
smfi_quarantine (SMFICTX *context,
                 char *reason);

Quarantines the current message with reason . smfi_quarantine() can be called in xxfi_eom().

Here are the fail conditions:

  • reason is NULL or empty. FIXME: not-implemented yet.

  • called in except xxfi_eom(). FIXME: not-implemented yet.

  • SMFIF_QUARANTINE flag isn't set in smfi_register() or xxfi_negotiate(). FIXME: not-implemented yet.

  • network error is occurred.

See also smfi_quarantine on milter.org.

Parameters

context

the context for the current milter session.

 

reason

the quarantine reason.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_setpriv ()

int
smfi_setpriv (SMFICTX *context,
              void *data);

Sets the private data.

Here are the fail conditions:

  • context is invalid. FIXME: not-implemented yet.

See also smfi_setpriv on milter.org.

Parameters

context

the context for the current milter session.

 

data

the private data.

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.


smfi_getpriv ()

void *
smfi_getpriv (SMFICTX *context);

Gets the private data.

Here are the fail conditions:

  • context is invalid. FIXME: not-implemented yet.

See also smfi_getpriv on milter.org.

Parameters

context

the context for the current milter session.

 

Returns

the private data set by smfi_setpriv() or NULL.


smfi_setsymlist ()

int
smfi_setsymlist (SMFICTX *context,
                 int state,
                 char *macros);

Sets the list of requested macros. smfi_setsymlist() can be called in xxfi_negotiate().

Here are the fail conditions:

  • state is not a valid value. FIXME: not-implemented yet.

  • macros is NULL or empty. FIXME: not-implemented yet.

  • the macro list for state has been set before. FIXME: not-implemented yet.

  • called in except xxfi_negotiate(). FIXME: not-implemented yet.

  • network error is occurred.

See also smfi_setsymlist on milter.org.

Parameters

context

the context for the current milter session.

 

state

the state defined as SMFIM_XXX like SMFIM_CONNECT.

 

macros

the space separated macro names like "{rcpt_mailer} {rcpt_host}".

 

Returns

MI_SUCCESS if success, MI_FAILURE otherwise.

Types and Values

SMFI_VERSION

#  define SMFI_VERSION 0x01000001

libmilter version number.


MI_SUCCESS

#define MI_SUCCESS 0

Indicates an operation is done successfully.


MI_FAILURE

#define MI_FAILURE (-1)

Indicates an operation is failed.


SMFICTX

typedef struct smfi_str  SMFICTX;

Holds information for a milter session. SMFICTX is created for each milter session. SMFICTX is the most important object in libmilter API.


SMFICTX_PTR

typedef struct smfi_str *SMFICTX_PTR;

The pointer type of SMFICTX.


smfiDesc_str

typedef struct smfiDesc smfiDesc_str;

Holds information for the milter. smfiDesc_str is used by smfi_register().


smfiDesc_ptr

typedef struct smfiDesc *smfiDesc_ptr;

The pointer type of smfiDesc_str.


sfsistat

typedef int sfsistat;

Indicates response status returned by callback.

Available response status is one of the followings:


bool

#      define bool int

The boolean type.


true

#      define true 1

The true value.


false

#      define false 0

The false value.


struct smfiDesc

struct smfiDesc {
    char          *xxfi_name;
    int            xxfi_version;
    unsigned long  xxfi_flags;

    sfsistat (*xxfi_connect)   (SMFICTX     *context,
                                   char        *host_name,
                                   _SOCK_ADDR  *address);
    sfsistat (*xxfi_helo)      (SMFICTX    *context,
                                   char       *fqdn);
    sfsistat (*xxfi_envfrom)   (SMFICTX    *context,
                                   char      **arguments);
    sfsistat (*xxfi_envrcpt)   (SMFICTX    *context,
                                   char      **arguments);
    sfsistat (*xxfi_header)    (SMFICTX    *context,
                                   char       *name,
                                   char       *value);
    sfsistat (*xxfi_eoh)       (SMFICTX    *context);
    sfsistat (*xxfi_body)      (SMFICTX    *context,
                                   unsigned char *data,
                                   size_t     data_size);
    sfsistat (*xxfi_eom)       (SMFICTX    *context);
    sfsistat (*xxfi_abort)     (SMFICTX    *context);
    sfsistat (*xxfi_close)     (SMFICTX    *context);
    sfsistat (*xxfi_unknown)   (SMFICTX    *context,
                                   const char *command);
    sfsistat (*xxfi_data)      (SMFICTX    *context);
    sfsistat (*xxfi_negotiate) (SMFICTX    *context,
                                   unsigned long  actions,
                                   unsigned long  steps,
                                   unsigned long  unused0,
                                   unsigned long  unused1,
                                   unsigned long *actions_output,
                                   unsigned long *steps_output,
                                   unsigned long *unused0_output,
                                   unsigned long *unused1_output);
};

smfiDesc is used by smfi_register() to register a milter.

If xxfi_name is NULL, "Unknown" is used as default milter name.

xxfi_version must be specified SMFI_VERSION.

Here are the available xxfi_flags values:

They can be used together by bitwise OR.

All callbacks (e.g. xxfi_helo(), xxfi_envfrom() and so on) may be NULL. If a callback is NULL, the event is just ignored the milter.

Members

char *xxfi_name;

The name of the milter.

 

int xxfi_version;

The version code of the milter.

 

unsigned long xxfi_flags;

The flags of the milter. Available values are SMFIF_*.

 

xxfi_connect ()

See xxfi_connect().

 

xxfi_helo ()

See xxfi_helo().

 

xxfi_envfrom ()

See xxfi_envfrom().

 

xxfi_envrcpt ()

See xxfi_envrcpt().

 

xxfi_header ()

See xxfi_header().

 

xxfi_eoh ()

See xxfi_eoh().

 

xxfi_body ()

See xxfi_body().

 

xxfi_eom ()

See xxfi_eom().

 

xxfi_abort ()

See xxfi_abort().

 

xxfi_close ()

See xxfi_close().

 

xxfi_unknown ()

See xxfi_unknown().

 

xxfi_data ()

See xxfi_data().

 

xxfi_negotiate ()

See xxfi_negotiate().

 

SMFIF_ADDHDRS

#define SMFIF_ADDHDRS     0x00000001L

The milter may call smfi_addheader().

See also smfiDesc, xxfi_negotiate() and smfi_register on milter.org.


SMFIF_CHGBODY

#define SMFIF_CHGBODY     0x00000002L

The milter may call smfi_chgbody().

See also smfiDesc, xxfi_negotiate() and smfi_register on milter.org.


SMFIF_MODBODY

#define SMFIF_MODBODY     SMFIF_CHGBODY

Same as SMFIF_CHGBODY.


SMFIF_ADDRCPT

#define SMFIF_ADDRCPT     0x00000004L

The milter may call smfi_addrcpt().

See also smfiDesc, xxfi_negotiate() and smfi_register on milter.org.


SMFIF_DELRCPT

#define SMFIF_DELRCPT     0x00000008L

The milter may call smfi_delrcpt().

See also smfiDesc, xxfi_negotiate() and smfi_register on milter.org.


SMFIF_CHGHDRS

#define SMFIF_CHGHDRS     0x00000010L

The milter may call smfi_chgheader().

See also smfiDesc, xxfi_negotiate() and smfi_register on milter.org.


SMFIF_QUARANTINE

#define SMFIF_QUARANTINE  0x00000020L

The milter may call smfi_quarantine().

See also smfiDesc, xxfi_negotiate() and smfi_register on milter.org.


SMFIF_CHGFROM

#define SMFIF_CHGFROM     0x00000040L

The milter may call smfi_chgfrom().

See also smfiDesc, xxfi_negotiate() and smfi_register on milter.org.


SMFIF_ADDRCPT_PAR

#define SMFIF_ADDRCPT_PAR 0x00000080L

The milter may call smfi_addrcpt_par().

See also smfiDesc, xxfi_negotiate() and smfi_register on milter.org.


SMFIF_SETSYMLIST

#define SMFIF_SETSYMLIST  0x00000100L

The milter may call smfi_setsymlist().

See also smfiDesc, xxfi_negotiate() and smfi_register on milter.org.


SMFIS_CONTINUE

#define SMFIS_CONTINUE    0

Continues the current process.

See each callback (xxfi_connect(), xxfi_helo() and so on) and callback return status description on milter.org.


SMFIS_REJECT

#define SMFIS_REJECT      1

Rejects the current processing target.

See each callback (xxfi_connect(), xxfi_helo() and so on) and callback return status description on milter.org.


SMFIS_DISCARD

#define SMFIS_DISCARD     2

Accepts the current processing target and discards it silently.

See each callback (xxfi_envfrom(), xxfi_envrcpt() and so on) and callback return status description on milter.org.


SMFIS_ACCEPT

#define SMFIS_ACCEPT      3

Accepts the current processing target.

See each callback (xxfi_connect(), xxfi_helo() and so on) and callback return status description on milter.org.


SMFIS_TEMPFAIL

#define SMFIS_TEMPFAIL    4

Replies a temporary failure status for the current processing target.

See each callback (xxfi_connect(), xxfi_helo() and so on) and callback return status description on milter.org.


SMFIS_NOREPLY

#define SMFIS_NOREPLY     7

Doesn't reply to the MTA.

See each callback (xxfi_connect(), xxfi_helo() and so on) and callback return status description on milter.org.


SMFIS_SKIP

#define SMFIS_SKIP        8

Skips the rest body chunks. This can be used only in xxfi_body().

See also callback return status description on milter.org.


SMFIS_ALL_OPTS

#define SMFIS_ALL_OPTS    10

Uses the all negotiate options received from the MTA. This can be used only in xxfi_negotiate().


SMFIM_CONNECT

#define SMFIM_CONNECT	  0

Indicates the protocol stage for xxfi_connect().

See smfi_setsymlist().


SMFIM_HELO

#define SMFIM_HELO	  1

Indicates the protocol stage for xxfi_helo().

See smfi_setsymlist().


SMFIM_ENVFROM

#define SMFIM_ENVFROM	  2

Indicates the protocol stage for xxfi_envfrom().

See smfi_setsymlist().


SMFIM_ENVRCPT

#define SMFIM_ENVRCPT	  3

Indicates the protocol stage for xxfi_envrcpt().

See smfi_setsymlist().


SMFIM_DATA

#define SMFIM_DATA	  4

Indicates the protocol stage for xxfi_data().

See smfi_setsymlist().


SMFIM_EOM

#define SMFIM_EOM	  5

Indicates the protocol stage for xxfi_eom().

See smfi_setsymlist().


SMFIM_EOH

#define SMFIM_EOH	  6

Indicates the protocol stage for xxfi_eoh().

See smfi_setsymlist().


SMFIP_NOCONNECT

#define SMFIP_NOCONNECT       0x00000001L

Indicates that the MTA should not send information for xxfi_connect().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NOHELO

#define SMFIP_NOHELO          0x00000002L

Indicates that the MTA should not send information for xxfi_helo().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NOMAIL

#define SMFIP_NOMAIL          0x00000004L

Indicates that the MTA should not send information for xxfi_mail().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NORCPT

#define SMFIP_NORCPT          0x00000008L

Indicates that the MTA should not send information for xxfi_rcpt().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NOBODY

#define SMFIP_NOBODY          0x00000010L


SMFIP_NOHDRS

#define SMFIP_NOHDRS          0x00000020L

Indicates that the MTA should not send information for xxfi_header().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NOEOH

#define SMFIP_NOEOH           0x00000040L

Indicates that the MTA should not send information for xxfi_eoh().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NR_HDR

#define SMFIP_NR_HDR          0x00000080L

Indicates that the milter don't reply on xxfi_header().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NOHREPL

#define SMFIP_NOHREPL         SMFIP_NR_HDR

Same as SMFIP_NR_HDR.


SMFIP_NOUNKNOWN

#define SMFIP_NOUNKNOWN       0x00000100L

Indicates that the MTA should not send information for xxfi_unknown().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NODATA

#define SMFIP_NODATA          0x00000200L

Indicates that the MTA should not send information for xxfi_data().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_SKIP

#define SMFIP_SKIP            0x00000400L

Indicates that the MTA supports SMFIS_SKIP in xxfi_body().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_RCPT_REJ

#define SMFIP_RCPT_REJ        0x00000800L

Indicates that the MTA should send rejected envelope recipients and xxfi_envrcpt() is called for them.

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NR_CONN

#define SMFIP_NR_CONN         0x00001000L

Indicates that the milter don't reply on xxfi_connect().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NR_HELO

#define SMFIP_NR_HELO         0x00002000L

Indicates that the milter don't reply on xxfi_helo().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NR_MAIL

#define SMFIP_NR_MAIL         0x00004000L

Indicates that the milter don't reply on xxfi_envfrom().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NR_RCPT

#define SMFIP_NR_RCPT         0x00008000L

Indicates that the milter don't reply on xxfi_envrcpt().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NR_DATA

#define SMFIP_NR_DATA         0x00010000L

Indicates that the milter don't reply on xxfi_data().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NR_UNKN

#define SMFIP_NR_UNKN         0x00020000L

Indicates that the milter don't reply on xxfi_unknown().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NR_EOH

#define SMFIP_NR_EOH          0x00040000L

Indicates that the milter don't reply on xxfi_eoh().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_NR_BODY

#define SMFIP_NR_BODY         0x00080000L

Indicates that the milter don't reply on xxfi_body().

This flag can be got/set to steps_output of xxfi_negotiate().


SMFIP_HDR_LEADSPC

#define SMFIP_HDR_LEADSPC     0x00100000L

Indicates that xxfi_header() callback is received a header value including spaces after ':'. See xxfi_header() for examples.

This flag can be got/set to steps_output of xxfi_negotiate().