Re: [exim] Mysql matching of $defaultdomain as well as $all…

Top Pagina
Delete this message
Reply to this message
Auteur: Ted Cooper
Datum:  
Aan: exim-users
Onderwerp: Re: [exim] Mysql matching of $defaultdomain as well as $allvirtualdomains
On Mon, 2009-10-05 at 14:08 -0700, Ernie Dunbar wrote:
> http://struction.de/projects/HOWTO_VirtualMail_Exim-MySQL-Spamassassin-ClamAV-Dovecot/index


Looks good except that it uses sender callouts, but let's not start that
**** fight argument again.

> The basic gist is that user accounts are stored in a MySQL database for
> Dovecot (that part works). I need Exim to check this database for valid
> users, and when the domain part is "lightspeed.ca", it looks for the user
> field in the database, with a blank domain name. Otherwise, Exim needs to
> do another MySQL lookup to check to make sure both the local part and the
> domain exist in the database. The pseudo code looks like this:
>
> if $domain = "lightspeed.ca" and lookup mysql {
>      SELECT CONCAT(username,'@',domain) AS email
>      FROM user
>      WHERE username='${quote_mysql:$local_part}'
>      AND domain=''
>    }
>    elif match $domain lookup mysql {
>      SELECT CONCAT(username,'@',domain) AS email
>      FROM user
>      WHERE username='${quote_mysql:$local_part}'
>      AND domain='${quote_mysql:$domain}'
>    }
> }

>
> The following Exim router works, but not with the users in the database
> that have no domain part:
>
> mysql_user:
>   driver                = accept
>   # restriction to local domains only may be a double check, as the
> condition takes care of it already ;-)
>   domains               = +local_domains
>   condition             = ${lookup mysql{ \
>                    SELECT CONCAT(username,'@',domain) AS email \
>                    FROM user \
>                    WHERE username='${quote_mysql:$local_part}' \
>                    AND domain='${quote_mysql:$domain}' \
>                    AND SMTP_allowed='YES' \
>                    }{true}{false}}
>   local_part_suffix     = +*
>   local_part_suffix_optional
>   transport             = local_mysql_delivery
>   no_more


As it stands, a lightspeed.ca account gets the exact same lookup as an
example.com user.

So .... make 2 routers. Put this one before the other so that it pulls
the lightspeed.ca ones out before the other +local_domains one.

You might want to get rid of the CONCAT bit if you're not using it, and
instead just select a column.

mysql_user_lightspeed:
  driver                = accept
  domains               = lightspeed.ca
  condition             = ${lookup mysql{ \
                   SELECT CONCAT(username,'@',domain) AS email \
                   FROM user \
                   WHERE username='${quote_mysql:$local_part}' \
                   AND domain='' \
                   AND SMTP_allowed='YES' \
                   }{true}{false}}
  local_part_suffix     = +*
  local_part_suffix_optional
  transport             = local_mysql_delivery
  no_more


--
The Exim manual - http://docs.exim.org