75 const char *myname =
"deliver_maildir";
88 struct timeval starttime;
90 GETTIMEOFDAY(&starttime);
103 dsb_simple(why,
"2.0.0",
"delivers to maildir");
182 if ((dst =
vstream_fopen(tmpfile, O_WRONLY | O_CREAT | O_EXCL, 0600)) == 0
185 || (dst =
vstream_fopen(tmpfile, O_WRONLY | O_CREAT | O_EXCL, 0600)) == 0)) {
187 "create maildir file %s: %m", tmpfile);
198 (
unsigned long) starttime.tv_sec,
199 (
unsigned long) st.st_dev,
200 (
unsigned long) st.st_ino,
201 (
unsigned long) starttime.tv_usec,
205 dst, copy_flags,
"\n",
212 "create maildir file %s: %m", newfile);
216 if (unlink(tmpfile) < 0)
228 }
else if (mail_copy_status != 0) {
229 if (errno == EACCES) {
230 msg_warn(
"maildir access problem for UID/GID=%lu/%lu: %s",
231 (
long) usr_attr.
uid, (
long) usr_attr.
gid,
233 msg_warn(
"perhaps you need to create the maildirs in advance");
242 dsb_simple(why,
"2.0.0",
"delivered to maildir");
253 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,...)
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)