msgbartop
Blog d'un développeur passionné de nouvelles technologies Web et de tout ce qui gravite autours. Petites préférences pour la POO, le PHP, le SQL, Javascript, Ajax et CSS.
msgbarbottom

26 août 11 Lister les adresses emails d’un nom de domaine sur une gentoo release 2 d’OVH

En attendant que je poste un article sur mon nouveau script de backup FTP prévue pour la release 2 d’OVH basée sur Gentoo je publie ici un petit script permettant de lister les adresses emails d’un nom de domaine sur cette distribution.

Le besoin :

C’est un besoin spécifique a seulement certaines entreprises, mais ça peut être pratique pour d’autres aussi, d’où ce billet :)
Le besoin est simple : Une dizaine d’utilisateurs ont besoin de connaitre uniquement les adresses emails et les mots de passe associés pour pouvoir répondre aux questions habituelles qu’ils reçoivent par téléphone ou par mail. Par exemple :

J’ai acheté un iphone, je suis chez à la boutique orange et le vendeur n’arrive pas à configurer ma boite mail. C’est quoi le mot de passe ??

Habituellement, la réponse ça serait

Je ne peux pas voir ton mot de passe. Je peux te le changer par contre. Je te met « 123456″ comme ça tu t’en souviendras…

Effectivement, les personnes ayant accès au désormais célèbre qmailadmin ne peuvent pas voir les mots de passe. Il n’y a qu’en SSH qu’on peut afficher le fichier « vpasswd » présent dans les répertoires /home/vpopmail/domains/le-domaine-en-question/vpasswd

Et l’ergonomie de qmailadmin … quand on fait une recherche sur un nom on est pas sur de le trouver. Le plus sur étant de se taper la liste des adresses dans l’ordre et encore ! Ci-dessous, un screen d’une recherche sur le mot « denis ». Alors que je sais que 3 adresses comporte ce mot :

recherche dans qmailadmin

Exemple d'une recherche dans qmailadmin


Aucun résultat ne contient le mot denis !

Revenons à notre petit exemple. Une heure plus tard, nouveau coup de téléphone :

Je viens de rentrer au bureau. Merci pour mon téléphone mais maintenant, j’ai mon outlook qui me met un message comme quoi le mot de passe n’est pas bon. Je fais quoi?

Ca parait ridicule je sais, mais si vous saviez combien de fois j’ai vu ce scénario se répéter

Donc mon but c’est de résoudre 2 problèmes :

  • Lister facilement les adresses emails via une administration faite maison
  • Donner l’accès aux mots de passe aux personnes que je le veux en controllant les accès depuis mon administration

Je ne vais pas détailler ici comment je monte une administration et comment je gère les différents droits de lecture / d’écriture sur chaque page. Je ne vais « que » donner le script permettant de lister les adresses emails et les alias de redirections et de les insérer dans deux tables MySQL. Après, ça sera a vous de gérer la sécurité des accès à cette table. Personnellement, j’ai fais une base de données dédiée avec un user ayant le minimum d’accès possible et un mot de passe de 3km de long :)

La solution

Pour faire simple, j’ai juste crée 2 tables. Le script shell tournant toutes les 10 minutes pour actualiser ces tables.
En PHP j’ai ensuite monté un mini moteur de recherche / filtrage pour afficher les résultats et les filtrer suivant les recherches.

Les tables MYSQL

Voici donc le schémas de ces tables :

--
-- Structure de la table `emails__alias`
--

