From 038274feb6024d0528e8e21876eae895bebf44e5 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Tue, 18 Feb 2020 23:27:03 +0100 Subject: [PATCH] global: Properly parse Message-ID header. Use mail_get_message_id() instead of just mail_get_first_header(). --- src/lib-sieve/plugins/duplicate/tst-duplicate.c | 3 +-- src/plugins/imap-filter-sieve/imap-filter-sieve.c | 2 +- src/plugins/imapsieve/imap-sieve.c | 3 +-- src/plugins/lda-sieve/lda-sieve-plugin.c | 2 +- src/sieve-tools/sieve-filter.c | 2 +- src/sieve-tools/sieve-test.c | 2 +- src/testsuite/testsuite-message.c | 10 ++++++++-- 7 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/lib-sieve/plugins/duplicate/tst-duplicate.c b/src/lib-sieve/plugins/duplicate/tst-duplicate.c index db3756b36..2a000de2b 100644 --- a/src/lib-sieve/plugins/duplicate/tst-duplicate.c +++ b/src/lib-sieve/plugins/duplicate/tst-duplicate.c @@ -403,8 +403,7 @@ tst_duplicate_operation_execute(const struct sieve_runtime_env *renv, val_len = str_len(uniqueid); } else { if (header == NULL) { - ret = mail_get_first_header_utf8(mail, "Message-ID", - &val); + ret = mail_get_message_id(mail, &val); if (ret < 0) { return sieve_runtime_mail_error( renv, mail, "duplicate test: " diff --git a/src/plugins/imap-filter-sieve/imap-filter-sieve.c b/src/plugins/imap-filter-sieve/imap-filter-sieve.c index 5f6b29adc..97e8faa07 100644 --- a/src/plugins/imap-filter-sieve/imap-filter-sieve.c +++ b/src/plugins/imap-filter-sieve/imap-filter-sieve.c @@ -954,7 +954,7 @@ imap_sieve_filter_get_msgdata(struct imap_filter_sieve_context *sctx, msgdata_r->envelope.mail_from = mail_from; msgdata_r->envelope.rcpt_to = rcpt_to; msgdata_r->auth_user = user->username; - (void)mail_get_first_header(mail, "Message-ID", &msgdata_r->id); + (void)mail_get_message_id(mail, &msgdata_r->id); } int imap_sieve_filter_run_mail(struct imap_filter_sieve_context *sctx, diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c index e701c63c3..a3ab53fd4 100644 --- a/src/plugins/imapsieve/imap-sieve.c +++ b/src/plugins/imapsieve/imap-sieve.c @@ -819,8 +819,7 @@ int imap_sieve_run_mail(struct imap_sieve_run *isrun, struct mail *mail, i_zero(&msgdata); msgdata.mail = mail; msgdata.auth_user = user->username; - (void)mail_get_first_header(msgdata.mail, "Message-ID", - &msgdata.id); + (void)mail_get_message_id(msgdata.mail, &msgdata.id); /* Compose script execution environment */ diff --git a/src/plugins/lda-sieve/lda-sieve-plugin.c b/src/plugins/lda-sieve/lda-sieve-plugin.c index 979976f0b..2f51cfc1d 100644 --- a/src/plugins/lda-sieve/lda-sieve-plugin.c +++ b/src/plugins/lda-sieve/lda-sieve-plugin.c @@ -944,7 +944,7 @@ lda_sieve_execute(struct lda_sieve_run_context *srctx, msgdata.envelope.mail_params = &mdctx->mail_params; msgdata.envelope.rcpt_to = mdctx->rcpt_to; msgdata.envelope.rcpt_params = &mdctx->rcpt_params; - (void)mail_get_first_header(msgdata.mail, "Message-ID", &msgdata.id); + (void)mail_get_message_id(msgdata.mail, &msgdata.id); srctx->msgdata = &msgdata; diff --git a/src/sieve-tools/sieve-filter.c b/src/sieve-tools/sieve-filter.c index 6ef92100f..d71f4bcad 100644 --- a/src/sieve-tools/sieve-filter.c +++ b/src/sieve-tools/sieve-filter.c @@ -108,7 +108,7 @@ static int filter_message(struct sieve_filter_context *sfctx, struct mail *mail) i_zero(&msgdata); msgdata.mail = mail; msgdata.auth_user = senv->user->username; - (void)mail_get_first_header(mail, "Message-ID", &msgdata.id); + (void)mail_get_message_id(mail, &msgdata.id); senv->script_context = &msgdata; sieve_tool_get_envelope_data(&msgdata, mail, NULL, NULL, NULL); diff --git a/src/sieve-tools/sieve-test.c b/src/sieve-tools/sieve-test.c index 92793920b..b623b6714 100644 --- a/src/sieve-tools/sieve-test.c +++ b/src/sieve-tools/sieve-test.c @@ -310,7 +310,7 @@ int main(int argc, char **argv) i_zero(&msgdata); msgdata.mail = mail; msgdata.auth_user = sieve_tool_get_username(sieve_tool); - (void)mail_get_first_header(mail, "Message-ID", &msgdata.id); + (void)mail_get_message_id(mail, &msgdata.id); sieve_tool_get_envelope_data(&msgdata, mail, mail_from, rcpt_to, final_rcpt_to); diff --git a/src/testsuite/testsuite-message.c b/src/testsuite/testsuite-message.c index 4f5752b3e..c04ab3445 100644 --- a/src/testsuite/testsuite-message.c +++ b/src/testsuite/testsuite-message.c @@ -42,6 +42,7 @@ static struct smtp_address *testsuite_env_orig_rcpt_to = NULL; static char *testsuite_env_auth = NULL; static pool_t testsuite_msg_pool; +static char *testsuite_msg_id = NULL; static const struct smtp_address * testsuite_message_get_address(struct mail *mail, const char *header) @@ -62,6 +63,7 @@ testsuite_message_get_address(struct mail *mail, const char *header) static void testsuite_message_set_data(struct mail *mail) { const struct smtp_address *recipient = NULL, *sender = NULL; + const char *msg_id; static const struct smtp_address default_recipient = { .localpart = "recipient", @@ -76,6 +78,7 @@ static void testsuite_message_set_data(struct mail *mail) i_free(testsuite_env_rcpt_to); i_free(testsuite_env_orig_rcpt_to); i_free(testsuite_env_auth); + i_free(testsuite_msg_id); /* * Collect necessary message data @@ -101,18 +104,20 @@ static void testsuite_message_set_data(struct mail *mail) testsuite_env_rcpt_to = smtp_address_clone(default_pool, recipient); testsuite_env_orig_rcpt_to = smtp_address_clone(default_pool, recipient); + (void)mail_get_message_id(mail, &msg_id); + testsuite_msg_id = i_strdup(msg_id); + i_zero(&testsuite_msgdata); testsuite_msgdata.mail = mail; testsuite_msgdata.auth_user = sieve_tool_get_username(sieve_tool); testsuite_msgdata.envelope.mail_from = testsuite_env_mail_from; testsuite_msgdata.envelope.rcpt_to = testsuite_env_rcpt_to; + testsuite_msgdata.id = testsuite_msg_id; i_zero(&testsuite_rcpt_params); testsuite_rcpt_params.orcpt.addr = testsuite_env_orig_rcpt_to; testsuite_msgdata.envelope.rcpt_params = &testsuite_rcpt_params; - - (void)mail_get_first_header(mail, "Message-ID", &testsuite_msgdata.id); } void testsuite_message_init(void) @@ -160,6 +165,7 @@ void testsuite_message_deinit(void) i_free(testsuite_env_orig_rcpt_to); i_free(testsuite_env_auth); pool_unref(&testsuite_msg_pool); + i_free(testsuite_msg_id); } void testsuite_envelope_set_sender_address(const struct sieve_runtime_env *renv, -- GitLab