diff --git a/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c b/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c index 8bf564b73a73c6c416fad38272cce651f4f38f77..5e61af72c6f9efe0596db2da5a7329f1eddfad1a 100644 --- a/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c +++ b/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c @@ -497,7 +497,7 @@ static int ntfy_mailto_send else if ( svinst->user_email != NULL ) from_smtp = sieve_address_to_string(svinst->user_email); else - from_smtp = senv->postmaster_address; + from_smtp = sieve_get_postmaster_address(senv); } /* Determine message from address */ @@ -668,7 +668,7 @@ static int ntfy_mailto_action_execute (nenv->flags & SIEVE_EXECUTE_FLAG_NO_ENVELOPE) == 0 ) owner_email = sieve_message_get_final_recipient(nenv->msgctx); if ( owner_email == NULL ) - owner_email = senv->postmaster_address; + owner_email = sieve_get_postmaster_address(senv); i_assert( owner_email != NULL ); /* Is the message an automatic reply ? */ diff --git a/src/lib-sieve/plugins/notify/cmd-notify.c b/src/lib-sieve/plugins/notify/cmd-notify.c index 75878abfc24f8cbff85a3f121cb03db3ecb7d744..d261ddce565dc03e64d6061f31700f29fce1025c 100644 --- a/src/lib-sieve/plugins/notify/cmd-notify.c +++ b/src/lib-sieve/plugins/notify/cmd-notify.c @@ -724,7 +724,7 @@ static bool act_notify_send } rfc2822_header_printf(msg, "From", - "Postmaster <%s>", senv->postmaster_address); + "Postmaster <%s>", sieve_get_postmaster_address(senv)); rfc2822_header_write(msg, "Subject", "[SIEVE] New mail notification"); @@ -746,10 +746,12 @@ static bool act_notify_send rfc2822_header_write(msg, "Message-ID", outmsgid); if ( (aenv->flags & SIEVE_EXECUTE_FLAG_NO_ENVELOPE) == 0 && - sieve_message_get_sender(aenv->msgctx) != NULL ) - sctx = sieve_smtp_start(senv, senv->postmaster_address); - else + sieve_message_get_sender(aenv->msgctx) != NULL ) { + sctx = sieve_smtp_start(senv, + sieve_get_postmaster_address(senv)); + } else { sctx = sieve_smtp_start(senv, NULL); + } /* Add all recipients (and compose To header field) */ to = t_str_new(128); diff --git a/src/lib-sieve/plugins/vacation/cmd-vacation.c b/src/lib-sieve/plugins/vacation/cmd-vacation.c index 3c033af94eea449f202add2e474bda89f0e9fe84..2195e57a0c252baba88e0598909dde6039b6ed9d 100644 --- a/src/lib-sieve/plugins/vacation/cmd-vacation.c +++ b/src/lib-sieve/plugins/vacation/cmd-vacation.c @@ -1031,8 +1031,10 @@ static int act_vacation_send rfc2822_header_utf8_printf(msg, "From", "%s", ctx->from); else if ( reply_from != NULL ) rfc2822_header_printf(msg, "From", "<%s>", reply_from); - else - rfc2822_header_printf(msg, "From", "Postmaster <%s>", senv->postmaster_address); + else { + rfc2822_header_printf(msg, "From", "Postmaster <%s>", + sieve_get_postmaster_address(senv)); + } rfc2822_header_printf(msg, "To", "%s", reply_to); diff --git a/src/lib-sieve/plugins/vnd.dovecot/report/cmd-report.c b/src/lib-sieve/plugins/vnd.dovecot/report/cmd-report.c index 18c93cc0c6d33abfe76406d09e24ccde55274b0a..38af36c9e4d7384936154386d1442c7cfde8d669 100644 --- a/src/lib-sieve/plugins/vnd.dovecot/report/cmd-report.c +++ b/src/lib-sieve/plugins/vnd.dovecot/report/cmd-report.c @@ -490,8 +490,8 @@ static int act_report_send if ( (ret=sieve_address_source_get_address (&report_from, svinst, senv, msgctx, aenv->flags, &from)) <= 0 || from == NULL || *from == '\0') { - from = t_strdup_printf - ("Postmaster <%s>", senv->postmaster_address); + from = t_strdup_printf("Postmaster <%s>", + sieve_get_postmaster_address(senv)); } /* Start message */ diff --git a/src/lib-sieve/sieve-actions.c b/src/lib-sieve/sieve-actions.c index f4a07590267c83c47d800de569ef2688175c2272..1d05e2fa36f669631b293c9b4ef0b4b9276cb035 100644 --- a/src/lib-sieve/sieve-actions.c +++ b/src/lib-sieve/sieve-actions.c @@ -849,7 +849,7 @@ static int sieve_action_do_reject_mail rfc2822_header_write(hdr, "Message-ID", new_msgid); rfc2822_header_write(hdr, "Date", message_date_create(ioloop_time)); rfc2822_header_printf(hdr, "From", "Mail Delivery Subsystem <%s>", - senv->postmaster_address); + sieve_get_postmaster_address(senv)); rfc2822_header_printf(hdr, "To", "<%s>", sender); rfc2822_header_write(hdr, "Subject", "Automatically rejected mail"); rfc2822_header_write(hdr, "Auto-Submitted", "auto-replied (rejected)"); diff --git a/src/lib-sieve/sieve-address-source.c b/src/lib-sieve/sieve-address-source.c index 19a6bf78617ba56ed124328c9eea565ecb69a791..e697bfffbfd07aea3ea72a5602920f8976593ac7 100644 --- a/src/lib-sieve/sieve-address-source.c +++ b/src/lib-sieve/sieve-address-source.c @@ -109,7 +109,7 @@ int sieve_address_source_get_address *addr_r = sieve_address_to_string(svinst->user_email); return 1; case SIEVE_ADDRESS_SOURCE_POSTMASTER: - *addr_r = senv->postmaster_address; + *addr_r = sieve_get_postmaster_address(senv); return 1; case SIEVE_ADDRESS_SOURCE_EXPLICIT: *addr_r = sieve_address_to_string(asrc->address); diff --git a/src/lib-sieve/sieve-common.h b/src/lib-sieve/sieve-common.h index 273f6712176534858af308c13f3aa1d4d9766b56..401945f9db8db50608c643794002e83f2d5b337d 100644 --- a/src/lib-sieve/sieve-common.h +++ b/src/lib-sieve/sieve-common.h @@ -221,4 +221,11 @@ void sieve_trace_log_write_line const char *sieve_get_user_email (struct sieve_instance *svinst); +/* + * Postmaster address + */ + +const char *sieve_get_postmaster_address +(const struct sieve_script_env *senv); + #endif /* __SIEVE_COMMON_H */ diff --git a/src/lib-sieve/sieve-types.h b/src/lib-sieve/sieve-types.h index fdcc5823efbd1a37dce77de95623957d3c5b31e8..3c858b31e028adfcfbf3081780e9dfdddee10d70 100644 --- a/src/lib-sieve/sieve-types.h +++ b/src/lib-sieve/sieve-types.h @@ -183,7 +183,6 @@ struct sieve_script_env { /* Mail-related */ struct mail_user *user; const char *default_mailbox; - const char *postmaster_address; bool mailbox_autocreate; bool mailbox_autosubscribe; diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c index 4273b8001bef75854e2283222075914e5c1a5f8a..231ff28ad603a35e1e5301b0b045a2b2b477fd67 100644 --- a/src/lib-sieve/sieve.c +++ b/src/lib-sieve/sieve.c @@ -10,6 +10,7 @@ #include "eacces-error.h" #include "home-expand.h" #include "hostpid.h" +#include "mail-user.h" #include "sieve-settings.h" #include "sieve-extensions.h" @@ -1071,3 +1072,19 @@ const char *sieve_get_user_email } return NULL; } + +/* + * Postmaster address + */ + +const char *sieve_get_postmaster_address +(const struct sieve_script_env *senv) +{ + const struct mail_storage_settings *mail_set = + mail_user_set_get_storage_set(senv->user); + + i_assert(mail_set->postmaster_address != NULL && + *mail_set->postmaster_address != '\0'); + return mail_set->postmaster_address; +} + diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c index 8df831b2c70402df8f0c680eb5c8131888d02192..9c7edf374b57644a6a0708e89c14c171b227ef0d 100644 --- a/src/plugins/imapsieve/imap-sieve.c +++ b/src/plugins/imapsieve/imap-sieve.c @@ -65,7 +65,8 @@ struct imap_sieve *imap_sieve_init(struct client *client) struct sieve_environment svenv; struct imap_sieve *isieve; struct mail_user *user = client->user; - const struct lda_settings *lda_set = client->lda_set; + const struct mail_storage_settings *mail_set = + mail_user_set_get_storage_set(user); bool debug = user->mail_debug; pool_t pool; @@ -79,7 +80,7 @@ struct imap_sieve *imap_sieve_init(struct client *client) i_zero(&svenv); svenv.username = user->username; (void)mail_user_get_home(user, &svenv.home_dir); - svenv.hostname = lda_set->hostname; + svenv.hostname = mail_set->hostname; svenv.base_dir = user->set->base_dir; svenv.flags = SIEVE_FLAG_HOME_RELATIVE; svenv.location = SIEVE_ENV_LOCATION_MS; @@ -698,7 +699,6 @@ int imap_sieve_run_mail struct imap_sieve *isieve = isrun->isieve; struct sieve_instance *svinst = isieve->svinst; struct mail_user *user = isieve->client->user; - const struct lda_settings *lda_set = isieve->client->lda_set; struct sieve_message_data msgdata; struct sieve_script_env scriptenv; struct sieve_exec_status estatus; @@ -740,7 +740,6 @@ int imap_sieve_run_mail i_zero(&estatus); scriptenv.default_mailbox = mailbox_get_vname(mail->box); scriptenv.user = user; - scriptenv.postmaster_address = lda_set->postmaster_address; scriptenv.smtp_start = imap_sieve_smtp_start; scriptenv.smtp_add_rcpt = imap_sieve_smtp_add_rcpt; scriptenv.smtp_send = imap_sieve_smtp_send; diff --git a/src/plugins/lda-sieve/lda-sieve-plugin.c b/src/plugins/lda-sieve/lda-sieve-plugin.c index 8acd6daa1d04fc78a6c8a2e429d5c4859967f795..30d91b65a103690cbdc384a437b3eb7762d7b29d 100644 --- a/src/plugins/lda-sieve/lda-sieve-plugin.c +++ b/src/plugins/lda-sieve/lda-sieve-plugin.c @@ -850,7 +850,6 @@ static int lda_sieve_execute scriptenv.mailbox_autocreate = mdctx->set->lda_mailbox_autocreate; scriptenv.mailbox_autosubscribe = mdctx->set->lda_mailbox_autosubscribe; scriptenv.user = mdctx->dest_user; - scriptenv.postmaster_address = mdctx->set->postmaster_address; scriptenv.smtp_start = lda_sieve_smtp_start; scriptenv.smtp_add_rcpt = lda_sieve_smtp_add_rcpt; scriptenv.smtp_send = lda_sieve_smtp_send; @@ -887,6 +886,8 @@ static int lda_sieve_deliver_mail (struct mail_deliver_context *mdctx, struct mail_storage **storage_r) { struct lda_sieve_run_context srctx; + const struct mail_storage_settings *mail_set = + mail_user_set_get_storage_set(mdctx->dest_user); bool debug = mdctx->dest_user->mail_debug; struct sieve_environment svenv; int ret = 0; @@ -902,7 +903,7 @@ static int lda_sieve_deliver_mail memset((void*)&svenv, 0, sizeof(svenv)); svenv.username = mdctx->dest_user->username; svenv.home_dir = srctx.home_dir; - svenv.hostname = mdctx->set->hostname; + svenv.hostname = mail_set->hostname; svenv.base_dir = mdctx->dest_user->set->base_dir; svenv.temp_dir = mdctx->dest_user->set->mail_temp_dir; svenv.flags = SIEVE_FLAG_HOME_RELATIVE; diff --git a/src/sieve-tools/sieve-filter.c b/src/sieve-tools/sieve-filter.c index fcc47529273f713fe3e8801fd2f01810303b7f1c..9ea3305fb95358a96e5ed9148b2ab8722ab3ed2f 100644 --- a/src/sieve-tools/sieve-filter.c +++ b/src/sieve-tools/sieve-filter.c @@ -548,7 +548,6 @@ int main(int argc, char **argv) scriptenv.mailbox_autocreate = FALSE; scriptenv.default_mailbox = dst_mailbox; scriptenv.user = mail_user; - scriptenv.postmaster_address = "postmaster@example.com"; /* Compose filter context */ i_zero(&sfdata); diff --git a/src/sieve-tools/sieve-test.c b/src/sieve-tools/sieve-test.c index 8d37fbfebacdd913bf49e6096073fe7cef80742e..eaae59b0f4d7f89667952cc2a0713b0090b8fc04 100644 --- a/src/sieve-tools/sieve-test.c +++ b/src/sieve-tools/sieve-test.c @@ -309,7 +309,6 @@ int main(int argc, char **argv) i_zero(&scriptenv); scriptenv.default_mailbox = mailbox; scriptenv.user = sieve_tool_get_mail_user(sieve_tool); - scriptenv.postmaster_address = "postmaster@example.com"; scriptenv.smtp_start = sieve_smtp_start; scriptenv.smtp_add_rcpt = sieve_smtp_add_rcpt; scriptenv.smtp_send = sieve_smtp_send; diff --git a/src/testsuite/testsuite-mailstore.c b/src/testsuite/testsuite-mailstore.c index 534b87390225d6260222141568605ce2bb4efb4d..3035a55590fca4fed746b0a6c21b30d46a8b166f 100644 --- a/src/testsuite/testsuite-mailstore.c +++ b/src/testsuite/testsuite-mailstore.c @@ -71,7 +71,7 @@ void testsuite_mailstore_init(void) } mail_user_dovecot = sieve_tool_get_mail_user(sieve_tool); - mail_user = mail_user_alloc("testsuite mail user", + mail_user = mail_user_alloc("testsuite-mail-user@example.org", mail_user_dovecot->set_info, mail_user_dovecot->unexpanded_set); mail_user->autocreated = TRUE; if (t_get_working_dir(&cwd, &error) < 0) diff --git a/src/testsuite/testsuite-script.c b/src/testsuite/testsuite-script.c index 40b1102a6ce562c5afea88f00ba971c45c4bca28..6d3a1cc67f770f7ff99c13151615cb51e0318869 100644 --- a/src/testsuite/testsuite-script.c +++ b/src/testsuite/testsuite-script.c @@ -108,7 +108,6 @@ bool testsuite_script_run(const struct sieve_runtime_env *renv) /* Compose script execution environment */ i_zero(&scriptenv); scriptenv.default_mailbox = "INBOX"; - scriptenv.postmaster_address = "postmaster@example.com"; scriptenv.smtp_start = NULL; scriptenv.smtp_add_rcpt = NULL; scriptenv.smtp_send = NULL; @@ -181,7 +180,6 @@ bool testsuite_script_multiscript /* Compose script execution environment */ i_zero(&scriptenv); scriptenv.default_mailbox = "INBOX"; - scriptenv.postmaster_address = "postmaster@example.com"; scriptenv.smtp_start = NULL; scriptenv.smtp_add_rcpt = NULL; scriptenv.smtp_send = NULL; diff --git a/src/testsuite/testsuite.c b/src/testsuite/testsuite.c index 315d01fa9e18392b65da9be35b6143b5d6074858..94c60f7c4a574f3d5ec86bc2b4c6dafa95845713 100644 --- a/src/testsuite/testsuite.c +++ b/src/testsuite/testsuite.c @@ -182,7 +182,6 @@ int main(int argc, char **argv) i_zero(&scriptenv); scriptenv.user = testsuite_mailstore_get_user(); scriptenv.default_mailbox = "INBOX"; - scriptenv.postmaster_address = "postmaster@example.com"; scriptenv.smtp_start = testsuite_smtp_start; scriptenv.smtp_add_rcpt = testsuite_smtp_add_rcpt; scriptenv.smtp_send = testsuite_smtp_send;