From 53dfc633e11a3adf1c6111a4a16db1127ec352a4 Mon Sep 17 00:00:00 2001 From: adriangmemorandum Date: Wed, 8 Aug 2018 18:32:54 +0200 Subject: [PATCH 1/9] =?UTF-8?q?Correci=C3=B3n=20enlaces=20rotos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hooks/hook_step7.php | 2 +- hooks/hook_step9.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hooks/hook_step7.php b/hooks/hook_step7.php index 1c68cfd..716728c 100644 --- a/hooks/hook_step7.php +++ b/hooks/hook_step7.php @@ -231,7 +231,7 @@ function idpinstaller_hook_step7(&$data) { $data['errors2'][] = $data['ssphpobj']->t("{idpinstaller:idpinstaller:step1_remember_change_perms}"); } if (count($data['errors2']) == 0) { - $url_meta = 'http://' . $_SERVER['HTTP_HOST'] . substr($_SERVER['SCRIPT_NAME'], 0, -24) . "saml2/idp/metadata.php?output=xhtml"; + $url_meta = SimpleSAML\Utils\HTTP::getBaseURL() . "saml2/idp/metadata.php?output=xhtml"; $data['info'][] = $data['ssphpobj']->t('{idpinstaller:idpinstaller:step7_all_ok}'); $data['info'][] = $data['ssphpobj']->t('{idpinstaller:idpinstaller:step7_all_info_extra}') . " " . $data['ssphpobj']->t('{idpinstaller:idpinstaller:step7_here}') . ""; } else { diff --git a/hooks/hook_step9.php b/hooks/hook_step9.php index 4f6da60..e484457 100644 --- a/hooks/hook_step9.php +++ b/hooks/hook_step9.php @@ -90,10 +90,10 @@ function idpinstaller_hook_step9(&$data) { $aux .= "
>" . $idpr_path . "
"; $data['info'][] = $aux; - $url_meta = 'http://'.$_SERVER['HTTP_HOST'].substr($_SERVER['SCRIPT_NAME'], 0, -24) . "saml2/idp/metadata.php?output=xhtml"; + $url_meta = SimpleSAML\Utils\HTTP::getBaseURL() . "saml2/idp/metadata.php?output=xhtml"; $data['info'][] = $data['ssphpobj']->t('{idpinstaller:idpinstaller:step7_all_info_extra}') . " " . $data['ssphpobj']->t('{idpinstaller:idpinstaller:step7_here}') . ""; - $url_init = 'http://'.$_SERVER['HTTP_HOST'].substr($_SERVER['SCRIPT_NAME'], 0, -24) . "module.php/core/frontpage_welcome.php"; + $url_init = SimpleSAML\Module::getModuleURL("core/frontpage_welcome.php"); $data['info'][] = $data['ssphpobj']->t('{idpinstaller:idpinstaller:step9_url_init}') . " " . $data['ssphpobj']->t('{idpinstaller:idpinstaller:step7_here}') . "
"; $data['info'][] = $data['ssphpobj']->t('{idpinstaller:idpinstaller:step9_remember_cert}').''.$cert_path.''; From 8da8f7ed3219fc2a3998076e36d4638fb03e4f03 Mon Sep 17 00:00:00 2001 From: adriangmemorandum Date: Tue, 4 Sep 2018 05:29:39 +0200 Subject: [PATCH 2/9] Configurar el SSP al seleccionar LDAP como opcion para la gestion de cuentas --- hooks/hook_step6.php | 6 +++++ lib/functions.php | 62 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/hooks/hook_step6.php b/hooks/hook_step6.php index 6a7b3a5..6c83126 100644 --- a/hooks/hook_step6.php +++ b/hooks/hook_step6.php @@ -84,12 +84,18 @@ function idpinstaller_hook_step6(&$data) { if (array_key_exists('sql_datasource', $config)) { unset($config['sql_datasource']); } + + saveSSPLDAPConfiguration($_REQUEST); + $res2 = @file_put_contents($filename, '"); if (!$res2) { $data['errors'][] = $data['ssphpobj']->t('{idpinstaller:idpinstaller:step2_contact_save_error}'); $data['errors'][] = $data['ssphpobj']->t('{idpinstaller:idpinstaller:step2_contact_save_error2}') . " " . realpath($filename) . ""; $data['datasource_selected'] = 'ldap'; } + + + } return true; } diff --git a/lib/functions.php b/lib/functions.php index f34af28..ec5f55c 100644 --- a/lib/functions.php +++ b/lib/functions.php @@ -151,3 +151,65 @@ function transaleXMLToSsPHP($xmldata){ } return $output; } + +function saveSSPLDAPConfiguration($params){ + + $filenameSource = __DIR__ . '/../../../www/selfservicepassword/conf/config.inc.php'; + $filenameTarget = __DIR__ . '/../../../www/selfservicepassword/conf/config.inc.local.php'; + + if(file_exists($filenameSource)){ + + $old = get_defined_vars(); + + include($filenameSource); + + $new = get_defined_vars(); + + $fileSettings = array_diff($new, $old); + + $keyphrase = "H3C31J3w0aSgCvfZuAPAInqKBBsyK6hH0RQEDm5Apj4PduQYmBv4m3myf6wF"; + + $newSettings = array( + 'ldap_url' => $params['ldap_hostname'].":".$params['ldap_port'], + 'ldap_starttls' => ($params['ldap_enable_tls'] == 0 ? TRUE : FALSE), + 'ldap_binddn' => $params['ldap_binddn'], + 'ldap_bindpw' => $params['ldap_bindpassword'], + 'ldap_base' => "dc=tuorganizacion,dc=es", + 'ldap_login_attribute' => "uid", + 'ldap_fullname_attribute' => "cn", + 'ldap_filter' => "(&(objectClass=person)($ldap_login_attribute={login}))", + 'keyphrase' => $keyphrase + ); + + $fileSettings = array_merge($fileSettings, $newSettings); + + $content = " $value) { + + if (gettype($value) == 'string' ){ + $val = "'{$value}'"; + } else if (gettype($value) == 'boolean' ){ + if ($value == 0){ + $val = "FALSE"; + } else { + $val = "TRUE"; + } + } else if (gettype($value) == 'NULL' ) { + $val = "NULL"; + } else { + $val = "{$value}"; + } + + $content .= "$".$key." = ".$val."; \n"; + } + + $content .= "\n ?>"; + + file_put_contents($filenameTarget, $content); + + }else{ + + } + +} \ No newline at end of file From 5f361cae9d4e81d67e5024bfd23c24ff90cf3206 Mon Sep 17 00:00:00 2001 From: adriangmemorandum Date: Tue, 4 Sep 2018 05:51:45 +0200 Subject: [PATCH 3/9] Quito else porque en principio no voy a realizar accion en caso de que no exista SSP --- lib/functions.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/functions.php b/lib/functions.php index ec5f55c..4c96947 100644 --- a/lib/functions.php +++ b/lib/functions.php @@ -208,8 +208,6 @@ function saveSSPLDAPConfiguration($params){ file_put_contents($filenameTarget, $content); - }else{ - } } \ No newline at end of file From 5293c2a77cc3086d7e17e3c9ffdcea7b9006eaea Mon Sep 17 00:00:00 2001 From: adriangmemorandum Date: Sat, 10 Nov 2018 14:36:16 +0100 Subject: [PATCH 4/9] =?UTF-8?q?Damos=20opci=C3=B3n=20a=20seleccionar=20si?= =?UTF-8?q?=20quiere=20instalar=20la=20aplicaci=C3=B3n=20Self=20Service=20?= =?UTF-8?q?Password=20para=20LDAP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hooks/hook_step6.php | 7 ++++++- lib/functions.php | 28 +++++++++++++++++++++++++++- templates/step5.php | 7 +++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/hooks/hook_step6.php b/hooks/hook_step6.php index 6c83126..6dedc0c 100644 --- a/hooks/hook_step6.php +++ b/hooks/hook_step6.php @@ -85,7 +85,12 @@ function idpinstaller_hook_step6(&$data) { unset($config['sql_datasource']); } - saveSSPLDAPConfiguration($_REQUEST); + if($_REQUEST['ldap_enable_sspassword'] == 0){ + downloadSSPLdap(); + saveSSPLDAPConfiguration($_REQUEST); + } + + $res2 = @file_put_contents($filename, '"); if (!$res2) { diff --git a/lib/functions.php b/lib/functions.php index 4c96947..d0a70e7 100644 --- a/lib/functions.php +++ b/lib/functions.php @@ -202,6 +202,7 @@ function saveSSPLDAPConfiguration($params){ } $content .= "$".$key." = ".$val."; \n"; + } $content .= "\n ?>"; @@ -210,4 +211,29 @@ function saveSSPLDAPConfiguration($params){ } -} \ No newline at end of file +} + +function downloadSSPLdap(){ + + if (!file_exists(__DIR__ . '/../../../www/selfservicepassword')) { + $url = "https://ltb-project.org/archives/ltb-project-self-service-password-1.3.tar.gz"; + $ch = curl_init($url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); + $output = curl_exec($ch); + //Guardamos la imagen en un archivo + $fh = fopen(__DIR__ . '/../../../www/sspass.tar.gz', 'w'); + fwrite($fh, $output); + fclose($fh); + + $p = new PharData(__DIR__ . '/../../../www/sspass.tar.gz'); + //$p->decompress(); + $p->extractTo(__DIR__ . '/../../../www/sspass', null, true); + + rename(__DIR__ . '/../../../www/sspass/ltb-project-self-service-password-1.3', __DIR__ . '/../../../www/selfservicepassword'); + + rmdir(__DIR__ . '/../../../www/sspass'); + unlink(__DIR__ . '/../../../www/sspass.tar.gz'); + } + +} diff --git a/templates/step5.php b/templates/step5.php index fc93295..dafd6a0 100644 --- a/templates/step5.php +++ b/templates/step5.php @@ -135,6 +135,13 @@ function showDatasource() {

+

+ ¿Desea instalar y configurar la aplicación Self Service Password para que cada usuario pueda gestionar su contraseña?
+
+

t('{idpinstaller:idpinstaller:step5_ldap_info}'); ?>
From a11ed1ec8ebecbd1c9001b9809d737da8ffbf6fe Mon Sep 17 00:00:00 2001 From: adriangmemorandum Date: Sun, 11 Nov 2018 01:03:21 +0100 Subject: [PATCH 5/9] Ajustes, traducciones y enlace a documentacion de PDO y LDAP --- dictionaries/idpinstaller.definition.json | 11 ++++++++++- hooks/hook_step6.php | 1 + templates/step5.php | 6 +++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/dictionaries/idpinstaller.definition.json b/dictionaries/idpinstaller.definition.json index 9bb25fa..7faab29 100755 --- a/dictionaries/idpinstaller.definition.json +++ b/dictionaries/idpinstaller.definition.json @@ -194,11 +194,20 @@ "step5_ldap_referral": { "es": "Activar el seguimiento de referrals. Los controladores de dominio de Active Directory pueden requerir su desactivación para functionar correctamente" }, + "step5_ldap_bindtext": { + "es": "En el caso de realizar bind anónimo especifique el DN y password:" + }, + "step5_ldap_sspassword": { + "es": "¿Desea instalar y configurar la aplicación Self Service Password para que cada usuario pueda gestionar su contraseña?" + }, "step5_ldap_timeout": { "es": "Timeout de acceso al LDAP, en segundos" }, "step5_ldap_info": { - "es": "Esta configuración permitirá la conexión del IdP a la fuente de datos, pero no incluye la configuración de obtención de la información de la misma. Para configurar esta, se deberá seguir la documentación oficial de SimpleSAMLphp." + "es": "Esta configuración permitirá la conexión del IdP a la fuente de datos, pero no incluye la configuración de obtención de la información de la misma. Para configurar esta, se deberá seguir esta documentación.." + }, + "step5_pdo_info": { + "es": "Esta configuración permitirá la conexión del IdP a la fuente de datos, pero no incluye la configuración de obtención de la información de la misma. Para configurar esta, se deberá seguir esta documentación.." }, "step5_ldap_title":{ "es":"Configuración de fuente de datos de tipo LDAP" diff --git a/hooks/hook_step6.php b/hooks/hook_step6.php index 6dedc0c..4e7fa2d 100644 --- a/hooks/hook_step6.php +++ b/hooks/hook_step6.php @@ -81,6 +81,7 @@ function idpinstaller_hook_step6(&$data) { 'priv.password' => NULL, 'authority' => "urn:mace:".$_SERVER['HTTP_HOST'], ); + if (array_key_exists('sql_datasource', $config)) { unset($config['sql_datasource']); } diff --git a/templates/step5.php b/templates/step5.php index dafd6a0..a591dd2 100644 --- a/templates/step5.php +++ b/templates/step5.php @@ -110,7 +110,7 @@ function showDatasource() {

-

En el caso de realizar bind anónimo especifique el DN y password:

+

t('{idpinstaller:idpinstaller:step5_ldap_bindtext}'); ?>

t('{idpinstaller:idpinstaller:step5_ldap_binddn}'); ?>

@@ -136,7 +136,7 @@ function showDatasource() {

- ¿Desea instalar y configurar la aplicación Self Service Password para que cada usuario pueda gestionar su contraseña?
+ t('{idpinstaller:idpinstaller:step5_ldap_sspassword}'); ?>

- t('{idpinstaller:idpinstaller:step5_ldap_info}'); ?> + t('{idpinstaller:idpinstaller:step5_pdo_info}'); ?>
From e0a2a68468b07d540bf26debd6b4d4a5a4eb39de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20G=C3=B3mez?= Date: Thu, 11 Apr 2019 18:18:06 +0200 Subject: [PATCH 6/9] Correciones en modulos requeridos, de PHP y de SimpleSAMLphp --- hooks/hook_step1.php | 2 +- hooks/hook_step5.php | 12 +----------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/hooks/hook_step1.php b/hooks/hook_step1.php index 7464331..9fc2836 100644 --- a/hooks/hook_step1.php +++ b/hooks/hook_step1.php @@ -67,7 +67,7 @@ function idpinstaller_hook_step1(&$data) { $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"); + $extensions = array("date", "dom", "hash", "libxml", "openssl", "pcre", "SPL", "zlib", "posix"); $failed_extensions = array(); $loaded_extensions = get_loaded_extensions(); foreach ($extensions as $extension) { diff --git a/hooks/hook_step5.php b/hooks/hook_step5.php index fd15c2f..c298482 100644 --- a/hooks/hook_step5.php +++ b/hooks/hook_step5.php @@ -67,17 +67,7 @@ function idpinstaller_hook_step5(&$data) { $data['errors'][] = $ssphpobj->t('{idpinstaller:idpinstaller:step4_error}'); } } - } else { //PARA LOS QUE QUEREMOS DESACTIVAR - if (file_exists($f . '/default-enable')) { - - @unlink($f . '/default-enable'); - @touch($f . '/default-disable'); - - if (!file_exists($f . '/default-disable')) { - $data['errors'][] = $ssphpobj->t('{idpinstaller:idpinstaller:step4_error}'); - } - } - } + } } } if (count($modules_ko) > 0) { From f8b2cf4d3bf3c4fb35b9552b11a438f217036d3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20G=C3=B3mez?= Date: Fri, 21 Jun 2019 16:34:50 +0200 Subject: [PATCH 7/9] =?UTF-8?q?Actualizaci=C3=B3n=20de=20la=20forma=20de?= =?UTF-8?q?=20generar=20la=20contrase=C3=B1a=20cifrada,=20segun=20nuevas?= =?UTF-8?q?=20versiones=20de=20SimpleSAMLphp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hooks/hook_step3.php | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/hooks/hook_step3.php b/hooks/hook_step3.php index 4a958b5..e063133 100644 --- a/hooks/hook_step3.php +++ b/hooks/hook_step3.php @@ -73,12 +73,10 @@ function idpinstaller_hook_step3(&$data) { if (array_key_exists('ssphp_technicalcontact_name', $_REQUEST) && array_key_exists('ssphp_technicalcontact_email', $_REQUEST) && !empty($_REQUEST['ssphp_technicalcontact_name']) && !empty($_REQUEST['ssphp_technicalcontact_email'])) { $filename = __DIR__ . '/../../../config/config.php'; include($filename); - - $algoritmo = 'sha512'; - - $salt = shell_exec("tr -cd '[:alnum:][:blank:]' < /dev/urandom | head -c48; echo"); - $config['auth.adminpassword'] = SimpleSAML\Utils\Crypto::pwHash($pass, strtoupper($algoritmo), $salt); - $config['secretsalt'] = $salt; + + $salt = shell_exec("tr -cd '[:alnum:][:blank:]' < /dev/urandom | head -c48; echo"); + $config['auth.adminpassword'] = SimpleSAML\Utils\Crypto::pwHash($pass); + $config['secretsalt'] = $salt; $config['technicalcontact_name'] = $_REQUEST['ssphp_technicalcontact_name']; $config['technicalcontact_email'] = $_REQUEST['ssphp_technicalcontact_email']; $config['language.default'] = "es"; @@ -88,16 +86,16 @@ function idpinstaller_hook_step3(&$data) { $config['enable.shib13-idp'] = false; $config['enable.adfs-idp'] = false; $config['enable.wsfed-sp'] = false; - /* Aniadido por Adrian Gomez en Julio de 2018 - Modificacion de directivas de configuración para dar mayor seguridad. #3 - */ - $config['admin.protectindexpage'] = true; - $config['showerrors'] = false; - $config['session.cookie.secure'] = true; - $config['trusted.url.domains'] = array(); - /*Fin de aniadido por Adrian Gomez*/ + /* Aniadido por Adrian Gomez en Julio de 2018 + Modificacion de directivas de configuración para dar mayor seguridad. #3 + */ + $config['admin.protectindexpage'] = true; + $config['showerrors'] = false; + $config['session.cookie.secure'] = true; + $config['trusted.url.domains'] = array(); + /*Fin de aniadido por Adrian Gomez*/ - $res = @file_put_contents($filename, '"); + $res = @file_put_contents($filename, '"); if (!$res) { $data['errors'][] = $data['ssphpobj']->t('{idpinstaller:idpinstaller:step2_contact_save_error}'); $data['errors'][] = $data['ssphpobj']->t('{idpinstaller:idpinstaller:step2_contact_save_error2}') . " " . realpath($filename) . ""; From 3f05b74f535ec133bc9fd7b198e300598937abea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20G=C3=B3mez?= Date: Sun, 18 Aug 2019 20:33:28 +0200 Subject: [PATCH 8/9] =?UTF-8?q?Correcci=C3=B3n=20en=20el=20fichero=20plant?= =?UTF-8?q?illa=20de=20configuraci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config-templates/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-templates/config.php b/config-templates/config.php index bf2bcdc..707f6ab 100644 --- a/config-templates/config.php +++ b/config-templates/config.php @@ -1090,7 +1090,7 @@ 'metadata.sign.privatekey' => null, 'metadata.sign.privatekey_pass' => null, 'metadata.sign.certificate' => null, - 'metadata.sign.algorithm' => null, + 'metadata.sign.algorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256', /**************************** From 58de45e1cce94e5e26d9d24481953f588873d757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20G=C3=B3mez?= Date: Sun, 18 Aug 2019 21:36:19 +0200 Subject: [PATCH 9/9] =?UTF-8?q?Correci=C3=B3n=20de=20ExampleAuth=20a=20err?= =?UTF-8?q?or=20que=20ocurria=20en=20el=20caso=20de=20que=20no=20exista=20?= =?UTF-8?q?la=20extensi=C3=B3n=20LDAP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hooks/hook_step6.php | 13 +------------ templates/step5.php | 19 +++++-------------- 2 files changed, 6 insertions(+), 26 deletions(-) mode change 100755 => 100644 hooks/hook_step6.php mode change 100755 => 100644 templates/step5.php diff --git a/hooks/hook_step6.php b/hooks/hook_step6.php old mode 100755 new mode 100644 index 8d2d17b..a011eff --- a/hooks/hook_step6.php +++ b/hooks/hook_step6.php @@ -81,17 +81,9 @@ function idpinstaller_hook_step6(&$data) { 'priv.password' => NULL, 'authority' => "urn:mace:".$_SERVER['HTTP_HOST'], ); - if (array_key_exists('sql_datasource', $config)) { unset($config['sql_datasource']); } - - if($_REQUEST['ldap_enable_sspassword'] == 0){ - downloadSSPLdap(); - saveSSPLDAPConfiguration($_REQUEST); - } - - if (array_key_exists('example-userpass', $config)) { unset($config['example-userpass']); } @@ -101,9 +93,6 @@ function idpinstaller_hook_step6(&$data) { $data['errors'][] = $data['ssphpobj']->t('{idpinstaller:idpinstaller:step2_contact_save_error2}') . " " . realpath($filename) . ""; $data['datasource_selected'] = 'ldap'; } - - - } return true; } @@ -145,7 +134,7 @@ function idpinstaller_hook_step6(&$data) { } return true; } - }else if (strcmp($ds_type, "config") == 0 && ($data['datasources'] == "all" || $data['datasources'] == "config")) { + }else if (strcmp($ds_type, "config") == 0) { if (array_key_exists('config_user', $_REQUEST) && !empty($_REQUEST['config_user']) && array_key_exists('config_pass', $_REQUEST) && !empty($_REQUEST['config_pass']) && array_key_exists('config_rol', $_REQUEST) && !empty($_REQUEST['config_rol'])) { diff --git a/templates/step5.php b/templates/step5.php old mode 100755 new mode 100644 index d8c3fe8..304ad0f --- a/templates/step5.php +++ b/templates/step5.php @@ -131,15 +131,13 @@ function showDatasource() { } else if (strcmp($this->data['sir']['datasources'], "ldap") == 0) { $ldap = true; $pdo = false; - $conf = false; + $conf = true; unset($options['pdo']); - unset($options['config']); } else if (strcmp($this->data['sir']['datasources'], "pdo") == 0) { $pdo = true; $ldap = false; - $conf = false; + $conf = true; unset($options['ldap']); - unset($options['config']); } else if(strcmp($this->data['sir']['datasources'], "config") == 0){ $pdo = false; $ldap = false; @@ -188,7 +186,7 @@ function showDatasource() {

-

t('{idpinstaller:idpinstaller:step5_ldap_bindtext}'); ?>

+

En el caso de realizar bind anónimo especifique el DN y password:

t('{idpinstaller:idpinstaller:step5_ldap_binddn}'); ?>

@@ -213,13 +211,6 @@ function showDatasource() {

-

- t('{idpinstaller:idpinstaller:step5_ldap_sspassword}'); ?>
-
-

t('{idpinstaller:idpinstaller:step5_ldap_info}'); ?>
@@ -240,7 +231,7 @@ function showDatasource() {

- t('{idpinstaller:idpinstaller:step5_pdo_info}'); ?> + t('{idpinstaller:idpinstaller:step5_ldap_info}'); ?>
@@ -353,4 +344,4 @@ function validateForm(){ } - + \ No newline at end of file