# .procmailrc générique mis à votre disposition
# par les gentils membres actifs du Cr@ns
# Vous pouvez l'utiliser, le redistribuer, le modifier à votre convenance.
# Des questions, des suggestions : {nounou,ca}@lists.crans.org
# Licence : WTFPL

# Les sections commentées par #~# sont des features qui ne sont pas activées
# par défaut. Sentez-vous libre de les décommenter pour les utiliser.

# Attention : le path par défaut des fichiers de logs est $HOME/.procmail/logs
# Assurez-vous que le dossier en question existe avant d'utiliser ce .procmailrc

#################################################################
##                         DISCLAIMER                          ##
#################################################################

# Ce fichier est mis à votre disposition par des cranseux sans aucune garantie.
# Nous sommes un certain nombre à l'utiliser nous-mêmes, souvent dans une version
# légèrement modifiée.
#  * Nous ne sommes pas responsables si vous perdez des mails ou si ils sont mal triés.
#  * Pensez à copier également les autres fichiers si vous utilisez les include.
#  * Vous pouvez rester à jour en trackant le dépôt git : http://git.crans.org/git/fichiers_configuration.git
#    (on corrige des trucs et on rajoute parfois des nouveaux/meilleurs tris)

#------------------------------------------------------------------------------
# Ce fichier commence par une grosse section de commentaire qui donne un aperçu
# de l'arborescence de dossiers qui sera obtenue en utilisant ce .procmailrc.
# Les règles ne sont pas dans le même ordre, en effet, il est plus efficace
# de mettre en premier les règles qui sont le plus souvent vérifiées pour
# diminuer le temps moyen de traitement.

# Vous pouvez ajouter vos propres règles de tri sans modifier ce fichier,
# en effet, ce .procmailrc inclus trois autres fichiers de règles
# (pour l'instant commentés par #~#)
# Ils doivent être tous les trois dans ${CONFIGDIR}
#  * Le premier, custom.high.rules contient des règles qui overrident tout
#    le comportement ce .procmailrc, pour des mails qui doivent être classés
#    sans autre condition.
#  * Le deuxème, custom.normal.rules doit contenir la plupart de vos règles
#    personnelles, il est géré après les mails envoyés par le Cr@ns mais avant
#    le comportement par défaut des mailing-lists, ce qui vous permet d'en
#    trier certaines selon un autre schéma
#  * Le troisième, custom.final.rules est appliqué tout à la fin, il peut par
#    exemple servir à définir un dossier par défaut autre que .INBOX

# Attention, certaines règles (pour l'instant commentées par #~#)
# font appel à des scripts.
# Pour qu'elles fonctionnent correctement, il faut que vous
# possédiez les scripts correspondant et que vous adaptiez
# la partie "Scripting" des variables de configuration.
# (cf https://wiki.crans.org/VieCrans/FichiersConfiguration#scripting)


