%PDF- %PDF-
| Direktori : /var/www/projetos/suporte.iigd.com.br/src/System/Requirement/ |
| Current File : /var/www/projetos/suporte.iigd.com.br/src/System/Requirement/InstallationNotOverriden.php |
<?php
/**
* ---------------------------------------------------------------------
*
* GLPI - Gestionnaire Libre de Parc Informatique
*
* http://glpi-project.org
*
* @copyright 2015-2024 Teclib' and contributors.
* @copyright 2003-2014 by the INDEPNET Development Team.
* @licence https://www.gnu.org/licenses/gpl-3.0.html
*
* ---------------------------------------------------------------------
*
* LICENSE
*
* This file is part of GLPI.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* ---------------------------------------------------------------------
*/
namespace Glpi\System\Requirement;
use Config;
use DBmysql;
use FilesystemIterator;
use Glpi\Toolbox\VersionParser;
final class InstallationNotOverriden extends AbstractRequirement
{
/**
* Database instance.
*
* @var DBmysql
*/
private $db;
/**
* Version directory.
*
* @var string
*/
private $version_dir;
public function __construct(?DBmysql $db, string $version_dir = GLPI_ROOT . '/version')
{
parent::__construct(
__('Previous GLPI version files detection'),
__('The presence of source files from previous versions of GLPI can lead to security issues or bugs.'),
false,
false,
null // $out_of_context will be computed on check
);
$this->db = $db;
$this->version_dir = $version_dir;
}
protected function check()
{
$version_files_count = 0;
if (is_dir($this->version_dir)) {
$file_iterator = new FilesystemIterator($this->version_dir);
$version_files_count = iterator_count($file_iterator);
}
if ($version_files_count == 0) {
// Cannot do the check.
// Indicating that `version` directory is missing would be useless, as it would probably incitate administrator
// to restore it, and it would result in a "false positive" type validation.
$this->out_of_context = true;
return;
}
$current_version_file = $this->version_dir . '/' . VersionParser::getNormalizedVersion(GLPI_VERSION, false);
if (!file_exists($current_version_file) || $version_files_count > 1) {
$this->validated = false;
$this->validation_messages[] = __("We detected files of previous versions of GLPI.");
$this->validation_messages[] = __("Please update GLPI by following the procedure described in the installation documentation.");
return;
}
$previous_version = null;
if (
$this->db instanceof DBmysql
// Ensure 'glpi_configs' tables exists and matches >= 0.85 schema
&& $this->db->tableExists(Config::getTable())
&& $this->db->fieldExists(Config::getTable(), 'name')
&& $this->db->fieldExists(Config::getTable(), 'value')
&& $this->db->fieldExists(Config::getTable(), 'context')
) {
$previous_version_res = $this->db->request(
[
'SELECT' => 'value',
'FROM' => Config::getTable(),
'WHERE' => [
'name' => 'version',
'context' => 'core',
],
]
);
$previous_version = $previous_version_res->current()['value'] ?? null;
if ($previous_version !== null) {
$previous_version = VersionParser::getNormalizedVersion($previous_version, false);
}
}
if ($previous_version === null || version_compare($previous_version, '10.0.6', '<')) {
// If previous version is unknown, validation will be mostly a "false positive" type validation.
// Cases corresponding to an unknown previous version:
// - new installation;
// - update from an empty directory (where DB config has not even been restored);
// - update from version < 0.85.
//
// If previous version is < 10.0.6, version file form previous version should not be available.
// In this case, we cannot detect presence of previous versions files.
$this->out_of_context = true;
return;
}
$this->validated = true;
$this->validation_messages[] = __('No files from previous GLPI version detected.');
}
}