From 42f96eef3bd5b24f06bf9d4352f79ba39cfd77c2 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Sun, 7 Oct 2018 21:23:44 +0200 Subject: [PATCH] lmtp: Use the recipient index in the server recipient object rather than the lmtp recipient. --- src/lmtp/lmtp-common.c | 1 - src/lmtp/lmtp-common.h | 1 - src/lmtp/lmtp-local.c | 13 ++++++++----- src/lmtp/lmtp-proxy.c | 3 ++- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/lmtp/lmtp-common.c b/src/lmtp/lmtp-common.c index ca126795ea..1bd143bfb1 100644 --- a/src/lmtp/lmtp-common.c +++ b/src/lmtp/lmtp-common.c @@ -18,7 +18,6 @@ void lmtp_recipient_init(struct lmtp_recipient *lrcpt, void lmtp_recipient_finish(struct lmtp_recipient *lrcpt) { - lrcpt->index = lrcpt->rcpt->index; lrcpt->rcpt_cmd = NULL; } diff --git a/src/lmtp/lmtp-common.h b/src/lmtp/lmtp-common.h index ae893cfb45..5325f73d17 100644 --- a/src/lmtp/lmtp-common.h +++ b/src/lmtp/lmtp-common.h @@ -18,7 +18,6 @@ struct lmtp_recipient { enum lmtp_recipient_type type; struct smtp_server_cmd_ctx *rcpt_cmd; - unsigned int index; }; void lmtp_recipient_init(struct lmtp_recipient *lrcpt, diff --git a/src/lmtp/lmtp-local.c b/src/lmtp/lmtp-local.c index f0d6721a98..4e8e68272b 100644 --- a/src/lmtp/lmtp-local.c +++ b/src/lmtp/lmtp-local.c @@ -129,7 +129,7 @@ lmtp_local_rcpt_reply_overquota(struct lmtp_local_recipient *llrcpt, { struct smtp_server_recipient *rcpt = llrcpt->rcpt.rcpt; struct smtp_address *address = rcpt->path; - unsigned int rcpt_idx = llrcpt->rcpt.index; + unsigned int rcpt_idx = rcpt->index; struct lda_settings *lda_set = mail_storage_service_user_get_set(llrcpt->service_user)[2]; @@ -161,7 +161,7 @@ lmtp_local_rcpt_fail_all(struct lmtp_local *local, for (i = 0; i < count; i++) { struct smtp_server_recipient *rcpt = llrcpts[i]->rcpt.rcpt; - smtp_server_reply_index(cmd, llrcpts[i]->rcpt.index, + smtp_server_reply_index(cmd, rcpt->index, status, enh_code, "<%s> %s", smtp_address_encode(rcpt->path), msg); } @@ -441,7 +441,7 @@ lmtp_local_deliver(struct lmtp_local *local, struct client *client = local->client; struct smtp_server_recipient *rcpt = llrcpt->rcpt.rcpt; struct smtp_address *rcpt_to = rcpt->path; - unsigned int rcpt_idx = llrcpt->rcpt.index; + unsigned int rcpt_idx = rcpt->index; struct mail_storage_service_user *service_user = llrcpt->service_user; struct mail_deliver_context dctx; struct mail_user *rcpt_user; @@ -628,11 +628,14 @@ lmtp_local_deliver_to_rcpts(struct lmtp_local *local, llrcpts = array_get(&local->rcpt_to, &count); for (i = 0; i < count; i++) { struct lmtp_local_recipient *llrcpt = llrcpts[i]; + struct smtp_server_recipient *rcpt = llrcpt->rcpt.rcpt; if (llrcpt->duplicate != NULL) { + struct smtp_server_recipient *drcpt = + llrcpt->duplicate->rcpt.rcpt; /* don't deliver more than once to the same recipient */ - smtp_server_reply_submit_duplicate(cmd, - llrcpt->rcpt.index, llrcpt->duplicate->rcpt.index); + smtp_server_reply_submit_duplicate(cmd, rcpt->index, + drcpt->index); continue; } diff --git a/src/lmtp/lmtp-proxy.c b/src/lmtp/lmtp-proxy.c index c2ac67f316..a8b8e3ae1c 100644 --- a/src/lmtp/lmtp-proxy.c +++ b/src/lmtp/lmtp-proxy.c @@ -594,13 +594,14 @@ lmtp_proxy_data_cb(const struct smtp_reply *proxy_reply, struct lmtp_proxy_recipient *lprcpt) { struct lmtp_proxy_connection *conn = lprcpt->conn; + struct smtp_server_recipient *rcpt = lprcpt->rcpt.rcpt; struct lmtp_proxy *proxy = conn->proxy; struct smtp_server_cmd_ctx *cmd = proxy->pending_data_cmd; struct smtp_server_transaction *trans = proxy->trans; struct smtp_address *address = lprcpt->address; const struct smtp_client_transaction_times *times = smtp_client_transaction_get_times(conn->lmtp_trans); - unsigned int rcpt_index = lprcpt->rcpt.index; + unsigned int rcpt_index = rcpt->index; struct smtp_reply reply; string_t *msg; -- 2.47.3