aboutsummaryrefslogtreecommitdiffstats
path: root/smtpd/smtp_session.c
diff options
context:
space:
mode:
Diffstat (limited to 'smtpd/smtp_session.c')
-rw-r--r--smtpd/smtp_session.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/smtpd/smtp_session.c b/smtpd/smtp_session.c
index 707e32cb..5fc2c796 100644
--- a/smtpd/smtp_session.c
+++ b/smtpd/smtp_session.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: smtp_session.c,v 1.387 2019/01/05 09:43:39 gilles Exp $ */
+/* $OpenBSD: smtp_session.c,v 1.389 2019/02/20 11:56:27 gilles Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@@ -692,6 +692,7 @@ smtp_session_imsg(struct mproc *p, struct imsg *imsg)
struct smtp_session *s;
struct smtp_rcpt *rcpt;
char user[LOGIN_NAME_MAX];
+ char tmp[SMTP_LINE_MAX];
struct msg m;
const char *line, *helo;
uint64_t reqid, evpid;
@@ -733,14 +734,26 @@ smtp_session_imsg(struct mproc *p, struct imsg *imsg)
m_get_string(&m, &line);
m_end(&m);
s = tree_xpop(&wait_lka_rcpt, reqid);
+
+ tmp[0] = '\0';
+ if (s->tx->evp.rcpt.user[0]) {
+ (void)strlcpy(tmp, s->tx->evp.rcpt.user, sizeof tmp);
+ if (s->tx->evp.rcpt.domain[0]) {
+ (void)strlcat(tmp, "@", sizeof tmp);
+ (void)strlcat(tmp, s->tx->evp.rcpt.domain,
+ sizeof tmp);
+ }
+ }
+
switch (status) {
case LKA_OK:
fatalx("unexpected ok");
case LKA_PERMFAIL:
- smtp_reply(s, "%s", line);
+ smtp_reply(s, "%s: <%s>", line, tmp);
break;
case LKA_TEMPFAIL:
- smtp_reply(s, "%s", line);
+ smtp_reply(s, "%s: <%s>", line, tmp);
+ break;
}
return;
@@ -1969,7 +1982,7 @@ smtp_lookup_servername(struct smtp_session *s)
m_create(p_lka, IMSG_SMTP_LOOKUP_HELO, 0, 0, -1);
m_add_id(p_lka, s->id);
m_add_string(p_lka, s->listener->hostnametable);
- m_add_sockaddr(p_lka, (struct sockaddr*)&s->ss);
+ m_add_sockaddr(p_lka, (struct sockaddr*)&s->listener->ss);
m_close(p_lka);
tree_xset(&wait_lka_helo, s->id, s);
return;