client.c revision 0afd9a9acab584e770ffcd6a0e1e02e2d18d360a
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (c) 2013-2017 Dovecot authors, see the included COPYING file */
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen/* Disconnect client when it sends too many bad commands */
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainenstatic const struct smtp_server_callbacks smtp_callbacks;
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainenstatic void submission_login_start_tls(void *conn_ctx,
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen struct istream **input, struct ostream **output)
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen struct submission_client *subm_client = conn_ctx;
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen "TLS initialization failed.");
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen "Disconnected: TLS initialization failed.");
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainenstatic struct client *submission_client_alloc(pool_t pool)
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen subm_client = p_new(pool, struct submission_client, 1);
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainenstatic void submission_client_create(struct client *client,
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen static const char *const xclient_extensions[] =
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen smtp_set.capabilities = SMTP_CAPABILITY_SIZE |
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen SMTP_CAPABILITY_ENHANCEDSTATUSCODES | SMTP_CAPABILITY_AUTH;
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen smtp_set.capabilities |= SMTP_CAPABILITY_STARTTLS;
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen smtp_set.hostname = subm_client->set->hostname;
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen smtp_set.login_greeting = client->set->login_greeting;
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen smtp_set.tls_required = (strcmp(client->ssl_set->ssl, "required") == 0);
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen smtp_set.xclient_extensions = xclient_extensions;
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen subm_client->conn = smtp_server_connection_create_from_streams(
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen &client->real_remote_ip, client->real_remote_port,
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainenstatic void submission_client_destroy(struct client *client)
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen smtp_server_connection_close(&subm_client->conn, NULL);
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainenstatic void submission_client_notify_auth_ready(struct client *client)
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen smtp_server_connection_start(subm_client->conn, FALSE);
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainensubmission_client_notify_disconnect(struct client *_client,
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen struct submission_client *client = (struct submission_client *)_client;
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen smtp_server_connection_terminate(&conn, "4.4.2", text);
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen smtp_server_connection_terminate(&conn, "4.3.2", text);
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen smtp_server_connection_terminate(&conn, "4.0.0", text);
fcd3d6214ce1b8169b6481c78e02d9054901fed3Phil Carmody unsigned int i;
fcd3d6214ce1b8169b6481c78e02d9054901fed3Phil Carmody client->common.remote_port = data->source_port;
fcd3d6214ce1b8169b6481c78e02d9054901fed3Phil Carmody for (i = 0; i < data->extra_fields_count; i++) {
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen const char *value = data->extra_fields[i].value;
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen str_truncate(client->common.forward_fields, 0);
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainen "Invalid FORWARD parameter");
31e6dbee5fc7d6c33b44c75c7e18ea576f44184bTimo Sirainenstatic void client_connection_disconnect(void *context, const char *reason)
static void submission_login_die(void)
static void submission_login_preinit(void)
static void submission_login_init(void)
static void submission_login_deinit(void)
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,