Hi.
A user reported that decoded SRS addresses are not correctly evaluated
against the ruleset. That's because the ruleset always matches against
the expanded address ("dest") and not the original address ("rcpt").
This diff should fix it.
Eric.
Index: lka_session.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/lka_session.c,v
retrieving revision 1.95
diff -u -p -r1.95 lka_session.c
--- lka_session.c 14 Jun 2021 17:58:15 -0000 1.95
+++ lka_session.c 21 Sep 2021 19:21:18 -0000
@@ -280,19 +280,19 @@ lka_expand(struct lka_session *lks, stru
/* handle SRS */
if (env->sc_srs_key != NULL &&
ep.sender.user[0] == '\0' &&
- (strncasecmp(ep.rcpt.user, "SRS0=", 5) == 0 ||
- strncasecmp(ep.rcpt.user, "SRS1=", 5) == 0)) {
- srs_decoded = srs_decode(mailaddr_to_text(&ep.rcpt));
+ (strncasecmp(ep.dest.user, "SRS0=", 5) == 0 ||
+ strncasecmp(ep.dest.user, "SRS1=", 5) == 0)) {
+ srs_decoded = srs_decode(mailaddr_to_text(&ep.dest));
if (srs_decoded &&
- text_to_mailaddr(&ep.rcpt, srs_decoded)) {
- /* flag envelope internal and override rcpt */
+ text_to_mailaddr(&ep.dest, srs_decoded)) {
+ /* flag envelope internal and override dest */
ep.flags |= EF_INTERNAL;
- xn->u.mailaddr = ep.rcpt;
+ xn->u.mailaddr = ep.dest;
lks->envelope = ep;
}
else {
log_warn("SRS failed to decode: %s",
- mailaddr_to_text(&ep.rcpt));
+ mailaddr_to_text(&ep.dest));
}
}