80 const char *myname =
"deliver_maildir";
93 struct timeval starttime;
95 GETTIMEOFDAY(&starttime);
108 dsb_simple(why,
"2.0.0",
"delivers to maildir");
188 if ((dst =
vstream_fopen(tmpfile, O_WRONLY | O_CREAT | O_EXCL, 0600)) == 0
191 || (dst =
vstream_fopen(tmpfile, O_WRONLY | O_CREAT | O_EXCL, 0600)) == 0)) {
193 "create maildir file %s: %m", tmpfile);
204 (
unsigned long) starttime.tv_sec,
205 (
unsigned long) st.st_dev,
206 (
unsigned long) st.st_ino,
207 (
unsigned long) starttime.tv_usec,
211 dst, copy_flags,
"\n",
218 "create maildir file %s: %m", newfile);
222 if (unlink(tmpfile) < 0)
232 }
else if (mail_copy_status != 0) {
233 if (errno == EACCES) {
234 msg_warn(
"maildir access problem for UID/GID=%lu/%lu: %s",
235 (
long) usr_attr.
uid, (
long) usr_attr.
gid,
237 msg_warn(
"perhaps you need to create the maildirs in advance");
245 dsb_simple(why,
"2.0.0",
"delivered to maildir");
256 return (deliver_status);
const char * mbox_dsn(int err, const char *def_dsn)
#define BOUNCE_ATTR(attr)
int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr, char *path)
#define MAIL_COPY_STAT_WRITE
VSTRING * vstring_sprintf_prepend(VSTRING *vp, const char *format,...)
int WARN_UNUSED_RESULT sane_link(const char *, const char *)
#define MAIL_COPY_RETURN_PATH
#define DEL_REQ_TRACE_ONLY(f)
DELIVER_REQUEST * request
#define BOUNCE_FLAGS(request)
VSTREAM * vstream_fopen(const char *path, int flags, mode_t mode)
int bounce_append(int flags, const char *id, MSG_STATS *stats, RECIPIENT *rcpt, const char *relay, DSN *dsn)
int mail_copy(const char *sender, const char *orig_rcpt, const char *delivered, VSTREAM *src, VSTREAM *dst, int flags, const char *eol, DSN_BUF *why)
void msg_warn(const char *fmt,...)
VSTRING * vstring_alloc(ssize_t len)
VSTRING * vstring_sprintf(VSTRING *vp, const char *format,...)
bool var_frozen_delivered
DSN_BUF * dsb_simple(DSN_BUF *dsb, const char *status, const char *format,...)
#define MAIL_COPY_DELIVERED
NORETURN msg_fatal(const char *fmt,...)
off_t vstream_fseek(VSTREAM *stream, off_t offset, int whence)
void set_eugid(uid_t euid, gid_t egid)
char * concatenate(const char *arg0,...)
VSTRING * vstring_free(VSTRING *vp)
#define vstream_fileno(vp)
int make_dirs(const char *path, int perms)
int defer_append(int flags, const char *id, MSG_STATS *stats, RECIPIENT *rcpt, const char *relay, DSN *dsn)
#define MAIL_COPY_STAT_CORRUPT
const char * get_hostname(void)
#define MAIL_COPY_ORIG_RCPT
int sent(int flags, const char *id, MSG_STATS *stats, RECIPIENT *recipient, const char *relay, DSN *dsn)
#define MSG_LOG_STATE(m, p)
int local_deliver_hdr_mask