Subversion Repositories Sites.tela-botanica.org

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 david 1
<?php
2
 
3
/***************************************************************************\
4
 *  SPIP, Systeme de publication pour l'internet                           *
5
 *                                                                         *
6
 *  Copyright (c) 2001-2005                                                *
7
 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8
 *                                                                         *
9
 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11
\***************************************************************************/
12
 
13
 
14
include ("ecrire/inc_version.php3");
15
include_ecrire ("inc_session.php3");
16
 
17
 
18
// gerer l'auth http
19
function auth_http($url, $essai_auth_http) {
20
	global $_SERVER;
21
	if ($essai_auth_http == 'oui') {
22
		if (verifier_php_auth())
23
			redirige_par_entete($url);
24
		else {
25
			$url = quote_amp(urlencode($url));
26
			ask_php_auth(_T('login_connexion_refusee'),
27
			_T('login_login_pass_incorrect'), _T('login_retour_site'),
28
			"url=$url", _T('login_nouvelle_tentative'),
29
			(ereg(_DIR_RESTREINT_ABS, $url)));
30
			exit;
31
		}
32
	}
33
	// si demande logout auth_http
34
	else if ($essai_auth_http == 'logout') {
35
		ask_php_auth(_T('login_deconnexion_ok'),
36
		_T('login_verifiez_navigateur'), _T('login_retour_public'),
37
		"redirect="._DIR_RESTREINT_ABS, _T('login_test_navigateur'), true);
38
		exit;
39
	}
40
}
41
 
42
// rejoue le cookie pour renouveler spip_session
43
if ($change_session == 'oui') {
44
	if (verifier_session($spip_session)) {
45
		// Attention : seul celui qui a le bon IP a le droit de rejouer,
46
		// ainsi un eventuel voleur de cookie ne pourrait pas deconnecter
47
		// sa victime, mais se ferait deconnecter par elle.
48
		if ($auteur_session['hash_env'] == hash_env()) {
49
			$auteur_session['ip_change'] = false;
50
			$cookie = creer_cookie_session($auteur_session);
51
			supprimer_session($spip_session);
52
			spip_setcookie('spip_session', $cookie);
53
		}
54
		@header('Content-Type: image/gif');
55
		@header('Expires: 0');
56
		@header("Cache-Control: no-store, no-cache, must-revalidate");
57
		@header('Pragma: no-cache');
58
		@header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
59
		@readfile(_DIR_IMG_PACK . 'rien.gif');
60
		exit;
61
	}
62
}
63
 
64
if ($url)  $url = urldecode($url);
65
 
66
// tentative de connexion en auth_http
67
if ($essai_auth_http AND !$ignore_auth_http) {
68
	auth_http(($url ? $url : _DIR_RESTREINT_ABS), $essai_auth_http);
69
	exit;
70
}
71
 
72
// cas particulier, logout dans l'espace public
73
if ($logout_public) {
74
	$logout = $logout_public;
75
	if (!$url)
76
		$url = 'index.php3';
77
}
78
// tentative de logout
79
if ($logout) {
80
	verifier_visiteur();
81
	if ($auteur_session['login'] == $logout) {
82
		spip_query("UPDATE spip_auteurs SET en_ligne = DATE_SUB(NOW(),INTERVAL 6 MINUTE) WHERE id_auteur = ".$auteur_session['id_auteur']);
83
		if ($spip_session) {
84
			zap_sessions($auteur_session['id_auteur'], true);
85
			spip_setcookie('spip_session', $spip_session, time() - 3600 * 24);
86
		}
87
 
88
		if ($_SERVER['PHP_AUTH_USER']
89
		AND !$ignore_auth_http
90
		AND verifier_php_auth()) {
91
			auth_http(($url ? $url : _DIR_RESTREINT_ABS), 'logout');
92
		}
93
		unset ($auteur_session);
94
	}
95
 
96
	redirige_par_entete($url ? $url : "spip_login.php3");
97
}
98
 
99
// en cas de login sur bonjour=oui, on tente de poser un cookie
100
// puis de passer a spip_login qui diagnostiquera l'echec de cookie
101
// le cas echeant.
102
if ($test_echec_cookie == 'oui') {
103
	spip_setcookie('spip_session', 'test_echec_cookie');
104
	redirige_par_entete("spip_login.php3?var_echec_cookie=oui&amp;url="
105
		. ($url ? $url : _DIR_RESTREINT_ABS));
106
}
107
 
