bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2013-2018 Dovecot authors, see the included COPYING file */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch#include "submission-common.h"
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch#include "smtp-syntax.h"
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch#include "smtp-client.h"
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch#include "smtp-client-connection.h"
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch#include "submission-commands.h"
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch/*
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch * VRFY command
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstruct cmd_vrfy_context {
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct client *client;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct smtp_server_cmd_ctx *cmd;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct smtp_client_command *cmd_proxied;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch};
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstatic void cmd_vrfy_proxy_cb(const struct smtp_reply *proxy_reply,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct cmd_vrfy_context *vrfy_cmd)
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch{
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct smtp_server_cmd_ctx *cmd = vrfy_cmd->cmd;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct client *client = vrfy_cmd->client;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct smtp_reply reply;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch if (!client_command_handle_proxy_reply(client, proxy_reply, &reply))
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch return;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch if (!smtp_reply_has_enhanced_code(proxy_reply)) {
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch switch (proxy_reply->status) {
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch case 250:
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch case 251:
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch case 252:
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch reply.enhanced_code = SMTP_REPLY_ENH_CODE(2, 5, 0);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch break;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch default:
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch break;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch }
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch }
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch smtp_server_reply_forward(cmd, &reply);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch}
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschint cmd_vrfy(void *conn_ctx, struct smtp_server_cmd_ctx *cmd,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch const char *param)
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch{
0cce67356125083a0affed3ca9cb4f278258e5beJosef 'Jeff' Sipek struct client *client = conn_ctx;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct cmd_vrfy_context *vrfy_cmd;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch vrfy_cmd = p_new(cmd->pool, struct cmd_vrfy_context, 1);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch vrfy_cmd->client = client;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch vrfy_cmd->cmd = cmd;
0cce67356125083a0affed3ca9cb4f278258e5beJosef 'Jeff' Sipek cmd->context = vrfy_cmd;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch vrfy_cmd->cmd_proxied = smtp_client_command_vrfy_submit(
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch client->proxy_conn, 0, param, cmd_vrfy_proxy_cb, vrfy_cmd);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch return 0;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch}