diff --git a/ecrire/auth/ldap.php b/ecrire/auth/ldap.php index ecb58fa76ab2c1058bb146fd4790e40ec7f40d42..160ac7287269ca9299ff84b0138d4b305f0e0da2 100644 --- a/ecrire/auth/ldap.php +++ b/ecrire/auth/ldap.php @@ -78,6 +78,8 @@ function auth_ldap_connect($serveur='') { $connexion['ldap'] = array('link' => $GLOBALS['ldap_link'], 'base' => $GLOBALS['ldap_base']); else spip_log("connection LDAP $serveur mal definie dans $f"); + if (isset($GLOBALS['ldap_champs'])) + $connexion['ldap']['attributes'] = $GLOBALS['ldap_champs']; } else spip_log("connection LDAP $serveur inconnue"); } return $connexions_ldap[$serveur]=$connexion['ldap']; diff --git a/ecrire/inc/install.php b/ecrire/inc/install.php index e51e703f424aa0fee335be651807705e688369a8..2a3635fc6574638ea10eb0129a02d4c2b86293bc 100644 --- a/ecrire/inc/install.php +++ b/ecrire/inc/install.php @@ -207,9 +207,18 @@ function info_progression_etape($en_cours,$phase,$dir, $erreur = false){ // http://doc.spip.org/@fieldset -function fieldset($legend, $champs = array(), $horchamps='') { - $fieldset = "<fieldset>\n" . - ($legend ? "<legend>".$legend."</legend>\n" : ''); +function fieldset($legend, $champs = array(), $apres='', $avant='') { + return "<fieldset>\n" . + $avant . + ($legend ? "<legend>".$legend."</legend>\n" : '') . + fieldset_champs($champs) . + $apres . + "</fieldset>\n"; +} + +function fieldset_champs($champs = array()) + { + $fieldset = ''; foreach ($champs as $nom => $contenu) { $type = isset($contenu['hidden']) ? 'hidden' : (preg_match(',^pass,', $nom) ? 'password' : 'text'); $class = isset($contenu['hidden']) ? '' : "class='formo' size='40' "; @@ -230,7 +239,6 @@ function fieldset($legend, $champs = array(), $horchamps='') { .(preg_match(',^(pass|login),', $nom)?" autocomplete='off'":'') . " />\n"; } } - $fieldset .= "$horchamps</fieldset>\n"; return $fieldset; } @@ -429,4 +437,14 @@ function install_etape_liste_bases($server_db, $disabled=array()) return array($checked, $bases); } + +function install_propager($hidden) +{ + $res = ''; + foreach($hidden as $k) { + $v = htmlentities(_request($k)); + $res .= "<input type='hidden' name='$k' value='$v' />"; + } + return $res; +} ?> diff --git a/ecrire/install/etape_ldap3.php b/ecrire/install/etape_ldap3.php index ecf43172b6a93510cbde29229f1217a1794d83f5..b2d4c102523a2b12cbd4920cf38cae4c66f2a74a 100644 --- a/ecrire/install/etape_ldap3.php +++ b/ecrire/install/etape_ldap3.php @@ -18,8 +18,6 @@ function install_etape_ldap3_dist() $login_ldap = _request('login_ldap'); $pass_ldap = _request('pass_ldap'); $port_ldap = _request('port_ldap'); - $tls_ldap = _request('tls_ldap'); - $protocole_ldap = _request('protocole_ldap'); $base_ldap_text = defined('_INSTALL_BASE_LDAP') ? _INSTALL_BASE_LDAP @@ -66,22 +64,17 @@ function install_etape_ldap3_dist() $res .= " checked=\"checked\""; $checked = true; } - $res .= " />" - . "\n<label for='manuel'>"._T('entree_chemin_acces')."</label> "; - - echo generer_form_ecrire('install', ($res - . "\n<input type='hidden' name='etape' value='ldap4' />" - . "\n<input type='hidden' name='adresse_ldap' value=\"$adresse_ldap\" />" - . "\n<input type='hidden' name='port_ldap' value=\"$port_ldap\" />" - . "\n<input type='hidden' name='login_ldap' value=\"$login_ldap\" />" - . "\n<input type='hidden' name='pass_ldap' value=\"$pass_ldap\" />" - . "\n<input type='hidden' name='protocole_ldap' value=\"$protocole_ldap\" />" - . "\n<input type='hidden' name='tls_ldap' value=\"$tls_ldap\" />" + $res .= " />" + . "\n<label for='manuel'>"._T('entree_chemin_acces')."</label> " . "\n<fieldset>" . "<input type='text' name='base_ldap_text' class='text' value=\"$base_ldap_text\" size='40' />" . "\n</fieldset>" - . bouton_suivant())); + . "\n<input type='hidden' name='etape' value='ldap4' />" + . install_propager(array('adresse_ldap','port_ldap','login_ldap','pass_ldap','protocole_ldap','tls_ldap')) + . bouton_suivant(); + + echo generer_form_ecrire('install', $res); echo install_fin_html(); } diff --git a/ecrire/install/etape_ldap4.php b/ecrire/install/etape_ldap4.php index ee66647e5ef23bddbee0765a8a6119d31e2d48b2..3d445f267978d9340d8796cad8dd5bad4309f9bc 100644 --- a/ecrire/install/etape_ldap4.php +++ b/ecrire/install/etape_ldap4.php @@ -10,6 +10,10 @@ * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ +if (!defined("_ECRIRE_INC_VERSION")) return; + +include_spip('auth/ldap'); + // http://doc.spip.org/@install_etape_ldap4_dist function install_etape_ldap4_dist() { @@ -17,16 +21,13 @@ function install_etape_ldap4_dist() $login_ldap = _request('login_ldap'); $pass_ldap = _request('pass_ldap'); $port_ldap = _request('port_ldap'); - $tls_ldap = _request('tls_ldap'); - $protocole_ldap = _request('protocole_ldap'); $base_ldap = _request('base_ldap'); $base_ldap_text = _request('base_ldap_text'); + if (!$base_ldap) $base_ldap = $base_ldap_text; echo install_debut_html(); - if (!$base_ldap) $base_ldap = $base_ldap_text; - - $ldap_link = @ldap_connect($adresse_ldap, $port_ldap); + $ldap_link = ldap_connect($adresse_ldap, $port_ldap); @ldap_bind($ldap_link, $login_ldap, $pass_ldap); // Essayer de verifier le chemin fourni @@ -43,29 +44,15 @@ function install_etape_ldap4_dist() info_etape(_T('info_reglage_ldap')); echo info_progression_etape(4,'etape_ldap','install/'); - lire_fichier(_FILE_CONNECT_TMP, $conn); - if ($p = strpos($conn, "'');")) { - ecrire_fichier(_FILE_CONNECT_TMP, - substr($conn, 0, $p+1) - . _FILE_LDAP - . substr($conn, $p+1)); - } - $conn = "\$GLOBALS['ldap_base'] = \"$base_ldap\";\n" - . "\$GLOBALS['ldap_link'] = @ldap_connect(\"$adresse_ldap\",\"$port_ldap\");\n" - . "@ldap_set_option(\$GLOBALS['ldap_link'],LDAP_OPT_PROTOCOL_VERSION,\"$protocole_ldap\");\n" - . (($tls_ldap != 'oui') ? '' : - "@ldap_start_tls(\$GLOBALS['ldap_link']);\n") - . "@ldap_bind(\$GLOBALS['ldap_link'],\"$login_ldap\",\"$pass_ldap\");\n"; - - install_fichier_connexion(_DIR_CONNECT . _FILE_LDAP, $conn); $statuts = liste_statuts_ldap(); $statut_ldap = defined('_INSTALL_STATUT_LDAP') ? _INSTALL_STATUT_LDAP : $GLOBALS['liste_des_statuts']['info_redacteurs']; - echo generer_form_ecrire('install', ( - "<input type='hidden' name='etape' value='ldap5' />" - + + $res = install_propager(array('adresse_ldap','port_ldap','login_ldap','pass_ldap','protocole_ldap','tls_ldap')) + . "<input type='hidden' name='etape' value='ldap5' />" + . "<input type='hidden' name='base_ldap' value='" . htmlentities($base_ldap) . "' />" . fieldset(_T('info_statut_utilisateurs_1'), array( 'statut_ldap' => array( @@ -75,7 +62,10 @@ function install_etape_ldap4_dist() ) ) ) - . bouton_suivant())); + . install_ldap_correspondances() + . bouton_suivant(); + + echo generer_form_ecrire('install', $res); } echo install_fin_html(); @@ -93,4 +83,19 @@ function liste_statuts_ldap() { } return $res; } + +function install_ldap_correspondances() +{ + $champs = array(); + foreach (is_array($GLOBALS['ldap_attributes']) ? $GLOBALS['ldap_attributes'] : array() as $champ => $v ) { + $nom = 'ldap_' . $champ; + $val = is_array($v) ? join(',', $v) : strval($v); + $champs[$nom]= array( + 'label' => _T('ldap_correspondance', array('champ' => "<tt>$champ</tt>")).'<br />', + 'valeur' => $val + ); + } + + return !$champs ? '' : fieldset(_T('ldap_correspondance_1'), $champs, '', _T('ldap_correspondance_2') . '<br /><br />'); +} ?> diff --git a/ecrire/install/etape_ldap5.php b/ecrire/install/etape_ldap5.php index 3b0c61b6bcbb356dd2b82cd2bb32c906f46ecbc9..bddad36da4a59938e83c12008fcf9740f5624a3d 100644 --- a/ecrire/install/etape_ldap5.php +++ b/ecrire/install/etape_ldap5.php @@ -12,6 +12,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/headers'); +include_spip('auth/ldap'); // http://doc.spip.org/@install_etape_ldap5_dist function install_etape_ldap5_dist() @@ -21,6 +22,45 @@ function install_etape_ldap5_dist() ecrire_meta('ldap_statut_import', _request('statut_ldap')); + lire_fichier(_FILE_CONNECT_TMP, $conn); + + if ($p = strpos($conn, "'');")) { + ecrire_fichier(_FILE_CONNECT_TMP, + substr($conn, 0, $p+1) + . _FILE_LDAP + . substr($conn, $p+1)); + } + + $adresse_ldap = _request('adresse_ldap'); + $login_ldap = _request('login_ldap'); + $pass_ldap = _request('pass_ldap'); + $port_ldap = _request('port_ldap'); + $tls_ldap = _request('tls_ldap'); + $protocole_ldap = _request('protocole_ldap'); + $base_ldap = _request('base_ldap'); + $base_ldap_text = _request('base_ldap_text'); + + $conn = "\$GLOBALS['ldap_base'] = \"$base_ldap\";\n" + . "\$GLOBALS['ldap_link'] = @ldap_connect(\"$adresse_ldap\",\"$port_ldap\");\n" + . "@ldap_set_option(\$GLOBALS['ldap_link'],LDAP_OPT_PROTOCOL_VERSION,\"$protocole_ldap\");\n" + . (($tls_ldap != 'oui') ? '' : + "@ldap_start_tls(\$GLOBALS['ldap_link']);\n") + . "@ldap_bind(\$GLOBALS['ldap_link'],\"$login_ldap\",\"$pass_ldap\");\n"; + + $champs = is_array($GLOBALS['ldap_attributes']) ? $GLOBALS['ldap_attributes'] : array(); + $res = ''; + foreach ($champs as $champ => $v ) { + $nom = 'ldap_' . $champ; + $val = trim(_request($nom)); + if (preg_match('/^\w*$/', $val)) { + if ($val) $val = _q($val); + } else $val = "array(" . _q(preg_split('/\W+/', $val)) . ')';; + if ($val) $res .= "'$champ' => " . $val . ","; + } + $conn .= "\$GLOBALS['ldap_champs'] = array($res);\n"; + + install_fichier_connexion(_DIR_CONNECT . _FILE_LDAP, $conn); + echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"'); echo info_etape(_T('info_ldap_ok'), info_progression_etape(5,'etape_ldap','install/'), _T('info_terminer_installation')); @@ -33,4 +73,5 @@ function install_etape_ldap5_dist() echo install_fin_html(); } + ?> diff --git a/ecrire/lang/ecrire_fr.php b/ecrire/lang/ecrire_fr.php index b9057afbda461c9bd450dbe8e1b12a653c713497..af6b9c3cea561a1ac1456ae14c046103959a980e 100644 --- a/ecrire/lang/ecrire_fr.php +++ b/ecrire/lang/ecrire_fr.php @@ -801,6 +801,9 @@ dans une couleur qui indique leur état :', 'label_taille_ecran' => 'Largeur de l\'ecran', 'label_texte_et_icones_navigation' => 'Menu de navigation', 'label_texte_et_icones_page' => 'Affichage dans la page', +'ldap_correspondance' => 'héritage du champ @champ@', +'ldap_correspondance_1' => 'Héritage des champs LDAP', +'ldap_correspondance_2' => 'Pour chacun des champs SPIP suivants, indiquer le nom du champ LDAP correspondant. Laisser vide pour ne pas le remplir, séparer par des espaces ou des virgules pour essayer plusieurs champs LDAP.' , 'lien_ajout_destinataire' => 'Ajouter ce destinataire', 'lien_ajouter_auteur' => 'Ajouter cet auteur', 'lien_ajouter_participant' => 'Ajouter un participant',