82 const char *myname =
"deliver_mailbox_file";
101 dsb_simple(why,
"2.0.0",
"delivers to mailbox");
124 S_IRUSR | S_IWUSR, &st, -1, -1,
127 if (S_ISREG(st.st_mode) == 0) {
129 msg_warn(
"recipient %s: destination %s is not a regular file",
131 dsb_simple(why,
"5.3.5",
"mail system configuration error");
135 "destination %s is not owned by recipient", usr_attr.
mailbox);
136 msg_warn(
"specify \"%s = no\" to ignore mailbox ownership mismatch",
140 msg_fatal(
"%s: seek mailbox file %s: %m",
143 copy_flags,
"\n", why);
154 }
else if (mail_copy_status != 0) {
163 dsb_simple(why,
"2.0.0",
"delivered to mailbox");
167 return (deliver_status);
174 const char *myname =
"deliver_mailbox";
175 const char *mailbox_res;
192 msg_fatal(
"do not specify relative pathname: %s = %s",
199 #define IGNORE_EXTENSION ((char **) 0)
203 if (mailbox_res == 0) {
208 dsb_simple(why,
"4.3.5",
"mail system configuration error");
214 mailbox_res, (
char *) 0);
216 #define RETURN(res) { myfree(usr_attr.mailbox); return (res); }
224 msg_warn(
"recipient %s: not found in %s",
226 dsb_simple(why,
"4.3.5",
"mail system configuration error");
232 msg_warn(
"recipient %s: bad uid %s in %s",
234 dsb_simple(why,
"4.3.5",
"mail system configuration error");
239 usr_attr.
uid = (uid_t) n;
247 msg_warn(
"recipient %s: not found in %s",
249 dsb_simple(why,
"4.3.5",
"mail system configuration error");
254 if ((n = atol(gid_res)) <= 0) {
255 msg_warn(
"recipient %s: bad gid %s in %s",
257 dsb_simple(why,
"4.3.5",
"mail system configuration error");
262 usr_attr.
gid = (gid_t) n;
265 msg_info(
"%s[%d]: set user_attr: %s, uid = %u, gid = %u",
267 (
unsigned) usr_attr.
uid, (
unsigned) usr_attr.
gid);
272 #define LAST_CHAR(s) (s[strlen(s) - 1])
277 *statusp = deliver_mailbox_file(state, usr_attr);
#define BOUNCE_ATTR(attr)
#define MAIL_COPY_STAT_WRITE
VSTRING * vstring_sprintf_prepend(VSTRING *vp, const char *format,...)
int deliver_mailbox(LOCAL_STATE state, USER_ATTR usr_attr, int *statusp)
MAPS * virtual_mailbox_maps
#define DEL_REQ_TRACE_ONLY(f)
bool var_strict_mbox_owner
DELIVER_REQUEST * request
#define BOUNCE_FLAGS(request)
int bounce_append(int flags, const char *id, MSG_STATS *stats, RECIPIENT *rcpt, const char *relay, DSN *dsn)
#define VAR_STRICT_MBOX_OWNER
int vstream_fclose(VSTREAM *stream)
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)
#define mail_addr_find(maps, address, extension)
void msg_warn(const char *fmt,...)
void mbox_release(MBOX *mp)
DSN_BUF * dsb_simple(DSN_BUF *dsb, const char *status, const char *format,...)
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,...)
char * var_virt_mailbox_base
int virtual_mbox_lock_mask
int deliver_maildir(LOCAL_STATE, USER_ATTR, char *)
int defer_append(int flags, const char *id, MSG_STATS *stats, RECIPIENT *rcpt, const char *relay, DSN *dsn)
#define MAIL_COPY_STAT_CORRUPT
int sent(int flags, const char *id, MSG_STATS *stats, RECIPIENT *recipient, const char *relay, DSN *dsn)
#define MSG_LOG_STATE(m, p)
MBOX * mbox_open(const char *path, int flags, mode_t mode, struct stat *st, uid_t chown_uid, gid_t chown_gid, int lock_style, const char *def_dsn, DSN_BUF *why)
#define VAR_VIRT_MAILBOX_BASE
void msg_info(const char *fmt,...)