diff --git a/ecrire/auteur_infos.php3 b/ecrire/auteur_infos.php3
index 406ed6fb4f9171f80a9ca0fee459ffac8247cb5f..89eb6219468988ec4f0e8c124133ad694a144099 100644
--- a/ecrire/auteur_infos.php3
+++ b/ecrire/auteur_infos.php3
@@ -81,7 +81,7 @@ if ($id_auteur) {
 // Modification (et creation si besoin)
 //
 if ($statut) { // si on poste un nom, c'est qu'on modifie une fiche auteur
-	if ($connect_statut == '0minirezo' AND ereg("^(0minirezo|1comite|5poubelle)$",$statut))	// changer le statut
+	if ($connect_statut == '0minirezo' AND ereg("^(0minirezo|1comite|5poubelle|6forum)$",$statut))	// changer le statut
 		$auteur['statut'] = $statut;
 
 	if ($nom)	// pas de nom vide
@@ -90,19 +90,23 @@ if ($statut) { // si on poste un nom, c'est qu'on modifie une fiche auteur
 	// login et mot de passe
 	unset ($modif_login);
 	$old_login = $auteur['login'];
-	if ($login) {
-		if (strlen($login) < 4)
-			$echec .= "<p>Login trop court.";
-		else if (mysql_num_rows(spip_query("SELECT * FROM spip_auteurs WHERE login='".addslashes($login)."' AND id_auteur!=$id_auteur AND statut!='5poubelle'")))
-			$echec .= "<p>Ce login existe d&eacute;j&agrave;.";
-		else if ($login != $old_login) {
-			$modif_login = true;
-			$auteur['login'] = $login;
+	if ($connect_statut == '0minirezo' AND $auteur['source'] == 'spip') {
+		if ($login) {
+			if (strlen($login) < 4)
+				$echec .= "<p>Login trop court.";
+			else if (mysql_num_rows(spip_query("SELECT * FROM spip_auteurs WHERE login='".addslashes($login)."' AND id_auteur!=$id_auteur AND statut!='5poubelle'")))
+				$echec .= "<p>Ce login existe d&eacute;j&agrave;.";
+			else if ($login != $old_login) {
+				$modif_login = true;
+				$auteur['login'] = $login;
+			}
 		}
-	} else if ($connect_statut == '0minirezo') // suppression du login
-			$auteur['login'] = '';
+		// suppression du login
+		else if ($connect_statut == '0minirezo') $auteur['login'] = '';
+	}
 
-	if ($new_pass AND ($statut != '5poubelle') AND $auteur['login']) { // changement de pass, a securiser en jaja ?
+	// changement de pass, a securiser en jaja ?
+	if ($new_pass AND ($statut != '5poubelle') AND $auteur['login'] AND $auteur['source'] == 'spip') {
 		if ($new_pass != $new_pass2)
 			$echec .= "<p>Les deux mots de passe ne sont pas identiques.";
 		else if ($new_pass AND strlen($new_pass) < 6)
@@ -146,7 +150,7 @@ if ($statut) { // si on poste un nom, c'est qu'on modifie une fiche auteur
 
 	// l'entrer dans la base
 	if (!$echec) {
-		if (! $auteur['id_auteur']) { // creation si pas d'id
+		if (!$auteur['id_auteur']) { // creation si pas d'id
 			spip_query("INSERT INTO spip_auteurs (nom) VALUES ('temp')");
 			$auteur['id_auteur'] = mysql_insert_id();
 			$id_auteur = $auteur['id_auteur'];
@@ -231,9 +235,11 @@ debut_cadre_formulaire();
 echo "<FORM ACTION='auteur_infos.php3?id_auteur=$id_auteur' METHOD='post'>";
 echo "<INPUT TYPE='Hidden' NAME='id_auteur' VALUE=\"$id_auteur\">";
 
+
 //
 // Infos personnelles
 //
+
 echo "<FONT FACE='Georgia,Garamond,Times,serif' SIZE=3>";
 
 debut_cadre_relief("fiche-perso-24.gif");
@@ -275,35 +281,48 @@ echo "<INPUT TYPE='text' NAME='url_site' CLASS='forml' VALUE=\"".entites_html($a
 fin_cadre_relief();
 
 
+//
+// Login et mot de passe :
+// accessibles seulement aux admins non restreints et l'auteur lui-meme
+//
 
-///////
-// login modifiable ?
-if (($connect_statut == "0minirezo" AND $connect_toutes_rubriques) OR $connect_id_auteur == $id_auteur) {
-	debut_cadre_relief("base-24.gif");
+$edit_login = ($connect_statut == "0minirezo" AND $connect_toutes_rubriques AND $auteur['source'] == 'spip');
+$edit_pass = ((($connect_statut == "0minirezo" AND $connect_toutes_rubriques) OR $connect_id_auteur == $id_auteur)
+	AND $auteur['source'] == 'spip');
 
-	if ($connect_id_auteur == $id_auteur) {
-		debut_cadre_enfonce();	
-		echo '<img src="img_pack/warning.gif" alt="Avertissement" width="48" height="48" align="right">';
-		echo "<b>Attention&nbsp;! Ceci est le login sous lequel vous &ecirc;tes connect&eacute; actuellement.
-		<font color=\"red\">Utilisez ce formulaire avec pr&eacute;caution&nbsp;: si vous oubliez votre mot de passe, il sera impossible de le retrouver (seul un administrateur pourra vous en attribuer un nouveau).</font></b>\n";
-		fin_cadre_enfonce();	
-		echo "<p>";
-	}
+debut_cadre_relief("base-24.gif");
+
+// Avertissement en cas de modifs de ses propres donnees
+if (($edit_login OR $edit_pass) AND $connect_id_auteur == $id_auteur) {
+	debut_cadre_enfonce();	
+	echo '<img src="img_pack/warning.gif" alt="Avertissement" width="48" height="48" align="right">';
+	echo "<b>Attention&nbsp;! Ceci est le login sous lequel vous &ecirc;tes connect&eacute; actuellement.
+	<font color=\"red\">Utilisez ce formulaire avec pr&eacute;caution&nbsp;: si vous oubliez votre mot de passe, il sera impossible de le retrouver (seul un administrateur pourra vous en attribuer un nouveau).</font></b>\n";
+	fin_cadre_enfonce();	
+	echo "<p>";
+}
 
+// Un redacteur n'a pas le droit de modifier son login !
+if ($edit_login) {
 	echo "<B>Login</B> ";
 	echo "<font color='red'>(plus de 3 caract&egrave;res)</font> :<BR>";
 	echo "<INPUT TYPE='text' NAME='login' CLASS='formo' VALUE=\"".entites_html($auteur['login'])."\" SIZE='40'><P>\n";
+}
+else {
+	echo "<fieldset style='padding:5'><legend><B>Login</B><BR></legend><br><b>".$auteur['login']."</b> ";
+	echo "<i> (ne peut pas &ecirc;tre modifi&eacute;)</i>";
+}
+
+// On ne peut modifier le mot de passe en cas de source externe (par exemple LDAP)
+if ($edit_pass) {
 	echo "<B>Nouveau mot de passe</B> ";
 	echo "<font color='red'>(plus de 5 caract&egrave;res)</font> :<BR>";
 	echo "<INPUT TYPE='password' NAME='new_pass' CLASS='formo' VALUE=\"\" SIZE='40'><BR>\n";
 	echo "Confirmer ce nouveau mot de passe :<BR>";
 	echo "<INPUT TYPE='password' NAME='new_pass2' CLASS='formo' VALUE=\"\" SIZE='40'><P>\n";
-	fin_cadre_relief();
-} else {
-	if ($connect_id_auteur == $id_auteur) {
-		echo "<fieldset style='padding:5'><legend><B>Login</B><BR></legend><br><b>$login</b><p>\n";
-	}
 }
+fin_cadre_relief();
+
 
 //
 // Seuls les admins voient le menu 'statut', mais les admins restreints ne
@@ -323,9 +342,7 @@ AND $connect_id_auteur != $id_auteur) {
 		echo "<OPTION".mySel("0minirezo",$statut).">administrateur";
 
 	echo "<OPTION".mySel("1comite",$statut).">r&eacute;dacteur";
-
-	/* if ($statut=="6forum") */ echo "<OPTION".mySel("6forum",$statut).">visiteur";
-
+	echo "<OPTION".mySel("6forum",$statut).">visiteur";
 	echo "<OPTION".mySel("5poubelle",$statut).">&gt; &agrave; la poubelle";
 
 	echo "</SELECT></center>\n";
diff --git a/ecrire/inc_base.php3 b/ecrire/inc_base.php3
index 285bca8ea0d6e91f8d0568aa484672a1e4bdcd43..8d3f062ea1fefb36bc14652e69d40cfe98e49506 100644
--- a/ecrire/inc_base.php3
+++ b/ecrire/inc_base.php3
@@ -63,6 +63,7 @@ function creer_base() {
 		alea_futur tinytext NOT NULL,
 		prefs tinytext NOT NULL,
 		cookie_oubli tinytext NOT NULL,
+		source VARCHAR(10) DEFAULT 'spip' NOT NULL,
 		PRIMARY KEY (id_auteur),
 		KEY login (login),
 		KEY statut (statut))";
@@ -1033,6 +1034,10 @@ function maj_base() {
 		spip_query("ALTER TABLE spip_articles CHANGE popularite popularite DOUBLE NOT NULL");
 	}
 
+	if ($version_installee < 1.466) {
+		spip_query("ALTER TABLE spip_auteurs ADD source VARCHAR(10) DEFAULT 'spip' NOT NULL");
+	}
+
 	//
 	// Mettre a jour le numero de version installee
 	//
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index 47a28d3adafe2712aeaa8c770401495adecd188e..bb4cb528504bca1ff266143ca88a9be859311ed6 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -12,7 +12,7 @@ define("_ECRIRE_INC_VERSION", "1");
 //
 
 // version de la base
-$spip_version = 1.465;
+$spip_version = 1.466;
 
 // version de spip
 // (mettre a jour a la main et conserver la mention "CVS")
@@ -112,6 +112,7 @@ if ($flag_function_exists) {
 	$flag_apc = function_exists("apc_rm");
 	$flag_sapi_name = function_exists("php_sapi_name");
 	$flag_utf8_decode = function_exists("utf8_decode");
+	$flag_ldap = function_exists("ldap_connect");
 }
 else {
 	$flag_ini_get = false;
@@ -123,6 +124,8 @@ else {
 	$flag_wordwrap = false;
 	$flag_apc = false;
 	$flag_sapi_name = false;
+	$flag_utf8_decode = false;
+	$flag_ldap = false;
 }
 
 
diff --git a/ecrire/install.php3 b/ecrire/install.php3
index da65d39c025fb62030a0818accebfad3b8407c99..1ad018192eca76e120ab8aa903bb8b12b9eac31b 100644
--- a/ecrire/install.php3
+++ b/ecrire/install.php3
@@ -13,7 +13,12 @@ if (file_exists("inc_connect.php3")) {
 include_ecrire ("inc_acces.php3");
 include_ecrire ("inc_base.php3");
 
-if ($etape6) {
+
+//
+// Etapes de l'installation standard
+//
+
+if ($etape == 6) {
 	install_debut_html();
 
 	echo "<BR><FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=3>Derni&egrave;re &eacute;tape : <B>C'est termin&eacute; !</B></FONT>";
@@ -21,8 +26,8 @@ if ($etape6) {
 	echo "<B>N'oubliez pas vos propres codes d'acc&egrave;s&nbsp;!</B>";
 	echo "<P>Vous pouvez maintenant commencer &agrave; utiliser le syst&egrave;me de publication assist&eacute;...";
 
-	$link = mysql_connect($adresse_db, $login_db, $pass_db);
-	mysql_select_db($sel_db);
+	include_ecrire ("inc_connect_install.php3");
+
 	if ($login) {
 		$nom = addslashes($nom);
 		$query = "SELECT id_auteur FROM spip_auteurs WHERE login=\"$login\"";
@@ -47,18 +52,6 @@ if ($etape6) {
 		ecrire_metas();
 	}
 
-	// Si PHP est installe en module Apache, pas besoin de .htaccess
-	$ecrire_htaccess = !$php_module;
-
-	/* .htaccess n'est plus necessaire puisqu'on authentifie par cookie
-	if ($ecrire_htaccess) {
-		$protec = "AuthUserFile $rootf$htpasswd\nAuthGroupFile /dev/null\nAuthName administrateur\nAuthType Basic\n\n<Limit GET POST PUT>\nrequire valid-user\n</Limit>\n";
-		$myFile = fopen($htaccess, "w");
-		fputs($myFile, $protec);
-		fclose($myFile);
-	}
-	*/
-
 	ecrire_acces();
 
 	$protec = "deny from all\n";
@@ -66,19 +59,11 @@ if ($etape6) {
 	fputs($myFile, $protec);
 	fclose($myFile);
 
-	$conn = "<"."?php\n";
-	$conn .= "if (defined(\"_ECRIRE_INC_CONNECT\")) return;\n";
-	$conn .= "define(\"_ECRIRE_INC_CONNECT\", \"1\");\n";
-	$conn .= "\$GLOBALS['db_ok'] = true;\n";
-	$conn .= "@mysql_connect(\"$adresse_db\",\"$login_db\",\"$pass_db\");\n";
-	$conn .= "@mysql_select_db(\"$sel_db\");\n";
-	$conn .= "\$GLOBALS['db_ok'] &= !!@mysql_num_rows(@spip_query('SELECT COUNT(*) FROM spip_meta'));\n";
-	$conn .= "?".">";
-	$myFile = fopen("inc_connect.php3", "wb");
-	fputs($myFile, $conn);
-	fclose($myFile);
-
 	@unlink("inc_meta_cache.php3");
+	if (!@rename("inc_connect_install.php3", "inc_connect.php3")) {
+		copy("inc_connect_install.php3", "inc_connect.php3");
+		@unlink("inc_connect_install.php3");
+	}
 
 	echo "<FORM ACTION='index.php3' METHOD='post'>";
 	echo "<DIV align='right'><INPUT TYPE='submit' CLASS='fondl' NAME='Valider' VALUE='Suivant >>'>";
@@ -86,9 +71,13 @@ if ($etape6) {
 
 	install_fin_html();
 
-}elseif($etape5){
+}
+
+else if ($etape == 5) {
 	install_debut_html();
 
+	include_ecrire ("inc_connect_install.php3");
+
 	echo "<BR><FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=3>Cinqui&egrave;me &eacute;tape : <B>Informations personnelles</B></FONT>";
 	echo "<P>";
 	
@@ -98,11 +87,7 @@ if ($etape6) {
 	echo "laisser ces champs vides)";
 
 	echo "<FORM ACTION='install.php3' METHOD='post'>";
-	echo "<INPUT TYPE='hidden' NAME='etape6' VALUE='oui'>";
-	echo "<INPUT TYPE='hidden' NAME='adresse_db'  VALUE=\"$adresse_db\" SIZE='40'>";
-	echo "<INPUT TYPE='hidden' NAME='login_db' VALUE=\"$login_db\">";
-	echo "<INPUT TYPE='hidden' NAME='pass_db' VALUE=\"$pass_db\"><P>";
-	echo "<INPUT TYPE='hidden' NAME='sel_db' VALUE=\"$sel_db\"><P>";
+	echo "<INPUT TYPE='hidden' NAME='etape' VALUE='6'>";
 
 	echo "<fieldset><label><B>Votre identit&eacute; publique...</B><BR></label>";
 	echo "<B>Signature</B><BR>";
@@ -111,7 +96,7 @@ if ($etape6) {
 		
 	echo "<B>Votre adresse email</B><BR>";
 	echo "<INPUT TYPE='text' NAME='email' CLASS='formo' VALUE=\"$email\" SIZE='40'></fieldset><P>\n";
-			
+
 	echo "<fieldset><label><B>Vos identifiants de connexion...</B><BR></label>";
 	echo "<B>Votre login</B><BR>";
 	echo "(Plus de 3 caract&egrave;res)<BR>";
@@ -121,22 +106,26 @@ if ($etape6) {
 	echo "(Plus de 5 caract&egrave;res)<BR>";
 	echo "<INPUT TYPE='text' NAME='pass' CLASS='formo' VALUE=\"$pass\" SIZE='40'></fieldset><P>\n";
 
-	$rootf = $PATH_TRANSLATED;
-	$rootf = ereg_replace("\\\\", "/", $rootf);
-	$rootf = substr($rootf, 0, strrpos($rootf, "/"))."/";
-
-	// Cas particuliers
-
-	echo "<INPUT TYPE='hidden' NAME='rootf' CLASS='forml' VALUE=\"$rootf\" SIZE='40'>";
-
 	echo "<DIV align='right'><INPUT TYPE='submit' CLASS='fondl' NAME='Valider' VALUE='Suivant >>'>";
 	echo "</FORM>";
+	echo "<p>";
 
+	if ($flag_ldap AND !$ldap_present) {
+		echo "<div style='border: 1px solid #404040; padding: 10px; text-align: left;'>";
+		echo "<b>Authentification externe</b>";
+		echo "<p>Si vous avez acc&egrave;s &agrave; un annuaire (LDAP), vous pouvez l'utiliser pour ";
+		echo "importer automatiquement des utilisateurs sous SPIP.";
+		echo "<FORM ACTION='install.php3' METHOD='post'>";
+		echo "<INPUT TYPE='hidden' NAME='etape' VALUE='ldap1'>";
+		echo "<DIV align='right'><INPUT TYPE='submit' CLASS='fondl' NAME='Valider' VALUE=\"Ajouter l'acc&egrave;s &agrave; LDAP >>\">";
+		echo "</FORM>";
+	}
 
 	install_fin_html();
 
 }
-elseif ($etape4) {
+
+else if ($etape == 4) {
 
 	install_debut_html();
 
@@ -145,7 +134,6 @@ elseif ($etape4) {
 
 	$link = mysql_connect("$adresse_db", "$login_db", "$pass_db");
 
-
 	echo "<"."!--";
 
 	if ($choix_db == "new_spip") {
@@ -168,27 +156,36 @@ elseif ($etape4) {
 
 	
 	if ($result_ok) {
+		$conn = "<"."?php\n";
+		$conn .= "if (defined(\"_ECRIRE_INC_CONNECT\")) return;\n";
+		$conn .= "define(\"_ECRIRE_INC_CONNECT\", \"1\");\n";
+		$conn .= "\$GLOBALS['db_ok'] = true;\n";
+		$conn .= "@mysql_connect(\"$adresse_db\",\"$login_db\",\"$pass_db\");\n";
+		$conn .= "@mysql_select_db(\"$sel_db\");\n";
+		$conn .= "\$GLOBALS['db_ok'] &= !!@mysql_num_rows(@spip_query('SELECT COUNT(*) FROM spip_meta'));\n";
+		$conn .= "?".">";
+		$myFile = fopen("inc_connect_install.php3", "wb");
+		fputs($myFile, $conn);
+		fclose($myFile);
+
 		echo "<B>La structure de votre base de donn&eacute;es est install&eacute;e.</B><P>Vous pouvez passer &agrave; l'&eacute;tape suivante.";
 
 		echo "<FORM ACTION='install.php3' METHOD='post'>";
-		echo "<INPUT TYPE='hidden' NAME='etape5' VALUE='oui'>";
-		echo "<INPUT TYPE='hidden' NAME='adresse_db'  VALUE=\"$adresse_db\" SIZE='40'>";
-		echo "<INPUT TYPE='hidden' NAME='login_db' VALUE=\"$login_db\">";
-		echo "<INPUT TYPE='hidden' NAME='pass_db' VALUE=\"$pass_db\"><P>";
-		echo "<INPUT TYPE='hidden' NAME='sel_db' VALUE=\"$sel_db\"><P>";
+		echo "<INPUT TYPE='hidden' NAME='etape' VALUE='5'>";
 
 		echo "<DIV align='right'><INPUT TYPE='submit' CLASS='fondl' NAME='Valider' VALUE='Suivant >>'>";
 
 		echo "</FORM>";
 	}
-	else{
+	else {
 		echo "<B>L'op&eacute;ration a &eacute;chou&eacute;.</B> Retournez &agrave; la page pr&eacute;c&eacute;dente, s&eacute;lectionnez une autre base ou cr&eacute;ez-en une nouvelle. V&eacute;rifiez les informations fournies par votre h&eacute;bergeur.";
 	}
 
 	install_fin_html();
 
 }
-elseif ($etape3) {
+
+else if ($etape == 3) {
 
 	install_debut_html();
 
@@ -198,7 +195,7 @@ elseif ($etape3) {
 	echo "<P>";
 
 	echo "<FORM ACTION='install.php3' METHOD='post'>";
-	echo "<INPUT TYPE='hidden' NAME='etape4' VALUE='oui'>";
+	echo "<INPUT TYPE='hidden' NAME='etape' VALUE='4'>";
 	echo "<INPUT TYPE='hidden' NAME='adresse_db'  VALUE=\"$adresse_db\" SIZE='40'>";
 	echo "<INPUT TYPE='hidden' NAME='login_db' VALUE=\"$login_db\">";
 	echo "<INPUT TYPE='hidden' NAME='pass_db' VALUE=\"$pass_db\"><P>";
@@ -256,7 +253,8 @@ elseif ($etape3) {
 	install_fin_html();
 
 }
-elseif($etape2) {
+
+else if ($etape == 2) {
 
 	install_debut_html();
 
@@ -273,7 +271,7 @@ elseif($etape2) {
 		echo "<B>La connexion a r&eacute;ussi.</B><P> Vous pouvez passer &agrave; l'&eacute;tape suivante.";
 
 		echo "<FORM ACTION='install.php3' METHOD='post'>";
-		echo "<INPUT TYPE='hidden' NAME='etape3' VALUE='oui'>";
+		echo "<INPUT TYPE='hidden' NAME='etape' VALUE='3'>";
 		echo "<INPUT TYPE='hidden' NAME='adresse_db'  VALUE=\"$adresse_db\" SIZE='40'>";
 		echo "<INPUT TYPE='hidden' NAME='login_db' VALUE=\"$login_db\">";
 		echo "<INPUT TYPE='hidden' NAME='pass_db' VALUE=\"$pass_db\"><P>";
@@ -290,7 +288,7 @@ elseif($etape2) {
 	install_fin_html();
 		
 }
-elseif ($etape1) {
+else if ($etape == 1) {
 	install_debut_html();
 
 	echo "<BR><FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=3>Premi&egrave;re &eacute;tape : <B>Votre connexion MySQL</B></FONT>";
@@ -299,20 +297,33 @@ elseif ($etape1) {
 
 	echo aide ("install1");
 
+	$adresse_db = 'localhost';
+	$login_db = $login_hebergeur;
+	$pass_db = '';
+
+	// Recuperer les anciennes donnees (si presentes)
+	if (file_exists("inc_connect_install.php3")) {
+		$s = @join('', @file("inc_connect_install.php3"));
+		if (ereg('mysql_connect\("(.*)","(.*)","(.*)"\)', $s, $regs)) {
+			$adresse_db = $regs[1];
+			$login_db = $regs[2];
+			$pass_db = $regs[3];
+		}
+	}
 
 	echo "<p><FORM ACTION='install.php3' METHOD='post'>";
-	echo "<INPUT TYPE='hidden' NAME='etape2' VALUE='oui'>";
+	echo "<INPUT TYPE='hidden' NAME='etape' VALUE='2'>";
 	echo "<fieldset><label><B>Adresse de la base de donn&eacute;es</B><BR></label>";
 	echo "(Souvent cette adresse correspond &agrave; celle de votre site, parfois elle correspond &agrave; la mention &laquo;localhost&raquo;, parfois elle est laiss&eacute;e totalement vide.)<BR>";
-	echo "<INPUT TYPE='text' NAME='adresse_db' CLASS='formo' VALUE=\"localhost\" SIZE='40'></fieldset><P>";
+	echo "<INPUT TYPE='text' NAME='adresse_db' CLASS='formo' VALUE=\"$adresse_db\" SIZE='40'></fieldset><P>";
 
 	echo "<fieldset><label><B>Le login de connexion</B><BR></label>";
 	echo "(Correspond parfois &agrave; votre login d'acc&egrave;s au FTP; parfois laiss&eacute; vide)<BR>";
-	echo "<INPUT TYPE='text' NAME='login_db' CLASS='formo' VALUE=\"$login_hebergeur\" SIZE='40'></fieldset><P>";
+	echo "<INPUT TYPE='text' NAME='login_db' CLASS='formo' VALUE=\"$login_db\" SIZE='40'></fieldset><P>";
 
 	echo "<fieldset><label><B>Le mot de passe de connexion</B><BR></label>";
 	echo "(Correspond parfois &agrave; votre mot de passe pour le FTP; parfois laiss&eacute; vide)<BR>";
-	echo "<INPUT TYPE='text' NAME='pass_db' CLASS='formo' VALUE=\"\" SIZE='40'></fieldset><P>";
+	echo "<INPUT TYPE='password' NAME='pass_db' CLASS='formo' VALUE=\"$pass_db\" SIZE='40'></fieldset><P>";
 
 	echo "<DIV align='right'><INPUT TYPE='submit' CLASS='fondl' NAME='Valider' VALUE='Suivant >>'>";
 
@@ -322,8 +333,222 @@ elseif ($etape1) {
 	install_fin_html();
 
 }
-else {
+else if (!$etape) {
 	header("Location: ../spip_test_dirs.php3");
 }
 
+
+//
+// Etapes de l'installation LDAP
+//
+
+else if ($etape == 'ldap5') {
+	install_debut_html();
+
+	include_ecrire('inc_connect_install.php3');
+	include_ecrire('inc_meta.php3');
+	ecrire_meta("ldap_statut_import", $statut_ldap);
+	ecrire_metas();
+
+	echo "<B>L'authentification LDAP est install&eacute;e.</B>";
+	echo "<P>Vous pouvez maintenant terminer la proc&eacute;dure d'installation standard.";
+
+	echo "<FORM ACTION='install.php3' METHOD='post'>";
+	echo "<INPUT TYPE='hidden' NAME='etape' VALUE='5'>";
+
+	echo "<DIV align='right'><INPUT TYPE='submit' CLASS='fondl' NAME='Valider' VALUE='Suivant >>'>";
+
+	echo "</FORM>";
+}
+
+else if ($etape == 'ldap4') {
+	install_debut_html();
+
+	$ldap_link = @ldap_connect("$adresse_ldap", "$port_ldap");
+
+	if (!$base_ldap) $base_ldap = $base_ldap_text;
+
+	$r = @ldap_compare($ldap_link, $base_ldap, "objectClass", "");
+
+	if ($r < 0) {
+		echo "<BR><FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=3>Options : <B>Chemin d'acc&egrave;s dans l'annuaire</B></FONT>";
+		echo "<P>";
+
+		echo "<B>L'op&eacute;ration a &eacute;chou&eacute;.</B> Le chemin que vous avez choisi (<tt>".htmlspecialchars($base_ldap);
+		echo "</tt>) ne semble pas valide, ou ne vous est pas autoris&eacute;. Veuillez retourner &agrave; la page pr&eacute;c&eacute;dente ";
+		echo "et v&eacute;rifier les informations fournies.";
+	}
+	else {
+		echo "<BR><FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=3>Options : <B>R&eacute;glage de l'importation LDAP</B></FONT>";
+		echo "<P>";
+
+		$conn = join('', file("inc_connect_install.php3"));
+		$conn = split('\?'.'\>', $conn, 2);
+		$conn = $conn[0];
+		if (!strpos($conn, 'spip_connect_ldap')) {
+			$conn .= "function spip_connect_ldap() {\n";
+			$conn .= "\treturn (\$GLOBALS['ldap_link'] = @ldap_connect(\"$adresse_ldap\",\"$port_ldap\"));\n";
+			$conn .= "}\n";
+			$conn .= "\$GLOBALS['ldap_base'] = \"$base_ldap\";\n";
+			$conn .= "\$GLOBALS['ldap_present'] = true;\n";
+		}
+		$conn .= "?".">";
+		$myFile = fopen("inc_connect_install.php3", "wb");
+		fputs($myFile, $conn);
+		fclose($myFile);
+
+		echo "<p><FORM ACTION='install.php3' METHOD='post'>";
+		echo "<INPUT TYPE='hidden' NAME='etape' VALUE='ldap5'>";
+		echo "<fieldset><label><B>Statut par d&eacute;faut des utilisateurs import&eacute;s</B></label><BR>";
+		echo "Choisissez le statut qui est attribu&eacute; aux personnes pr&eacute;sentes dans ";
+		echo "l'annuaire LDAP lorsqu'elles se connectent pour la première fois. ";
+		echo "Vous pourrez par la suite modifier cette valeur pour chaque auteur au cas par cas. ";
+		echo "<p>";
+		echo "<INPUT TYPE='Radio' NAME='statut_ldap' VALUE=\"6forum\" id='visit'>";
+		echo "<label for='visit'><b>Visiteur</b></label> du site public<br>";
+		echo "<INPUT TYPE='Radio' NAME='statut_ldap' VALUE=\"1comite\" id='redac' CHECKED>";
+		echo "<label for='redac'><b>R&eacute;dacteur</b></label> ayant acc&egrave;s &agrave; l'espace priv&eacute; (<i>recommand&eacute;</i>)<br>";
+		echo "<INPUT TYPE='Radio' NAME='statut_ldap' VALUE=\"0minirezo\" id='admin'>";
+		echo "<label for='admin'><b>Administrateur</b></label> du site (<i>utilisez avec pr&eacute;caution</i>)<br>";
+	
+		echo "<DIV align='right'><INPUT TYPE='submit' CLASS='fondl' NAME='Valider' VALUE='Suivant >>'>";
+
+		echo "</FORM>";
+	}
+
+	install_fin_html();
+}
+
+else if ($etape == 'ldap3') {
+	install_debut_html();
+
+	echo "<BR><FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=3>Options : <B>Chemin d'acc&egrave;s dans l'annuaire</B></FONT>";
+
+	echo "<P>Vous devez d&eacute;sormais configurer le chemin d'acc&egrave;s aux informations dans l'annuaire. ";
+	echo "Cette information est indispensable pour lire les profils utilisateurs stock&eacute;s dans l'annuaire. ";
+
+	$ldap_link = @ldap_connect("$adresse_ldap", "$port_ldap");
+
+	$result = @ldap_read($ldap_link, "", "objectclass=*", array("namingContexts"));
+	$info = @ldap_get_entries($ldap_link, $result);
+
+	echo "<FORM ACTION='install.php3' METHOD='post'>";
+	echo "<INPUT TYPE='hidden' NAME='etape' VALUE='ldap4'>";
+	echo "<INPUT TYPE='hidden' NAME='adresse_ldap'  VALUE=\"$adresse_ldap\" SIZE='40'>";
+	echo "<INPUT TYPE='hidden' NAME='port_ldap' VALUE=\"$port_ldap\">";
+
+	echo "<fieldset>";
+
+	$checked = false;
+
+	if (is_array($info)) {
+		echo "<P><b>S&eacute;lectionnez</b> ci-apr&egrave;s le chemin d'acc&egrave;s dans l'annuaire&nbsp;:";
+		echo "<UL>";
+		$n = 0;
+		for ($i = 0; $i < $info["count"]; $i++) {
+			$names = $info[$i]["namingcontexts"];
+			if (is_array($names)) {
+				for ($j = 0; $j < $names["count"]; $j++) {
+					$n++;
+					echo "<INPUT NAME=\"base_ldap\" VALUE=\"".htmlspecialchars($names[$j])."\" TYPE='Radio' id='tab$n'";
+					if (!$checked) {
+						echo " CHECKED";
+						$checked = true;
+					}
+					echo ">";
+					echo "<label for='tab$n'>".htmlspecialchars($names[$j])."</label><BR>\n";
+				}
+			}
+		}
+		echo "</UL>";
+		echo "ou... ";
+	}
+	echo "<INPUT NAME=\"base_ldap\" VALUE=\"\" TYPE='Radio' id='manuel'";
+	if (!$checked) {
+		echo " CHECKED";
+		$checked = true;
+	}
+	echo ">";
+	echo "<label for='manuel'><B>Entrer</B> le chemin d'acc&egrave;s&nbsp;:</label> ";
+	echo "<INPUT TYPE='text' NAME='base_ldap_text' CLASS='fondo' VALUE=\"dc=mon-domaine, dc=com\" SIZE='40'></fieldset><P>";
+
+	echo "<DIV align='right'><INPUT TYPE='submit' CLASS='fondl' NAME='Valider' VALUE='Suivant >>'>";
+	echo "</FORM>";
+
+	install_fin_html();
+
+}
+
+else if ($etape == 'ldap2') {
+	install_debut_html();
+
+	echo "<BR><FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=3>Options : <B>Votre connexion LDAP</B></FONT>";
+
+	echo "<P>";
+
+	$ldap_link = @ldap_connect("$adresse_ldap", "$port_ldap");
+
+	if ($ldap_link) {
+		echo "<B>La connexion LDAP a r&eacute;ussi.</B><P> Vous pouvez passer &agrave; l'&eacute;tape suivante.";
+
+		echo "<FORM ACTION='install.php3' METHOD='post'>";
+		echo "<INPUT TYPE='hidden' NAME='etape' VALUE='ldap3'>";
+		echo "<INPUT TYPE='hidden' NAME='adresse_ldap'  VALUE=\"$adresse_ldap\" SIZE='40'>";
+		echo "<INPUT TYPE='hidden' NAME='port_ldap' VALUE=\"$port_ldap\">";
+
+		echo "<DIV align='right'><INPUT TYPE='submit' CLASS='fondl' NAME='Valider' VALUE='Suivant >>'>";
+		echo "</FORM>";
+	}
+	else {
+		echo "<B>La connexion au serveur LDAP a &eacute;chou&eacute;.</B>";
+		echo "<P>Revenez &agrave; la page pr&eacute;c&eacute;dente, et v&eacute;rifiez les informations que vous avez fournies. ";
+		echo "<br>Alternativement, n'utilisez pas le support LDAP pour importer des utilisateurs.";
+	}
+
+	install_fin_html();
+
+}
+
+else if ($etape == 'ldap1') {
+	install_debut_html();
+
+	echo "<BR><FONT FACE='Verdana,Arial,Helvetica,sans-serif' SIZE=3>Options : <B>Votre connexion LDAP</B></FONT>";
+
+	echo "<P>Veuillez entrer dans ce formulaire les informations de connexion &agrave; votre annuaire LDAP. ";
+	echo "Ces informations doivent pouvoir vous &ecirc;tre fournies par l'administrateur du syst&egrave;me ";
+	echo "ou du r&eacute;seau.";
+
+	$adresse_ldap = 'localhost';
+	$port_ldap = 389;
+
+	// Recuperer les anciennes donnees (si presentes)
+	if (file_exists("inc_connect_install.php3")) {
+		$s = @join('', @file("inc_connect_install.php3"));
+		if (ereg('ldap_connect\("(.*)","(.*)"\)', $s, $regs)) {
+			$adresse_ldap = $regs[1];
+			$port_ldap = $regs[2];
+		}
+	}
+
+	echo "<p><FORM ACTION='install.php3' METHOD='post'>";
+	echo "<INPUT TYPE='hidden' NAME='etape' VALUE='ldap2'>";
+	echo "<fieldset><label><B>Adresse de l'annuaire</B><BR></label>";
+	echo "(Si votre annuaire est install&eacute; sur la m&ecirc;me machine que ce site Web, il s'agit ";
+	echo "probablement de &laquo;localhost&raquo;.)<BR>";
+	echo "<INPUT TYPE='text' NAME='adresse_ldap' CLASS='formo' VALUE=\"$adresse_ldap\" SIZE='20'><P>";
+
+	echo "<label><B>Le num&eacute;ro de port de l'annuaire</B><BR></label>";
+	echo "(La valeur indiqu&eacute;e par d&eacute;faut convient g&eacute;n&eacute;ralement.)<BR>";
+	echo "<INPUT TYPE='text' NAME='port_ldap' CLASS='formo' VALUE=\"$port_ldap\" SIZE='20'><P></fieldset>";
+
+	echo "<DIV align='right'><INPUT TYPE='submit' CLASS='fondl' NAME='Valider' VALUE='Suivant >>'>";
+
+
+	echo "</FORM>";
+
+	install_fin_html();
+
+}
+
+
 ?>
diff --git a/inc-login.php3 b/inc-login.php3
index 7f77ad551e1e6c1a9480647b411c443e34cf2609..a5c6eb969956b3ac48e7ceb29a0ef73129742a64 100644
--- a/inc-login.php3
+++ b/inc-login.php3
@@ -105,6 +105,8 @@ function login($cible = '', $prive = 'prive', $message_login='') {
 	} else if ($login == '-1')
 		$login = '';
 
+	$flag_autres_sources = $GLOBALS['ldap_present'];
+
 	// quels sont les aleas a passer ?
 	if ($login) {
 		$login = addslashes($login);
@@ -112,9 +114,10 @@ function login($cible = '', $prive = 'prive', $message_login='') {
 		$result = spip_query($query);
 		if ($row = mysql_fetch_array($result)) {
 			$id_auteur = $row['id_auteur'];
+			$source_auteur = $row['source'];
 			$alea_actuel = $row['alea_actuel'];
 			$alea_futur = $row['alea_futur'];
-		} else {
+		} else if (!$flag_autres_sources) {
 			$erreur = "L'identifiant &laquo; $login &raquo; est inconnu.";
 			$login = '';
 			@setcookie("spip_admin", "", time() - 3600);
@@ -140,10 +143,12 @@ function login($cible = '', $prive = 'prive', $message_login='') {
 	}
 
 	if ($login) {
-		// affiche formulaire de login en incluant le javascript MD5
-		echo "<script type=\"text/javascript\" src=\"ecrire/md5.js\"></script>";
+		// Affiche formulaire de login en incluant le javascript MD5
+		$flag_challenge_md5 = ($source_auteur == 'spip');
+
+		if ($flag_challenge_md5) echo "<script type=\"text/javascript\" src=\"ecrire/md5.js\"></script>";
 		echo "<form name='form_login' action='./spip_cookie.php3' method='post'";
-		echo " onSubmit='if (this.session_password.value) {
+		if ($flag_challenge_md5) echo " onSubmit='if (this.session_password.value) {
 				this.session_password_md5.value = calcMD5(\"$alea_actuel\" + this.session_password.value);
 				this.next_session_password_md5.value = calcMD5(\"$alea_futur\" + this.session_password.value);
 				this.session_password.value = \"\";
@@ -152,21 +157,24 @@ function login($cible = '', $prive = 'prive', $message_login='') {
 		echo "<div class='spip_encadrer'>";
 		if ($erreur) echo "<div class='reponse_formulaire'><b>$erreur</b></div><p>";
 
-		// si jaja actif, on affiche le login en 'dur', et on le passe en champ hidden
-		echo "<script type=\"text/javascript\"><!--\n" .
-			"document.write('Login : <b>$login</b> <br><font size=\\'2\\'>[<a href=\\'spip_cookie.php3?cookie_admin=non&url=".rawurlencode($clean_link->getUrl())."\\'>se connecter sous un autre identifiant</a>]</font>');\n" .
-			"//--></script>\n";
-		echo "<input type='hidden' name='session_login_hidden' value='$login'>";
-
-		// si jaja inactif, le login est modifiable (puisque le challenge n'est pas utilise)
-		echo "<noscript>";
-		echo "<font face='Georgia, Garamond, Times, serif' size='3'>";
-		echo "Attention, ce formulaire n'est pas s&eacute;curis&eacute;. ";
-		echo "Si vous ne voulez pas que votre mot de passe puisse &ecirc;tre ";
-		echo "intercept&eacute; sur le r&eacute;seau, veuillez activer Javascript ";
-		echo "dans votre navigateur et <a href=\"".$clean_link->getUrl()."\">recharger cette page</a>.<p></font>\n";
+		if ($flag_challenge_md5) {
+			// si jaja actif, on affiche le login en 'dur', et on le passe en champ hidden
+			echo "<script type=\"text/javascript\"><!--\n" .
+				"document.write('Login : <b>$login</b> <br><font size=\\'2\\'>[<a href=\\'spip_cookie.php3?cookie_admin=non&url=".rawurlencode($clean_link->getUrl())."\\'>se connecter sous un autre identifiant</a>]</font>');\n" .
+				"//--></script>\n";
+			echo "<input type='hidden' name='session_login_hidden' value='$login'>";
+	
+			// si jaja inactif, le login est modifiable (puisque le challenge n'est pas utilise)
+			echo "<noscript>";
+			echo "<font face='Georgia, Garamond, Times, serif' size='3'>";
+			echo "Attention, ce formulaire n'est pas s&eacute;curis&eacute;. ";
+			echo "Si vous ne voulez pas que votre mot de passe puisse &ecirc;tre ";
+			echo "intercept&eacute; sur le r&eacute;seau, veuillez activer Javascript ";
+			echo "dans votre navigateur et <a href=\"".$clean_link->getUrl()."\">recharger cette page</a>.<p></font>\n";
+		}
 		echo "<label><b>Login (identifiant de connexion au site)&nbsp;:</b><br></label>";
-		echo "<input type='text' name='session_login' class='forml' value=\"$login\" size='40'></noscript>\n";
+		echo "<input type='text' name='session_login' class='forml' value=\"$login\" size='40'>\n";
+		if ($flag_challenge_md5) echo "</noscript>\n";
 
 		echo "<br><br>\n<label><b>Mot de passe&nbsp;:</b><br></label>";
 		echo "<input type='password' name='session_password' class='forml' value=\"\" size='40'>\n";
diff --git a/spip_cookie.php3 b/spip_cookie.php3
index 399d6110755d50a44945ef8ff56f1face57e7856..0c8ceb9ccb85f8007e27a57944f5c837857eb25f 100644
--- a/spip_cookie.php3
+++ b/spip_cookie.php3
@@ -67,21 +67,23 @@ if ($test_echec_cookie == 'oui') {
 	exit;
 }
 
-// tentative de login
+// Tentative de login
 unset ($cookie_session);
 if ($essai_login == "oui") {
-	// recuperer le login passe en champ hidden
+	// Recuperer le login en champ hidden
 	if ($session_login_hidden AND !$session_login)
 		$session_login = $session_login_hidden;
 
-	// verifier l'auteur
-	$login = addslashes($session_login);
+	$login = $session_login;
+	$pass = $session_password;
+
+	// Recuperer le mot de passe en champ hidden
 	if ($session_password_md5) { // mot passe en md5
 		$md5pass = $session_password_md5;
 		$md5next = $next_session_password_md5;
 	}
-	else { // mot passe en clair
-		$query = "SELECT * FROM spip_auteurs WHERE login='$login' AND statut!='5poubelle'";
+	else if ($session_password) { // mot passe en clair
+		$query = "SELECT alea_actuel, alea_futur FROM spip_auteurs WHERE login='$login' AND statut!='5poubelle'";
 		$result = spip_query($query);
 		if ($row = mysql_fetch_array($result)) {
 			$md5pass = md5($row['alea_actuel'] . $session_password);
@@ -89,28 +91,36 @@ if ($essai_login == "oui") {
 		}
 	}
 
-	$query = "SELECT * FROM spip_auteurs WHERE login='$login' AND pass='$md5pass' AND statut<>'5poubelle'";
-	$result = spip_query($query);
-
-	if ($row_auteur = mysql_fetch_array($result)) { // login reussi
-		if ($row_auteur['statut'] == 'nouveau') { // nouvel inscrit
-			spip_query ("UPDATE spip_auteurs SET statut='1comite' WHERE login='$login'");
-			$row_auteur['statut'] = '1comite';
+	// Essayer differentes methodes d'authentification
+	$auths = array('spip');
+	if ($ldap_present) $auths[] = 'ldap';
+
+	$ok = false;
+	reset($auths);
+	while (list(, $nom_auth) = each($auths)) {
+		include_ecrire("inc_auth_".$nom_auth.".php3");
+		$classe_auth = "Auth_".$nom_auth;
+		$auth = new $classe_auth;
+		if ($auth->init()) {
+			$ok = $auth->verifier_challenge_md5($login, $md5pass, $md5next);
+			if (!$ok && $session_password) $ok = $auth->verifier($login, $session_password);
 		}
+		if ($ok) break;
+	}
+
+	if ($ok) $ok = $auth->lire();
+
+	if ($ok) {
+		$auth->activer();
+
+		if ($auth->login AND $auth->statut == '0minirezo') // force le cookie pour les admins
+			$cookie_admin = "@".$auth->login;
+
+		$query = "SELECT * FROM spip_auteurs WHERE login='".addslashes($login)."'";
+		$result = spip_query($query);
+		if ($row_auteur = mysql_fetch_array($result)) 
+			$cookie_session = creer_cookie_session($row_auteur);
 
-		if ($row_auteur['statut'] == '0minirezo') // force le cookie pour les admins
-			$cookie_admin = "@".$row_auteur['login'];
-
-		$cookie_session = creer_cookie_session($row_auteur);
-	
-		// fait tourner le codage du pass dans la base
-		$nouvel_alea_futur = creer_uniqid();
-		$query = "UPDATE spip_auteurs
-			SET alea_actuel = alea_futur,
-				pass = '$md5next',
-				alea_futur = '$nouvel_alea_futur'
-			WHERE login='$login'";
-		@spip_query($query);
 		if (ereg("ecrire/", $cible->getUrl())) {
 			$cible->addVar('bonjour','oui');
 		}
diff --git a/spip_test_dirs.php3 b/spip_test_dirs.php3
index 131ce654afbf9cc41479c811c7e73a67f8eba963..5ce648a0b6e76c80217c323349b3d8f58d4ba683 100644
--- a/spip_test_dirs.php3
+++ b/spip_test_dirs.php3
@@ -54,7 +54,7 @@ if ($bad_dirs) {
 	install_fin_html();
 } else {
 	if ($install)
-		header("Location: ./ecrire/install.php3?etape1=oui");
+		header("Location: ./ecrire/install.php3?etape=1");
 	else
 		header("Location: ./ecrire/");
 }