X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/17792b53d16f2061cb7350001e81c995bac6a9eb..5e0ccec4397bd2d21cc1473681a62e7c2fb6afbe:/src/src/exinext.src diff --git a/src/src/exinext.src b/src/src/exinext.src index 80d636972..5724812c4 100644 --- a/src/src/exinext.src +++ b/src/src/exinext.src @@ -1,7 +1,7 @@ #! /bin/sh -# $Cambridge: exim/src/src/exinext.src,v 1.4 2009/10/30 15:14:04 nm4 Exp $ -# Copyright (c) 1996-2004 University of Cambridge. +# Copyright (c) The Exim Maintainers 2023 +# Copyright (c) University of Cambridge, 1995 - 2007 # See the file NOTICE for conditions of use and distribution. # Except when they appear in comments, the following placeholders in this @@ -26,6 +26,13 @@ config= eximmacdef= exim_path= +if [ "x$1" = x--version -o "x$1" = x-v ] +then + echo "`basename $0`: $0" + echo "build: EXIM_RELEASE_VERSIONEXIM_VARIANT_VERSION" + exit 0 +fi + if expr -- $1 : '\-' >/dev/null ; then while expr -- $1 : '\-' >/dev/null ; do if [ "$1" = "-C" ]; then @@ -116,6 +123,9 @@ fi perl - $exim_path "$eximmacdef" $argone $spool_directory $qualify_domain $config <<'End' + # We don't import anything, but guard against future changes which do + BEGIN { pop @INC if $INC[-1] eq '.' }; + # Name the arguments $exim = $ARGV[0]; @@ -153,6 +163,7 @@ perl - $exim_path "$eximmacdef" $argone $spool_directory $qualify_domain $config if (scalar(@list) == 0) { + push(@list, $subject) if $subject =~ /^\w{6}-\w{11}-\w{4}$/; push(@list, $subject) if $subject =~ /^\w{6}-\w{6}-\w{2}$/; if ($subject !~ /\@/ && $subject !~ /\./) @@ -184,45 +195,18 @@ perl - $exim_path "$eximmacdef" $argone $spool_directory $qualify_domain $config $printed = 1; if (/^\s*T:[^:\s]*:/) { + # We rely on non-space-containing strings, for parsing + ($key,$error,$error2,$text) = /^\s*T:(\S+)\s+(\S+)\s+(\S+)\s*(.*)$/; - # Parsing the keys is a nightmare because of IPv6. The design of the - # format for the keys is a complete shambles. All my fault (PH). But - # I don't want to change it just for this purpose. If they key - # contains more than 3 colons, we have an IPv6 address, because - # an IPv6 address must contain at least two colons. - - # Deal with IPv4 addresses (3 colons or fewer) - - if ($key !~ /:([^:]*?:){3}/) - { - ($host,$ip,$port,$msgid) = $key =~ - /^([^:]*):([^:]*)(?::([^:]*)(?::(\S*)|)|)/; - } - - # Deal with IPv6 addresses; sorting out the colons is a complete - # mess. We should be able to find the host name and IP address from - # further in the message. That seems the easiest escape plan here. We - # can use those to match the rest of the key. - - else - { - ($host,$ip) = $text =~ /host\s(\S+)\s\[([^]]+)\]/; - if (defined $host) - { - ($port,$msgid) = $key =~ - /^$host:$ip(?::([^:]*)(?::(\S*)|)|)/; - } - - # This will probably be wrong... - - else - { - ($host,$ip) = $key =~ /([^:]*):(.*)/; - } - } - - printf("Transport: %s [%s]", $host, $ip); + ($host,$ip,$port,$msgid) = $key =~ + /^([^:[]*|\[[^]]*\]) # host (could be an ip) + :([^:[]*|\[[^]]*\]) # ip + (?::(\d{1,5}))? # maybe port + (?::(\S{23}))? # maybe msgid + $/x; + + printf("Transport: %s %s", $host, $ip); print ":$port" if defined $port; print " $msgid" if defined $msgid; print " error $error: $text\n";