################################################################################
#####                             Commentaires                             #####
################################################################################
#
# Les tags suivants expliquent quels membres actifs reçoivent quels mails :
# $: câbleur/imprimeur
# *: apprenti
# +: nounou
# B: bureau
# T: trésorier
# M: modérateur
# F: admin federez
# 
# 
# Si vous utilisez ce .procmailrc (et que vous recevez tous les mails concernés),
# votre arborescence ressemblera à ceci :
#
# Cr@ns
#   |
#   |-[$*+BT] Administratif (le côté administratif : bot-free !)
#   |    |
#   |    |-[$*+BT] privé (des informations confidentielles peuvent y circuler)
#   |    |    |
#   |    |    |-[B] bureau
#   |    |    |-[B] crous-crans
#   |    |    |-[+B] disconnect
#   |    |    |-[$*+] impression (sans modif_solde, munin, print_status)
#   |    |    |-[$*+] respbats (bot-free)
#   |    |    |-[+B] spoof
#   |    |    |-[T] trésorier
#   |    |
#   |    |-[$*+B] public
#   |         |
#   |         |-[$*+B] ca
#   |         |-[+B] dsi-crans
#   |         |-[*+B] install-party
#   |
#   |
#   |-[*+] Information (keep up to date)
#   |    |
#   |    |-[*+] apt-listchanges (Lors des mises à jour de serveurs)
#   |    |
#   |    |-[+] bcfg2 (Serveurs non synchronisés avec bcfg2)
#   |    |
#   |    |-[*+] darcs (records)
#   |    |     |
#   |    |     |-[*+] whatsnew
#   |    |
#   |    |-[*+] git (commits)
#   |    |     |
#   |    |     |-[*+] whatsnew
#   |    |
#   |    |-[+] inn (stats des servuers de news)
#   |    |
#   |    |-[$*+] machines_supprimees (puni !)
#   |    |
#   |    |-[+] ovh (Factures, Newsletters)
#   |
#   |
#   |-[*+] Monitoring (une machine fait-elle de la merde ?)
#   |    |
#   |    |-[+] Arpwatch (chaque fois qu'une machine fait un truc nouveau/suspect sur le réseau)
#   |    |     |
#   |    |     |-[+] changed_ethernet_address
#   |    |     |-[+] flip_flop
#   |    |     |-[+] new_activity
#   |    |     |-[+] new_station
#   |    |
#   |    |-[*+] Monit (Un truc marche pas/remarche, un disque est plein,…)
#   |    |     |
#   |    |     |- <un dossier par serveur>
#   |    |
#   |    |-[$*+] Munin (Graphes)
#   |    |     |
#   |    |     |-[$*+] Imprimante
#   |    |
#   |    |-[+] Nagios (Comme Monit, mais en mieux/moins bien/différent)
#   |    |     |
#   |    |     |- <un dossier pour tousles switchs et un dossier par serveur>
#   |    |
#   |    |-[+B] Stats-upload (Qui a uplodé ?)
#   |
#   |
#   |-[$*+] Problems (Classés par degré de gravité grossier)
#   |    |
#   |    |-[*+] 0-Self-solving (Just ignore that)
#   |    |     |
#   |    |     |-[+] ftp (Problème de synchronisation du miroir Debian)
#   |    |     |-[*+] SQL errors (sqlgrey a chié dans la colle)
#   |    |
#   |    |-[+] 1-Soft (Un problème, mais pas critique)
#   |    |     |
#   |    |     |-[*+] backuppc (babar râle)
#   |    |     |-[+] Django
#   |    |     |-[+] intranet1 (normal)
#   |    |     |-[+] intranet2 (fucking locks)
#   |    |
#   |    |-[*+] 2-Wild (Ce serait pas mal de regarder ce qui foire)
#   |    |     |
#   |    |     |-[*+] cron
#   |    |     |     |- <triés selon les cronjob souvent rencontrés listés dans le fichier cron.folders>
#   |    |     |
#   |    |     |-[+] gest_crans (Rapports de bugs envoyés lors d'un crash de gest_crans)
#   |    |     |
#   |    |     |-[$] printer_watch (L'imprimante a bourré/n'a plus d'encre)
#   |    |
#   |    |-[*+] 3-Argh (Il faut vite faire quelque chose !)
#   |    |     |
#   |    |     |-[*+] nols (La baie de disque a un problème !)
#   |    |     |-[*+] pulsar (On a plus de courant !!)
#   |    |
#   |    |-[$*+] 4-Human-made (Ces mails sont générés par des gens)
#   |          |
#   |          |
#   |          |-[+] Mailman (Des mailing-list chient, ou des gens demandent de l'aide)
#   |          |
#   |          |-[$*+] print_status (Une impression a échoué)
#   |
#   |
#   |-[$*+BM] Surveillance (On stalke, pour vérifier ce que font les autres. Par ordre croissant d'importance à vérifier)
#   |    |
#   |    |-[+BM] 1-Moderateurs
#   |    |
#   |    |-[+] 2-OVH (Connexions au manager)
#   |    |
#   |    |-[*+] 3-Cameras (Quelqu'un est rentré dans un local sensible)
#   |    |     |
#   |    |     |-[*+] 0B
#   |    |     |-[*+] 0H
#   |    |
#   |    |-[$*+] 4-LDAP (Modification de la base LDAP qui mérite un coup d'oeil)
#   |    |    |
#   |    |    |-[*+] Modification (Changement de droit ou modification d'une machine crans)
#   |    |    |-[$*+] Solde (Modification d'un solde impression)
#   |    |
#   |    |-[+] 5-cranspasswords (Quand quelqu'un modifie un mot de passe chiffré)
#   |
#   |
#   |-[$*+B] Technique (les discussions et les trucs reliés)
#        |
#        |-[$*+] Cablages (Il faut aller brancher un truc)
#        |
#        |-[*+] Freebox (Vous avez un message vocal)
#        |
#        |-[*+] Nounou
#        |
#        |-[+] root
#        |
#        |-[*+] roots
#        |
#        |-[*+B] tracker (Todolist)
#
# Federez (Les mails concernant l'asso FedeRez sont dans un dossier à part)
#   |
#   |-[*+BF] federez (La ML de discussion principale de FedeRez)
#   |
#   |-[F] admin (La ML de l'équipe technique de FedeRez)
#   |  |
#   |  |-[F] Debian updates (Quand un serveur veut être mis à jour)
#   |  |
#   |  |-[F] federezpasswords (Quand quelqu'un modifie un mot de passe chiffré)
#   |  |
#   |  |-[F] Logcheck (Spam)
#   |  |
#   |  |-[F] Logwatch (Spam)
#   |  |
#   |  |-[F] OVH (Factures, Newsletters)
#   |
#   |-[(F)] Monit (Pour voir si un serveur ne répond plus)
#   |
#   |-[(F)] saclay (Pour préparer notre avenir à Saclay)
# 



