Hi all,
As discussed on IRC with Gilles, when using virtual table expansions
or a .forward file and the lookup fail, smtpd will respond with:
"524 5.2.4 Mailing list expansion problem", which I find vague and
confusing.
The reason for this was to make smtpd mimic the behaviour of sendmail
and to differentiate between an invalid recipient and a valid recipient
that has a configuration error, such as a broken .forward.
I can see the reasoning behind it, yet I find it very vague and it also
somewhat "leaks" details how your server is configured.
I would prefer an error like "550 Invalid recipient", since it's much
more accurate for the user sending the mail. Also it gives a much more
unified response when the recipient address is incorrect.
Regards,
Jesper
ps, while writing this mail, satanist on IRC suggested the workaround
of adding 'rcpt-to <virtuals>', which might invalidate my
suggestion/patch... Still, I find the mailing list expansion error more
confusing than helpful.
Index: lka_session.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/lka_session.c,v
retrieving revision 1.100
diff -u -p -r1.100 lka_session.c
--- lka_session.c 2 Feb 2024 23:33:42 -0000 1.100
+++ lka_session.c 13 May 2024 21:12:22 -0000
@@ -163,9 +163,9 @@ lka_session_forward_reply(struct forward
}
if (lks->error == LKA_TEMPFAIL && lks->errormsg == NULL)
- lks->errormsg = "424 4.2.4 Mailing list expansion problem";
+ lks->errormsg = "450 Invalid recipient";
if (lks->error == LKA_PERMFAIL && lks->errormsg == NULL)
- lks->errormsg = "524 5.2.4 Mailing list expansion problem";
+ lks->errormsg = "550 Invalid recipient";
lka_resume(lks);
}
@@ -194,7 +194,7 @@ lka_resume(struct lka_session *lks)
log_trace(TRACE_EXPAND, "expand: lka_done: expanded to empty "
"delivery list");
lks->error = LKA_PERMFAIL;
- lks->errormsg = "524 5.2.4 Mailing list expansion problem";
+ lks->errormsg = "550 Invalid recipient";
}
error:
if (lks->error) {
@@ -255,7 +255,7 @@ lka_expand(struct lka_session *lks, stru
if (xn->depth >= EXPAND_DEPTH) {
log_trace(TRACE_EXPAND, "expand: lka_expand: node too deep.");
lks->error = LKA_PERMFAIL;
- lks->errormsg = "524 5.2.4 Mailing list expansion problem";
+ lks->errormsg = "550 Invalid recipient";
return;
}
@@ -331,9 +331,9 @@ lka_expand(struct lka_session *lks, stru
"no aliases for virtual");
}
if (lks->error == LKA_TEMPFAIL && lks->errormsg == NULL)
- lks->errormsg = "424 4.2.4 Mailing list
expansion problem";
+ lks->errormsg = "450 Invalid recipient";
if (lks->error == LKA_PERMFAIL && lks->errormsg == NULL)
- lks->errormsg = "524 5.2.4 Mailing list
expansion problem";
+ lks->errormsg = "550 Invalid recipient";
}
else {
lks->expand.rule = rule;