1
0
mirror of https://blitiri.com.ar/repos/chasquid synced 2025-12-17 14:37:02 +00:00

smtpsrv: Fix "Received" header format when including the IP address

When constructing the "Received" header, in some cases we want to
include the remote IP address in addition to the EHLO domain.

The way we did that is not fully compliant with RFC 5321 (section 4.4),
and this has the potential to confuse some tools that parse the header.

This patch fixes this problem by adjusting the order of the two pieces
of data, which makes it comply with the RFC.

Before:

  Received: from [1.2.3.4] (ehlo.domain.example.com)

After:

  Received: from ehlo.domain.example.com ([1.2.3.4])

Thanks to nolanl@github for reporting this problem in
https://github.com/albertito/chasquid/issues/76.
This commit is contained in:
Alberto Bertogli
2025-10-02 10:45:26 +01:00
parent eeb2deb7f6
commit 45bc70ee33

View File

@@ -747,11 +747,10 @@ func (c *Conn) addReceivedHeader() {
// explicitly hide their network address. // explicitly hide their network address.
received += fmt.Sprintf("from %s\n", c.ehloDomain) received += fmt.Sprintf("from %s\n", c.ehloDomain)
} else { } else {
// For non-authenticated users we show the real address as canonical, // For non-authenticated users we also include the network address,
// and then the given EHLO domain for convenience and // for convenience and troubleshooting.
// troubleshooting. received += fmt.Sprintf("from %s ([%s])\n",
received += fmt.Sprintf("from [%s] (%s)\n", c.ehloDomain, addrLiteral(c.remoteAddr))
addrLiteral(c.remoteAddr), c.ehloDomain)
} }
received += fmt.Sprintf("by %s (chasquid) ", c.hostname) received += fmt.Sprintf("by %s (chasquid) ", c.hostname)