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

btellier 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 950134a56f [FIX] AbstractValidRcptHandler fix error handling on 
invalid username (#2122)
950134a56f is described below

commit 950134a56f4a07c017a2ca709ee9705f4eb7db5b
Author: Benoit TELLIER <btell...@linagora.com>
AuthorDate: Fri Mar 15 09:01:08 2024 +0100

    [FIX] AbstractValidRcptHandler fix error handling on invalid username 
(#2122)
    
    Syntactically valid email address but invalid username.
    The best is to advertise "no such person here".
---
 .../protocols/smtp/core/fastfail/AbstractValidRcptHandler.java    | 8 ++++----
 .../java/org/apache/james/smtpserver/ValidRcptHandlerTest.java    | 8 ++++++++
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git 
a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractValidRcptHandler.java
 
b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractValidRcptHandler.java
index 8f9a043372..7709157dc9 100644
--- 
a/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractValidRcptHandler.java
+++ 
b/protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractValidRcptHandler.java
@@ -47,12 +47,12 @@ public abstract class AbstractValidRcptHandler implements 
RcptHook {
                 return reject(rcpt);
             }
             return HookResult.DECLINED;
-        } catch (IllegalAccessException e) {
-            LOGGER.warn("Encounter an error upon RCPT validation ({}), 
deny-soft", rcpt.asString());
+        } catch (IllegalArgumentException e) {
+            LOGGER.info("Encounter an error upon RCPT validation ({}), deny", 
rcpt.asString());
             return HookResult.builder()
                 .hookReturnCode(HookReturnCode.deny())
-                .smtpReturnCode(SMTPRetCode.SYNTAX_ERROR_ARGUMENTS)
-                .smtpDescription(DSNStatus.getStatus(DSNStatus.PERMANENT, 
DSNStatus.DELIVERY_SYNTAX) + " Unexpected error for " + rcpt.asString())
+                .smtpReturnCode(SMTPRetCode.MAILBOX_PERM_UNAVAILABLE)
+                .smtpDescription(DSNStatus.getStatus(DSNStatus.PERMANENT, 
DSNStatus.ADDRESS_MAILBOX) + " Unknown user: " + rcpt.asString())
                 .build();
         } catch (Exception e) {
             LOGGER.error("Encounter an error upon RCPT validation ({}), 
deny-soft", rcpt.asString(), e);
diff --git 
a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/ValidRcptHandlerTest.java
 
b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/ValidRcptHandlerTest.java
index 378650caef..7536077d74 100644
--- 
a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/ValidRcptHandlerTest.java
+++ 
b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/ValidRcptHandlerTest.java
@@ -236,4 +236,12 @@ class ValidRcptHandlerTest {
         assertThat(rCode).isEqualTo(HookReturnCode.denySoft());
     }
 
+    @Test
+    void doRcptShouldReturnDeclineWhenInvalidUsername() throws Exception {
+        SMTPSession session = setupMockedSMTPSession(!RELAYING_ALLOWED);
+
+        HookReturnCode rCode = handler.doRcpt(session, MAYBE_SENDER, new 
MailAddress("\"abc@\"@localhost")).getResult();
+
+        assertThat(rCode).isEqualTo(HookReturnCode.deny());
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org

Reply via email to