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 &eacute;tat&nbsp;:',
 '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&eacute;ritage du champ @champ@',
+'ldap_correspondance_1' => 'H&eacute;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&eacute;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',