Ticket #784 (closed defect: wontfix)

Opened 7 years ago

Last modified 4 months ago

ne pas mettre des destinations répertoire dans mail_alias

Reported by: anarcat Owned by: anonymous
Priority: normal Milestone: alternc-futur
Component: Postfix Version: alternc-0.9.5
Severity: major Keywords:
Cc:

Description (last modified by fufroma) (diff)

La base mail_alias devrait être réservée aux alias. En y mettant les "home mail" (e.g. /var/alternc/mail/f/foo_example.com), on empêche un filtre system-wide comme procmail d'agir à partir de la commande "mailbox_command", car le "alias_maps" est prioritaire sur cette configuration.

       The  precedence  of local(8) delivery methods from high to
       low is: aliases, .forward  files,  mailbox_transport_maps,
       mailbox_transport,  mailbox_command_maps, mailbox_command,
       home_mailbox,    mail_spool_directory,     fallback_trans-
       port_maps, fallback_transport, and luser_relay.

 local(8) manpage.

Autrement dit, mettre les mailboxes dans mail_alias, ça marche, mais c'est un hack affreux. Il faut trouver un moyen de mettre ces mailboxes ailleurs. Elles sont déjà dans mail_users, mais le problème est que quand l'on retire un mail de mail_alias, postfix refuse de livrer.

Change History

comment:1 Changed 7 years ago by anarcat

Le paramètre  local_recipients_maps permet d'accepter les mails. En réglant:

local_recipients_maps = $virtual_mailbox_maps

... smtpd accepte le mail, mais local panique car il ne sait pas où livrer:

Aug 16 09:06:32 alternc postfix/local[4908]: 70303404586: to=<anarcat_fqccl.org@alternc.fqccl.org>, orig_to=<anarcat@fqccl.org>, relay=local, delay=0, status=bounced (unknown user: "anarcat_fqccl.org")

C'Est à cause de notre connerie de user_example.com. JE continue l'investigation.

comment:2 Changed 7 years ago by anarcat

C'est le  virtual_maps qui fait ça:

virtual_maps = proxy:mysql:/etc/postfix/mydomain.cf

... et qui utilise la table mail_domain.

Un petit sommaire des tables pourries d'AlternC:

mail_domain:

+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| mail  | varchar(255)     |      | PRI |         |       |
| alias | text             |      |     |         |       |
| uid   | int(10) unsigned |      | MUL | 0       |       |
| pop   | tinyint(4)       |      | MUL | 0       |       |
| type  | tinyint(4)       |      |     | 0       |       |
+-------+------------------+------+-----+---------+-------+

Exemple de contenu pour un domaine "example.com" géré sur le serveur avec un mailbox "foo" et un forward "bar" -> "foo":

| mail            | alias            |
| example.com     | example.com      |
| foo@example.com | foo_example.com  |
| bar@example.com | foo@example.com  |

mail_alias:

+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| mail  | varchar(255) |      | PRI |         |       |
| alias | varchar(255) |      |     |         |       |
+-------+--------------+------+-----+---------+-------+

Exemple, encore:

| mail            | alias                               |
| foo_example.com | /var/alternc/html/f/foo_example.com  |

Si il y a un alias "mailman", c'est là qu'il se trouve:

liste_example.com -> "| /var/lib/mailman/mail/mailman post liste"

mail_users:

+----------+------------------+------+-----+---------+-------+
| Field    | Type             | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| uid      | int(10) unsigned |      | MUL | 0       |       |
| alias    | varchar(255)     |      | PRI |         |       |
| path     | varchar(255)     |      | MUL |         |       |
| password | varchar(255)     |      |     |         |       |
+----------+------------------+------+-----+---------+-------+

Contient seulement les POP/IMAPs:

| uid  | alias            | path                               | password            |
| 2001 | foo@example.com  | /var/alternc/mail/f/foo_example.com | <password encrypté> |

comment:3 Changed 7 years ago by anarcat

Normalement dans postfix, les mails doivent passer par les maps suivantes:

  1. $local_recipients_maps, utilisé par smtpd pour vérifier que l'addresse de destination existe (/etc/passwd + $alias_maps par défaut)
  2. $alias_maps (/etc/aliases), normalement, un override global (genre root@)
  3. $virtual_mailbox_domains et $virtual_alias_domains, utilisés pour vérifier si le domaine est géré par postfix (voir $virtual_mailbox_maps et $virtual_alias_maps, qui sont par défaut $virtual_maps) et où il va

