bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2013-2018 Dovecot authors, see the included COPYING file */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch * MAIL command
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstatic void cmd_mail_update_xclient(struct client *client)
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch smtp_server_connection_get_helo_data(client->conn);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstatic void cmd_mail_replied(struct smtp_server_cmd_ctx *cmd)
0cce67356125083a0affed3ca9cb4f278258e5beJosef 'Jeff' Sipek struct cmd_mail_context *mail_cmd = cmd->context;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch smtp_client_command_abort(&mail_cmd->cmd_proxied);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschstatic void cmd_mail_proxy_cb(const struct smtp_reply *proxy_reply,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct smtp_server_cmd_ctx *cmd = mail_cmd->cmd;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch /* finished proxying MAIL command to relay server */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch if (!client_command_handle_proxy_reply(client, proxy_reply, &reply))
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch /* if relay accepts it, we accept it too */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch /* the default 2.0.0 code won't do */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch if (!smtp_reply_has_enhanced_code(proxy_reply))
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch reply.enhanced_code = SMTP_REPLY_ENH_CODE(2, 1, 0);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch /* forward reply */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch struct smtp_params_mail *params = &data->params;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch i_warning("Username `%s' is not a valid SMTP address: %s",
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch /* SIZE=<size-value>: RFC 1870 */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch if (data->params.size == 0 || (proxy_caps & SMTP_CAPABILITY_SIZE) == 0)
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch /* determine actual size limit (account for our additions) */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch if (max_size > 0 && data->params.size > max_size) {
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch "Message size exceeds fixed maximum message size");
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch /* proxy the SIZE parameter (account for additional size) */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch data->params.size += SUBMISSION_MAX_ADDITIONAL_MAIL_SIZE;
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Boschint cmd_mail(void *conn_ctx, struct smtp_server_cmd_ctx *cmd,
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch smtp_client_connection_get_capabilities(client->proxy_conn);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch /* check and adjust parameters where necessary */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch if (cmd_mail_parameter_auth(client, cmd, proxy_caps, data) < 0)
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch if (cmd_mail_parameter_size(client, cmd, proxy_caps, data) < 0)
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch /* queue command (pipeline) */
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch mail_cmd = p_new(cmd->pool, struct cmd_mail_context, 1);
2cbbe9b4829adb184c83dbf780316f4144559054Stephan Bosch mail_cmd->cmd_proxied = smtp_client_command_mail_submit(