function isPDOextensionActive($loaded_modules) { return isExtensionActive("PDO", $loaded_modules); }
/** * Hook para ejecutar el paso 1 de la instalación. En este paso se deberá * comprobar el estado de la instalación de SSPHP, siendo necesario comprobar: * 1) PHP version >= 5.3.0. * 2) PHP extensions: * 2.1) Siempre requeridas: date, dom, hash, libxml, openssl, pcre, SPL, * zlib, mcrypt * 2.2) Para autenticar mediante un servidor LDAP: ldap * // 2.3) Para autenticar mediante un servidor RADIUS: radius(no es necesaria) * 2.4) Para salvar información de sesion en un servidor memcache: memcache * (Indicar que será necesario para entornos balanceados) * 2.5) Para usar bases de datos: * 2.5.1) Siempre: PDO * 2.5.2) Database driver: (mysql, pgsql, ...) * * Si no está activo ni LDAP ni BBDD => Error * Si está uno u otro => indicar que solo podrá usar authN según el activo * Si están los 2 => Palante * * Se deberán comprobar los permisos de los archivos que se deberán modificar * por el usuario * * @param array &$data Los datos a utilizar por las plantillas de tipo stepn * */ function idpinstaller_hook_step1(&$data) { $ssphpobj = $data['ssphpobj']; //Comprobamos la versión de PHP if (version_compare(PHP_VERSION, "5.3.0", ">=") === false) { $data['errors'][] = $ssphpobj->t('{idpinstaller:idpinstaller:general_error}'); $data['errors'][] = $ssphpobj->t('{idpinstaller:idpinstaller:step1_error_version}'); } else { //Continuamos comprobando las extensiones de PHP $extensions = array("date", "dom", "hash", "libxml", "openssl", "pcre", "SPL", "zlib", "mcrypt", "posix"); $failed_extensions = array(); $loaded_extensions = get_loaded_extensions(); foreach ($extensions as $extension) { if (!isExtensionActive($extension, $loaded_extensions)) { $failed_extensions[] = $extension; } } if (count($failed_extensions) > 0) { $data['errors'][] = $ssphpobj->t('{idpinstaller:idpinstaller:general_error}'); $data['errors'][] = $ssphpobj->t('{idpinstaller:idpinstaller:step1_error_extensions}') . implode(", ", $failed_extensions) . "."; } else { //Continuamos comprobando memcache (opcional) if (!isExtensionActive('memcached', $loaded_extensions)) { $data['warning'][] = $ssphpobj->t('{idpinstaller:idpinstaller:step1_memcached_error}'); } //Continuamos comprobando LDAP, Driver PDO $ldap = isLDAPextensionActive($loaded_extensions); $pdo = isPDOextensionActive($loaded_extensions); $modulos = $pdo ? isPDOextensionActive($loaded_extensions) : false; if ($ldap && $pdo && $modulos) { //Todo OK } else { if (!$ldap && !$pdo) { //Todo KO, me dan igual los módulos, porq pdo no está activo $data['errors'][] = $ssphpobj->t('{idpinstaller:idpinstaller:general_error}'); $data['errors'][] = $ssphpobj->t('{idpinstaller:idpinstaller:step1_any_data_source_error}'); } else { if (!$ldap && $pdo && $modulos) { //Solo PDO $aux = $ssphpobj->t('{idpinstaller:idpinstaller:step1_only_pdo}'); $aux .= " " . $ssphpobj->t('{idpinstaller:idpinstaller:step1_only_pdo_modules_list}'); $aux .= implode(", ", getPDOModulesActive($loaded_extensions)) . "."; $data['warning'][] = $aux; } else { if (!$ldap && $pdo && !$modulos) { //Necesita modulos $pdo $data['errors'][] = $ssphpobj->t('{idpinstaller:idpinstaller:general_error}'); $data['errors'][] = $ssphpobj->t('{idpinstaller:idpinstaller:step1_pdo_no_modules}'); } else { if ($ldap) { //Solo LDAP ($ldap y me da igual si $pdo o $modulos estan ok, //ya se que algo falla por que no entré en caso 1 $data['warning'][] = $ssphpobj->t('{idpinstaller:idpinstaller:step1_only_ldap}'); } } } } } $files = array("config/config.php", "config/authsources.php", "metadata/saml20-idp-hosted.php", "metadata/saml20-sp-remote.php", "modules"); $perms_ko = array(); $apachegroupname = getApacheGroup(); foreach ($files as $file) { $f = realpath(__DIR__ . "/../../../" . $file); if (!is_writable($f) || !is_readable($f)) { $actual_perms = fileperms($f); $new_perms = $actual_perms | 060; @($changed_perm = chmod($f, $new_perms)); @($changed_grp = chgrp($f, $apachegroupname)); if (!($changed_perm && $changed_grp)) { $perms_ko[] = $f; } } } if (count($perms_ko) > 0) { $aux = $ssphpobj->t('{idpinstaller:idpinstaller:step1_perms_ko}'); $aux .= "<ul style='margin-top:30px;'><li>" . implode("</li><li>", $perms_ko) . "</li></ul>"; $aux .= $ssphpobj->t('{idpinstaller:idpinstaller:step1_perms_ko2}'); if (function_exists('posix_getgrnam')) { $aux .= "<br/>" . $ssphpobj->t('{idpinstaller:idpinstaller:step1_perms_ko3}'); $filename = $perms_ko[0]; $username = getFileUsername($filename); $groupname = getApacheGroup(); $recursive = is_dir($filename) ? "-R" : ""; $aux .= "<pre>> chown {$recursive} " . $username . ":" . $groupname . " {$filename}\n> chmod {$recursive} g+rw " . $filename . "</pre>"; } $data['errors'][] = $aux; $data['errors'][] = $ssphpobj->t("{idpinstaller:idpinstaller:step1_remember_change_perms}"); } } } //Aquí se configuran los idiomas que estarán disponibles para SSPHP $confile = __DIR__ . '/../../../config/config.php'; include $confile; $config['language.available'] = ['es']; $res = @file_put_contents($confile, '<?php $config = ' . var_export($config, 1) . "; ?>"); if (count($data['errors']) == 0) { $data['info'][] = $ssphpobj->t('{idpinstaller:idpinstaller:step1_all_ok}'); } return true; }