Notre problème est que l'on fait tout par alias_maps au lieu de faire du vrai virtual hosting postfix.

Ce qu'il faudrait, c'est une table comme ceci:

| from            | to          | note                                    |
| example.com     | example.com | seulement pour que le domaine soit connu |
| foo@example.com | /var/alternc/mail/f/foo_example.com | livraison locale |
| bar@example.com | foo@example.com                     | forward (ou pipe) |

C'est le virtual_maps, et c'est tout con. Notre problème à nous est que cette table est séparée en trois. Ça duplique de l'information, et c'est le bordel total. Évidemment, dans cette table, on pourrait mettre d'autres champs (uid, password, pop, type) pour satisfaire alternc et les autres clients de la table (courier-imap, entres autres).

Mais il devient clair qu'on peut faire un gros ménage là-dedans.

comment:5 Changed 7 years ago by anarcat

Donc, pour migrer vers cette table, il faudrait la conf postfix suivante:

local_recipients_maps = $alias_maps $virtual_maps
alias_maps = hash:/etc/aliases
virtual_maps = mysql:/etc/postfix/myvirtual.cf
virtual_gid_maps = mysql:/etc/postfix/mygid.cf
virtual_mailbox_maps = $virtual_maps # le défaut

myvirtual.cf:

user = sysusr
password = password
hosts = 127.0.0.1
dbname = alternc
table = mail_users
select_field = path
where_field = alias

Le script de migration:

ALTER TABLE mail_users .. # pour ajouter type, pop
# ajouter tous les mails sauf les locaux, qui sont déjà présents
INSERT INTO mail_users  SELECT uid, mail, alias, '', type, pop FROM mail_alias WHERE ( mail LIKE '%@%' AND alias LIKE '%@%' ) OR ( mail NOT LIKE '%@%' AND alias NOT LIKE '%@%' );
# corriger le type/pop pour les locaux
UPDATE mail_users VALUES (type, pop) SELECT type, pop FROM mail_alias WHERE ( mail LIKE '%@%' AND alias NOT LIKE '%@%' ); # ou kekchose du genre
# insérer les alias mailman et autres de mail_alias, pas simple, il faut faire un join sur mail_alias... misère...

donc, c'est la merde. mais il faut le faire, sinon on est foutus car on ne peut pas utiliser de livraison locale avec procmail. il faut faire un .procmailrc par user, comme dans alternc-procmail, ce qui est catastrophique, si on veut, par exemple, faire du spam filtering system-wide.

comment:6 Changed 7 years ago by anarcat

je suis en train de faire des tests pour voir s'il ne serait pas possible d'utiliser les tables existantes.

comment:7 Changed 7 years ago by anarcat

Je crois avoir avancé un peu. J'ai la configuration suivante:

alias_maps = hash:/etc/aliases
virtual_alias_maps = proxy:mysql:/etc/postfix/mydomain.cf
virtual_alias_domains =
virtual_mailbox_maps = mysql:/etc/postfix/myvirtual.cf
virtual_mailbox_domains = mysql:/etc/postfix/mydomain.cf

local_transport = virtual
local_recipient_maps = $virtual_mailbox_maps $virtual_alias_maps

virtual_mailbox_base = /
virtual_minimum_gid = 1000
virtual_minimum_uid = 33
virtual_gid_maps = mysql:/etc/postfix/mygid.cf
virtual_uid_maps = static:33

mydestination = fqdn.koumbit.net, localhost.koumbit.net, localhost

Les forwards marchent, les pop marchent, les pop + forward marchent. Le seul truc qui marche pas, c'est /etc/aliases.

Remarquez que mailbox_command ne marche pas non plus. :(

comment:8 Changed 7 years ago by anarcat

  • Milestone changed from 1.0 to 2.0

avec le redesign des trucs d'usager et le rewrite, on va plus cibler le milestone:2.0.

comment:9 Changed 4 years ago by azerttyu

gebura m'a remonté ce lien, cela semble être une piste à regarder :

Cela semblerait interessant pour rajouter des options comme l'utilisation de spamassassin et d'un rangement par défaut dans les Maildir

comment:10 Changed 4 months ago by fufroma

  • Status changed from new to closed
  • Resolution set to wontfix
  • Description modified (diff)

mail a été complétement refondu pour alternc 3

Note: See TracTickets for help on using tickets.