From 663c6be564efdb355598b34b8f083f79a38c726d Mon Sep 17 00:00:00 2001 From: Manuel Mausz Date: Fri, 26 Jun 2026 13:53:30 +0200 Subject: Implement plus addressing for locals --- qmail-send.c | 7 +++++++ realrcptto.c | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/qmail-send.c b/qmail-send.c index caa5b39..168d190 100644 --- a/qmail-send.c +++ b/qmail-send.c @@ -147,6 +147,13 @@ char *recip; at = byte_rchr(addr.s,addr.len,'@'); if (constmap(&maplocals,addr.s + at + 1,addr.len - at - 1)) { + /* sub-addressing for local domains */ + for (i = 1; i < at - 1; ++i) { + if (addr.s[i] == '+') { + addr.s[i] = '-'; + break; + } + } if (!stralloc_cat(&rwline,&addr)) return 0; if (!stralloc_0(&rwline)) return 0; return 1; diff --git a/realrcptto.c b/realrcptto.c index 5ae9684..8f4d50e 100644 --- a/realrcptto.c +++ b/realrcptto.c @@ -269,7 +269,7 @@ int depth; && extension && !str_diffn(extension, "mailbox-", 8)) username = extension + 8; - /* remove plus-addressing */ + /* remove sub-addressing */ username[str_chr(username, '+')] = '\0'; env_put2("DTUSER", username); @@ -316,6 +316,13 @@ int depth; if (constmap(&maplocals,localpart.s + at + 1,localpart.len - at - 1)) { localpart.len = at; localpart.s[at] = '\0'; + /* sub-addressing for local domains */ + for (i = 1; i < localpart.len - 1; ++i) { + if (localpart.s[i] == '+') { + localpart.s[i] = '-'; + break; + } + } } else { unsigned int xlen,newlen; char *x; -- cgit v1.2.3