diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 09:51:24 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 09:51:24 +0000 |
commit | f7548d6d28c313cf80e6f3ef89aed16a19815df1 (patch) | |
tree | a3f6f2a3f247293bee59ecd28e8cd8ceb6ca064a /src/lib-smtp/smtp-server-cmd-quit.c | |
parent | Initial commit. (diff) | |
download | dovecot-upstream.tar.xz dovecot-upstream.zip |
Adding upstream version 1:2.3.19.1+dfsg1.upstream/1%2.3.19.1+dfsg1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/lib-smtp/smtp-server-cmd-quit.c')
-rw-r--r-- | src/lib-smtp/smtp-server-cmd-quit.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/lib-smtp/smtp-server-cmd-quit.c b/src/lib-smtp/smtp-server-cmd-quit.c new file mode 100644 index 0000000..04764fd --- /dev/null +++ b/src/lib-smtp/smtp-server-cmd-quit.c @@ -0,0 +1,42 @@ +/* Copyright (c) 2013-2018 Dovecot authors, see the included COPYING file */ + +#include "lib.h" + +#include "smtp-server-private.h" + +/* QUIT command */ + +void smtp_server_cmd_quit(struct smtp_server_cmd_ctx *cmd, + const char *params) +{ + struct smtp_server_connection *conn = cmd->conn; + struct smtp_server_command *command = cmd->cmd; + const struct smtp_server_callbacks *callbacks = conn->callbacks; + int ret; + + /* "QUIT" CRLF */ + if (*params != '\0') { + smtp_server_reply(cmd, + 501, "5.5.4", "Invalid parameters"); + return; + } + + smtp_server_connection_input_halt(conn); + + smtp_server_command_ref(command); + if (callbacks != NULL && callbacks->conn_cmd_quit != NULL) { + /* specific implementation of QUIT command */ + if ((ret = callbacks->conn_cmd_quit(conn->context, cmd)) <= 0) { + i_assert(ret == 0 || + smtp_server_command_is_replied(command)); + /* command is waiting for external event or it failed */ + smtp_server_command_unref(&command); + return; + } + } + if (!smtp_server_command_is_replied(command)) { + /* set generic QUIT success reply if none is provided */ + smtp_server_reply_quit(cmd); + } + smtp_server_command_unref(&command); +} |