From f4d088b6d0021fbf0ac4f9c88fdafc8f74850f03 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Thu, 11 Mar 2021 15:09:38 +0000 Subject: [PATCH] Improve logging of pull request. Improve handling of invalid combinations of listener address and bind interface configurations. Closes #2081. --- ChangeLog.txt | 2 ++ src/net.c | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 7aefb1415b..54d5377a25 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -20,6 +20,8 @@ Broker: - Fix QoS 0 messages not being delivered when max_queued_bytes was configured. Closes #2123. - Fix bridge increasing backoff calculation. +- Improve handling of invalid combinations of listener address and bind + interface configurations. Closes #2081. Client library: - Fix encrypted connections incorrectly connecting when the CA file passed to diff --git a/src/net.c b/src/net.c index c1e3d55fc1..bbdb2708a9 100644 --- a/src/net.c +++ b/src/net.c @@ -628,7 +628,10 @@ static int net__bind_interface(struct mosquitto__listener *listener, struct addr memcmp(&((struct sockaddr_in *)rp->ai_addr)->sin_addr, &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr, sizeof(struct in_addr))){ - log__printf(NULL, MOSQ_LOG_WARNING, "Warning: Interface address does not match specified listener host."); + + log__printf(NULL, MOSQ_LOG_WARNING, "Warning: Interface address for %s does not match specified listener address (%s).", + listener->bind_interface, listener->host); + return MOSQ_ERR_INVAL; }else{ memcpy(&((struct sockaddr_in *)rp->ai_addr)->sin_addr, &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr, @@ -642,7 +645,10 @@ static int net__bind_interface(struct mosquitto__listener *listener, struct addr memcmp(&((struct sockaddr_in6 *)rp->ai_addr)->sin6_addr, &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr, sizeof(struct in6_addr))){ - log__printf(NULL, MOSQ_LOG_WARNING, "Warning: Interface address does not match specified listener host."); + + log__printf(NULL, MOSQ_LOG_WARNING, "Warning: Interface address for %s does not match specified listener address (%s).", + listener->bind_interface, listener->host); + return MOSQ_ERR_INVAL; }else{ memcpy(&((struct sockaddr_in6 *)rp->ai_addr)->sin6_addr, &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr, @@ -655,7 +661,7 @@ static int net__bind_interface(struct mosquitto__listener *listener, struct addr } freeifaddrs(ifaddr); log__printf(NULL, MOSQ_LOG_WARNING, "Warning: Interface %s does not support %s configuration.", - listener->bind_interface, rp->ai_addr->sa_family == AF_INET ? "ipv4" : "ipv6"); + listener->bind_interface, rp->ai_addr->sa_family == AF_INET ? "IPv4" : "IPv6"); return MOSQ_ERR_NOT_FOUND; } #endif