[AlternC-dev] Sarge et Postfix

Retour à l'archive de la liste
Le site d'AlternC
Google Custom Search

Benjamin Sonntag benjamin at alternc.org
Mer 12 Jan 20:01:18 CET 2005


denis wrote:

>Salut,
>
>Est-ce que quelqu'un a déjà eu ce problème en testing:
>
>Jan 12 19:31:19 localhost postfix/smtpd[14798]: sql_select option
>missing
>  
>
Ca ça veut dire que tu as un fichier
/etc/postfix/sasl/smtpd.conf
qui contient "pwcheck_method: auxprop"
mais qui n'a pas "sql_select:"

Le smtpd.conf typique pour faire marcher sasl en sarge est :

pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: plain login
sql_engine: mysql
sql_hostnames: localhost
sql_user: sysusr
sql_passwd: toto
sql_database: system
sql_select: select sasl from mail_users where alias='%u@%r' or alias='%u'

De plus, il faut apt-get install de libsasl2-modules-sql et libsasl2

Sauf que pour cela il faut que le champ "sasl" de la table "mail_users" 
existe et soit le mot de passe du mail pop en clair ...
J'ai une version patchée pour m_mail.php  :


Le code en fin de message est la version patchée des 3 fonctions pop.

@+

Benjamin





  /* ----------------------------------------------------------------- */
  /** Crée le compte pop $mail@$dom, avec pour mot de passe $pass
   * @param string $mail Compte email à créer en pop
   * @param string $dom Domaine sur lequel on crée le compte email
   * @param string $pass Mot de passe du compte email.
   * @return boolean TRUE si le compte pop a bien été créé, FALSE si une 
erreur est survenur
   * @access private
   */
  function _createpop($mail,$dom,$pass) {
    global $err,$cuid,$db;
    $err->log("mail","_createpop",$mail."@".$dom." / ".$pass);
    $m=substr($mail,0,1);
    $gecos=$mail;
    if (!$mail) {
      // Cas du CATCH-ALL
      $gecos="Catch-All";
      $m="_";
    }
    $db->query("INSERT INTO mail_users (uid,alias,path,password,sasl) 
VALUES 
('$cuid','".$mail."_".$dom."','/var/alternc/mail/".$m."/".$mail."_".$dom."','"._md5cr($pass)."','$pass');");
    $db->query("INSERT INTO mail_users (uid,alias,path,password,sasl) 
VALUES 
('$cuid','".$mail."@".$dom."','/var/alternc/mail/".$m."/".$mail."_".$dom."','"._md5cr($pass)."','$pass');");
    $db->query("INSERT INTO mail_alias (mail,alias) VALUES 
('".$mail."_".$dom."','/var/alternc/mail/".$m."/".$mail."_".$dom."/Maildir/');");

    $f=fopen("/var/lib/squirrelmail/data/".$mail."_".$dom.".pref","wb");
    fputs($f,"email_address=$mail@$dom\nchosen_theme=default_theme.php\n");
    fclose($f);
    $f=fopen("/var/lib/squirrelmail/data/".$mail."@".$dom.".pref","wb");
    fputs($f,"email_address=$mail@$dom\nchosen_theme=default_theme.php\n");
    fclose($f);
    exec("/usr/lib/alternc/mail_add ".$mail."_".$dom." ".$cuid);
    //    exec("/bin/echo ".escapeshellarg($pass)." | 
/usr/sbin/saslpasswd -u postfix -c -p ".$mail."@".$dom);
    //    exec("/bin/echo ".escapeshellarg($pass)." | 
/usr/sbin/saslpasswd -u postfix -c -p ".$mail."_".$dom);
    return true;
  }

  /* ----------------------------------------------------------------- */
  /** Met à jour un compte pop existant
   * @param string $mail mail à modifier
   * @param string $dom Domaine dont on modifie le compte pop
   * @param string $pass Nouveau mot de passe.
   * @return boolean TRUE si le compte pop a bien été modifié, FALSE si 
une erreur s'est produite.
   * @access private
   */
  function _updatepop($mail,$dom,$pass) {
    global $err,$cuid,$db;
    $err->log("mail","_updatepop",$mail."@".$dom." / ".$pass);
    $m=substr($mail,0,1);
    $gecos=$mail;
    $db->query("UPDATE mail_users SET sasl='$pass', 
password='"._md5cr($pass)."' WHERE ( alias='". $mail."_".$dom."' OR 
alias='". $mail."@".$dom."' ) AND uid='$cuid';");
    //    exec("/bin/echo ".escapeshellarg($pass)." | 
/usr/sbin/saslpasswd -u postfix -p ".$mail."@".$dom);
    //    exec("/bin/echo ".escapeshellarg($pass)." | 
/usr/sbin/saslpasswd -u postfix -p ".$mail."_".$dom);
    return true;
  }

  /* ----------------------------------------------------------------- */
  /** Détruit le compte pop $mail@$dom.
   * @param string $mail Email dont on souhaite détruire le compte pop
   * @param string $dom Domaine dont on souhaite détuire le compte pop.
   * @return boolean TRUE si le compte pop a bien été détruit, FALSE si 
une erreur s'est produite.
   * @access private
   */
  function _deletepop($mail,$dom) {
    global $err,$cuid,$db;
    $err->log("mail","_deletepop",$mail."@".$dom);
    $db->query("DELETE FROM mail_users WHERE uid='$cuid' AND (  
alias='". $mail."_".$dom."' OR alias='". $mail."@".$dom."' ) ;");
    $db->query("DELETE FROM mail_alias WHERE mail='".$mail."_".$dom."';");
    @unlink("/var/lib/squirrelmail/data/".$mail."_".$dom.".pref");
    @unlink("/var/lib/squirrelmail/data/".$mail."_".$dom.".abook");
    @unlink("/var/lib/squirrelmail/data/".$mail."@".$dom.".pref");
    @unlink("/var/lib/squirrelmail/data/".$mail."@".$dom.".abook");
    exec("/usr/lib/alternc/mail_del ".$mail."_".$dom);
    //   exec("/usr/sbin/saslpasswd -u postfix -d ".$mail."@".$dom);
    //    exec("/usr/sbin/saslpasswd -u postfix -d ".$mail."_".$dom);
    return true;
  }




Plus d'informations sur la liste de diffusion Dev