113 msg_panic(
"forward_init: missing forward_finish call");
127 #define FORWARD_OPEN_RETURN(res) do { \
128 vstring_free(buffer); \
159 #define FORWARD_CLEANUP_FLAGS \
160 (CLEANUP_FLAG_BOUNCE | CLEANUP_FLAG_MASK_INTERNAL \
161 | smtputf8_autodetect(MAIL_SRC_MASK_FORWARD) \
162 | ((request->smtputf8 & SMTPUTF8_FLAG_REQUESTED) ? \
163 CLEANUP_FLAG_SMTPUTF8 : 0))
193 #define PASS_ATTR(fp, name, value) do { \
194 if ((value) && *(value)) \
195 rec_fprintf((fp), REC_TYPE_ATTR, "%s=%s", (name), (value)); \
225 msg_info(
"forward delivered=%s sender=%s recip=%s",
228 msg_panic(
"forward_append: missing forward_init call");
267 const char *myname =
"forward_send";
294 while (status == 0 && (rec_type =
rec_get(attr.
fp, buffer, 0)) > 0) {
300 msg_warn(
"%s: bad record type: %d in message content",
364 msg_panic(
"forward_finish: missing forward_init call");
370 for (dt = dt_list =
htable_list(forward_dt); *dt; dt++) {
371 delivered = dt[0]->
key;
372 table_snd = (
HTABLE *) dt[0]->value;
373 for (sn = sn_list =
htable_list(table_snd); *sn; sn++) {
377 status |= forward_send(info, request, attr, delivered);
379 msg_info(
"forward_finish: delivered %s sender %s status %d",
380 delivered, sender, status);
void htable_free(HTABLE *table, void(*free_fn)(void *))
#define MAIL_ATTR_DSN_NOTIFY
char * mystrdup(const char *str)
char * var_cleanup_service
const char * mail_date(time_t when)
NORETURN msg_panic(const char *fmt,...)
DSN_BUF * dsb_update(DSN_BUF *dsb, const char *status, const char *action, const char *mtype, const char *mname, const char *dtype, const char *dtext, const char *format,...)
VSTREAM * mail_connect(const char *class, const char *name, int block_mode)
#define ATTR_FLAG_MISSING
struct timeval posting_time
#define MAIL_ATTR_RWR_CONTEXT
#define RECV_ATTR_INT(name, val)
DELIVER_REQUEST * request
#define MAIL_ATTR_SASL_METHOD
#define FORWARD_OPEN_RETURN(res)
#define MAIL_ATTR_LOG_HELO_NAME
struct FORWARD_INFO FORWARD_INFO
#define MAIL_ATTR_LOG_PROTO_NAME
#define BOUNCE_FLAGS(request)
VSTRING * vstring_strcpy(VSTRING *vp, const char *src)
#define casefold(dst, src)
HTABLE * htable_create(ssize_t size)
#define MAIL_CLASS_PUBLIC
#define REC_PUT_BUF(v, t, b)
#define PASS_ATTR(fp, name, value)
HTABLE_INFO ** htable_list(HTABLE *table)
#define MAIL_ATTR_DSN_ORCPT
int vstream_fclose(VSTREAM *stream)
#define REC_TYPE_TIME_FORMAT
int forward_append(DELIVER_ATTR attr)
#define FORWARD_CLEANUP_FLAGS
#define MAIL_ATTR_SASL_SENDER
int rec_fputs(VSTREAM *stream, int type, const char *str)
void msg_warn(const char *fmt,...)
VSTRING * vstring_alloc(ssize_t len)
#define MAIL_ATTR_DSN_RET
void * htable_find(HTABLE *table, const char *key)
#define MAIL_ATTR_LOG_IDENT
#define MAIL_ATTR_DSN_ENVID
#define MAIL_ATTR_LOG_CLIENT_ADDR
#define SEND_ATTR_INT(name, val)
NORETURN msg_fatal(const char *fmt,...)
off_t vstream_fseek(VSTREAM *stream, off_t offset, int whence)
int vstream_fflush(VSTREAM *stream)
int forward_finish(DELIVER_REQUEST *request, DELIVER_ATTR attr, int cancel)
#define MAIL_ATTR_SASL_USERNAME
#define DSN_NOTIFY_SUCCESS
#define MAIL_ATTR_LOG_CLIENT_NAME
VSTRING * vstring_free(VSTRING *vp)
#define vstream_fileno(vp)
int mark_corrupt(VSTREAM *src)
#define MAIL_ATTR_QUEUEID
int sent(int flags, const char *id, MSG_STATS *stats, RECIPIENT *recipient, const char *relay, DSN *dsn)
#define rec_get(fp, buf, limit)
#define vstream_ferror(vp)
int rec_fprintf(VSTREAM *stream, int type, const char *format,...)
int local_deliver_hdr_mask
int close_on_exec(int fd, int on)
#define REC_TYPE_TIME_ARG(tv)
#define RECV_ATTR_STR(name, val)
void * mymalloc(ssize_t len)
HTABLE_INFO * htable_enter(HTABLE *table, const char *key, void *value)
void msg_info(const char *fmt,...)