82 #define STR vstring_str
83 #define STREQ(x,y) (strcmp((x), (y)) == 0)
85 static void cleanup_envelope_process(
CLEANUP_STATE *,
int,
const char *, ssize_t);
90 const char *str, ssize_t
len)
110 state->
action = cleanup_envelope_process;
111 cleanup_envelope_process(state, type, str, len);
116 static void cleanup_envelope_process(
CLEANUP_STATE *state,
int type,
117 const char *buf, ssize_t
len)
119 const char *myname =
"cleanup_envelope_process";
122 const char *error_text;
125 int mapped_type = type;
126 const char *mapped_buf = buf;
135 msg_info(
"initial envelope %c %.*s", type, (
int) len, buf);
139 extra_opts = atoi(buf);
141 msg_warn(
"%s: ignoring bad extra flags: 0x%x",
144 state->
flags |= extra_opts;
150 defer_delay = atoi(buf);
151 if (defer_delay <= 0)
154 state->defer_delay = defer_delay;
168 if ((milter_count = atoi(buf)) >= 0)
182 if (error_text != 0) {
183 msg_warn(
"%s: message rejected: malformed attribute: %s: %.100s",
189 if (*attr_value == 0) {
190 msg_warn(
"%s: spurious null attribute value for \"%s\" -- ignored",
195 mapped_buf = attr_value;
204 msg_warn(
"%s: message rejected: unexpected record type %d in envelope",
237 msg_warn(
"%s: message rejected: missing sender envelope record",
243 msg_warn(
"%s: message rejected: missing time envelope record",
268 msg_warn(
"%s: message rejected: envelope recipient precedes sender",
303 msg_warn(
"%s: ignoring out-of-order DSN original recipient record <%.200s>",
312 msg_warn(
"%s: ignoring out-of-order DSN notify record <%d>",
316 if (!
alldig(mapped_buf) || (junk = atoi(mapped_buf)) == 0
318 msg_warn(
"%s: ignoring malformed DSN notify record <%.200s>",
327 msg_warn(
"%s: ignoring out-of-order original recipient record <%.200s>",
361 (void) sscanf(buf,
"%*s $*s %*s %*s %*s %d", &state->
smtputf8);
388 off_t after_sender_offs;
392 msg_warn(
"%s: message rejected: multiple envelope sender records",
416 msg_warn(
"%s: message rejected: bad DSN envelope ID record",
429 if (!
alldig(mapped_buf) || (junk = atoi(mapped_buf)) == 0
431 msg_warn(
"%s: message rejected: bad DSN RET record <%.200s>",
452 msg_warn(
"%s: ignoring VERP request for null sender",
455 msg_warn(
"%s: ignoring bad VERP request: \"%.100s\"",
466 msg_warn(
"%s: message rejected: attribute count exceeds limit %d",
479 msg_warn(
"%s: message rejected: bad rewriting context: %.100s",
486 if (!
alldig(attr_value)) {
487 msg_warn(
"%s: message rejected: bad TFLAG record <%.200s>",
#define QMGR_READ_FLAG_MIXED_RCPT_OTHER
#define MAIL_ATTR_TRACE_FLAGS
void cleanup_out_format(CLEANUP_STATE *state, int type, const char *fmt,...)
char * mystrdup(const char *str)
#define REC_TYPE_SIZE_CAST3
#define MAIL_ATTR_CREATE_TIME
NVTABLE_INFO * nvtable_update(NVTABLE *table, const char *key, const char *value)
off_t vstream_ftell(VSTREAM *stream)
off_t cleanup_addr_sender(CLEANUP_STATE *, const char *)
void cleanup_milter_emul_mail(CLEANUP_STATE *, MILTERS *, const char *)
#define REC_TYPE_SIZE_CAST2
off_t append_rcpt_pt_target
#define MAIL_ATTR_RWR_CONTEXT
void cleanup_message(CLEANUP_STATE *, int, const char *, ssize_t)
#define MAIL_ATTR_RWR_LOCAL
#define REC_TYPE_DSN_ENVID
#define MAIL_ATTR_RWR_REMOTE
struct timeval arrival_time
#define CLEANUP_MILTER_OK(s)
int alldig(const char *string)
#define REC_TYPE_SIZE_FORMAT
const char * split_nameval(char *buf, char **name, char **value)
#define REC_TYPE_DSN_NOTIFY
#define CLEANUP_FLAG_INRCPT
#define REC_TYPE_MILT_COUNT
int var_qattr_count_limit
#define DEL_REQ_TRACE_FLAGS(f)
VSTRING * vstring_strcpy(VSTRING *vp, const char *src)
#define SMTPUTF8_FLAG_REQUESTED
void cleanup_envelope(CLEANUP_STATE *state, int type, const char *str, ssize_t len)
#define REC_TYPE_DSN_ORCPT
#define REC_TYPE_PTR_FORMAT
off_t append_rcpt_pt_offset
void cleanup_milter_emul_rcpt(CLEANUP_STATE *, MILTERS *, const char *)
#define CLEANUP_FLAG_MASK_EXTRA
char * hdr_rewrite_context
void msg_warn(const char *fmt,...)
void(* action)(struct CLEANUP_STATE *, int, const char *, ssize_t)
#define REC_TYPE_WARN_ARG(tv)
int rec_attr_map(const char *attr_name)
const char * verp_delims_verify(const char *delims)
NORETURN msg_fatal(const char *fmt,...)
void cleanup_milter_receive(CLEANUP_STATE *, int)
#define REC_TYPE_WARN_FORMAT
#define CLEANUP_FLAG_WARN_SEEN
#define QMGR_READ_FLAG_FROM_DSN(x)
int allprint(const char *string)
#define REC_TYPE_SIZE_CAST4
void cleanup_out(CLEANUP_STATE *, int, const char *, ssize_t)
MILTERS * cleanup_milters
#define REC_TYPE_SIZE_CAST1
#define REC_TYPE_SIZE_CAST5
#define REC_TYPE_SIZE_CAST6
char * var_remote_rwr_domain
#define REC_TYPE_TIME_SCAN(cp, tv)
#define REC_TYPE_ENV_RECIPIENT
void cleanup_addr_recipient(CLEANUP_STATE *, const char *)
void msg_info(const char *fmt,...)
#define REC_TYPE_ENVELOPE