diff --git a/.gitattributes b/.gitattributes
index 35798078b5ea6775649f3079d9b97191d1811da3..be29d9ee580f39a1de0812f28dfa63fb114d91bd 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -17,6 +17,7 @@ dist/formulaires/editer_rubrique.php -text
 dist/formulaires/editer_site.html -text
 dist/formulaires/editer_site.php -text
 dist/formulaires/editer_site_fonctions.php -text
+dist/formulaires/login.php -text
 dist/formulaires/login_forum_abo.html -text
 dist/formulaires/logo_auteur.html -text
 dist/formulaires/oubli/charger.php -text
@@ -222,6 +223,7 @@ dist/images/sans-heure.gif -text
 dist/images/searching.gif -text
 dist/images/secteur-12.gif -text
 dist/images/secteur-24.gif -text
+dist/images/securise.gif -text
 dist/images/set-ecran-etroit.png -text
 dist/images/set-ecran.png -text
 dist/images/site-24.gif -text
@@ -663,6 +665,7 @@ ecrire/inc/gadgets.php -text
 ecrire/inc/grouper_mots.php -text
 ecrire/inc/headers.php -text
 ecrire/inc/iconifier.php -text
+ecrire/inc/identifier_login.php -text
 ecrire/inc/import_0_0.php -text
 ecrire/inc/import_1_2.php -text
 ecrire/inc/import_1_3.php -text
diff --git a/dist/formulaires/login.html b/dist/formulaires/login.html
index fa1be3cc471a3fcc6d94d7fa285aacbd3d75668c..54bd096fb3a607add07490507ace452fc8778842 100644
--- a/dist/formulaires/login.html
+++ b/dist/formulaires/login.html
@@ -1,81 +1,43 @@
+#CACHE{0}
 #HTTP_HEADER{"Cache-Control: no-store, no-cache, must-revalidate"}
 #HTTP_HEADER{"Pragma: no-cache"}
 
