Ticket #784 (closed defect: wontfix)
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.
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: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:
- $local_recipients_maps, utilisé par smtpd pour vérifier que l'addresse de destination existe (/etc/passwd + $alias_maps par défaut)
- $alias_maps (/etc/aliases), normalement, un override global (genre root@)
- $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

Le paramètre local_recipients_maps permet d'accepter les mails. En réglant:
... smtpd accepte le mail, mais local panique car il ne sait pas où livrer:
C'Est à cause de notre connerie de user_example.com. JE continue l'investigation.