struct lmtp_proxy_rcpt_settings {
enum smtp_protocol protocol;
const char *host;
- struct ip_addr hostip;
+ struct ip_addr hostip, source_ip;
in_port_t port;
unsigned int timeout_msecs;
struct smtp_params_rcpt params;
if (conn->set.protocol == set->protocol &&
conn->set.port == set->port &&
- strcmp(conn->set.host, host) == 0)
+ strcmp(conn->set.host, host) == 0 &&
+ net_ip_compare(&conn->set.source_ip, &set->source_ip))
return conn;
}
conn->set.hostip = set->hostip;
conn->host = i_strdup(host);
conn->set.host = conn->host;
+ conn->set.source_ip = set->source_ip;
conn->set.port = set->port;
conn->set.timeout_msecs = set->timeout_msecs;
array_append(&proxy->connections, &conn, 1);
i_zero(&lmtp_set);
+ lmtp_set.my_ip = conn->set.source_ip;
lmtp_set.peer_trusted = TRUE;
lmtp_conn = smtp_client_connection_create(proxy->lmtp_client,
i_error("proxy: Invalid hostip %s", value);
return FALSE;
}
+ } else if (strcmp(key, "source_ip") == 0) {
+ if (net_addr2ip(value, &set->source_ip) < 0) {
+ i_error("proxy: Invalid source_ip %s", value);
+ return FALSE;
+ }
} else if (strcmp(key, "port") == 0) {
if (net_str2port(value, &set->port) < 0) {
i_error("proxy: Invalid port number %s", value);