CV

J’ai un serveur de messagerie Postfix/Dovecot administré par PostfixAdmin.

Je souhaite utiliser OwnCloud.

Le problème est de ne pas avoir deux bases d’utilisateurs, une pour OwnCloud et l’autre pour Postfix.

Les deux peuvent utiliser une base MySQL.

Premier essai

J’ai créé une application pour OwnCloud, user_imap, qui permet de s’authentifier sur le serveur Dovecot depuis OwnCloud. Le problème est que dans OwnCloud je devrais créer une méthode pour avoir la liste des utilisateurs du cloud, et qu’IMAP ne me fournit pas cette liste.

Solution proposée

Je remplace la table oc_users de OwnCloud par une vue sur les utilisateurs de le messagerie. Ainsi je gère les utilisateurs de la messagerie via PostfixAdmin. Dès qu’un utilisateur est créé, il peut se connecter sur OwnCloud.

Mes réglages :

Dans OwnCloud, je ne permet le partage qu’à l’intérieur d’un groupe. Ainsi les utilisateurs fraîchement créé dans PostfixAdmin peuvent centraliser leurs carnets d’adresses, agendas et fichiers dans le cloud mais pas partager (sauf par lien).

Ensuite, je les affecte au(x) groupe(s) depuis l’administration de OwnCloud pour qu’ils puissent partager leurs fichiers entre eux.

Implémentation
Les deux bases sont postfix_db et owncloud

  • Installer OwnCloud
  • Supprimer la table oc_users
  • Aller dans la base de postfix
    mysql> use postfix_db
    mysql> grant all privileges on owncloud.* to 'UTILISATEUR_POSTFIX_ADMIN'@'localhost' IDENTIFIED BY 'MOT_DE_PASSE';
    mysql> create view owncloud.oc_users as select username as uid,password from mailbox;

Modifier /3rdparty/phpass/PasswordHash.php
pour modifier la génération des mots de passe et la rendre compatible avec celle choisie dans PostfixAdmin.

function md5crypt($pw, $salt="", $magic="")
{
   if ($salt == "") {
     srand ((double) microtime ()*1000000);
     $salt = substr (md5 (rand (0,9999999)), 0, 8);
   }
   $password = system("openssl passwd -1 -salt $salt $pw");
   return $password;
}

        function HashPassword($password) {
               $pwd = substr($password, 0, strlen($password)-strlen(OC_Config::getValue(
'passwordsalt', '')));
                $pw = md5crypt($pwd);
                return $pw;
        }
        function CheckPassword($password, $stored_hash)
                $pwd = substr($password, 0, strlen($password)-strlen(OC_Config::getValue(
'passwordsalt', '')));
                $hash = crypt($pwd, $stored_hash);
                return $hash == $stored_hash;
        }