Projet

Général

Profil

Tâche #34559

Scénario #34558: EOLE 2.9 : Roundcube doit être fonctionnel

La version de roundcube installée ne semble pas compatible avec php 8.1 sur EOLE 2.9.0

Ajouté par Benjamin Bohard il y a plus d'un an. Mis à jour il y a plus d'un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Début:
06/09/2022
Echéance:
% réalisé:

100%

Restant à faire (heures):
0.0

Description

Il semble qu’une modification de la gestion de la variable _GLOBALS (passage en lecture seule) empêche la version installée de roundcube de fonctionner.

Le support complet pour php 8.1 est annoncé pour la version 1.6.0 sur la forge de roundcube (https://github.com/roundcube/roundcubemail/releases/tag/1.6.0)

La version installée via roundcube-apps est la 1.4.3 et la version proposée par la distribution (peut-être sans les patchs nécessaires) est la 1.5.0.


Demandes liées

Lié à Distribution EOLE - Scénario #34654: EOLE 2.9 : Finaliser le découplage client single sign-on et server (eole-sso ou LemonLDAP-NG actuellement) Terminé (Sprint) 06/09/2022 01/01/2024

Révisions associées

Révision 6d178587 (diff)
Ajouté par Benjamin Bohard il y a plus d'un an

Adaptation pour roundcube 1.6.0

Ref #34559

Révision a6ca26e4 (diff)
Ajouté par Benjamin Bohard il y a plus d'un an

Passage à la version 1.6.0 de roundcube (Ref #34559)

Révision e4e7f3fb (diff)
Ajouté par Benjamin Bohard il y a plus d'un an

La version du protocole est une chaîne de caractères.

Ref #34559

Révision 96d90efc (diff)
Ajouté par Benjamin Bohard il y a plus d'un an

Écouter sur le port 587.

Ref #34559

Historique

#1 Mis à jour par Benjamin Bohard il y a plus d'un an

  • Tâche parente mis à #34558

#2 Mis à jour par Benjamin Bohard il y a plus d'un an

  • Statut changé de Nouveau à En cours

#3 Mis à jour par Benjamin Bohard il y a plus d'un an

  • Assigné à mis à Benjamin Bohard

#4 Mis à jour par Benjamin Bohard il y a plus d'un an

Certains avertissements qui étaient donné dans les versions précédentes lèvent maintenant des erreurs (le comportement précédent consistait à considérait qu’une variable inexistante devait être évaluée comme une chaîne de caractères).

On trouve peut-être le problème dans le fichier de configuration de CAS0 et dans le plugin cas_authentication.

En 2.8.1 :

PHP Warning:  Use of undefined constant RCUBE_INPUT_POST - assumed 'RCUBE_INPUT_POST' (this will throw an Error in a future version of PHP) in /var/www/html/roundcube/plugins/cas_authentication/cas_authentication.php on line 114

En 2.9.0 :

PHP Fatal error:  Uncaught Error: Undefined constant "RCUBE_INPUT_POST" in /var/www/html/roundcube/plugins/cas_authentication/cas_authentication.php:114

En l’occurrence la constante RCUBE_INPUT_POST n’existe effectivement pas mais semble avoir été remplacée par INPUT_POST dans le fichier roundcube/program/lib/Roundcube/rcube_utils.php.

L’autre problème qui semble apparenté est lié à l’utilisation de la fonction method_exists qui devrait prendre en argument une instance d’objet ou le nom de la classe. Il semble que dans cas_authentication, on doive utiliser le nom de classe parce qu’on ne dispose pas d’une instance.

Le plugin cas_authentication et le template cas.inc.php nécessitent donc des adaptations pour la montée de version de roundcube.

[0] dans le template cas.inc.php, la variable creole eolesso_cas_serverversion n’est pas entre quote. Certaines applications l’utilisent vraiment comme une variable (on trouve une initialisation de CAS_VERSION_2_0 (valeur possible de la variable creole eolesso_cas_serverversion) dans les applications grr et glpi par exemple). Les autres ne semblent pas l’utiliser comme une variable et php la considérait comme une chaîne de caractères.

#5 Mis à jour par Benjamin Bohard il y a plus d'un an

Après correction du template et du plugin cas_authentication, problème de connexion au serveur imap.

sept. 21 13:47:48 scribe imapd[49906]: Connection, ip=[::ffff:192.168.0.26], port=[60154]
sept. 21 13:47:48 scribe authdaemond[49877]: received auth request, service=imap, authtype=login
sept. 21 13:47:48 scribe authdaemond[49877]: authpipe: trying this module
sept. 21 13:47:48 scribe authdaemond[49877]: closing pipe
sept. 21 13:47:48 scribe authdaemond[49877]: forking new one
sept. 21 13:47:48 scribe authdaemond[49877]: attempting to fork
sept. 21 13:47:48 scribe authdaemond[49877]: Pipe auth. started Pipe-program (pid 50415)
sept. 21 13:47:48 scribe authdaemond[49877]: new pipe has in: 8, out: 7
sept. 21 13:47:48 scribe authdaemond[49877]: executing /etc/courier/authProg
sept. 21 13:47:48 scribe authdaemond[49877]: PHP Deprecated:  phpCAS autoloader is deprecated. Install phpCAS using composer instead. in /usr/share/php/CAS/CAS/Autoload.php on line 86
sept. 21 13:47:48 scribe authdaemond[49877]: PHP Warning:  "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /usr/share/php/CAS/eoleclient.php on line 264
sept. 21 13:47:48 scribe authdaemond[49877]: PHP Warning:  "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /usr/share/php/CAS/eoleclient.php on line 311
sept. 21 13:47:48 scribe authdaemond[49877]: PHP Warning:  Constant __CAS_FOLDER already defined in /etc/courier/authProg on line 22
sept. 21 13:47:48 scribe authdaemond[49877]: closing pipe
sept. 21 13:47:48 scribe authdaemond[49877]: trying to wait for child (WNOHANG) (pid 50415)
sept. 21 13:47:48 scribe authdaemond[49877]: sleep 2 seconds and try again to wait for pid 50415
sept. 21 13:47:50 scribe authdaemond[49877]: authpipe: TEMPFAIL - no more modules will be tried
sept. 21 13:47:50 scribe imapd[49906]: LOGIN FAILED, user=admin, ip=[::ffff:192.168.0.26], port=[60154]
sept. 21 13:47:50 scribe imapd[49906]: authentication error: Input/output error

Le programme semble s’arrêter lors de l’instanciation d’un objet EoleCASClient (closing pipe).

   17 24.687061336    127.0.0.1 → 127.0.0.1    LDAP 111 bindRequest(53) "cn=reader,o=gouv,c=fr" simple 
   18 24.687319679    127.0.0.1 → 127.0.0.1    LDAP 70 bindResponse(53) invalidCredentials

Par contre, en utilisant les identifiants contenus dans /etc/courier/authprog.conf :

   39 121.150565795    127.0.0.1 → 127.0.0.1    LDAP 147 bindRequest(1) "cn=reader,o=gouv,c=fr" simple 
   40 121.150571724    127.0.0.1 → 127.0.0.1    TCP 56 389 → 59922 [ACK] Seq=1 Ack=92 Win=65408 Len=0
   41 121.150890198    127.0.0.1 → 127.0.0.1    LDAP 70 bindResponse(1) success

#6 Mis à jour par Benjamin Bohard il y a plus d'un an

Incohérence dans le format de la version de protocole CAS passé : CAS_VERSION_2_0 vs 2.0

#7 Mis à jour par Benjamin Bohard il y a plus d'un an

[27-Sep-2022 16:30:11 +0200]: PHP Error: Failed to load plugin file /var/www/html/roundcube/plugins/filters/filters.php in /var/www/html/roundcube/program/lib/Roundcube/rcube_plugin_api.php on line 193 (POST /roundcube/?_task=mail&_unlock=loading1664289011790&_framed=1&_action=send)
[27-Sep-2022 16:30:11 Europe/Paris] PHP Deprecated:  preg_match(): Passing null to parameter #2 ($subject) of type string is deprecated in /usr/share/php/CAS/CAS/Client.php on line 1041
[27-Sep-2022 16:30:11 Europe/Paris] PHP Warning:  stream_socket_client(): Unable to connect to 192.168.0.26:587 (Connection refused) in /var/www/html/roundcube/vendor/pear/net_socket/Net/Socket.php on line 159
[27-Sep-2022 16:30:11 +0200]: <73cd7j2i> PHP Error: Connection refused (POST /roundcube/?_task=mail&_unlock=loading1664289011790&_framed=1&_action=send)
[27-Sep-2022 16:30:11 +0200]: <73cd7j2i> PHP Error: Failed to connect socket: Connection refused (POST /roundcube/?_task=mail&_unlock=loading1664289011790&_framed=1&_action=send)
[27-Sep-2022 16:30:11 +0200]: <73cd7j2i> SMTP Error: Connection failed:  (Code: -1) in /var/www/html/roundcube/program/lib/Roundcube/rcube.php on line 1795 (POST /roundcube/?_task=mail&_unlock=loading1664289011790&_framed=1&_action=send)

#8 Mis à jour par Benjamin Bohard il y a plus d'un an

rcube_utils::parse_host_uri($smtp_host, 587, 465)

renvoie le port 192.168.0.26:587 mais de service smtp n’écoute que sur les ports 25 et 465.
    public static function parse_host_uri($host, $plain_port = null, $ssl_port = null)
    {
        if (strpos($host, 'unix://') === 0) {
            return [$host, 'unix', -1];
        }

        $url    = parse_url($host);
        $port   = $plain_port;
        $scheme = null;

        if (!empty($url['host'])) {
            $host   = $url['host'];
            $scheme = $url['scheme'] ?? null;

            if (!empty($url['port'])) {
                $port = $url['port'];
            }
            else if (
                $scheme
                && $ssl_port
                && ($scheme === 'ssl' || ($scheme != 'tls' && $scheme[strlen($scheme) - 1] === 's'))
            ) {
                // assign SSL port to ssl://, imaps://, ldaps://, but not tls://
                $port = $ssl_port;
            }
        }

        return [$host, $scheme, $port];
    }

La configuration spécifie
$config['default_host'] = '192.168.0.26';
$config['smtp_server'] = 'tls://%h';
$config['smtp_port'] = 25;

En conclusion, il semble que roundcube utilise le port 587 lorsqu’il utilise tls (et non 25). On peut ajouter le port 587 à la liste des ports d’écoute d’exim4 ou alors modifier en dur dans le code de roundcube le port plain_port.

#9 Mis à jour par Benjamin Bohard il y a plus d'un an

  • Statut changé de En cours à À valider

#10 Mis à jour par Benjamin Bohard il y a plus d'un an

  • % réalisé changé de 0 à 100

#11 Mis à jour par Benjamin Bohard il y a plus d'un an

  • Lié à Scénario #34654: EOLE 2.9 : Finaliser le découplage client single sign-on et server (eole-sso ou LemonLDAP-NG actuellement) ajouté

#12 Mis à jour par Ludwig Seys il y a plus d'un an

  • Statut changé de À valider à Résolu

#13 Mis à jour par Joël Cuissinat il y a plus d'un an

  • Statut changé de Résolu à Fermé
  • Restant à faire (heures) mis à 0.0

Formats disponibles : Atom PDF