108
// Tentative de login
109
unset ($cookie_session);
110
$redirect = ($url ? $url : _DIR_RESTREINT_ABS);
111
if ($essai_login == "oui") {
112
	// Recuperer le login en champ hidden
113
	if ($session_login_hidden AND !$session_login)
114
		$session_login = $session_login_hidden;
115
 
116
	$login = $session_login;
117
	$pass = $session_password;
118
 
119
	// Essayer differentes methodes d'authentification
120
	$auths = array('spip');
121
	include_local(_FILE_CONNECT); // pour savoir si ldap est present
122
	if ($ldap_present) $auths[] = 'ldap';
123
	$ok = false;
124
	foreach ($auths as $nom_auth) {
125
		include_ecrire("inc_auth_".$nom_auth.".php3");
126
		$classe_auth = "Auth_".$nom_auth;
127
		$auth = new $classe_auth;
128
		if ($auth->init()) {
129
			// Essayer les mots de passe md5
130
			$ok = $auth->verifier_challenge_md5($login, $session_password_md5, $next_session_password_md5);
131
			// Sinon essayer avec le mot de passe en clair
132
			if (!$ok && $session_password) $ok = $auth->verifier($login, $session_password);
133
			if ($ok)  { $auth->lire(); break; }
134
		}
135
	}
136
 
137
	// Si la connexion a reussi
138
	if ($ok) {
139
		// Nouveau redacteur ou visiteur inscrit par mail :
140
		// 'nouveau' -> '1comite' ou  '6forum'
141
		// Si LDAP : importer l'utilisateur vers la base SPIP
142
		$auth->activer();
143
 
144
		if ($auth->login AND $auth->statut == '0minirezo') // force le cookie pour les admins
145
			$cookie_admin = "@".$auth->login;
146
 
147
		// On est connecte : recuperer les donnees auteurs
148
		// poser le cookie session, puis le cas echeant
149
		// verifier que le statut correspond au minimum requis,
150
		$query = "SELECT * FROM spip_auteurs WHERE login='".addslashes($auth->login)."'";
151
		$result = spip_query($query);
152
		if ($row_auteur = spip_fetch_array($result)) {
153
			$cookie_session = creer_cookie_session($row_auteur);
154
		} else
155
			$ok = false;
156
 
157
		// Si on se connecte dans l'espace prive, ajouter "bonjour" (inutilise)
158
		if ($ok AND ereg(_DIR_RESTREINT_ABS, $redirect)) {
159
		      $redirect .= (strpos($redirect, "?") ? "&" : "?") . 'bonjour=oui';
160
		}
161
	}
162
 
163
	if (!$ok) {
164
		if (ereg(_DIR_RESTREINT_ABS, $redirect))
165
			$redirect = "spip_login.php3";
166
		$redirect .= (strpos($redirect, "?") ? "&" : "?") . "var_login=$login";
167
		if ($session_password || $session_password_md5)
168
			$redirect .= '&var_erreur=pass';
169
		$redirect .= '&url=' . urlencode($url);
170
	}
171
 }
172
 
173
// cookie d'admin ?
174
if ($cookie_admin == "non") {
175
	if (!$retour)
176
	  $retour = 'spip_login.php3?var_url='.urlencode($url);
177
 
178
	spip_setcookie('spip_admin', $spip_admin, time() - 3600 * 24);
179
	$redirect = ereg_replace("([?&])var_login=[^&]*", '\1', urldecode($retour));
180
	$redirect .= (strpos($redirect, "?") ? "&" : "?") . "var_login=-1";
181
}
182
else if ($cookie_admin AND $spip_admin != $cookie_admin) {
183
	spip_setcookie('spip_admin', $cookie_admin, time() + 3600 * 24 * 14);
184
}
185
 
186
// cookie de session ?
187
if ($cookie_session) {
188
	if ($session_remember == 'oui')
189
		spip_setcookie('spip_session', $cookie_session, time() + 3600 * 24 * 14);
190
	else
191
		spip_setcookie('spip_session', $cookie_session);
192
 
193
	$prefs = ($row_auteur['prefs']) ? unserialize($row_auteur['prefs']) : array();
194
	$prefs['cnx'] = ($session_remember == 'oui') ? 'perma' : '';
195
	spip_query ("UPDATE spip_auteurs SET prefs = '".addslashes(serialize($prefs))."' WHERE id_auteur = ".$row_auteur['id_auteur']);
196
 
197
}
198
 
199
// changement de langue espace public
200
if ($var_lang) {
201
	include_ecrire('inc_lang.php3');
202
 
203
	if (changer_langue($var_lang)) {
204
		spip_setcookie('spip_lang', $var_lang, time() + 365 * 24 * 3600);
205
		$redirect = ereg_replace("[?&]lang=[^&]*", '', $redirect);
206
		$redirect .= (strpos($redirect, "?") ? "&" : "?") . "lang=$var_lang";
207
	}
208
}
209
 
210
// changer de langue espace prive (ou login)
211
if ($var_lang_ecrire) {
212
	include_ecrire('inc_lang.php3');
213
	verifier_visiteur();
214
 
215
	if (changer_langue($var_lang_ecrire)) {
216
		spip_setcookie('spip_lang_ecrire', $var_lang_ecrire, time() + 365 * 24 * 3600);
217
		spip_setcookie('spip_lang', $var_lang_ecrire, time() + 365 * 24 * 3600);
218
 
219
		if (_FILE_CONNECT) {
220
			include_ecrire('inc_admin.php3');
221
			if (verifier_action_auteur('var_lang_ecrire', $valeur, $id_auteur)) {
222
				spip_query ("UPDATE spip_auteurs SET lang = '".addslashes($var_lang_ecrire)."' WHERE id_auteur = ".$id_auteur);
223
				$auteur_session['lang'] = $var_lang_ecrire;
224
				ajouter_session($auteur_session, $spip_session);	// enregistrer dans le fichier de session
225
			}
226
		}
227
 
228
		$redirect = ereg_replace("[?&]lang=[^&]*", '', $redirect);
229
		$redirect .= (strpos($redirect, "?") ? "&" : "?") . "lang=$var_lang_ecrire";
230
	}
231
}
232
 
233
// Redirection
234
// Sous Apache, les cookies avec une redirection fonctionnent
235
// Sinon, on fait un refresh HTTP
236
 
237
if (ereg("^Apache", $SERVER_SOFTWARE)) {
238
	redirige_par_entete($redirect);
239
}
240
else {
241
	@header("Refresh: 0; url=" . $redirect);
242
	echo "<html><head>";
243
	echo "<meta http-equiv='Refresh' content='0; url=".$redirect."'>";
244
	echo "</head>\n";
245
	echo "<body><a href='".$redirect."'>"._T('navigateur_pas_redirige')."</a></body></html>";
246
}
247
 
248
?>