static void client_proxy_create(struct client *client, const struct submission_settings *set) { 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; i_zero(&ssl_set); mail_user_init_ssl_client_settings(user, &ssl_set); if (set->submission_relay_ssl_verify) ssl_set.verbose_invalid_cert = TRUE; else ssl_set.allow_invalid_cert = TRUE; /* make proxy connection */ i_zero(&smtp_set); smtp_set.my_hostname = set->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) { smtp_set.peer_trusted = TRUE; if (user->conn.remote_ip != NULL) { smtp_set.proxy_data.source_ip = *user->conn.remote_ip; smtp_set.proxy_data.source_port = user->conn.remote_port; } 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; client->proxy_conn = smtp_client_connection_create(smtp_client, SMTP_PROTOCOL_SMTP, set->submission_relay_host, set->submission_relay_port, ssl_mode, &smtp_set); smtp_client_connection_connect(client->proxy_conn, client_proxy_ready_cb, client); }
static void snarf_mail_storage_create(struct mail_storage *storage, const char *path) { struct snarf_mail_storage *mstorage; struct mail_storage_vfuncs *v = storage->vlast; path = mail_user_home_expand(storage->user, path); mstorage = p_new(storage->pool, struct snarf_mail_storage, 1); mstorage->snarf_path = p_strdup(storage->pool, path); mstorage->module_ctx.super = *v; storage->vlast = &mstorage->module_ctx.super; v->mailbox_alloc = snarf_mailbox_alloc; MODULE_CONTEXT_SET(storage, snarf_storage_module, mstorage); }
static const char *index_attachment_dir_get(struct mail_storage *storage) { return mail_user_home_expand(storage->user, storage->set->mail_attachment_dir); }