%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/DataDirectoriesProtectedPath.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; /** * @since 10.0.4 */ final class DataDirectoriesProtectedPath extends AbstractRequirement { /** * Constants defining directories to check. * * @var string[] */ private $directories_constants; /** * Constant defining variable root directory. * * @var string */ private $var_root_constant; /** * GLPI root directory. * * @var string */ private $glpi_root_directory; /** * @param array $directories_constants Constants defining directories to check. * @param string $var_root_constant Constant defining variable root directory. * @param string $glpi_root_directory Web root directory. */ public function __construct( array $directories_constants, string $var_root_constant = 'GLPI_VAR_DIR', string $glpi_root_directory = GLPI_ROOT ) { parent::__construct( __('Safe path for data directories'), __('GLPI data directories should be placed outside web root directory. It can be achieved by redefining corresponding constants. See installation documentation for more details.'), true, true ); $this->directories_constants = $directories_constants; $this->var_root_constant = $var_root_constant; $this->glpi_root_directory = $glpi_root_directory; } protected function check() { $glpi_root_realpath = realpath($this->glpi_root_directory); $missing_directories = []; $unsafe_directories = []; $var_root_directory = constant($this->var_root_constant); $var_root_realpath = realpath($var_root_directory); if (!is_dir($var_root_directory)) { $missing_directories[$this->var_root_constant] = $var_root_directory; } elseif (str_starts_with($var_root_realpath . DIRECTORY_SEPARATOR, $glpi_root_realpath . DIRECTORY_SEPARATOR)) { $unsafe_directories[$this->var_root_constant] = $var_root_directory; } foreach ($this->directories_constants as $directory_constant) { $directory = constant($directory_constant); $realpath = realpath($directory); if (!is_dir($directory)) { $missing_directories[$directory_constant] = $directory; continue; } if (str_starts_with($realpath . DIRECTORY_SEPARATOR, $var_root_directory . DIRECTORY_SEPARATOR)) { // Ignore directory as it is included in variable root path that is already tested independently. continue; } if (str_starts_with($realpath . DIRECTORY_SEPARATOR, $glpi_root_realpath . DIRECTORY_SEPARATOR)) { $unsafe_directories[$directory_constant] = $directory; } } if (count($missing_directories) === 0 && count($unsafe_directories) === 0) { $this->validated = true; $this->validation_messages[] = __('GLPI data directories are located in a secured path.'); } else { $this->validated = false; if (count($missing_directories) > 0) { $this->validation_messages[] = __('The following directories do not exist and cannot be tested:'); foreach ($missing_directories as $constant => $path) { $this->validation_messages[] = sprintf('‣ "%s" ("%s")', $path, $constant); } } if (count($unsafe_directories) > 0) { $this->validation_messages[] = sprintf( __('The following directories should be placed outside "%s":'), $glpi_root_realpath ); foreach ($unsafe_directories as $constant => $path) { $this->validation_messages[] = sprintf('‣ "%s" ("%s")', $path, $constant); } } $this->validation_messages[] = sprintf( __('You can ignore this suggestion if your web server root directory is "%s".'), $glpi_root_realpath . DIRECTORY_SEPARATOR . 'public' ); } } }