On Sat, 09 Nov 2013 14:21:51 +0100
Jeroen Geilman <jer...@adaptr.nl> wrote:

> On 11/9/2013 2:13 PM, Simon Effenberg wrote:
> > On Sat, 9 Nov 2013 07:54:30 -0500 (EST)
> > wie...@porcupine.org (Wietse Venema) wrote:
> >
> >> transport_maps can use hash tables AND tcp tables. transport_maps
> >> queries each table in the specified order, and stops when a result
> >> is found. When no result is found, Postfix uses default_transport.
> >>
> >>    Wietse-
> >
> >
> > I got this but so it's impossible to do something like that:
> >
> > main.cf:
> >    transport_maps = hash:/etc/postfix/transport, tcp:[127.0.0.1]:2527
> >
> > transport:
> >
> >    @domain1.tld smtp:[internal.relay]
> >    @domain2.tld smtp:[external.relay]
> >
> > master.cf:
> >    127.0.0.1:2527 inet n n n - 0 spawn
> >      user=nobody argv=/etc/postfix/random.rb
> >
> > random.rb:
> >    #!/usr/bin/env ruby
> >
> >    TRANSPORTS = [ 'smtp1:', 'smtp2:', 'smtp3:' ]
> >
> >    while line = STDIN.readline
> >      puts "200 #{TRANSPORTS[rand(TRANSPORTS.size)]}"
> >    end
> >
> >
> > If I'll try to send a mail to "x...@domain1.tld" this won't use
> > smtp:[internal.relay] but one of 'smtp1:', 'smpt2:' or 'smtp3:'
> >
> 
> No. x...@domain1.tld matches the first line in /etc/postfix/transport.
> 
> You seem terminally confused about how maps are used.
> Each map type has specific documentation on how it is queried, but no 
> map determines WHEN it is queried. You define that in transport_maps.

That's not how it works in my 2.9 postfix version.. trivial-rewrite is
doing the following (regarding to -vv logs):

1. search for x...@domain1.tld

  1. in transport which has NO match
  2. asking the tcp_table which HAS a match

so this wouldn't work.. but if I would change the "random.rb" that is
only giving a "200 smtp{1..3}:" if the request is for a "domain" and
not for the full email address the following will happen:

1. search for x...@domain1.tld

  1. in transport which has NO match
  2. asking the tcp_table which has NO match because it is a full
     address

2. search for domain1.tld

  1. in transport which HAS a match => correct transport is used

but now.. if I want to send a mail to y...@domain2013.tld this will
happen:

1. search for y...@domain2013.tld

  1. in transport which has NO match
  2. asking the tcp_table which has NO match because it is a full
     address

2. search for domain2013.tld

  1. in transport which has NO match
  - now postfix is using the "default_transport" because "tcp table" is
    only asked once and not a second time (see tcp_table(5))

So it looks not good for me, isn't it?

Simon

-- 

Reply via email to