-[(#ENV{echec_cookie})
-<fieldset class="reponse_formulaire">
-<legend><:avis_erreur_cookie:></legend>
-<p><:login_cookie_oblige:></p>
-<p><:login_cookie_accepte:></p>
-</fieldset>]
-
-[(#ENV{echec_visiteur})
-<fieldset class="reponse_formulaire">
-<legend><:avis_erreur_visiteur:></legend>
-<p><:texte_erreur_visiteur:></p>
-</fieldset>]
-
-	<script type="text/javascript" src="#EVAL{_DIR_JAVASCRIPT}md5.js"> </script>
-	<form id="login[_(#ENV{login})]"
-		action="[(#ENV{action2})]"
-		method="post"[(#ENV{source}|=={spip}|?{' ',''})
-		onsubmit='if (this.session_password.value) {
-			this.session_password_md5.value = calcMD5("[(#ENV{alea_actuel})]" + this.session_password.value);
-			this.next_session_password_md5.value = calcMD5("[(#ENV{alea_futur})]" + this.session_password.value);
-			this.session_password.value = "";
-			return true;
-			}']>
-	<fieldset>
-	<legend><:form_forum_identifiants:></legend>
-		[<p class="reponse_formulaire">(#ENV*{erreur})</p>]
-
-		<span id="spip_logo_auteur">[(#INCLURE{fond=formulaires/logo_auteur}{id_auteur}|inserer_attribut{alt,#ENV{login_alt}})]</span>
-
-		[<p><label for="var_login"><:login_login2:></label>(#ENV{login}|?{'',' '})<br />
-		<input type="text" class="forml" id="var_login" name="var_login" value="" size="40" /></p>]
-		
-[
-
-
-<input type="hidden" name="session_login_hidden" value="(#ENV{login})" />
-<p id='login_securise' style='display: none;'><:login_login:>&nbsp;<strong>[(#ENV{login_alt})]</strong><br />&#91;<a href='[(#ENV{action2}
-	|parametre_url{cookie_admin,non}
-	|parametre_url{url,#ENV*{url}}
-	|parametre_url{retour,#ENV*{self}})]'><:login_autre_identifiant:></a>&#93;</p>
-<script type="text/javascript"><!--
-if (l=document.getElementById('login_securise'))	l.style.display='';
-//--></script>
-<noscript>
-	<div id='login_non_securise'>
-	<p class="reponse_formulaire"><:login_non_securise:> <a href="[(#ENV{action})]"><:login_recharger:></a>.</p>
-	<p><label for="session_login"><:login_login2:></label><br />
-	<input type="text" class="forml" name="session_login" id="session_login"[ value="(#ENV{login})"] size="40" /></p>
-	</div>
-</noscript>
-]
-	[(#ENV{login}|?{'',' '})<div id='pass_ajax' style='display: none;'>]
-	<p><label[ for="var_login_(#ENV{login})"]><:login_pass2:></label><br />
-	<input type="password" class="forml" name="session_password"[ id="var_login_(#ENV{login})"] value="" size="20" /><br />
-	&#91;<a href="#URL_PAGE{spip_pass}" target="spip_pass" onclick="javascript:window.open(this.href, 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=330'); return false;"><:login_motpasseoublie:></a>&#93;
-	</p>
-
-[(#ENV{rester_connecte})
-	<p><input type="checkbox" name="session_remember" id="session_remember[_(#ENV{login})]" value="oui"[(#ENV*{prefs}|filtre_rester_connecte)checked="checked"]
-	class="intact" onchange="this.className='';" />
-	<label for="session_remember[_(#ENV{login})]"><:login_rester_identifie:></label></p>
-]
-	[(#ENV{login}|?{'',' '})</div>]
-	<input type="hidden" name="session_password_md5" value="" />
-	<input type="hidden" name="next_session_password_md5" value="" />
-	<input type="hidden" name="essai_login" value="oui" />
-	<input type="hidden" name="url" value="[(#ENV{url})]" />
-	<input type="hidden" name="url_echec" value="[(#SELF)]" />
-	<p class="spip_bouton"><input type="submit" value="<:bouton_valider:>" /></p>
-	</fieldset>
+<div class='formulaire_spip formulaire_login formfx'>
+	<br class='spacer' />
+	[<p class="formulaire_message">(#ENV**{_deja_loge})</p>]
+	[<p class="formulaire_message">(#ENV**{message_ok})</p>]
+	[<p class='formulaire_erreur'>(#ENV**{message_erreur})</p>]
+	[(#ENV{editable})
+	<form id='formulaire_login' method='post' action='#ENV{action}' enctype='multipart/form-data'>
+		[(#REM) declarer les hidden qui declencheront le service du formulaire 
+		parametre : url d'action ]
+		#ACTION_FORMULAIRE{#ENV{action}}
+	  <fieldset><legend><:form_forum_identifiants:></legend>
+			<span id="spip_logo_auteur">#ENV*{_logo,''}</span>
+		  <ol class="formfx">
+		    <li class="editer_login obligatoire">
+		      <label for="var_login"><:login_login2:></label>
+		      <input class='text' type='text' name='var_login' id='var_login' class='forml' value="[(#ENV**{var_login})]" size='40' />
+					[<span class='erreur'>(#ENV**{erreurs}|table_valeur{var_login})</span>]
+		    </li>
+		    <li class="editer_password obligatoire">
+		      <label for="password"><:login_pass2:></label>
+		      <input class='password' type='password' name='password' id='password' value="" size='40' />
+					<em id='pass_securise'[(#ENV{_alea_actuel}|?{'',' '})style='display:none;']><img src='#EVAL{_DIR_IMG_PACK}securise.gif' width='16' height='16' alt='<:login_securise:>' /></em>
+					[<span class='erreur'>(#ENV**{erreurs}|table_valeur{password})</span>]
+					<span class='details'>&#91;<a href="#URL_PAGE{spip_pass}" target="spip_pass" onclick="javascript:window.open(this.href, 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=330'); return false;"><:login_motpasseoublie:></a>&#93;</span>
+		    </li>
+				[(#ENV{rester_connecte})
+					<li><input class='checkbox' type="checkbox" name="session_remember" id="session_remember" value="oui" [(#ENV**{cnx}|?{' '})checked="checked"]
+					class="intact" onchange="this.className='';" />
+					<label class='nofx' for="session_remember"><:login_rester_identifie:></label></li>
+				]
+			</ol>
+			<p class="spip_bouton"><input type="submit" value="<:bouton_valider:>" /></p>
+		</fieldset>
 	</form>
-	
-<script type="text/javascript"><!--
-if (l=document.getElementById('var_login[_(#ENV{login})]')) l.focus();
---></script>[
+	]
+	[(#REM) en cas d'absence de cookie, on represente le formulaire alternatif 
 	<form action="(#ENV{auth_http})" method="get">[
 	(#ENV{auth_http}|form_hidden)
 	]
@@ -87,44 +49,48 @@ if (l=document.getElementById('var_login[_(#ENV{login})]')) l.focus();
 	<p class="spip_bouton"><input type="submit" value="<:login_sans_cookiie:>"/></p></div>
 	</fieldset>
 	</form>
-]
-[(#ENV{login}|?{'',' '})
+	]
+</div>
+[(#REM) javascript qui gere la securite du login en evitant de faire circuler le pass en clair]
+<script type="text/javascript" src="#EVAL{_DIR_JAVASCRIPT}md5.js"></script>
 <script type='text/javascript'>
-var alea_actuel;
-var alea_futur;
-var login;
+var alea_actuel='#ENV{_alea_actuel,''}';
+var alea_futur='#ENV{_alea_futur,''}';
+var login='#ENV{var_login,''}';
 var informe_auteur_en_cours = false;
 function informe_auteur(c){
 	eval('c = '+c); // JSON
 	if (c) {
 		alea_actuel = c.alea_actuel;
 		alea_futur = c.alea_futur;
-		$('input#session_login_hidden').attr('value',c.login);
+		jQuery('input#session_login_hidden').attr('value',c.login);
 		// indiquer le cnx si on n'y a pas touche
-		$('input#session_remember.intact')
+		jQuery('input#session_remember.intact')
 		.attr('checked',c.cnx=='1'?'checked':'');
-		$('#spip_logo_auteur').html(c.logo);
+		jQuery('#spip_logo_auteur').html(c.logo);
+		jQuery('#pass_securise').show();
 	} else {
-		$('#spip_logo_auteur').html('');
+		jQuery('#spip_logo_auteur').html('');
 	}
 	informe_auteur_en_cours = false;
 }
 function calcule_md5_pass(pass){
-	$('input\u005b@name=session_password\u005d').attr('value','');
-	$('form#login').attr('action','#ENV{pose_cookie}');
-	$('input\u005b@name=session_password_md5\u005d').attr('value',calcMD5(alea_actuel + pass));
-	$('input\u005b@name=next_session_password_md5\u005d').attr('value',calcMD5(alea_futur + pass));
+	if (alea_actuel) {
+		jQuery('input[@name=password]').attr('value','');
+		jQuery('input[@name=session_password_md5]').attr('value',calcMD5(alea_actuel + pass));
+		jQuery('input[@name=next_session_password_md5]').attr('value',calcMD5(alea_futur + pass));
+	}
 }
-$('form#login #pass_ajax').show().after('<input type="hidden" name="session_login_hidden" id="session_login_hidden" value="" />');
-$('#var_login').blur(function(){
-	if (login!=$(this).attr('value')) {
-		login = $(this).attr('value');
+function actualise_auteur(){
+	if (login!=jQuery('#var_login').attr('value')) {
+		login = jQuery('#var_login').attr('value');
 		informe_auteur_en_cours = true;
-		$.get('#URL_ACTION{informer_auteur}',{var_login:$(this).attr('value')},informe_auteur);
+		$.get('#URL_ACTION{informer_auteur}',{var_login:login},informe_auteur);
 	}
-});
-$('form#login').submit(function(){
-	pass = $('input\u005b@name=session_password\u005d').attr('value');
+}
+jQuery('#var_login').change(function(){actualise_auteur();});
+jQuery('form#formulaire_login').submit(function(){
+	pass = jQuery('input[@name=password]').attr('value');
 	// ne jamais laisser le pass circuler en clair
 	if (pass) {
 		if (alea_actuel)
@@ -136,26 +102,23 @@ $('form#login').submit(function(){
 			
 			// si l'information est en cours, retenter sa chance
 			if (informe_auteur_en_cours) {
-				setTimeout(function(){$('form#login').submit();},300);
+				setTimeout(function(){jQuery('form#formulaire_login').submit();},300);
 				return false;
 			}
 
 			// sinon lancer une demande
 			informe_auteur_en_cours = true;
-			$.get('#URL_ACTION{informer_auteur}',{var_login:$('#var_login').attr('value')},function(c) {
+			$.get('#URL_ACTION{informer_auteur}',{var_login:jQuery('#var_login').attr('value')},function(c) {
 				informe_auteur(c);
 				// le formulaire sera soumis apres reception des info auteur
-				$('form#login').submit();
+				jQuery('form#formulaire_login').submit();
 			});
 			// ou dans un delai maxi de 5s (pour eviter le blocage a cette etape)
-			// mais sans le pass, ce qui fait retomber sur le scenario de repli du login en 2 passes
 			setTimeout(function(){
-				$('input\u005b@name=session_password\u005d').attr('value','');
-				$('form#login').submit();
-			},3000);
+				jQuery('form#formulaire_login').submit();
+			},5000);
 			return false;
 		}
 	}
 });
-</script>
-]
+</script>
\ No newline at end of file
diff --git a/dist/formulaires/login.php b/dist/formulaires/login.php
new file mode 100644
index 0000000000000000000000000000000000000000..d4df85c76fdde5246b203226578e356da12f3b65
--- /dev/null
+++ b/dist/formulaires/login.php
@@ -0,0 +1,220 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2008                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
+
+include_spip('base/abstract_sql');
+spip_connect();
+
+function formulaires_login_charger_dist($cible="",$login="",$prive=null){
+	$auteur = array();
+	$login = $login ? $login : _request('var_login');
+	if (is_null($prive)){
+		$parse = parse_url($cible);
+		$prive = strncmp(substr($parse['path'],-strlen(_DIR_RESTREINT_ABS)), _DIR_RESTREINT_ABS, strlen(_DIR_RESTREINT_ABS))==0;
+	}
+	
+	// Le login est memorise dans le cookie d'admin eventuel
+	if (!$login) {
+		if (isset($_COOKIE['spip_admin']) && preg_match(",^@(.*)$,", $_COOKIE['spip_admin'], $regs))
+			$login = $regs[1];
+	} 
+	else if ($login == '-1'){
+		$login = '';
+	}
+	if ($login){
+		include_spip('inc/identifier_login');
+		$auteur = informer_login($login);
+	}
+	// Ne pas proposer de "rester connecte quelques jours"
+	// si la duree de l'alea est inferieure a 12 h (valeur par defaut)
+	$rester_connecte = (_RENOUVELLE_ALEA < 12*3600) ? '' : ' ';
+	$valeurs = array(
+					#'auth_http' => $auth_http,
+					'var_login' => $login,
+					'rester_connecte' => $rester_connecte,
+					'_logo' => isset($auteur['logo'])?$auteur['logo']:'',
+					'cnx' => isset($auteur['cnx'])?$auteur['cnx']:'',
+					'_alea_actuel' => isset($auteur['alea_actuel'])?$auteur['alea_actuel']:'',
+					'_alea_futur' => isset($auteur['alea_futur'])?$auteur['alea_futur']:'',
+	);
+	$valeurs['_hidden'] = 
+	'<input type="hidden" name="session_password_md5" value="" />'
+	. '<input type="hidden" name="next_session_password_md5" value="" />'
+	. '<input type="hidden" name="session_login_hidden" id="session_login_hidden" value="" />';
+
+	// Si on est connecte, envoyer vers la destination
+	// si on en a le droit, et sauf si on y est deja
+	verifier_visiteur();
+	$editable = false;
+	if (_request('var_erreur') OR !isset($GLOBALS['visiteur_session']['id_auteur']))
+		$editable = true;
+
+	if ($prive) {
+		include_spip('inc/autoriser');
+		$loge = autoriser('ecrire');
+	} else {
+		$loge = ($visiteur_session['auth'] != '');
+	}
+	if ($loge) {
+		// on est a destination ?
+		if ($cible == self())
+			$editable = false;
+		else {
+			// sinon on y va
+			include_spip('inc/headers');
+			$valeurs['_deja_loge'] = 
+			  "<a href='$cible'>" . _T('login_par_ici') . "</a>"
+				. redirige_formulaire($cible)
+				;
+		}
+	}
+
+	return array($editable,$valeurs);
+}
+
+function formulaires_login_verifier_dist($cible="",$login="",$prive=null){
+	global $ignore_auth_http;
+	if (is_null($prive)){
+		$parse = parse_url($cible);
+		$prive = strncmp(substr($parse['path'],-strlen(_DIR_RESTREINT_ABS)), _DIR_RESTREINT_ABS, strlen(_DIR_RESTREINT_ABS))==0;
+	}
+	$erreurs = array();
+	$session_login = _request('var_login');
+	$session_password = _request('password');
+	$session_md5pass = _request('session_password_md5');
+	$session_md5next = _request('next_session_password_md5');
+	
+	// en cas d'echec de cookie, inc_auth a renvoye vers le script de
+	// pose de cookie ; s'il n'est pas la, c'est echec cookie
+	// s'il est la, c'est probablement un bookmark sur bonjour=oui,
+	// et pas un echec cookie.
+	/*if (_request('var_echec_cookie'))
+		$echec_cookie = ($_COOKIE['spip_session'] != 'test_echec_cookie');
+	else $echec_cookie = '';*/
+	
+	if ($echec_cookie){
+		$erreurs['message_erreur'] = "echec cookie ";
+		/*
+		[(#ENV{echec_cookie})
+<fieldset class="reponse_formulaire">
+<legend><:avis_erreur_cookie:></legend>
+<p><:login_cookie_oblige:></p>
+<p><:login_cookie_accepte:></p>
+</fieldset>]*/
+	}
+	
+	#$pose_cookie = generer_url_action('cookie',"",false,true);
+	$auth_http = '';	
+	if ($echec_cookie AND !$ignore_auth_http) {
+		if (($GLOBALS['flag_sapi_name']
+		     AND preg_match(",apache,i", @php_sapi_name()))
+		OR preg_match(",^Apache.* PHP,", $_SERVER['SERVER_SOFTWARE']))
+			$auth_http = $pose_cookie;
+	}
+	// Attention dans le cas 'intranet' la proposition de se loger
+	// par auth_http peut conduire a l'echec.
+	if (isset($_SERVER['PHP_AUTH_USER']) AND isset($_SERVER['PHP_AUTH_PW']))
+		$auth_http = '';
+
+	if ($session_login) {
+		$row =  sql_fetsel('*', 'spip_auteurs', "login=" . sql_quote($session_login));
+		// Retrouver ceux qui signent de leur nom ou email
+		if (!$row AND !spip_connect_ldap()) {
+			$row = sql_fetsel('*', 'spip_auteurs', "(nom = " . sql_quote($session_login) . " OR email = " . sql_quote($session_login) . ") AND login<>'' AND statut<>'5poubelle'");
+			if ($row) {
+				$login_alt = $session_login; # afficher ce qu'on a tape
+				$session_login = $row['login'];
+			}
+		}
+
+		if ((!$row AND !spip_connect_ldap()) OR
+			($row['statut'] == '5poubelle') OR 
+			(($row['source'] == 'spip') AND $row['pass'] == '')) {
+			$erreurs['message_erreur'] =  _T('login_identifiant_inconnu',
+				array('login' => htmlspecialchars($session_login)));
+			$row = array();
+			$session_login = '';
+			include_spip('inc/cookie');
+			spip_setcookie("spip_admin", "", time() - 3600);
+		} else {
+			// on laisse le menu decider de la langue
+			unset($row['lang']);
+		}
+		$identifier_login = charger_fonction('identifier_login','inc');
+		if (!$identifier_login($session_login,$session_password,$session_md5pass,$session_md5next)){
+			$erreurs['password'] = _T('login_erreur_pass');
+		}
+		else {
+			# login ok
+			# verifier si on a pas affaire a un visiteur qui essaye de se loge sur ecrire/
+			if ($prive) {
+				include_spip('inc/autoriser');
+				verifier_visiteur();
+				if (!autoriser('ecrire')){
+					$erreurs['message_erreur'] = "<h1>"._T('avis_erreur_visiteur')."</h1>"
+						. "<p>"._T('texte_erreur_visiteur')."</p>"
+						. "<p class='retour'>[<a href='".generer_url_action('logout','logout=prive&url='.urlencode(self()))."'>"._T('icone_deconnecter')."</a>]</p>";
+				}
+			}
+		}
+	} else {
+		# pas de login saisi !
+		$erreurs['message_erreur'] =  _T('login_identifiant_inconnu',
+			array('login' => htmlspecialchars($login)));
+	}
+	
+	return $erreurs;
+}
+
+function formulaires_login_traiter_dist($cible="",$login="",$prive=null){
+	if (is_null($prive)){
+		$parse = parse_url($cible);
+		$prive = strncmp(substr($parse['path'],-strlen(_DIR_RESTREINT_ABS)), _DIR_RESTREINT_ABS, strlen(_DIR_RESTREINT_ABS))==0;
+	}
+	$message = '';	
+	$auth = charger_fonction('auth','inc');
+	$auth();
+
+	// Si on se connecte dans l'espace prive, 
+	// ajouter "bonjour" (repere a peu pres les cookies desactives)
+	if ($prive)
+		$cible = parametre_url($cible, 'bonjour', 'oui', '&');
+
+	if ($cible) {
+		$cible = parametre_url($cible, 'var_login', '', '&');
+	} 
+	/* cible est fourni par la balise si on veut vraiment etre redirige
+	else {
+		if ($cible = parametre_url($action,'url'))
+			$cible = $cible;
+		else $cible = generer_url_ecrire();
+	}*/
+
+
+	// Si on est connecte, envoyer vers la destination
+	if ($cible
+	 AND ($cible!=self())) {
+		if (!headers_sent() AND !$_GET['var_mode']) {
+			include_spip('inc/headers');
+			$message .= redirige_formulaire($cible);
+		} else {
+			$message .= "<a href='$cible'>" .
+			  _T('login_par_ici') .
+			  "</a>";
+		}
+	}
+	return $message;
+}
+
+
+?>
diff --git a/dist/images/securise.gif b/dist/images/securise.gif
new file mode 100644
index 0000000000000000000000000000000000000000..5b549bb08d3b0c4559354e3ef891662ce8c4b91b
Binary files /dev/null and b/dist/images/securise.gif differ
diff --git a/dist/login.html b/dist/login.html
index 31f85f95f17b3204b49ff75a262884fc604487ae..6ccac56b0884364b0926708d0098bf79d0f61fd5 100644
--- a/dist/login.html
+++ b/dist/login.html
@@ -1,3 +1,5 @@
+#CACHE{0}
+#FILTRE{compacte_head}
 [(#REM)
 	Eviter les boutons d'admin sur la page de login
 ]
@@ -11,26 +13,35 @@
 <meta name="generator" content="SPIP[ (#SPIP_VERSION)]" />
 [<link rel="shortcut icon" href="(#CHEMIN{favicon.ico})" />]
 <link rel="stylesheet" href="[(#CHEMIN{spip_style.css}|direction_css)]" type="text/css" />
+<link rel="stylesheet" href="[(#CHEMIN{formfx.css}|direction_css)]" type="text/css" />
 <link rel="stylesheet" href="[(#CHEMIN{minipres.css}|direction_css)]" type="text/css" />
 <style type="text/css">
 <!--
 	body.page_login { text-align: center; font: 1em Verdana, Tahoma, Geneva, Helvetica, sans-serif; }
 	#minipres { width: 30em; }
-	.formulaire_spip { text-align: #LANG_LEFT; font-size: 0.8em; }
-	.formulaire_spip fieldset {border: 1px solid #BABDB6; padding:10px;font-size: 1em;}
+	.formulaire_login { text-align: #LANG_LEFT; font-size: 0.8em; }
+	.formulaire_login fieldset {border: 1px solid #BABDB6; padding:10px;font-size: 1em;}
 	.formulaire_menu_lang { float: #LANG_RIGHT; }
 	.formulaire_menu_lang label { display: none; }
 	.formulaire_login { clear: both; }
+	.formulaire_login fieldset li label,
+	.formulaire_login fieldset li .erreur,
+	.formulaire_login fieldset li .details {display:block;width:auto;}
+	.formulaire_login fieldset li label.nofx {display:inline;}
+	.formulaire_login fieldset li input.text,
+	.formulaire_login fieldset li input.password {width:20em;}
 	.spip_logos { float: right; padding-left: 10px; }
 	.forml,input { font-size: 1.0em; }
+	#var_lang_ecrire {font-size:0.8em;}
 	p .forml { width: 20em; font-family: inherit; }
 	.spip_bouton input { float: #LANG_RIGHT; }
 	.reponse_formulaire { font-weight: bold; color: red; }
 	a { color: #e86519; text-decoration: none; }
-	.formulaire_login .retour { text-align: center; }
+	.retour { text-align: center;font-size:0.8em; }
+	formulaire_login.retour { font-size:1em; }
 -->
 </style>
-[<script type='text/javascript' src='(#URL_PAGE{jquery.js})'></script>]
+[(#REM|f_jQuery)]
 </head>
 <body class='page_login' >
 
@@ -44,20 +55,16 @@
 	[(#ENV{url}|=={''}|?{#SET{prive,' '}})]
 	[(#ENV{url}|match{'^ecrire/'}|?{#SET{prive,' '}})]
 	[(#GET{prive}) <small><:login_acces_prive:></small>]
-	[(#GET{prive}|?{'',' '}) <!-- ?? -->]
 	
 	</h3>
 	
 	#MENU_LANG_ECRIRE
 	
-	<div class="formulaire_spip formulaire_login">
-		[(#GET{prive}|?{'',' '}) #LOGIN_PUBLIC]
-		[(#GET{prive}|?{' '}) #LOGIN_PRIVE]
+		[(#FORMULAIRE_LOGIN{#ENV{url}|sinon{#URL_ECRIRE{accueil}}})]
 		<p class="retour">
 		[&#91;<a href="#URL_PAGE{identifiants,focus=nom_inscription}&amp;mode=(#URL_SITE_SPIP|tester_config{1comite})" target="spip_pass" onclick="javascript:window.open(this.href, 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=400'); return false;"><:login_sinscrire:></a>&#93;]
 		&#91;<a href="#URL_SITE_SPIP/"><:login_retoursitepublic:></a>&#93;
 		</p>
-	</div>
 	
 </div><!--#minipres-->
 
diff --git a/ecrire/action/cookie.php b/ecrire/action/cookie.php
index e02cad0a121d031b7aac9518887525656d2aab3c..f6caec1f70bfba85c252ad580bca0029e92d2009 100644
--- a/ecrire/action/cookie.php
+++ b/ecrire/action/cookie.php
@@ -20,7 +20,7 @@ function action_cookie_dist() {
 
 	// La cible de notre operation de connexion
 	$url = _request('url');
-	$redirect = isset($url) ? $url : _DIR_RESTREINT_ABS;
+	$redirect = isset($url) ? $url : _DIR_RESTREINT;
 	$redirect_echec = _request('url_echec');
 	if (!isset($redirect_echec)) {
 		if (strpos($redirect,_DIR_RESTREINT_ABS)!==false)
@@ -52,98 +52,27 @@ function action_cookie_dist() {
 		redirige_par_entete(parametre_url(parametre_url($redirect_echec,'var_echec_cookie','oui','&'),'url',rawurlencode($redirect),'&'));
 	}
 
-
-	if (_request('essai_login') == "oui") {
-		// Recuperer le login en champ hidden
-		if (!$session_login = _request('session_login'))
-			$session_login = _request('session_login_hidden');
-
-		if (!spip_connect()) {
-			include_spip('inc/minipres');
-			echo minipres(_T('info_travaux_titre'),  _T('titre_probleme_technique'));
-			exit;
-		}
-
-		$auteur = array();
-
-		// Essayer tour a tour les differentes sources d'authenfication
-		// on s'en souviendra dans visiteur_session['auth']
-		$sources_auth = array('spip', 'ldap');
-		while (!$auteur
-		AND list(,$methode) = each($sources_auth)) {
-			if ($auth = charger_fonction('auth_'.$methode, 'inc', true)
-			AND $auteur = $auth(
-				$session_login, _request('session_password')
-			)) {
-				$auteur['auth'] = $methode;
-			} else {
-				spip_log("pas de connexion avec $methode");
-			}
-		}
-
-		// Sinon, renvoyer le formulaire avec message d'erreur si 2e fois
-		if (!$auteur) {
-			$redirect = parametre_url($redirect_echec,'var_login',$session_login,'&');
-			if (_request('session_password')
-			OR _request('session_password_md5'))
-				$redirect = parametre_url($redirect, 'var_erreur', 'pass', '&');
-			$redirect = parametre_url($redirect,'url',$url,'&');
-			spip_log("echec login: $session_login");
-		}
-
-		// OK on a ete authentifie, on se connecte
-		if ($auteur) {
-			spip_log("login de $session_login vers $redirect (".$auteur['auth']);
-			// Si on se connecte dans l'espace prive, 
-			// ajouter "bonjour" (repere a peu pres les cookies desactives)
-			if (strpos($redirect,_DIR_RESTREINT_ABS)!==false)
-				$redirect = parametre_url($redirect, 'bonjour', 'oui', '&');
-
-			// Prevoir de demander un cookie de correspondance
-			if ($auteur['statut'] == '0minirezo')
-				$set_cookie_admin = "@".$session_login;
-
-			$session = charger_fonction('session', 'inc');
-			$cookie_session = $session($auteur);
-	
-			// La case "rester connecte quelques jours"
-			$session_remember = (_request('session_remember') == 'oui') ? 'perma' : '';
-			if ($session_remember)
-				spip_setcookie('spip_session', $cookie_session, time() + 2 * _RENOUVELLE_ALEA);
-			else
-				spip_setcookie('spip_session', $cookie_session);
-	
-			$prefs = ($auteur['prefs']) ? unserialize($auteur['prefs']) : array();
-			$prefs['cnx'] = $session_remember;
-	
-			sql_updateq('spip_auteurs', array('prefs' => serialize($prefs)), "id_auteur = " . $auteur['id_auteur']);
-		}
-	}
-
 	$cook = isset($_COOKIE['spip_admin']) ? $_COOKIE['spip_admin'] : '';
 	// Suppression cookie d'admin ?
 	if (_request('cookie_admin') == "non") {
-		if (!$retour = _request('retour'))
+		/*if (!$retour = _request('retour'))
 			$retour = generer_url_public('login',
-				'url='.rawurlencode($url), true);
+				'url='.rawurlencode($url), true);*/
 	
 		if ($cook)
 			spip_setcookie('spip_admin', $cook, time() - 3600 * 24);
-		$redirect = parametre_url($retour,'var_login','','&');
+		/*$redirect = parametre_url($retour,'var_login','','&');
 		$redirect = parametre_url($redirect,'var_erreur','','&');
 		$redirect .= ((false !== strpos($redirect, "?")) ? "&" : "?")
-			. "var_login=-1";
+			. "var_login=-1";*/
 	}
-
 	// Ajout de cookie d'admin
-	else if (
-	isset($set_cookie_admin)
-	OR $set_cookie_admin = _request('cookie_admin')
-	) {
+	else if (isset($set_cookie_admin)
+	  OR $set_cookie_admin = _request('cookie_admin')) {
 		spip_setcookie('spip_admin', $set_cookie_admin,
 			time() + 14 * 24 * 3600);
 	}
-
+	
 	// Redirection finale
 	redirige_par_entete($redirect, true);
 }
diff --git a/ecrire/action/informer_auteur.php b/ecrire/action/informer_auteur.php
index f3798c648cdb89677d638a2d6caf61110ec1d6dd..93af68ebd4555995076937045e0cb78d00256868 100644
--- a/ecrire/action/informer_auteur.php
+++ b/ecrire/action/informer_auteur.php
@@ -18,24 +18,13 @@ function action_informer_auteur_dist() {
 	include_spip('inc/json');
 
 	$row = array();
-	if ($login=_request('var_login')) {
-		$row =  sql_fetsel('id_auteur,login,alea_actuel,alea_futur,prefs', 'spip_auteurs', "login=" . sql_quote($login));
-		// Retrouver ceux qui signent de leur nom ou email
-		if (!$row AND !spip_connect_ldap()) {
-			$row = sql_fetsel('id_auteur,login,alea_actuel,alea_futur,prefs', 'spip_auteurs', "(nom = " . sql_quote($login) . " OR email = " . sql_quote($login) . ") AND login<>'' AND statut<>'5poubelle'");
-		}
-		if ($row) {
-			$prefs = unserialize($row['prefs']);
-			$row['cnx'] = $prefs['cnx'] == 'perma' ? '1' : '0';
-			unset($row['prefs']);
-			
-			$page = evaluer_fond('formulaires/logo_auteur', array('id_auteur'=>$row['id_auteur']));
-			$row['logo'] = $page['texte'];
-		}
+	if ($login=_request('var_login')){
+		include_spip('inc/identifier_login');
+		$row = informer_login($login);
 		unset($row['id_auteur']);
-
-		echo json_export($row);
 	}
+	echo json_export($row);
 }
 
-?>
+
+?>
\ No newline at end of file
diff --git a/ecrire/balise/formulaire_.php b/ecrire/balise/formulaire_.php
index ab7c7f2a1f42ae231ac47195759bcb56841dc209..eeb8aaae9e0be7c7b016def4a655f0069eb83d4e 100644
--- a/ecrire/balise/formulaire_.php
+++ b/ecrire/balise/formulaire_.php
@@ -102,7 +102,7 @@ function balise_FORMULAIRE__dyn($form)
 	$args['form'] = $form;
 
 	return array("formulaires/$form",
-		3600,
+		0,
 		array_merge(
 			$valeurs,
 			array(
diff --git a/ecrire/balise/login_prive.php b/ecrire/balise/login_prive.php
index 58830c3e0563f916495297c713293a9ae3d9b3b2..d640f0812059c6424355b37f1c525248038e05b6 100644
--- a/ecrire/balise/login_prive.php
+++ b/ecrire/balise/login_prive.php
@@ -35,6 +35,11 @@ function balise_LOGIN_PRIVE_stat ($args, $filtres) {
 
 // http://doc.spip.org/@balise_LOGIN_PRIVE_dyn
 function balise_LOGIN_PRIVE_dyn($login, $cible) {
-	return login_explicite($login, $cible);
+	include_spip('balise/formulaire_');
+	if (!$url 		# pas d'url passee en filtre ou dans le contexte
+	AND !$url = _request('url') # ni d'url passee par l'utilisateur
+	)
+		$url = generer_url_ecrire('accueil','',true);
+	return balise_FORMULAIRE__dyn('login',$url,$login,true);
 }
-?>
+?>
\ No newline at end of file
diff --git a/ecrire/balise/login_public.php b/ecrire/balise/login_public.php
index 1cb33d4927ea2744f29b1a1002760e67afcd2292..78c002b96947b4456465e2fd7e5f8f21edb7a447 100644
--- a/ecrire/balise/login_public.php
+++ b/ecrire/balise/login_public.php
@@ -33,160 +33,12 @@ function balise_LOGIN_PUBLIC_stat ($args, $filtres) {
 
 // http://doc.spip.org/@balise_LOGIN_PUBLIC_dyn
 function balise_LOGIN_PUBLIC_dyn($url, $login) {
-
+	include_spip('balise/formulaire_');
 	if (!$url 		# pas d'url passee en filtre ou dans le contexte
 	AND !$url = _request('url') # ni d'url passee par l'utilisateur
 	)
 		$url = parametre_url(self(), '', '', '&');
-	return login_explicite($login, $url);
-}
-
-// http://doc.spip.org/@login_explicite
-function login_explicite($login, $cible) {
-	global $visiteur_session;
-
-	$action = parametre_url(self(), '', '', '&');
-	if ($cible) {
-		$cible = parametre_url($cible, 'var_erreur', '', '&');
-		$cible = parametre_url($cible, 'var_login', '', '&');
-	} else {
-		if (preg_match(",[?&]url=([^&]*),", $action, $m))
-			$cible = rawurldecode($m[1]);
-		else $cible = generer_url_ecrire();
-	}
-
-	verifier_visiteur();
-
-	// Si on est connecte, envoyer vers la destination
-	// si on en a le droit, et sauf si on y est deja
-	if (!strncmp($cible, _DIR_RESTREINT_ABS, strlen(_DIR_RESTREINT_ABS))) {
-		include_spip('inc/autoriser');
-		$loge = autoriser('ecrire');
-	} else {
-		$loge = ($visiteur_session['auth'] != '');
-	}
-
-	if ($loge) {
-		// on est a destination ?
-		if ($cible == $action)
-			return '';
-
-		// sinon on y va
-		if (!headers_sent() AND !$_GET['var_mode']) {
-			include_spip('inc/headers');
-			redirige_par_entete($cible);
-		} else {
-			return "<a href='$cible'>" .
-			  _T('login_par_ici') .
-			  "</a>";
-		}
-	}
-
-	return login_pour_tous($login ? $login : _request('var_login'), $cible, $action);
-}
-
-// http://doc.spip.org/@login_pour_tous
-function login_pour_tous($login, $cible, $action) {
-	global $ignore_auth_http;
-
-	// en cas d'echec de cookie, inc_auth a renvoye vers le script de
-	// pose de cookie ; s'il n'est pas la, c'est echec cookie
-	// s'il est la, c'est probablement un bookmark sur bonjour=oui,
-	// et pas un echec cookie.
-	if (_request('var_erreur') == 'cookie')
-		$echec_cookie = ($_COOKIE['spip_session'] != 'test_echec_cookie');
-	else $echec_cookie = '';
-
-	// hack grossier pour changer le message en cas d'echec d'un statut interdit sur ecrire/
-	$echec_visiteur = (_request('var_erreur') == 'statut') ?' ':'';
-
-
-	$pose_cookie = generer_url_action('cookie',"",false,true);
-	$auth_http = '';	
-	if ($echec_cookie AND !$ignore_auth_http) {
-		if (($GLOBALS['flag_sapi_name']
-		     AND preg_match(",apache,i", @php_sapi_name()))
-		OR preg_match(",^Apache.* PHP,", $_SERVER['SERVER_SOFTWARE']))
-			$auth_http = $pose_cookie;
-	}
-	// Attention dans le cas 'intranet' la proposition de se loger
-	// par auth_http peut conduire a l'echec.
-	if (isset($_SERVER['PHP_AUTH_USER']) AND isset($_SERVER['PHP_AUTH_PW']))
-		$auth_http = '';
-
-	// Le login est memorise dans le cookie d'admin eventuel
-	if (!$login) {
-		if (isset($_COOKIE['spip_admin']) && preg_match(",^@(.*)$,", $_COOKIE['spip_admin'], $regs))
-			$login = $regs[1];
-	} else if ($login == '-1')
-		$login = '';
-
-	$erreur = '';
-	if ($login) {
-		$row =  sql_fetsel('*', 'spip_auteurs', "login=" . sql_quote($login));
-		// Retrouver ceux qui signent de leur nom ou email
-		if (!$row AND !spip_connect_ldap()) {
-			$row = sql_fetsel('*', 'spip_auteurs', "(nom = " . sql_quote($login) . " OR email = " . sql_quote($login) . ") AND login<>'' AND statut<>'5poubelle'");
-			if ($row) {
-				$login_alt = $login; # afficher ce qu'on a tape
-				$login = $row['login'];
-			}
-		}
-
-		if ((!$row AND !spip_connect_ldap()) OR
-			($row['statut'] == '5poubelle') OR 
-			(($row['source'] == 'spip') AND $row['pass'] == '')) {
-			$erreur =  _T('login_identifiant_inconnu',
-				array('login' => htmlspecialchars($login)));
-			$row = array();
-			$login = '';
-			include_spip('inc/cookie');
-			spip_setcookie("spip_admin", "", time() - 3600);
-		} else {
-			// on laisse le menu decider de la langue
-			unset($row['lang']);
-		}
-	} else {
-		$row = array();
-	}
-
-	// afficher "erreur de mot de passe" si &var_erreur=pass
-	if (_request('var_erreur') == 'pass')
-		$erreur = _T('login_erreur_pass');
-
-	// Ne pas proposer de "rester connecte quelques jours"
-	// si la duree de l'alea est inferieure a 12 h (valeur par defaut)
-	$rester_connecte = (_RENOUVELLE_ALEA < 12*3600) ? '' : ' ';
-
-	// Appeler le squelette formulaire_login
-	return array('formulaires/login', $GLOBALS['delais'],
-		array_merge(
-				array_map('texte_script', $row),
-				array(
-					'action2' => ($login ? $pose_cookie: $action),
-					'erreur' => $erreur,
-					'action' => $action,
-					'pose_cookie' => $pose_cookie,
-					'url' => $cible,
-					'auth_http' => $auth_http,
-					'echec_cookie' => ($echec_cookie ? ' ' : ''),
-					'echec_visiteur' => $echec_visiteur,
-					'login' => $login,
-					'login_alt' => (isset($login_alt) ? $login_alt : $login),
-					'self' => self('&'),
-					'rester_connecte' => $rester_connecte
-					)
-				)
-			);
-
-}
-
-// Bouton duree de connexion
-
-// http://doc.spip.org/@filtre_rester_connecte
-function filtre_rester_connecte($prefs) {
-	$prefs = unserialize(stripslashes($prefs));
-	return $prefs['cnx'] == 'perma' ? ' ' : '';
+	return balise_FORMULAIRE__dyn('login',$url,$login,false);
 }
 
-?>
+?>
\ No newline at end of file
diff --git a/ecrire/exec/accueil.php b/ecrire/exec/accueil.php
index 4bee0843de2956501deb4124ce85f558219baf36..f33ab43c5b6b780f97410d65e4af69179ae8bdc0 100644
--- a/ecrire/exec/accueil.php
+++ b/ecrire/exec/accueil.php
@@ -196,7 +196,7 @@ function colonne_droite_neq4($id_rubrique, $activer_breves, $activer_sites, $art
 
 	if (!@$_COOKIE['spip_admin']) {
 		$cookie = rawurlencode("@$connect_login");
-		$retour = rawurlencode(_DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT);
+		$retour = rawurlencode('./' . _SPIP_ECRIRE_SCRIPT);
 		$lien = generer_url_action('cookie', "cookie_admin=$cookie&url=$retour");
 		$gadget .= "<div>&nbsp;</div>".
 			  "<table width='95%'><tr>".
@@ -254,7 +254,7 @@ function personnel_accueil($coockcookie)
 	//
 	
 	if ($coockcookie) {
-		$lien = generer_url_action('cookie', "cookie_admin=non&url=".rawurlencode(_DIR_RESTREINT_ABS . _SPIP_ECRIRE_SCRIPT));
+		$lien = generer_url_action('cookie', "cookie_admin=non&url=".rawurlencode('./'. _SPIP_ECRIRE_SCRIPT));
 		$t = _T('icone_supprimer_cookie');
 		$t = icone_horizontale($t, $lien, "cookie-24.gif", "", false);
 		if ($GLOBALS['spip_display'] != 1) 
diff --git a/ecrire/inc/auth_spip.php b/ecrire/inc/auth_spip.php
index e559f150bb2e9723d11c986e7d79ee58823798de..8e330f905c897cc9620442a3c49b14130f17dc38 100644
--- a/ecrire/inc/auth_spip.php
+++ b/ecrire/inc/auth_spip.php
@@ -15,13 +15,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // Authentifie et retourne la ligne SQL decrivant l'utilisateur si ok
 
 // http://doc.spip.org/@inc_auth_spip_dist
-function inc_auth_spip_dist ($login, $pass) {
+function inc_auth_spip_dist ($login, $pass, $md5pass="", $md5next="") {
 
-  // recuperer le cryptage par JavaScript
-	$md5pass = $_POST['session_password_md5']; 
-	$md5next = $_POST['next_session_password_md5'];
-
-	  // si envoi non crypte, crypter maintenant
+  // si envoi non crypte, crypter maintenant
 	if (!$md5pass AND $pass) {
 			$result = sql_select("alea_actuel, alea_futur", "spip_auteurs", "login=" . sql_quote($login));
 
diff --git a/ecrire/inc/headers.php b/ecrire/inc/headers.php
index ec22c409ade1725e17e9f9c575e8d40c0a22f89d..7c953bc560b2164446a372f3a0b67e4f8bfe29a6 100644
--- a/ecrire/inc/headers.php
+++ b/ecrire/inc/headers.php
@@ -31,6 +31,7 @@ function redirige_par_entete($url, $equiv='') {
 
 	if (!$equiv OR (strncmp("Apache", $_SERVER['SERVER_SOFTWARE'],6)==0)) {
 		@header("Location: " . $url);
+		$equiv="";
 	} else {
 		@header("Refresh: 0; url=" . $url);
 		$equiv = "<meta http-equiv='Refresh' content='0; url=$url'>";
@@ -57,7 +58,10 @@ function redirige_par_entete($url, $equiv='') {
 
 // http://doc.spip.org/@redirige_formulaire
 function redirige_formulaire($url, $equiv = '') {
-	if (!_request('var_ajax') && !_request('var_ajaxcharset'))
+	if (!_request('var_ajax') 
+	  && !_request('var_ajaxcharset')
+		&& !headers_sent() 
+		&& !$_GET['var_mode'])
 		redirige_par_entete(str_replace('&amp;','&',$url), $equiv);
 	else {
 		$url = strtr($url, "\n\r", "  ");
diff --git a/ecrire/inc/identifier_login.php b/ecrire/inc/identifier_login.php
new file mode 100644
index 0000000000000000000000000000000000000000..a3a699dcdef92c2e75a820213ff136a2d32c8e15
--- /dev/null
+++ b/ecrire/inc/identifier_login.php
@@ -0,0 +1,106 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2008                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('base/abstract_sql');
+
+
+function inc_identifier_login_dist($session_login, $session_password, $session_md5pass="", $session_md5next="", $session_remember=''){
+
+	$auteur = verifier_login($session_login, $session_password, $session_md5pass, $session_md5next);
+
+	// OK on a ete authentifie, on se connecte
+	if ($auteur) {
+		spip_log("login de $session_login vers $redirect (".$auteur['auth']);
+
+		// Prevoir de demander un cookie de correspondance
+		if ($auteur['statut'] == '0minirezo')
+			$set_cookie_admin = "@".$session_login;
+
+		$session = charger_fonction('session', 'inc');
+		$cookie_session = $session($auteur);
+
+		// La case "rester connecte quelques jours"
+		$session_remember = ($session_remember == 'oui') ? 'perma' : '';
+		if ($session_remember)
+			spip_setcookie('spip_session', $cookie_session, time() + 2 * _RENOUVELLE_ALEA);
+		else
+			spip_setcookie('spip_session', $cookie_session);
+
+		$prefs = ($auteur['prefs']) ? unserialize($auteur['prefs']) : array();
+		$prefs['cnx'] = $session_remember;
+
+		sql_updateq('spip_auteurs', array('prefs' => serialize($prefs)), "id_auteur = " . $auteur['id_auteur']);
+	}
+
+	$cook = isset($_COOKIE['spip_admin']) ? $_COOKIE['spip_admin'] : '';
+
+	// Ajout de cookie d'admin
+	# rien a faire ici, trouver ou le mettre
+	/*if (isset($set_cookie_admin)
+	  OR $set_cookie_admin = _request('cookie_admin')
+	) {
+		spip_setcookie('spip_admin', $set_cookie_admin,	time() + 14 * 24 * 3600);
+	}*/
+	return $auteur;
+}
+
+function verifier_login($session_login, $session_password, $session_md5pass="", $session_md5next=""){
+	if (!spip_connect()) {
+		include_spip('inc/minipres');
+		echo minipres(_T('info_travaux_titre'),  _T('titre_probleme_technique'));
+		exit;
+	}
+
+	$auteur = array();
+
+	// Essayer tour a tour les differentes sources d'authenfication
+	// on s'en souviendra dans visiteur_session['auth']
+	$sources_auth = array('spip', 'ldap');
+	while (!$auteur
+	AND list(,$methode) = each($sources_auth)) {
+		if ($auth = charger_fonction('auth_'.$methode, 'inc', true)
+		AND $auteur = $auth($session_login, $session_password, $session_md5pass,$session_md5next)) {
+			$auteur['auth'] = $methode;
+		} else {
+			spip_log("pas de connexion avec $methode");
+		}
+	}
+	return $auteur;
+}
+
+
+function informer_login($login){
+	$row =  sql_fetsel('id_auteur,login,alea_actuel,alea_futur,prefs,source', 'spip_auteurs', "login=" . sql_quote($login));
+	// Retrouver ceux qui signent de leur nom ou email
+	if (!$row AND !spip_connect_ldap()) {
+		$row = sql_fetsel('id_auteur,login,alea_actuel,alea_futur,prefs,source', 'spip_auteurs', "(nom = " . sql_quote($login) . " OR email = " . sql_quote($login) . ") AND login<>'' AND statut<>'5poubelle'");
+	}
+	if ($row) {
+		// desactiver le hash md5 si pas auteur spip ?
+		if ($row['source']!=='spip'){
+			$row['alea_actuel']='';
+			$row['alea_futur']='';
+		}
+		unset($row['source']);
+		$prefs = unserialize($row['prefs']);
+		$row['cnx'] = $prefs['cnx'] == 'perma' ? '1' : '0';
+		unset($row['prefs']);
+		
+		$page = evaluer_fond('formulaires/logo_auteur', array('id_auteur'=>$row['id_auteur']));
+		$row['logo'] = $page['texte'];
+	}
+	return $row;	
+}
+
+?>
\ No newline at end of file