This is an automated email from the ASF dual-hosted git repository.

quantranhong1999 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new 575363b27f [FIX] SMTP: Accept MAC as HELO parameter
575363b27f is described below

commit 575363b27fff77d84ad57e3b4454dcb16d0b9d38
Author: Benoit TELLIER <[email protected]>
AuthorDate: Wed Sep 9 15:16:12 2026 +0200

    [FIX] SMTP: Accept MAC as HELO parameter
---
 .../james/protocols/smtp/core/esmtp/EhloCmdHandler.java       | 11 +++++++----
 .../james/protocols/smtp/core/esmtp/EhloCmdHandlerTest.java   |  6 ++++++
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git 
a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandler.java
 
b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandler.java
index 8dca4f313f..4ec0c48e3f 100644
--- 
a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandler.java
+++ 
b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandler.java
@@ -65,6 +65,7 @@ public class EhloCmdHandler extends 
AbstractHookableCmdHandler<HeloHook> impleme
         .or(CharMatcher.inRange('A', 'Z'))
         .or(CharMatcher.inRange('0', '9'));
     private static final CharMatcher LABEL_CHAR_MATCHER = 
ALPHANUMERIC_MATCHER.or(CharMatcher.is('-'));
+    private static final CharMatcher OPAQUE_IDENTIFIER_MATCHER = 
ALPHANUMERIC_MATCHER.or(CharMatcher.is(':'));
     private static final Splitter LABEL_SPLITTER = Splitter.on('.');
     private static final int MAX_HOSTNAME_LENGTH = 253;
     private static final int MAX_LABEL_LENGTH = 63;
@@ -119,7 +120,7 @@ public class EhloCmdHandler extends 
AbstractHookableCmdHandler<HeloHook> impleme
             // We keep Guava as a fast path and fall back to our own RFC 5321 
validator.
             || InternetDomainName.isValid(hostname)
             || emClientCompatibility(hostname)
-            || isAlphanumeric(hostname)
+            || isOpaqueIdentifier(hostname)
             || isRfc5321Hostname(hostname);
     }
 
@@ -144,9 +145,11 @@ public class EhloCmdHandler extends 
AbstractHookableCmdHandler<HeloHook> impleme
         return LABEL_CHAR_MATCHER.matchesAllOf(label);
     }
 
-    // CF JAMES-4046 
https://issues.apache.org/jira/projects/JAMES/issues/JAMES-4066
-    private boolean isAlphanumeric(String hostname) {
-        return !hostname.isEmpty() && 
ALPHANUMERIC_MATCHER.matchesAllOf(hostname);
+    // Some clients uses hostname (CF JAMES-4066) or MAC address, neither of 
which is a domain nor an
+    // address-literal.
+    private boolean isOpaqueIdentifier(String hostname) {
+        return ALPHANUMERIC_MATCHER.matchesAnyOf(hostname)
+            && OPAQUE_IDENTIFIER_MATCHER.matchesAllOf(hostname);
     }
 
     // CF JAMES-4040 IPv6v4-full https://datatracker.ietf.org/doc/html/rfc5321
diff --git 
a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandlerTest.java
 
b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandlerTest.java
index 11752db707..8f58376044 100644
--- 
a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandlerTest.java
+++ 
b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandlerTest.java
@@ -42,6 +42,9 @@ class EhloCmdHandlerTest {
         // Pure alphanumeric (single label, no dot)
         "localhost",
         "mailserver",
+        // Devices announcing themselves with their MAC address
+        "A2:9B:D4:8A:AA:47",
+        "a29bd48aaa47",
         // IPv4
         "192.168.1.1",
         "10.0.0.1",
@@ -67,6 +70,9 @@ class EhloCmdHandlerTest {
         // Invalid characters
         "exam ple.com",
         "example.com!",
+        // Separators only
+        ":",
+        ":::::",
     })
     void isValidShouldReject(String argument) {
         assertThat(handler.isValid(argument)).isFalse();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to