From 7bab02676917f21c879f0558d9cd32fa301274a8 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Sat, 13 Jan 2018 12:26:57 +0100 Subject: [PATCH] lib-smtp: server: transaction: Add function that finds duplicate recipients. Duplicate means that both the path and parameters are equal. --- src/lib-smtp/smtp-server-transaction.c | 20 ++++++++++++++++++++ src/lib-smtp/smtp-server.h | 5 +++++ 2 files changed, 25 insertions(+) diff --git a/src/lib-smtp/smtp-server-transaction.c b/src/lib-smtp/smtp-server-transaction.c index f67e9b48f8..9c3e6bb3b0 100644 --- a/src/lib-smtp/smtp-server-transaction.c +++ b/src/lib-smtp/smtp-server-transaction.c @@ -51,6 +51,26 @@ void smtp_server_transaction_free(struct smtp_server_transaction **_trans) *_trans = NULL; } +struct smtp_server_recipient * +smtp_server_transaction_find_rcpt_duplicate( + struct smtp_server_transaction *trans, + struct smtp_server_recipient *rcpt) +{ + struct smtp_server_recipient *const *rcptp; + + i_assert(array_is_created(&trans->rcpt_to)); + array_foreach(&trans->rcpt_to, rcptp) { + struct smtp_server_recipient *drcpt = *rcptp; + + if (drcpt == rcpt) + continue; + if (smtp_address_equals(drcpt->path, rcpt->path) && + smtp_params_rcpt_equals(&drcpt->params, &rcpt->params)) + return drcpt; + } + return NULL; +} + struct smtp_server_recipient * smtp_server_transaction_add_rcpt(struct smtp_server_transaction *trans, const struct smtp_address *rcpt_to, diff --git a/src/lib-smtp/smtp-server.h b/src/lib-smtp/smtp-server.h index 2884f0221e..c2bf4cdc85 100644 --- a/src/lib-smtp/smtp-server.h +++ b/src/lib-smtp/smtp-server.h @@ -69,6 +69,11 @@ struct smtp_server_transaction { void *context; }; +struct smtp_server_recipient * +smtp_server_transaction_find_rcpt_duplicate( + struct smtp_server_transaction *trans, + struct smtp_server_recipient *rcpt); + void smtp_server_transaction_fail_data( struct smtp_server_transaction *trans, struct smtp_server_cmd_ctx *data_cmd, -- 2.47.3