commit 8492c4a: [Fix] Fix parsing of the from_hostname when it is an IP address

Vsevolod Stakhov vsevolod at highsecure.ru
Wed Sep 22 12:07:04 UTC 2021


Author: Vsevolod Stakhov
Date: 2021-09-22 13:01:40 +0100
URL: https://github.com/rspamd/rspamd/commit/8492c4a1d56199763cf87645e8d2261ede2596e1

[Fix] Fix parsing of the from_hostname when it is an IP address

---
 src/libmime/mime_headers.c | 31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/src/libmime/mime_headers.c b/src/libmime/mime_headers.c
index 8f229a9b3..7b5011be4 100644
--- a/src/libmime/mime_headers.c
+++ b/src/libmime/mime_headers.c
@@ -1309,6 +1309,34 @@ rspamd_smtp_received_process_rdns (struct rspamd_task *task,
 	p = begin;
 	end = begin + len;
 
+	if (len == 0) {
+		return FALSE;
+	}
+
+	if (*p == '[' && *(end - 1) == ']' && len > 2) {
+		/* We have enclosed ip address */
+		rspamd_inet_addr_t  *addr = rspamd_parse_inet_address_pool (p + 1,
+				(end - p) - 2,
+				task->task_pool,
+				RSPAMD_INET_ADDRESS_PARSE_RECEIVED);
+
+		if (addr) {
+			const gchar *addr_str;
+			gchar *dest;
+
+			if (rspamd_inet_address_get_port (addr) != 0) {
+				addr_str = rspamd_inet_address_to_string_pretty (addr);
+			}
+			else {
+				addr_str = rspamd_inet_address_to_string (addr);
+			}
+			dest = rspamd_mempool_strdup (task->task_pool, addr_str);
+			*pdest = dest;
+
+			return TRUE;
+		}
+	}
+
 	while (p < end) {
 		if (!g_ascii_isspace (*p) && rspamd_url_is_domain (*p)) {
 			if (*p == '.') {
@@ -1481,7 +1509,8 @@ rspamd_smtp_received_process_from (struct rspamd_task *task,
 						rh->from_ip = rh->real_ip;
 					}
 				}
-			} else if (g_ascii_isxdigit (rpart->data[0])) {
+			}
+			else if (g_ascii_isxdigit (rpart->data[0])) {
 				/* Try to parse IP address */
 				rspamd_inet_addr_t *addr;
 				addr = rspamd_parse_inet_address_pool (rpart->data,


More information about the Commits mailing list