]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: server: connection: Properly handle a multi-line reason in smtp_server_conn...
authorStephan Bosch <stephan.bosch@dovecot.fi>
Fri, 2 Nov 2018 09:26:53 +0000 (10:26 +0100)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 6 Nov 2018 22:42:30 +0000 (22:42 +0000)
src/lib-smtp/smtp-server-connection.c

index 5c389aa739bd379f2c8138c1d3777e8767255ad5..0beb6fd52528ded901b327151b7cdd36b8956a82 100644 (file)
@@ -1335,6 +1335,7 @@ void smtp_server_connection_terminate(struct smtp_server_connection **_conn,
                                      const char *enh_code, const char *reason)
 {
        struct smtp_server_connection *conn = *_conn;
+       const char **reason_lines;
 
        *_conn = NULL;
 
@@ -1343,10 +1344,17 @@ void smtp_server_connection_terminate(struct smtp_server_connection **_conn,
 
        i_assert(enh_code[0] == '4' && enh_code[1] == '.');
 
-       smtp_server_connection_send_line(conn,
-               "421 %s %s %s", enh_code, conn->set.hostname, reason);
+       T_BEGIN {
+               /* Add hostname prefix */
+               reason_lines = t_strsplit_spaces(reason, "\r\n");
+               reason_lines[0] = t_strconcat(conn->set.hostname, " ",
+                                             reason_lines[0], NULL);
+
+               smtp_server_connection_reply_lines(conn, 421, enh_code,
+                                                  reason_lines);
 
-       smtp_server_connection_close(&conn, reason);
+               smtp_server_connection_close(&conn, reason);
+       } T_END;
 }
 
 struct smtp_server_helo_data *