1 #ifndef _MILTER_H_INCLUDED_
2 #define _MILTER_H_INCLUDED_
38 const char *(*conn_event) (
struct MILTER *,
const char *,
const char *,
const char *, unsigned,
ARGV *);
40 const char *(*mail_event) (
struct MILTER *,
const char **,
ARGV *);
41 const char *(*rcpt_event) (
struct MILTER *,
const char **,
ARGV *);
44 const char *(*unknown_event) (
struct MILTER *,
const char *, ARGV *);
45 const char *(*other_event) (
struct MILTER *);
53 #define MILTER_FLAG_NONE (0)
54 #define MILTER_FLAG_WANT_RCPT_REJ (1<<0)
76 const char *,
const char *,
77 const char *,
const char *,
78 const char *,
const char *);
84 #define MILTER_MACROS_ALLOC_ZERO 1
85 #define MILTER_MACROS_ALLOC_EMPTY 2
95 typedef const char *(*MILTER_MAC_LOOKUP_FN) (
const char *,
void *);
96 typedef const char *(*MILTER_ADD_HEADER_FN) (
void *,
const char *,
const char *,
const char *);
97 typedef const char *(*MILTER_EDIT_HEADER_FN) (
void *, ssize_t,
const char *,
const char *,
const char *);
98 typedef const char *(*MILTER_DEL_HEADER_FN) (
void *, ssize_t,
const char *);
99 typedef const char *(*MILTER_EDIT_FROM_FN) (
void *,
const char *,
const char *);
100 typedef const char *(*MILTER_EDIT_RCPT_FN) (
void *,
const char *);
101 typedef const char *(*MILTER_EDIT_RCPT_PAR_FN) (
void *,
const char *,
const char *);
102 typedef const char *(*MILTER_EDIT_BODY_FN) (
void *,
int,
VSTRING *);
122 #define milter_create(milter_names, conn_timeout, cmd_timeout, msg_timeout, \
123 protocol, def_action, conn_macros, helo_macros, \
124 mail_macros, rcpt_macros, data_macros, eoh_macros, \
125 eod_macros, unk_macros, macro_deflts) \
126 milter_new(milter_names, conn_timeout, cmd_timeout, msg_timeout, \
127 protocol, def_action, milter_macros_create(conn_macros, \
128 helo_macros, mail_macros, rcpt_macros, data_macros, \
129 eoh_macros, eod_macros, unk_macros), \
130 milter_macro_defaults_create(macro_deflts))
160 #define MILTER_BODY_START 1
161 #define MILTER_BODY_LINE 2
162 #define MILTER_BODY_END 3
167 #define S8_MAC__ "{_}"
168 #define S8_MAC_J "{j}"
169 #define S8_MAC_V "{v}"
171 #define S8_MAC_DAEMON_NAME "{daemon_name}"
172 #define S8_MAC_IF_NAME "{if_name}"
173 #define S8_MAC_IF_ADDR "{if_addr}"
175 #define S8_MAC_CLIENT_ADDR "{client_addr}"
176 #define S8_MAC_CLIENT_CONN "{client_connections}"
177 #define S8_MAC_CLIENT_NAME "{client_name}"
178 #define S8_MAC_CLIENT_PORT "{client_port}"
179 #define S8_MAC_CLIENT_PTR "{client_ptr}"
180 #define S8_MAC_CLIENT_RES "{client_resolve}"
182 #define S8_MAC_DAEMON_ADDR "{daemon_addr}"
183 #define S8_MAC_DAEMON_PORT "{daemon_port}"
185 #define S8_MAC_TLS_VERSION "{tls_version}"
186 #define S8_MAC_CIPHER "{cipher}"
187 #define S8_MAC_CIPHER_BITS "{cipher_bits}"
188 #define S8_MAC_CERT_SUBJECT "{cert_subject}"
189 #define S8_MAC_CERT_ISSUER "{cert_issuer}"
191 #define S8_MAC_I "{i}"
192 #define S8_MAC_AUTH_TYPE "{auth_type}"
193 #define S8_MAC_AUTH_AUTHEN "{auth_authen}"
194 #define S8_MAC_AUTH_AUTHOR "{auth_author}"
196 #define S8_MAC_MAIL_MAILER "{mail_mailer}"
197 #define S8_MAC_MAIL_HOST "{mail_host}"
198 #define S8_MAC_MAIL_ADDR "{mail_addr}"
200 #define S8_MAC_RCPT_MAILER "{rcpt_mailer}"
201 #define S8_MAC_RCPT_HOST "{rcpt_host}"
202 #define S8_MAC_RCPT_ADDR "{rcpt_addr}"
204 #define S8_RCPT_MAILER_ERROR "error"
MILTER_EDIT_BODY_FN repl_body
int(* ATTR_PRINT_MASTER_FN)(VSTREAM *, int,...)
MILTERS * milter_new(const char *, int, int, int, const char *, const char *, MILTER_MACROS *, struct HTABLE *)
MILTER_EDIT_RCPT_FN del_rcpt
struct MILTER_MACROS * macros
const char * milter_unknown_event(MILTERS *, const char *)
const char *(* MILTER_EDIT_BODY_FN)(void *, int, VSTRING *)
MILTER_MACROS * milter_macros_create(const char *, const char *, const char *, const char *, const char *, const char *, const char *, const char *)
MILTER_EDIT_HEADER_FN ins_header
const char *(* MILTER_EDIT_RCPT_FN)(void *, const char *)
MILTER_EDIT_RCPT_PAR_FN add_rcpt_par
struct HTABLE * milter_macro_defaults_create(const char *)
int milter_macros_print(ATTR_PRINT_MASTER_FN, VSTREAM *, int, void *)
void milter_macros_free(MILTER_MACROS *)
const char *(* MILTER_EDIT_FROM_FN)(void *, const char *, const char *)
MILTER_EDIT_FROM_FN chg_from
void(* free)(struct MILTER *)
const char * milter_helo_event(MILTERS *, const char *, int)
const char *(* MILTER_ADD_HEADER_FN)(void *, const char *, const char *, const char *)
MILTER_ADD_HEADER_FN add_header
MILTER_EDIT_RCPT_FN add_rcpt
const char *(* MILTER_EDIT_HEADER_FN)(void *, ssize_t, const char *, const char *, const char *)
const char * milter_rcpt_event(MILTERS *, int, const char **)
const char * milter_other_event(MILTERS *)
int(* ATTR_SCAN_MASTER_FN)(VSTREAM *, int,...)
int(* active)(struct MILTER *)
int milter_macros_scan(ATTR_SCAN_MASTER_FN, VSTREAM *, int, void *)
MILTER * milter8_receive(VSTREAM *, struct MILTERS *)
void milter_edit_callback(MILTERS *milters, MILTER_ADD_HEADER_FN, MILTER_EDIT_HEADER_FN, MILTER_EDIT_HEADER_FN, MILTER_DEL_HEADER_FN, MILTER_EDIT_FROM_FN, MILTER_EDIT_RCPT_FN, MILTER_EDIT_RCPT_PAR_FN, MILTER_EDIT_RCPT_FN, MILTER_EDIT_BODY_FN, void *)
const char *(* MILTER_DEL_HEADER_FN)(void *, ssize_t, const char *)
const char * milter_message(MILTERS *, VSTREAM *, off_t, ARGV *)
struct MILTER_MACROS * macros
struct MILTER_MACROS MILTER_MACROS
const char * milter_conn_event(MILTERS *, const char *, const char *, const char *, unsigned)
int(* send)(struct MILTER *, VSTREAM *)
const char *(* MILTER_MAC_LOOKUP_FN)(const char *, void *)
const char * milter_mail_event(MILTERS *, const char **)
const char *(* MILTER_EDIT_RCPT_PAR_FN)(void *, const char *, const char *)
void milter_macro_callback(MILTERS *, MILTER_MAC_LOOKUP_FN, void *)
MILTERS * milter_receive(VSTREAM *, int)
void milter_disc_event(MILTERS *)
MILTER_DEL_HEADER_FN del_header
MILTER_EDIT_HEADER_FN upd_header
void milter_abort(MILTERS *)
MILTER_MACROS * milter_macros_alloc(int)
const char * milter_data_event(MILTERS *)
int milter_send(MILTERS *, VSTREAM *)
void(* disc_event)(struct MILTER *)
void(* abort)(struct MILTER *)
int milter_dummy(MILTERS *, VSTREAM *)
void milter_free(MILTERS *)
MILTER_MAC_LOOKUP_FN mac_lookup
MILTER * milter8_create(const char *, int, int, int, const char *, const char *, struct MILTERS *)
struct HTABLE * macro_defaults