struct smtp_server_connection *tmp_conn = conn;
struct istream *input = conn->conn.input;
struct ostream *output = conn->conn.output;
+ int ret;
smtp_server_connection_ref(tmp_conn);
- callbacks->conn_start_tls(tmp_conn->context,
+ ret = callbacks->conn_start_tls(tmp_conn->context,
&input, &output);
- if (!smtp_server_connection_unref(&tmp_conn))
+ if (!smtp_server_connection_unref(&tmp_conn) || ret < 0)
return -1;
smtp_server_connection_set_streams(conn, input, output);
/* STARTTLS */
int (*conn_cmd_starttls)(void *conn_ctx,
struct smtp_server_cmd_ctx *cmd);
- void (*conn_start_tls)(void *conn_ctx,
- struct istream **input, struct ostream **output);
/* AUTH */
int (*conn_cmd_auth)(void *conn_ctx,
struct smtp_server_cmd_ctx *cmd,
const struct smtp_proxy_data *data);
/* Connection */
+ int (*conn_start_tls)(void *conn_ctx,
+ struct istream **input, struct ostream **output);
void (*conn_disconnect)(void *context, const char *reason);
void (*conn_destroy)(void *context);
static struct smtp_server *smtp_server = NULL;
-static void submission_login_start_tls(void *conn_ctx,
+static int submission_login_start_tls(void *conn_ctx,
struct istream **input, struct ostream **output)
{
struct submission_client *subm_client = conn_ctx;
"TLS initialization failed.");
client_destroy(client,
"Disconnected: TLS initialization failed.");
- return;
+ return -1;
}
login_refresh_proctitle();
*input = client->input;
*output = client->output;
+ return 0;
}
static struct client *submission_client_alloc(pool_t pool)