SysPass php 7.2

De EjnTricks

SysPass n'était pas compatible sur la version 7.1 et 7.2 de php. Lors de l'installation de la version 2.1.16 sur une machine Ubuntu 18.04 avec la version 7.2 de php, l'application semble fonctionner moyennant deux modifications, faisant l'objet de l'anomalie 808.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Folder-icon.png Préparation environnement

Afin de conserver le paquet original, un copie est réalisée.

#sudo cp -R -p /var/opt/syspass/2.1.16.18061901 /var/opt/syspass/2.1.16.18061901.1


Process-icon.png Modifications

La première modification consiste à authoriser une version de php supérieure à 7.0. Dnas le cadre de cette modification, la limite est fixée à 7.3, puisque la version utilisée est 7.2.

Pour cela, il faut modifier la fonction checkPhpVersion dans le fichier inc/SP/Util/Checks.class.php.

    /**
     * Comprobar la versión de PHP.
     *
     * @return bool
     */
    public static function checkPhpVersion()
    {
        return version_compare(PHP_VERSION, '5.6.0', '>=') && version_compare(PHP_VERSION, '7.3.0') === -1;
        // return version_compare(PHP_VERSION, '5.6.0', '>=') && version_compare(PHP_VERSION, '7.1.0') === -1;
    }


Une fois actif, un bug se produit lors de l'affichage des comptes. Le message suivant est affiché dans les traces sur serveur eb.

PHP Fatal error:  Uncaught TypeError: Argument 1 passed to SP\\Core\\Session::setAccountColor() must be of the type array, string given, called in 
.../inc/SP/Account/AccountSearch.class.php on line 664 and defined in .../inc/SP/Core/Session.class.php:436
Stack trace:
#0  .../inc/SP/Account/AccountSearch.class.php(664): SP\\Core\\Session::setAccountColor('  #')
#1  .../inc/SP/Account/AccountSearch.class.php(333): SP\\Account\\AccountSearch->pickAccountColor(2)
#2  .../inc/SP/Controller/AccountSearchController.class.php(196): SP\\Account\\AccountSearch->processSearchResults()
#3  .../inc/SP/Controller/AccountSearchController.class.php(398): SP\\Controller\\AccountSearchController->getSearch()
#4  .../ajax/ajax_getContent.php(75): SP\\Controller\\AccountSearchController->doAction()
#5 {main}\n  thrown in /var/opt/syspass/2.1.16.18061901/inc/SP/Core/Session.class.php on line 436

Il se trouve qu'une variable n'est pas initialiser en tant que tableau lors de la première utilisation. Afin de remédier à ce problème une recherche a été réaliser sur l'utilisation de la fonction setAccountColor et getAccountColor du fichier inc/SP/Core/Session.class.php.

Finalement, il a été opté pour modifier la fonction getAccountColor afin de vérifier si le tableau doit être préalablement initialisé. La modification est la suivante.

    /**
     * Devolver el color asociado a una cuenta
     *
     * @return string
     */
    public static function getAccountColor()
    {
        $tmpAccountColor = self::getSessionKey('accountcolor');
        if (!is_array($tmpAccountColor)
        ) {
            $tmpAccountColor = array();
            self::setAccountColor($tmpAccountColor);
        }
        return $tmpAccountColor;
        // return self::getSessionKey('accountcolor');
    }

Dans le cas où le variable retournée par self::getSessionKey('accountcolor') n'est pas un tableau, celui-ci est alors initialisé et stocké dans la session.


Start-icon.png Activation

Il faut ensuite modifié le lien mis en place.

#sudo rm /var/opt/syspass/syspass
#sudo ln -s /var/opt/syspass/2.1.16.18061901.1 /var/opt/syspass/syspass
#sudo chown -h www-data:www-data /var/opt/syspass/syspass