New fields are added in subsequent commits.
int fd;
path = t_str_new(128);
- mail_user_set_get_temp_prefix(path, ctx->dest_user->set);
+ mail_user_set_get_temp_prefix(path, ctx->rcpt_user->set);
fd = safe_mkstemp(path, 0600, (uid_t)-1, (gid_t)-1);
if (fd == -1) {
i_error("safe_mkstemp(%s) failed: %m", str_c(path));
}
}
- if (sender != NULL && ctx->src_envelope_sender == NULL) {
+ if (sender != NULL && ctx->mail_from == NULL) {
/* use the envelope sender from From_-line, but only if it
hasn't been specified with -f already. */
- ctx->src_envelope_sender = p_strdup(ctx->pool, sender);
+ ctx->mail_from = p_strdup(ctx->pool, sender);
}
i_free(sender);
sets = master_service_settings_get_others(master_service);
raw_mail_user =
- raw_storage_create_from_set(ctx->dest_user->set_info, sets[0]);
+ raw_storage_create_from_set(ctx->rcpt_user->set_info, sets[0]);
- envelope_sender = ctx->src_envelope_sender != NULL ?
- ctx->src_envelope_sender : DEFAULT_ENVELOPE_SENDER;
+ envelope_sender = ctx->mail_from != NULL ?
+ ctx->mail_from : DEFAULT_ENVELOPE_SENDER;
if (path == NULL) {
input = create_raw_stream(ctx, 0, &mtime);
i_stream_set_name(input, "stdin");
}
static void
-lda_set_dest_addr(struct mail_deliver_context *ctx, const char *user,
+lda_set_rcpt_orig_to(struct mail_deliver_context *ctx, const char *user,
const char *destaddr_source)
{
- if (ctx->dest_addr == NULL &&
+ if (ctx->rcpt_orig_to == NULL &&
*ctx->set->lda_original_recipient_header != '\0') {
- ctx->dest_addr = mail_deliver_get_address(ctx->src_mail,
+ ctx->rcpt_orig_to = mail_deliver_get_address(ctx->src_mail,
ctx->set->lda_original_recipient_header);
destaddr_source = t_strconcat(
ctx->set->lda_original_recipient_header, " header", NULL);
}
- if (ctx->dest_addr == NULL) {
- ctx->dest_addr = strchr(user, '@') != NULL ? user :
+ if (ctx->rcpt_orig_to == NULL) {
+ ctx->rcpt_orig_to = strchr(user, '@') != NULL ? user :
t_strconcat(user, "@", ctx->set->hostname, NULL);
destaddr_source = "user@hostname";
}
- if (ctx->final_dest_addr == NULL)
- ctx->final_dest_addr = ctx->dest_addr;
+ if (ctx->rcpt_to == NULL)
+ ctx->rcpt_to = ctx->rcpt_orig_to;
- if (ctx->dest_user->mail_debug) {
+ if (ctx->rcpt_user->mail_debug) {
i_debug("Destination address: %s (source: %s)",
- ctx->dest_addr, destaddr_source);
+ ctx->rcpt_orig_to, destaddr_source);
}
}
i_zero(&ctx);
ctx.session = mail_deliver_session_init();
ctx.pool = ctx.session->pool;
- ctx.dest_mailbox_name = "INBOX";
+ ctx.rcpt_default_mailbox = "INBOX";
path = NULL;
user = getenv("USER");
switch (c) {
case 'a':
/* original recipient address */
- ctx.dest_addr = optarg;
+ ctx.rcpt_orig_to = optarg;
destaddr_source = "-a parameter";
break;
case 'd':
break;
case 'f':
/* envelope sender address */
- ctx.src_envelope_sender =
+ ctx.mail_from =
p_strdup(ctx.pool, address_sanitize(optarg));
break;
case 'm':
i_fatal("Mailbox name not UTF-8: %s",
optarg);
}
- ctx.dest_mailbox_name = optarg;
+ ctx.rcpt_default_mailbox = optarg;
} T_END;
break;
case 'p':
break;
case 'r':
/* final recipient address */
- ctx.final_dest_addr = optarg;
+ ctx.rcpt_to = optarg;
break;
default:
print_help();
_lookup() and _next(), but don't bother) */
ctx.delivery_time_started = ioloop_timeval;
ret = mail_storage_service_lookup_next(storage_service, &service_input,
- &service_user, &ctx.dest_user,
+ &service_user, &ctx.rcpt_user,
&errstr);
if (ret <= 0) {
if (ret < 0)
#ifdef SIGXFSZ
lib_signals_ignore(SIGXFSZ, TRUE);
#endif
- var_table = mail_user_var_expand_table(ctx.dest_user);
+ var_table = mail_user_var_expand_table(ctx.rcpt_user);
smtp_set = mail_storage_service_user_get_set(service_user)[1];
lda_set = mail_storage_service_user_get_set(service_user)[2];
ret = settings_var_expand(
&lda_setting_parser_info,
- lda_set, ctx.dest_user->pool, var_table,
+ lda_set, ctx.rcpt_user->pool, var_table,
&errstr);
if (ret > 0) {
ret = settings_var_expand(
&smtp_submit_setting_parser_info,
- smtp_set, ctx.dest_user->pool, var_table,
+ smtp_set, ctx.rcpt_user->pool, var_table,
&errstr);
}
if (ret <= 0)
ctx.set = lda_set;
ctx.smtp_set = smtp_set;
- if (ctx.dest_user->mail_debug && *user_source != '\0') {
+ if (ctx.rcpt_user->mail_debug && *user_source != '\0') {
i_debug("userdb lookup skipped, username taken from %s",
user_source);
}
ctx.src_mail = lda_raw_mail_open(&ctx, path);
- lda_set_dest_addr(&ctx, user, destaddr_source);
+ lda_set_rcpt_orig_to(&ctx, user, destaddr_source);
if (mail_deliver(&ctx, &storage) < 0) {
if (ctx.tempfail_error != NULL) {
mailbox_free(&box);
}
- mail_user_unref(&ctx.dest_user);
+ mail_user_unref(&ctx.rcpt_user);
mail_deliver_session_deinit(&ctx.session);
mail_storage_service_user_unref(&service_user);
{ 'w', dec2str(ctx->cache->vsize), "vsize" },
{ '\0', dec2str(delivery_time_msecs), "delivery_time" },
{ '\0', dec2str(ctx->session_time_msecs), "session_time" },
- { '\0', ctx->dest_addr, "to_envelope" },
+ { '\0', ctx->rcpt_orig_to, "to_envelope" },
{ '\0', ctx->cache->storage_id, "storage_id" },
{ '\0', NULL, NULL }
};
i_assert(ctx->dest_mail == NULL);
- default_save = strcmp(mailbox, ctx->dest_mailbox_name) == 0;
+ default_save = strcmp(mailbox, ctx->rcpt_default_mailbox) == 0;
if (default_save)
ctx->tried_default_save = TRUE;
i_zero(&open_ctx);
- open_ctx.user = ctx->dest_user;
+ open_ctx.user = ctx->rcpt_user;
open_ctx.lda_mailbox_autocreate = ctx->set->lda_mailbox_autocreate;
open_ctx.lda_mailbox_autosubscribe = ctx->set->lda_mailbox_autosubscribe;
kw = str_array_length(keywords) == 0 ? NULL :
mailbox_keywords_create_valid(box, keywords);
save_ctx = mailbox_save_alloc(t);
- if (ctx->src_envelope_sender != NULL)
- mailbox_save_set_from_envelope(save_ctx, ctx->src_envelope_sender);
+ if (ctx->mail_from != NULL)
+ mailbox_save_set_from_envelope(save_ctx, ctx->mail_from);
mailbox_save_set_flags(save_ctx, flags, kw);
headers_ctx = mailbox_header_lookup_init(box, lda_log_wanted_headers);
const char *mail_deliver_get_return_address(struct mail_deliver_context *ctx)
{
- if (ctx->src_envelope_sender != NULL)
- return ctx->src_envelope_sender;
+ if (ctx->mail_from != NULL)
+ return ctx->mail_from;
return mail_deliver_get_address(ctx->src_mail, "Return-Path");
}
const char *mail_deliver_get_new_message_id(struct mail_deliver_context *ctx)
{
static int count = 0;
- struct mail_user *user = ctx->dest_user;
+ struct mail_user *user = ctx->rcpt_user;
const struct mail_storage_settings *mail_set =
mail_user_set_get_storage_set(user);
struct mail_storage **storage_r)
{
struct mail_deliver_user *muser =
- MAIL_DELIVER_USER_CONTEXT(ctx->dest_user);
+ MAIL_DELIVER_USER_CONTEXT(ctx->rcpt_user);
int ret;
i_assert(muser->deliver_ctx == NULL);
if (deliver_mail == NULL)
ret = -1;
else {
- ctx->dup_db = mail_duplicate_db_init(ctx->dest_user,
+ ctx->dup_db = mail_duplicate_db_init(ctx->rcpt_user,
DUPLICATE_DB_NAME);
if (deliver_mail(ctx, storage_r) <= 0) {
/* if message was saved, don't bounce it even though
if (ret < 0 && !ctx->tried_default_save) {
/* plugins didn't handle this. save into the default mailbox. */
- ret = mail_deliver_save(ctx, ctx->dest_mailbox_name, 0, NULL,
+ ret = mail_deliver_save(ctx, ctx->rcpt_default_mailbox, 0, NULL,
storage_r);
if (ret < 0 && mail_deliver_is_tempfailed(ctx, *storage_r)) {
muser->deliver_ctx = NULL;
return -1;
}
}
- if (ret < 0 && strcasecmp(ctx->dest_mailbox_name, "INBOX") != 0) {
+ if (ret < 0 && strcasecmp(ctx->rcpt_default_mailbox, "INBOX") != 0) {
/* still didn't work. try once more to save it
to INBOX. */
ret = mail_deliver_save(ctx, "INBOX", 0, NULL, storage_r);
const char *session_id;
/* Mail to save */
struct mail *src_mail;
+
/* Envelope sender, if known. */
- const char *src_envelope_sender;
+ const char *mail_from;
+ /* Envelope recipient (final recipient) */
+ const char *rcpt_to;
+ /* Envelope recipient (original recipient) */
+ const char *rcpt_orig_to;
/* Destination user */
- struct mail_user *dest_user;
- /* Original recipient address */
- const char *dest_addr;
- /* Final recipient address (typically same as dest_addr) */
- const char *final_dest_addr;
+ struct mail_user *rcpt_user;
/* Mailbox where mail should be saved, unless e.g. Sieve does
something to it. */
- const char *dest_mailbox_name;
+ const char *rcpt_default_mailbox;
/* Filled with destination mail, if save_dest_mail=TRUE.
The caller must free the mail, its transaction and close
int mail_send_rejection(struct mail_deliver_context *ctx, const char *recipient,
const char *reason)
{
- struct mail_user *user = ctx->dest_user;
+ struct mail_user *user = ctx->rcpt_user;
const struct mail_storage_settings *mail_set =
mail_user_set_get_storage_set(user);
struct mail *mail = ctx->src_mail;
dctx.smtp_set = smtp_set;
dctx.session_id = rcpt->session_id;
dctx.src_mail = src_mail;
- dctx.src_envelope_sender = client->state.mail_from;
- dctx.dest_user = dest_user;
+ dctx.mail_from = client->state.mail_from;
+ dctx.rcpt_user = dest_user;
dctx.session_time_msecs =
timeval_diff_msecs(&client->state.data_end_timeval,
&client->state.mail_from_timeval);
dctx.delivery_time_started = delivery_time_started;
- if (orcpt_get_valid_rfc822(rcpt->params.dsn_orcpt, &dctx.dest_addr)) {
+ if (orcpt_get_valid_rfc822(rcpt->params.dsn_orcpt, &dctx.rcpt_orig_to)) {
/* used ORCPT */
} else if (*dctx.set->lda_original_recipient_header != '\0') {
- dctx.dest_addr = mail_deliver_get_address(src_mail,
+ dctx.rcpt_orig_to = mail_deliver_get_address(src_mail,
dctx.set->lda_original_recipient_header);
}
- if (dctx.dest_addr == NULL)
- dctx.dest_addr = rcpt->address;
- dctx.final_dest_addr = rcpt->address;
+ if (dctx.rcpt_orig_to == NULL)
+ dctx.rcpt_orig_to = rcpt->address;
+ dctx.rcpt_to = rcpt->address;
if (*rcpt->detail == '\0' ||
!client->lmtp_set->lmtp_save_to_detail_mailbox)
- dctx.dest_mailbox_name = "INBOX";
+ dctx.rcpt_default_mailbox = "INBOX";
else {
ns = mail_namespace_find_inbox(dest_user->namespaces);
- dctx.dest_mailbox_name =
+ dctx.rcpt_default_mailbox =
t_strconcat(ns->prefix, rcpt->detail, NULL);
}