################################################################################
#####                              Variables                               #####
################################################################################

#################################################################
##                   Variables d'environnement                 ##
#################################################################
### Paths
# Path du dossier où sont rangés les mails
MAILDIR="${HOME}/Mail"
# Dossier contenant tout le garbage procmail-related
# (le .procmailrc lui-même est dans le home)
PROCMAILDIR="${HOME}/.procmail"
# Dossier où sont les fichiers de configuration supplémentaires pour procmail
CONFIGDIR="${PROCMAILDIR}/rc"
# Path du fichier de log de procmail
LOGFILE="${PROCMAILDIR}/logs/procmail.log"


### Scripting
# Shell à utiliser pour exécuter des commandes
SHELL="/bin/bash"
## Scripts
# Dossier où sont rangés les scripts
SCRIPTSFOLDER="${HOME}/scripts/crans_toolbox/"
# Scripts pour décoder les headers MIME
DECODEHEADERSCRIPT="${SCRIPTSFOLDER}decode_header.pl"


#################################################################
##                      Noms de dossiers                       ##
#################################################################
# /Attention à ne pas mettre de . ou d'espace au mauvais endroit…/

### Dossiers personnels
## Dossier pour ranger les mails de Cron
## (ceux envoyés par un serveur Cr@ns seront rangés ailleurs)
CRONPERSODIR=".Cron"

## Dossier de Spam
SPAMDIR=".Spam"
# Spam reçu sur (usenet|news)@(crans.org|crans.ens-cachan.fr)
SPAMINNDIR="${SPAMDIR}.usenet"


### Dossiers pour les MLs qui ne sont pas catchées par une autre règle
## Dossier racine
MLDIR=".ML"
## Dossier pour ranger les rappels de mots de passes envoyés par Mailman
RAPPELMDPDIR="${MLDIR}.rappels_mdp"


### Dossiers pour les MLs du campus
MLCAMPUSDIR="${MLDIR}.Campus"
MLBDEDIR="${MLCAMPUSDIR}.BDE"
MLCLUBSDIR="${MLCAMPUSDIR}.Clubs"
MLMEDDIR="${MLCLUBSDIR}.Med"
MLBDLDIR="${MLCAMPUSDIR}.BDL"
MLBDADIR="${MLCAMPUSDIR}.BDA"
MLBDSDIR="${MLCAMPUSDIR}.BDS"
MLSDADIR="${MLCAMPUSDIR}.SDA"
MLGALADIR="${MLCAMPUSDIR}.Gala"
MLSONODIR="${MLCAMPUSDIR}.SoNo"

## Dossier où atterrira une ML non-répertoriée
MLFAILSUFFIX="Fail"

### Dossier pour les MLs de promo
MLPROMODIR="${MLDIR}.Promo"

### Dossier pour les MLs non répertoriées plus haut et non-MA-crans
MLPERSODIR="${MLDIR}.Divers"

### Dossiers pour les Membres Actifs du Cr@ns
## Dossier racine
CRANSDIR=".Cr@ns"
## Dossiers de mailing lists
CRANSADMINISTRATIFDIR="${CRANSDIR}.Administratif"
CRANSADMINISTRATIFPUBLICDIR="${CRANSADMINISTRATIFDIR}.public"
CRANSADMINISTRATIFPRIVATEDIR="${CRANSADMINISTRATIFDIR}.prive"

## Dossiers pour les mails de monitoring
MONITORINGDIR="${CRANSDIR}.Monitoring"
MONITDIR="${MONITORINGDIR}.Monit"
NAGIOSDIR="${MONITORINGDIR}.Nagios"
NAGIOSSWITCHSDIR="${NAGIOSDIR}.0-switchs"
ARPWATCHDIR="${MONITORINGDIR}.Arpwatch"
MUNINDIR="${MONITORINGDIR}.Munin"
MUNINIMPRESSIONDIR="${MUNINDIR}.Imprimante"
STATUPLOADDIR="${MONITORINGDIR}.Stats-upload"

## Dossiers pour le mails concernant des "problèmes"
# Racine
PROBLEMSDIR="${CRANSDIR}.Problems"
# Par ordre de gravité croissant
SELFSOLVINGDIR="${PROBLEMSDIR}.0-Self-solving"
SOFTDIR="${PROBLEMSDIR}.1-Soft"
WILDDIR="${PROBLEMSDIR}.2-Wild"
ARGHDIR="${PROBLEMSDIR}.3-Argh"
HUMANPROBLEMSDIR="${PROBLEMSDIR}.4-Human-made"
# Sous-dossiers
FTPDIR="${SELFSOLVINGDIR}.ftp"
SQLGREYDIR="${SELFSOLVINGDIR}.sql-errors"
BACKUPPCDIR="${SOFTDIR}.backuppc"
DJANGODIR="${SOFTDIR}.Django"
INTRANET2DIR="${SOFTDIR}.Intranet2"
INTRANET1DIR="${SOFTDIR}.intranet-bugreport"
CRONDIR="${WILDDIR}.cron"
GESTCRANSDIR="${WILDDIR}.gest_crans"
PRINTERWATCHDIR="${WILDDIR}.printer_watch"
NOLSDIR="${ARGHDIR}.nols"
PULSARDIR="${ARGHDIR}.pulsar"
MAILMANDIR="${HUMANPROBLEMSDIR}.Mailman"
PRINTSTATUSDIR="${HUMANPROBLEMSDIR}.print_status"
MULTIDECODIR="${HUMANPROBLEMSDIR}.multi-deco"

