"CLIENT-TRANSPORT", xclient->client_transport);
}
+ /* DESTNAME */
+ if (xclient->local_name != NULL &&
+ str_array_icase_find(xclient_args, "DESTNAME")) {
+ /* This should already be checked elsewhere */
+ i_assert(connection_is_valid_dns_name(xclient->local_name));
+ smtp_client_connection_xclient_add(conn, str, offset,
+ "DESTNAME", xclient->local_name);
+ }
+
/* TTL */
if (xclient->ttl_plus_1 > 0 &&
str_array_icase_find(xclient_args, "TTL")) {
dst->session = p_strdup(pool, src->session);
if (src->client_transport != NULL && *src->client_transport != '\0')
dst->client_transport = p_strdup(pool, src->client_transport);
+ if (src->local_name != NULL && *src->local_name != '\0')
+ dst->local_name = p_strdup_empty(pool, src->local_name);
if (src->ttl_plus_1 > 0)
dst->ttl_plus_1 = src->ttl_plus_1;
if (src->timeout_secs > 0)
const char *session;
/* CLIENT-TRANSPORT */
const char *client_transport;
+ /* DESTNAME */
+ const char *local_name;
/* TTL: send as this -1, so the default 0 means "don't send it" */
unsigned int ttl_plus_1;
#include "lib.h"
#include "array.h"
#include "istream.h"
+#include "connection.h"
#include "smtp-syntax.h"
#include "smtp-reply.h"
continue;
proxy_data->client_transport =
p_strdup(cmd->pool, param.value);
+ } else if (strcmp(param.keyword, "DESTNAME") == 0) {
+ if (!connection_is_valid_dns_name(param.value)) {
+ smtp_server_reply(cmd, 501, "5.5.4",
+ "Invalid DESTNAME parameter");
+ return;
+ }
+ proxy_data->local_name = p_strdup(cmd->pool, param.value);
} else if (strcmp(param.keyword, "TIMEOUT") == 0) {
if (str_to_uint(param.value,
&proxy_data->timeout_secs) < 0) {
proxy_data->login = conn->username;
proxy_data->session = conn->session_id;
proxy_data->client_transport = conn->client_transport;
+ proxy_data->local_name = conn->local_name;
if (conn->proxy_proto != SMTP_PROXY_PROTOCOL_UNKNOWN)
proxy_data->proto = conn->proxy_proto;
i_free(conn->client_transport);
conn->client_transport = i_strdup(proxy_data->client_transport);
}
-
+ if (proxy_data->local_name != NULL) {
+ i_free(conn->local_name);
+ conn->local_name = i_strdup(proxy_data->local_name);
+ }
if (proxy_data->ttl_plus_1 > 0)
conn->proxy_ttl_plus_1 = proxy_data->ttl_plus_1;
if (conn->proxy_timeout_secs > 0)
unsigned int proxy_timeout_secs;
char *proxy_helo;
char *client_transport;
+ char *local_name;
struct smtp_server_helo_data helo, *pending_helo;
char *helo_domain, *username;
void smtp_server_reply_ehlo_add_xclient(struct smtp_server_reply *reply)
{
static const char *base_fields =
- "ADDR PORT PROTO HELO LOGIN SESSION CLIENT-TRANSPORT TTL TIMEOUT";
+ "ADDR PORT PROTO HELO LOGIN SESSION CLIENT-TRANSPORT TTL TIMEOUT "
+ "DESTNAME";
struct smtp_server_cmd_ctx *cmd = &reply->command->context;
struct smtp_server_connection *conn = cmd->conn;