struct smtp_client_connection *conn;
bool xclient_sent:1;
+ bool trusted:1;
};
static struct submission_backend_vfuncs backend_relay_vfuncs;
relay_cmd_helo_update_xclient(struct submission_backend_relay *backend,
struct smtp_server_cmd_helo *data)
{
- struct client *client = backend->backend.client;
struct smtp_proxy_data proxy_data;
- if (!client->set->submission_relay_trusted)
+ if (!backend->trusted)
return;
i_zero(&proxy_data);
if (backend->xclient_sent)
return;
- if (!client->set->submission_relay_trusted)
+ if (!backend->trusted)
return;
if (helo_data->domain == NULL)
return;
*/
struct submission_backend *
-submission_backend_relay_create(struct client *client,
- const struct submission_settings *set)
+submission_backend_relay_create(
+ struct client *client,
+ const struct submision_backend_relay_settings *set)
{
struct submission_backend_relay *backend;
struct mail_user *user = client->user;
struct ssl_iostream_settings ssl_set;
struct smtp_client_settings smtp_set;
- enum smtp_client_connection_ssl_mode ssl_mode;
backend = i_new(struct submission_backend_relay, 1);
submission_backend_init(&backend->backend, client,
i_zero(&ssl_set);
mail_user_init_ssl_client_settings(user, &ssl_set);
- if (set->submission_relay_ssl_verify)
+ if (set->ssl_verify)
ssl_set.verbose_invalid_cert = TRUE;
else
ssl_set.allow_invalid_cert = TRUE;
/* make relay connection */
i_zero(&smtp_set);
- smtp_set.my_hostname = set->hostname;
+ smtp_set.my_hostname = set->my_hostname;
smtp_set.ssl = &ssl_set;
smtp_set.debug = user->mail_debug;
- smtp_set.rawlog_dir =
- mail_user_home_expand(user,
- set->submission_relay_rawlog_dir);
- if (set->submission_relay_trusted) {
+ if (set->rawlog_dir != NULL) {
+ smtp_set.rawlog_dir =
+ mail_user_home_expand(user, set->rawlog_dir);
+ }
+
+ if (set->trusted) {
+ backend->trusted = TRUE;
smtp_set.peer_trusted = TRUE;
if (user->conn.remote_ip != NULL) {
smtp_set.proxy_data.login = user->username;
}
- smtp_set.username = set->submission_relay_user;
- smtp_set.master_user = set->submission_relay_master_user;
- smtp_set.password = set->submission_relay_password;
- smtp_set.connect_timeout_msecs =
- set->submission_relay_connect_timeout;
- smtp_set.command_timeout_msecs =
- set->submission_relay_command_timeout;
-
- if (strcmp(set->submission_relay_ssl, "smtps") == 0)
- ssl_mode = SMTP_CLIENT_SSL_MODE_IMMEDIATE;
- else if (strcmp(set->submission_relay_ssl, "starttls") == 0)
- ssl_mode = SMTP_CLIENT_SSL_MODE_STARTTLS;
- else
- ssl_mode = SMTP_CLIENT_SSL_MODE_NONE;
+ smtp_set.username = set->user;
+ smtp_set.master_user = set->master_user;
+ smtp_set.password = set->password;
+ smtp_set.connect_timeout_msecs = set->connect_timeout_msecs;
+ smtp_set.command_timeout_msecs = set->command_timeout_msecs;
backend->conn = smtp_client_connection_create(
- smtp_client, SMTP_PROTOCOL_SMTP, set->submission_relay_host,
- set->submission_relay_port, ssl_mode, &smtp_set);
+ smtp_client, set->protocol, set->host, set->port,
+ set->ssl_mode, &smtp_set);
return &backend->backend;
}
#ifndef SUBMISSION_BACKEND_RELAY_H
#define SUBMISSION_BACKEND_RELAY_H
+#include "smtp-client-connection.h"
+
#include "submission-backend.h"
struct client;
-struct submission_settings;
+struct submision_backend_relay_settings {
+ const char *my_hostname;
+
+ enum smtp_protocol protocol;
+ const char *host;
+ in_port_t port;
+
+ const char *user, *master_user;
+ const char *password;
+
+ enum smtp_client_connection_ssl_mode ssl_mode;
+
+ const char *rawlog_dir;
+ unsigned int max_idle_time;
+
+ unsigned int connect_timeout_msecs;
+ unsigned int command_timeout_msecs;
+
+ bool ssl_verify:1;
+ bool trusted:1;
+};
struct submission_backend *
-submission_backend_relay_create(struct client *client,
- const struct submission_settings *set);
+submission_backend_relay_create(
+ struct client *client,
+ const struct submision_backend_relay_settings *set);
#endif
#include "mail-storage-service.h"
#include "raw-storage.h"
#include "imap-urlauth.h"
+#include "smtp-client-connection.h"
#include "submission-backend-relay.h"
#include "submission-recipient.h"
client_create_backend_default(struct client *client,
const struct submission_settings *set)
{
+ struct submision_backend_relay_settings relay_set;
+
+ i_zero(&relay_set);
+ relay_set.my_hostname = set->hostname;
+ relay_set.protocol = SMTP_PROTOCOL_SMTP;
+ relay_set.host = set->submission_relay_host;
+ relay_set.port = set->submission_relay_port;
+ relay_set.user = set->submission_relay_user;
+ relay_set.master_user = set->submission_relay_master_user;
+ relay_set.password = set->submission_relay_password;
+ relay_set.rawlog_dir = set->submission_relay_rawlog_dir;
+ relay_set.max_idle_time = set->submission_relay_max_idle_time;
+ relay_set.connect_timeout_msecs = set->submission_relay_connect_timeout;
+ relay_set.command_timeout_msecs = set->submission_relay_command_timeout;
+ relay_set.trusted = set->submission_relay_trusted;
+
+ if (strcmp(set->submission_relay_ssl, "smtps") == 0)
+ relay_set.ssl_mode = SMTP_CLIENT_SSL_MODE_IMMEDIATE;
+ else if (strcmp(set->submission_relay_ssl, "starttls") == 0)
+ relay_set.ssl_mode = SMTP_CLIENT_SSL_MODE_STARTTLS;
+ else
+ relay_set.ssl_mode = SMTP_CLIENT_SSL_MODE_NONE;
+ relay_set.ssl_verify = set->submission_relay_ssl_verify;
+
client->backend_default =
- submission_backend_relay_create(client, set);
+ submission_backend_relay_create(client, &relay_set);
}
static void client_init_urlauth(struct client *client)