## Dossier de surveillance (= surveillance d'actions humaines)
# Racine
SURVEILLANCEDIR="${CRANSDIR}.Surveillance"
# Par ordre de sensibilité croissant
LOGCHECKDIR="${SURVEILLANCEDIR}.0-logcheck"
MODERATEURSDIR="${SURVEILLANCEDIR}.1-Moderateurs"
OVHMANAGERDIR="${SURVEILLANCEDIR}.2-OVH"
CAMERASDIR="${SURVEILLANCEDIR}.3-Cameras"
LDAPDIR="${SURVEILLANCEDIR}.4-LDAP"
LDAPSOLDEDIR="${LDAPDIR}.Solde"
LDAPMODIFDIR="${LDAPDIR}.Modification"
CRANSPASSWORDSDIR="${SURVEILLANCEDIR}.5-cranspasswords"

## Dossier informatif  (= pour se tenir au courant de ce qui se passe au Cr@ns)
# Racine
INFORMATIONDIR="${CRANSDIR}.Information"
# Mails d'ovh autre que les notifications de connexion au manager
OVHDIR="${INFORMATIONDIR}.OVH"
# apt-listchanges
APTLISTCHANGESDIR="${INFORMATIONDIR}.apt-listchanges"
# Machines supprimées pour chambre invalide
DELETEDMACHINES="${INFORMATIONDIR}.machines_supprimees"
# Repositories
GITDIR="${INFORMATIONDIR}.git"
DARCSDIR="${INFORMATIONDIR}.darcs"
# Mail envoyé quotidiennement par bcfg2 avec la liste des serveurs non synchro
BCFG2DIR="${INFORMATIONDIR}.bcfg2"
# Statistiques des serveurs de news
INNDIR="${INFORMATIONDIR}.inn"

## Dossier de discussion techniques
# Racine
TECHNIQUEDIR="${CRANSDIR}.Technique"
# Mails de roots@ non catchées avant
ROOTSDIR="${TECHNIQUEDIR}.roots"
# Mails de câblages demandé/effectué
CABLAGEDIR="${TECHNIQUEDIR}.Cablages"
# Mails du tracker
TRACKERDIR="${TECHNIQUEDIR}.Tracker"
# Mails de la ML nounou
NOUNOUDIR="${TECHNIQUEDIR}.Nounou"
# Messages laissés sur la Freebox
FREEBOXDIR="${TECHNIQUEDIR}.Freebox"
# Dossier où atterriront les mails de root@ non triés
ROOTDEFAULTDIR="${TECHNIQUEDIR}.root"

### Dossier racine pour Federez
FEDEREZDIR=".FedeRez"
FEDEREZMONITDIR="${FEDEREZDIR}.Monit"
FEDEREZADMINDIR="${FEDEREZDIR}.admin"
FEDEREZLOGWATCHDIR="${FEDEREZADMINDIR}.Logwatch"
FEDEREZLOGCHECKDIR="${FEDEREZADMINDIR}.Logcheck"
FEDEREZDEBIANDIR="${FEDEREZADMINDIR}.Debian-updates"
FEDEREZPASSWORDSDIR="${FEDEREZADMINDIR}.federezpasswords"
FEDEREZOVHDIR="${FEDEREZADMINDIR}.OVH"



################################################################################
#####                                Règles                                #####
################################################################################

#~# # Patch pour traiter les mails qui ont été
#~# # reçus avant le 30/06/13, car certaines règles de tri du .procmailrc
#~# # n'étaient pas encore valables à l'époque.
#~# # très utile si on veut retrier tous ses mails
#~# INCLUDERC="${CONFIGDIR}/retrocompatibility_patch.rules"

#~# # Fichier de règles prioritaires à personnaliser
#~# INCLUDERC="${CONFIGDIR}/custom.high.rules"

