[pmg-devel] [PATCH pmg-api v2 1/5] fix rendering of ipv(4|6) literal lmtp transports

Stoiko Ivanov s.ivanov at proxmox.com
Wed Mar 18 11:23:42 CET 2020


While reviewing support for lmtp as transport one thing I forgot to test was
adding a lmtp-transport pointing to an IPv6 address.

Using the use_mx flag (which only makes sense for domain-names) to provide the
information of whether the next-hop/hostname should be written out in square
brackets or not is a bit confusing, and leads to ambiguous results when
providing ipv6 literal addresses:
host: 2001:db8:25::25
port: 24
gets rendered as
lmtp:inet:2001:db8:25::25:24

(which postfix oddly enough parses 'correctly')

By introducing a explicit flag "$bracket_host" and reordering the conditions
lmtp and smtp entries get rendered correctly (see `man smtp`).

Additionally fixes an indentation glitch in read_transport_map.

Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
---
 src/PMG/Config.pm | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/PMG/Config.pm b/src/PMG/Config.pm
index 5b5f03f..3c83944 100755
--- a/src/PMG/Config.pm
+++ b/src/PMG/Config.pm
@@ -1138,7 +1138,7 @@ sub read_transport_map {
 		$host = $1;
 		$use_mx = 0;
 	    }
-		$use_mx = 0 if ($protocol eq "lmtp");
+	    $use_mx = 0 if ($protocol eq "lmtp");
 
 	    eval { PVE::JSONSchema::pve_verify_address($host); };
 	    if (my $err = $@) {
@@ -1177,19 +1177,21 @@ sub write_transport_map {
 	    if defined($comment) && $comment !~ m/^\s*$/;
 
 	my $use_mx = $data->{use_mx};
-	$use_mx = 0 if $data->{host} =~ m/^(?:$IPV4RE|$IPV6RE)$/;
+	my $bracket_host = ! $use_mx;
 
 	if ($data->{protocol} eq 'lmtp') {
-	    $use_mx = 1;
+	    $bracket_host = 0;
 	    $data->{protocol} .= ":inet";
 	}
 
-	if ($use_mx) {
+	$bracket_host = 1 if $data->{host} =~ m/^(?:$IPV4RE|$IPV6RE)$/i;
+
+	if ($bracket_host) {
 	    PVE::Tools::safe_print(
-		$filename, $fh, "$data->{domain} $data->{protocol}:$data->{host}:$data->{port}\n");
+		$filename, $fh, "$data->{domain} $data->{protocol}:[$data->{host}]:$data->{port}\n");
 	} else {
 	    PVE::Tools::safe_print(
-		$filename, $fh, "$data->{domain} $data->{protocol}:[$data->{host}]:$data->{port}\n");
+		$filename, $fh, "$data->{domain} $data->{protocol}:$data->{host}:$data->{port}\n");
 	}
     }
 }
-- 
2.20.1




More information about the pmg-devel mailing list