diff --git a/common.c b/common.c index 1be58e9..b3251d8 100644 --- a/common.c +++ b/common.c @@ -319,6 +319,11 @@ int connect_addr(struct connection *cnx, int fd_from, connect_blocking blocking) res = getpeername(fd_from, from.ai_addr, &from.ai_addrlen); CHECK_RES_RETURN(res, "getpeername", res); + if (cfg.protocols.resolve_on_forward) { + resolve_split_name(&(cnx->proto->saddr), cnx->proto->host, + cnx->proto->port); + } + for (a = cnx->proto->saddr; a; a = a->ai_next) { /* When transparent, make sure both connections use the same address family */ if (transparent && a->ai_family != from.ai_addr->sa_family) diff --git a/sslh-main.c b/sslh-main.c index 9f326a5..3fe16d9 100644 --- a/sslh-main.c +++ b/sslh-main.c @@ -124,8 +124,13 @@ static void config_protocols() int i; for (i = 0; i < cfg.protocols_len; i++) { struct sslhcfg_protocols_item* p = &(cfg.protocols[i]); - if (resolve_split_name(&(p->saddr), p->host, p->port)) { - print_message(msg_config_error, "cannot resolve %s:%s\n", p->host, p->port); + + if ( + !cfg.protocols.resolve_on_forward && + resolve_split_name(&(p->saddr), p->host, p->port) + ) { + print_message(msg_config_error, "cannot resolve %s:%s\n", + p->host, p->port); exit(4); }