#################################################################
##                Gestion des mails d'Arpwatch                 ##
#################################################################
:0
* ^From:.*arpwatch@crans\.org
{
  # On trie les différents types de mails d'Arpwatch,
  # en faisant attention aux . et aux espaces après avoir éliminé
  # tout ce qui se trouve après " (".
  :0
  * ^Subject: \/.* \(
  {
    TYPE=`echo $MATCH | sed 's/ (.*//;s/\( \|\.\)/_/g;'`
    :0
    ${ARPWATCHDIR}.${TYPE}/
  }
  
  :0
  ${ARPWATCHDIR}/
}


#################################################################
##                Gestion des mails de Monit                   ##
#################################################################

# Les mails de Monit à propos du serveur A sont envoyés dans le dossier 
# ${MONITDIR}.A/ si le dossier n'existe pas, il est créé mais il 
# faut encore s'y abonner...
:0
* ^(X-Mailer|User-Agent):.*monit
{
  # Avant de tester les hostnames Cr@ns, règle spéciale utile pour
  # certains admin de FedeRez
  :0
  * ^To: federez-monit@
  ${FEDEREZMONITDIR}/
  
  :0
  * ^Subject:.*monit \/[^ \.]+
  ${MONITDIR}.${MATCH}/
  
  # Dossier de Monit par défaut, si Monit se met à envoyer d'autres mails
  :0
  ${MONITDIR}/
}


#################################################################
##                Gestion des mails de Nagios                  ##
#################################################################

# Les mails de Nagios à propos du serveur A sont envoyés dans le dossier
# ${NAGIOSDIR}.A/ si le dossier n'existe pas, il est créé mais il
# faut encore s'y abonner
:0
* ^(From: nagios@crans\.org|User-Agent:.*nagios)
{
  # Tous les switchs vont dans le dossier ${NAGIOSSWITCH}
  :0
  * ^Subject:.*Alert: bat[^/]+-
  ${NAGIOSSWITCHSDIR}/
  
  # Chaque serveur a son dossier
  :0
  * ^Subject:.*Alert: \/[^/\.]+
  ${NAGIOSDIR}.${MATCH}/
  
  # Si l'envie prenait à Nagios de raconter un peu plus sa vie
  :0
  ${NAGIOSDIR}/
}


#################################################################
##                 Gestion des mails de Cron                   ##
#################################################################

# Attention, si on enlève la ligne qui filtre sur le To:, on catche
# aussi tous les mails Cron qui ne sont pas envoyés par un serveur Cr@ns
:0
* ^To:.*(roots?|postgres|www-data|list)@crans\.org
* ^(X-Cron-Env|From: Anacron)
{
  #~# # Par défaut, on ne trie pas les mails de Cron, pensez à décommenter
  #~# # le INCLUDERC (et à copier le fichier complémentaire) pour les trier
  #~# INCLUDERC=${CONFIGDIR}/cron.rules
  
  :0
  ${CRONDIR}/
}


#################################################################
##             Gestion des mails de root@crans.org             ##
#################################################################

# Statistiques du serveur de news
# Désolidarisé du bloc root@crans.org pour séparer les spams
# sans qu'ils tombent dans ${ROOTDEFAULTDIR}
:0
* ^To:.*(usenet|news)@(crans\.org|crans\.ens-cachan\.fr)
{
  # L'intérêt c'est que plein de spam arrive sur ces addresses
  # et seules les stats d'inn sont censées y arriver.
  # Donc on peut bazarder tout ce qui n'est pas stat au Spam
  :0
  * ^From: news@crans.org
  ${INNDIR}/
  
  :0
  ${SPAMINNDIR}/
}

# On matche tous les alias de root@crans.org
:0
* ^(To|Cc): .*(root|abuse|amavis|backup|bind|bin|clamav|daemon|ftpadm|ftpmaster|ftp-mirror|ftp|games|gnats|irc|list|logcheck|lp|mail|majordom|man|msql|munin|news|operator|postgres|proxy|sync|sys|usenet|uucp|webmaster|www-clubs|www-data|www-perso|postmaster|mailer-daemon)@(crans\.org|crans\.ens-cachan\.fr)
{
  # Spam de logcheck
  :0
  * ^From:.*logcheck@crans\.org
  ${LOGCHECKDIR}/
  
  # Mails envoyés par munin quand il trouve qu'un graphe sort des limites
  :0
  * ^From: munin@crans\.org
  ${MUNINDIR}/
  
  # Mails envoyés en cas d'erreur de synchronisation du ftp
  :0
  * ^From: mirror@crans\.org
  ${FTPDIR}/
  
  # Mails envoyés en cas d'erreur sur l'intranet2
  :0
  * ^Subject: \[Intranet2 Cr@ns\]
  ${INTRANET2DIR}/
  
  # Mails envoyés en cas d'une autre erreur Django
  :0
  * ^Subject: \[Django\]
  ${DJANGODIR}/
  
  # Mails envoyés lors de la modification d'un fichier de mot de passe
  :0
  * ^X-Mailer: cranspasswords
  ${CRANSPASSWORDSDIR}/
  
  # Mails envoyés par OVH…
  :0
  * ^From:.*support@ovh\.com
  {
    # …lors d'une connexion au manager
    :0
    * ^X-Ovh-Template: nic/fr/loginNotification.model
    ${OVHMANAGERDIR}/
    
    # Pour autre chose (facture, newsletter)
    :0
    ${OVHDIR}/
  }
  
  # Mail envoyés par apt-listchanges lors d'une mise à jour
  :0
  * ^Subject:.*apt-listchanges
  ${APTLISTCHANGESDIR}/
  
  # Mail envoyé quand gest_crans plante
  :0
  * ^Subject: Bugreport gest_crans.py
  ${GESTCRANSDIR}/
  
  # Tout ce qui traîne sur root et qui n'est pas catché par quelque chose
  :0
  ${ROOTDEFAULTDIR}/
}


#################################################################
##            Gestion des mails de roots@crans.org             ##
#################################################################

:0
* ^(To|Cc|List-Id):.*roots(@|\.lists\.)crans\.org
{
  # Il y a aussi des apt-listchanges sur roots@
  :0
  * ^Subject:.*apt-listchanges
  ${APTLISTCHANGESDIR}/

  # Mails envoyés par la baie de disques
  :0
  * ^From: nols@crans\.org
  ${NOLSDIR}/
  
  # Mails envoyés par l'onduleur
  :0
  * ^From: pulsar@adm\.crans\.org
  ${PULSARDIR}/
  
  # Mails envoyés par le script qui détecte les changements dans la base LDAP
  :0
  * ^Subject:.*Surveillance modifications de la base LDAP
  ${LDAPMODIFDIR}/
  
  # Mails envoyés lors d'une erreur sur la base de donnée sqlgrey
  :0
  * ^From: sqlgrey@crans\.org
  ${SQLGREYDIR}/
  
  # Mails envoyés par backuppc
  :0
  * ^From: backuppc@crans\.org
  ${BACKUPPCDIR}/
  
  # Souriez, vous êtes photographiés
  :0
  * ^From:.*cameras@crans\.org
  {
    # On trie par lieu de la caméra
    :0
    * ^Subject:.*0B
    ${CAMERASDIR}.0B/
    
    :0
    * ^Subject:.*0H
    ${CAMERASDIR}.0H/
  }
  
  # I'm in your mailbox, watching your commits
  # Attention à bien filtrer git avant darcs parce que les mails git
  # contiennent aussi le header X-DarcsInfo !
  :0
  * ^X-GitInfo
  {
    :0
    * ^X-Mailer: /usr/scripts/utils/git-whatsnew
    ${GITDIR}.whatsnew/
    
    :0
    ${GITDIR}/
  }
  :0
  * ^X-DarcsInfo
  {
    :0
    * ^X-Mailer: Python Darcs Check
    ${DARCSDIR}.whatsnew/
    
    :0
    ${DARCSDIR}/
  }
  
  # Tracker
  :0
  * ^X-Mailer:.*Redmine
  ${TRACKERDIR}/
  
  # Messages sur la Freebox
  :0
  * ^From: telephonie\.freebox@(mevo\.)?freetelecom\.fr
  ${FREEBOXDIR}/
  
  # Serveurs non synchronisés avec bcfg2
  :0
  * ^X-Mailer: bcfg2-reports
  ${BCFG2DIR}/
  
  # Si il n'y pas de condition de tri, ça va dans le dossier Technique
  :0
  ${ROOTSDIR}/
}


#################################################################
##         Mails envoyés sur des MLs mais par des bots         ##
#################################################################
# Il n'y jamais de dossier par défaut, le mail sera rattrapé
# au moment de la gestion gobale des mailing-lists

# Sur la ML disconnect@
:0
* ^List-Id:.*disconnect\.lists\.crans\.org
{
  # Statistiques d'upload
  :0
  * ^X-Mailer: /usr/scripts/surveillance/statistiques.py
  ${STATUPLOADDIR}/
  
  :0
  * ^Subject:.*fois.*en un mois
  ${MULTIDECODIR}/
}

# Câblage demandé/effectué
:0
* ^X-Crans-Intranet: cablage
${CABLAGEDIR}/

# Sur la ML impression@
:0
* ^List-Id:.*impression\.lists\.crans\.org
{
  # Modification de solde
  :0
  * ^X-Mailer: modif_solde
  ${LDAPSOLDEDIR}/
  
  # Informations de print_status
  :0
  * ^X-Mailer: /usr/scripts/impression/print_status.py
  ${PRINTSTATUSDIR}/
  
  # Munin stock papier et toners
  :0
  * ^From: munin@crans\.org
  ${MUNINIMPRESSIONDIR}/
  
  # L'imprimante fait des siennes
  :0
  * ^X-Mailer: /usr/scripts/impression/printer_watch.py
  ${PRINTERWATCHDIR}/
}


# Sur la ML respbats@
#~# # L'ancienne version de ce filtre ne fonctionne plus car les headers
#~# # de ces mails sont maintenant correctement encodé.
#~# # C'est bien pour le respect des RFC, mais c'est un peu pain in the ass
#~# # p our le trier avec procmail, donc on besoin d'un script
#~# # Ne pas décommenter si vous n'avez pas le script associé.
#~# # (cf https://wiki.crans.org/VieCrans/FichiersConfiguration#scripting)
#~# :0
#~# * ^List-Id:.*respbats\.lists\.crans\.org
#~# * ^X-Mailer:\/.*
#~# {
#~#   # Machines supprimées pour chambre invalide
#~#   :0
#~#   * ? echo "${MATCH}" | ${DECODEHEADERSCRIPT} | grep /usr/scripts/gestion/chambres_vides.py
#~#   ${DELETEDMACHINES}/
#~# }


#################################################################
##                   Gestion des cron perso                    ##
#################################################################
# Les Subjects des mails de (Ana)?Cron
# sont de la forme "Cron <user@host>" ou "Anacron job '[...]' on host"
# On parse pour récupérer le host et trier avec
:0
* ^(X-Cron-Env|From: Anacron)
{
  # Si le mail vient de "host.domain.tld",
  # On range ça dans le dossier "host"
  :0
  * ^Subject:.*(Cron <[^@>]+@\/[^>]+|Anacron job .* on \/.*)
  {
    # On prend garde à ne pas créer un sous-dossier
    # si jamais le host contient un . ou un espace
    HOST_=`echo "$MATCH" | sed 's/\(\.\| \)/_/g'`
    :0
    ${CRONPERSODIR}.${HOST_}/
  }
  
  # Dans le cas (improbable) où le Subject ne matche pas
  :0
  ${CRONPERSODIR}/
}


#################################################################
##              Inclusion des règles personnelles              ##
#################################################################
#~# # Fichier de règles à personnaliser
#~# INCLUDERC="${CONFIGDIR}/custom.normal.rules"

#################################################################
##                Gestion des mails de Mailman                 ##
#################################################################
# La ML mailman@ est un peu particulière
:0
* ^(List-Id:.*mailman\.|(To|Cc):.*mailman-(owner|bounces)@)lists\.crans\.org
{
  :0
  * ^Subject:.*Rappel_pour_les_abonnements_aux_listes
  ${RAPPELMDPDIR}/
  
  :0
  ${MAILMANDIR}/
}


#################################################################
##                 Gestion des mailing-listes                  ##
#################################################################
# Ajouter à la suite vos propres règles pour les mailing-listes non gérées ici

:0
# On récupère tous les mails qui sont arrivés par l'intermédaire d'une ML
* ^List-Id:.*\/<[^<>]+>$
{
  ML=$MATCH
  ML=`echo "${ML}" | sed 's/<//;s/>//'`
  
  #################################################################
  ##              Gestion des mailing-listes Cr@ns               ##
  #################################################################
  :0
  * ^List-Id:.*lists\.crans\.org
  {
    # On veut ne garder que le nom de la ML sans le nom de domaine
    ML=`echo "${ML}" | sed 's/\.lists\.crans\.org//'`
    # On prend garde à ne pas créer un sous-dossier
    # si jamais le List-Id contient un . ou un espace
    ML_=`echo "${ML}" | sed 's/\(\.\| \)/_/g'`
    
    #################################################################
    ##      Cas où la ML est une ML de membre actif du Cr@ns       ##
    #################################################################
    
    # MLs publiques (au sens où il n'y a pas que des cranseux abonnés)
    :0
    * ? grep "^${ML}$" ${CONFIGDIR}/ML_MA_crans.administratif.public
    ${CRANSADMINISTRATIFPUBLICDIR}.${ML_}/
    
    # MLS où il n'y a que des membres actifs abonnés
    # (on peut y envoyer des informations privées)
    :0
    * ? grep "^${ML}$" ${CONFIGDIR}/ML_MA_crans.administratif.prive
    ${CRANSADMINISTRATIFPRIVATEDIR}.${ML_}/
    
    # La ML federez@lists.crans.org va quand même dans le dossier FedeRez
    :0
    * ? echo "${ML}" | grep federez
    ${FEDEREZDIR}.${ML_}/
    
    # La ML modérateurs va dans le dossier Surveillance
    :0
    * ^List-Id:.*moderateurs\.lists\.crans\.org
    ${MODERATEURSDIR}/
    
    # La ML intranet-bugreport va dans le dossier Problèmes
    :0
    * ^List-Id:.*intranet-bugreport\.lists\.crans\.org
    ${INTRANET1DIR}/
    
    # La ML nounou va dans le dossier Technique
    :0
    * ^List-Id:.*nounou\.lists\.crans\.org
    ${NOUNOUDIR}/
    
    #################################################################
    ##         Gestion des autres mailing-list (du campus)         ##
    #################################################################
    # MLs génériques du campus (des assos et d'autres random trucs)
    :0
    * ? grep "^${ML}$" ${CONFIGDIR}/ML_campus
    ${MLCAMPUSDIR}.${ML_}/
    
    # MLs BDE
    :0
    * ? echo "${ML}" | grep bde
    ${MLBDEDIR}.${ML_}/
    
    # MLs BDA
    :0
    * ? (grep "^${ML}$" ${CONFIGDIR}/ML_bda) || (echo "${ML}" | grep bda)
    ${MLBDADIR}.${ML_}/
    
    # MLs SoNo
    :0
    * ? (grep "^${ML}$" ${CONFIGDIR}/ML_sono) || (echo "${ML}" | grep sono)
    ${MLSONODIR}.${ML_}/
    
    # MLs Med
    :0
    * ? echo "${ML}" | grep -E "^med"
    ${MLMEDDIR}.${ML_}/
    
    # MLs SDA
    :0
    * ? echo "${ML}" | grep sda
    ${MLSDADIR}.${ML_}/
    
    # MLs BDL
    :0
    * ? echo "${ML}" | egrep "(bdl|interludes)"
    ${MLBDLDIR}.${ML_}/
    
    # MLs BDS
    :0
    * ? echo "${ML}" | egrep "bds"
    ${MLBDSDIR}.${ML_}/
    
    # MLs Gala
    :0
    * ? echo "${ML}" | egrep "(gala|geec)"
    ${MLGALADIR}.${ML_}/
    
    # MLs des clubs
    :0
    * ? (grep "^${ML}$" ${CONFIGDIR}/ML_clubs) || (echo "${ML}" | egrep '^club-')
    ${MLCLUBSDIR}.${ML_}/
    
    #################################################################
    ##                  Gestion des MLs de promo                   ##
    #################################################################
    :0
    * ? echo "${ML}" | egrep '^(ens-|a\.coeur)'
    ${MLPROMODIR}.${ML_}/
    
    #################################################################
    ##                    Gestion des MLs perso                    ##
    #################################################################
    :0
    * ? grep "^${ML}$" ${CONFIGDIR}/ML_perso
    ${MLPERSODIR}.${ML_}/
    
    # Si on est tombés sur un ML non-répertoriée
    :0
    ${MLCAMPUSDIR}.${MLFAILSUFFIX}.${ML_}/
  }
  
  #################################################################
  ##             Gestion des mailing-listes FedeRez              ##
  #################################################################
  :0
  * ^List-Id:.*federez.net
  {
    # On veut ne garder que le nom de la ML sans le nom de domaine
    ML=`echo "${ML}" | sed 's/\(\.lists\)\?\.federez\.net//'`
    # On prend garde à ne pas créer un sous-dossier
    # si jamais le List-Id contient un . ou un espace
    ML_=`echo "${ML}" | sed 's/\(\.\| \)/_/g'`
    
    # Gestion de la ML admin
    :0
    * ^List-Id:.*admin
    {
    :0
    * ^Subject:.*Logwatch for.*federez\.net
    ${FEDEREZLOGWATCHDIR}/
    
    :0
    * ^To:.*logcheck
    ${FEDEREZLOGCHECKDIR}/
    
    :0
    * ^Subject:.*Debian package update
    ${FEDEREZDEBIANDIR}/
    
    :0
    * ^From:.*federezpasswords
    ${FEDEREZPASSWORDSDIR}/
    
    :0
    * ^From:.*support@ovh.com
    ${FEDEREZOVHDIR}/
    
    :0
    ${FEDEREZADMINDIR}/
    }
    
    :0
    ${FEDEREZDIR}.${ML_}/
  }
  
  #################################################################
  ##              Gestion des autres mailing-listes              ##
  #################################################################
  # On récupère le nom de domaine et le nom de la ML
  # Le nom de domaine, c'est le mot (sans .) qui précède le TLD
  DOMAIN=`echo "${ML}" | sed 's/.*\.\([^\.]\+\)\.[^\.]\+$/\1/'`
  # On ne sait jamais ce qu'on peut rencontrer…
  DOMAIN_=`echo "${DOMAIN}" | sed 's/ /_/g'`
  # On vire le domain et le TLD
  # On vire .list ou .lists si c'est la composante la plus à droite
  # du subdomain
  # On prend garde à ne pas créer un sous-dossier
  # si jamais le List-Id contient un . ou un espace
  ML_=`echo "${ML}" | sed 's/\.[^\.]\+\.[^\.]\+$//;s/\.lists\?$//;s/\(\.\| \)/_/g'`
  :0
  ${MLDIR}.${DOMAIN_}.${ML_}/
}

#~# # Fichier de règles de faible priorité à personnaliser
#~# INCLUDERC="${CONFIGDIR}/custom.final.rules"