]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lda: Accept -f argument with broken sender address.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Sat, 14 Sep 2019 15:59:29 +0000 (17:59 +0200)
committerStephan Bosch <stephan.bosch@open-xchange.com>
Fri, 4 Oct 2019 21:25:54 +0000 (23:25 +0200)
src/lda/main.c

index 4d0755886cb07531cc2edbd4c06bb751ff328f46..354917bd468ca711b04584d1645163f823dc4730 100644 (file)
@@ -366,7 +366,7 @@ int main(int argc, char *argv[])
        struct mail_storage_service_user *service_user;
        struct mail_storage_service_input service_input;
        struct event *event;
-       const char *user_source = "", *rcpt_to_source = "";
+       const char *user_source = "", *rcpt_to_source = "", *mail_from_error;
        uid_t process_euid;
        bool stderr_rejection = FALSE;
        int ret, c;
@@ -407,6 +407,7 @@ int main(int argc, char *argv[])
 
        user = getenv("USER");
        mail_from = final_rcpt_to = rcpt_to = NULL;
+       mail_from_error = NULL;
        while ((c = master_getopt(master_service)) > 0) {
                switch (c) {
                case 'a':
@@ -431,15 +432,20 @@ int main(int argc, char *argv[])
                        break;
                case 'f':
                        /* envelope sender address */
-                       if (smtp_address_parse_path(
+                       ret = smtp_address_parse_path(
                                pool_datastack_create(), optarg,
                                SMTP_ADDRESS_PARSE_FLAG_BRACKETS_OPTIONAL |
                                SMTP_ADDRESS_PARSE_FLAG_ALLOW_LOCALPART |
-                               SMTP_ADDRESS_PARSE_FLAG_ALLOW_EMPTY,
-                               &mail_from, &errstr) < 0) {
+                               SMTP_ADDRESS_PARSE_FLAG_ALLOW_EMPTY |
+                               SMTP_ADDRESS_PARSE_FLAG_IGNORE_BROKEN |
+                               SMTP_ADDRESS_PARSE_FLAG_PRESERVE_RAW,
+                               &mail_from, &errstr);
+                       if (ret < 0 && !smtp_address_is_broken(mail_from)) {
                                i_fatal_status(EX_USAGE,
                                        "Invalid -f parameter: %s", errstr);
                        }
+                       if (ret < 0)
+                               mail_from_error = errstr;
                        break;
                case 'm':
                        /* destination mailbox.