struct submission_client *subm_client = conn_ctx;
struct client *client = &subm_client->common;
struct smtp_server_helo_data *helo;
+ struct smtp_proxy_data proxy;
i_assert(subm_client->pending_auth == NULL);
}
buffer_append_c(buf, '\0');
+ /* pass proxied ehlo parameter to post-login service upon successful
+ login */
+ smtp_server_connection_get_proxy_data(subm_client->conn, &proxy);
+ if (proxy.helo != NULL)
+ buffer_append(buf, proxy.helo, strlen(proxy.helo));
+ buffer_append_c(buf, '\0');
+
i_free(client->master_data_prefix);
client->master_data_prefix_len = buf->used;
client->master_data_prefix = buffer_free_without_data(&buf);
struct submission_settings *set;
const char *errstr;
const char *helo = NULL;
+ struct smtp_proxy_data proxy_data;
const unsigned char *data;
size_t data_len;
/* parse input data */
data = NULL;
data_len = 0;
+ i_zero(&proxy_data);
if (input_buf != NULL && input_buf->used > 0) {
data = input_buf->data;
data_len = input_buf->used;
- if (extract_input_data_field(&data, &data_len, &helo)) {
+ if (extract_input_data_field(&data, &data_len, &helo) &&
+ extract_input_data_field(&data, &data_len,
+ &proxy_data.helo)) {
/* nothing to do */
}
}
(void)client_create(fd_in, fd_out, mail_user,
- user, set, helo, data, data_len);
+ user, set, helo, &proxy_data, data, data_len);
return 0;
}
client_create(int fd_in, int fd_out, struct mail_user *user,
struct mail_storage_service_user *service_user,
const struct submission_settings *set, const char *helo,
+ const struct smtp_proxy_data *proxy_data,
const unsigned char *pdata, unsigned int pdata_len)
{
enum submission_client_workarounds workarounds =
client->conn = smtp_server_connection_create(smtp_server,
fd_in, fd_out, user->conn.remote_ip, user->conn.remote_port,
FALSE, &smtp_set, &smtp_callbacks, client);
+ smtp_server_connection_set_proxy_data(client->conn, proxy_data);
smtp_server_connection_login(client->conn, client->user->username, helo,
pdata, pdata_len, user->conn.ssl_secured);
client_create(int fd_in, int fd_out, struct mail_user *user,
struct mail_storage_service_user *service_user,
const struct submission_settings *set, const char *helo,
+ const struct smtp_proxy_data *proxy_data,
const unsigned char *pdata, unsigned int pdata_len);
void client_destroy(struct client **client, const char *prefix,
const char *reason) ATTR_NULL(2, 3);