CREATE TABLE IF NOT EXISTS `emails__alias` (
  `alias` varchar(250) NOT NULL,
  `redirection` varchar(250) NOT NULL,
  `date_verif` datetime NOT NULL,
  KEY `alias` (`alias`,`redirection`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Structure de la table `emails__comptes`
--

CREATE TABLE IF NOT EXISTS `emails__comptes` (
  `adresse` varchar(250) NOT NULL,
  `pass` varchar(250) NOT NULL,
  `nom` varchar(100) NOT NULL,
  `blocage` int(5) NOT NULL,
  `quota` varchar(20) NOT NULL,
  `date_verif` datetime NOT NULL,
  KEY `adresse` (`adresse`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Le script Shell

#!/bin/sh
#
# SCRIPT LISTANT LES COMPTES MAILS ET ALIAS D'UN NOM DE DOMAINE SUR LE SERVEUR
#
# CONFIGURATIONS
DOMAINE="mon-domaine.com"
TMP_REQ="/root/mes_scripts/tmp_req_emails.sql"
SQL_BIN="/usr/bin/mysql"
SQL_HOST="localhost"
SQL_DB="votre_bdd"
SQL_LOGIN="votre_login"
SQL_PASS="votre_pass"

# on cree le fichier temporaire qui contiendra les requetes SQL
>$TMP_REQ

## ON AJOUTE LES REQUETES QUI SUPPRIMERONT LES COMPTES EMAILS ET LES ALIAS DES TABLES
echo "TRUNCATE TABLE emails__comptes;" >> $TMP_REQ;
echo "TRUNCATE TABLE emails__alias;" >> $TMP_REQ;

### LISTER LES COMPTES EMAILS (adresses reelles, pas les alias)
###

# fonction remplacant les quotes par des espaces :
function stripquote(){
   echo "$1" | sed "s/'/\\ /g"

}

# on boucle sur le fichier de pass pour generer des requetes SQL
cd /home/vpopmail/domains/$DOMAINE/
while read ligne
do
        IFS=":"
        set -- $ligne
        adresse=$(stripquote $1"@"$DOMAINE)
        blocage=$4
        nom=$(stripquote $5)
        quota=$7
        pass=$(stripquote $8)
        unset IFS

        # construction de la requete SQL
        #echo "adresse="$adresse" blocage="$blocage" nom="$nom" quota="$quota" pass="$pass
        req="INSERT INTO emails__comptes (adresse, pass, nom, blocage, quota, date_verif) VALUES ('"$adresse"', '"$pass"', '"$nom"', '"$blocage"', '"$quota"', NOW());";
        echo $req >> $TMP_REQ;

done < vpasswd

### LISTER LES ALIAS ET REDIRECTIONS
# fonction remplacant les : par des .
function doubletoonepoint(){
   echo "$1" | sed "s/:/\\./g"
}
function noqmail(){
   echo "$1" | sed '/.qmail-/!d; s///'
}

cd "/home/vpopmail/domains/"$DOMAINE"/"
for ligne in `find .qmail-* ! -name .qmail-default -type f -print`
do

        # on split sur le nom du fichier pour concactener l'adresse
        adresse=$(doubletoonepoint $(noqmail $ligne))"@"$DOMAINE
        fichier=$ligne
        #echo "Adresse :"$adresse" FICHIER="$fichier

        # on recupere le contenu du fichier d'alias
        while read alias
        do
                # pour ne lister que les emails, on teste si la ligne commence par &
                if [ ${alias:0:1} = '&' ];then
                        redirection=${alias#\&}
                        req="INSERT INTO emails__alias (alias, redirection, date_verif) VALUES ('"$adresse"','"$redirection"', NOW());"
                        #echo $adresse" redirige vers "$redirection
                        echo $req >> $TMP_REQ
                fi
        done < $fichier

done;

# execution des requetes SQL
$SQL_BIN -u$SQL_LOGIN -p$SQL_PASS -D$SQL_DB -h$SQL_HOST < $TMP_REQ

# suppression du fichier temporaire
rm $TMP_REQ;

Voila, le script est simple. Les tables SQL ne sont pas optimisées mais ça suffit amplement. Ce script peut aussi être utile à toute personne voulant connaitre la liste de toutes les adresses emails qu’il héberge sur une gentoo release 2 sans pour autant connaitre le mot de passe.
Il n’y aura plus qu’a personnaliser les variables de configuration en tete de script puis de le placer dans une tache CRON tournant à la fréquence que vous le voulez.

@ la prochaine ;)

Reader's Comments

  1.    

    Petite précision sur mon exemple de coups de téléphone. J’ai oublié de parler du classique fichier excel listant les adresses emails et les mots de passe qui normalement devrait servir pour répondre à la question posée.

    Fichier excel alimenté manuellement par toutes les personnes pouvant ajouter / éditer ou supprimer une adresse email… enfin quand ils pensent à le mettre à jour.

    Avec cette solution, on peut même le générer automatiquement ce tableau excel :)

Leave a Comment

corel 2000

corel 2000 serial

cs5 serialz

cs5 serialz free

serial winzip 11

serial winzip 11 key

corel dvd moviefactory 6

corel dvd moviefactory 6 downloads

serial corel draw 11

serial corel draw 11 serials

free corel photoshop download

free corel photoshop download keygen

free winrar download for xp

download winrar for xp for free

winrar 3 download

winrar 3 download freedownload

download winrar free windows 7

download winrar free windows 7 crack

free corel downloads

free corel downloads cracked