Subversion Repositories Sites.tela-botanica.org

Rev

Go to most recent revision | 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
//
15
// Ce fichier ne sera execute qu'une fois
16
if (defined("_ECRIRE_INC_AUTH")) return;
17
define("_ECRIRE_INC_AUTH", "1");
18
 
19
include_ecrire ("inc_connect.php3");
20
include_ecrire ("inc_meta.php3");
21
include_ecrire ("inc_session.php3");
22
 
23
define("_DIR_LOGIN", _DIR_RESTREINT ? "" : "../");
24
define("_DIR_LOGED_IN",   _DIR_RESTREINT ? "" : _DIR_RESTREINT_ABS);
25
 
26
 
27
//
28
// Fonctions de gestion de l'acces restreint aux rubriques
29
//
30
 
31
function acces_rubrique($id_rubrique) {
32
	global $connect_toutes_rubriques;
33
	global $connect_id_rubrique;
34
 
35
	return ($connect_toutes_rubriques OR $connect_id_rubrique[$id_rubrique]);
36
}
37
 
38
function acces_restreint_rubrique($id_rubrique) {
39
	global $connect_id_rubrique;
40
	global $connect_statut;
41
 
42
	return ($connect_statut == "0minirezo" AND $connect_id_rubrique[$id_rubrique]);
43
}
44
 
45
 
46
function auth() {
47
	global $_POST, $_GET, $_COOKIE, $_SERVER;
48
	global $auth_can_disconnect, $ignore_auth_http, $ignore_remote_user;
49
 
50
	global $connect_id_auteur, $connect_nom, $connect_bio, $connect_email;
51
	global $connect_nom_site, $connect_url_site, $connect_login, $connect_pass;
52
	global $connect_activer_imessage, $connect_activer_messagerie;
53
	global $connect_statut, $connect_toutes_rubriques, $connect_id_rubrique;
54
 
55
	global $auteur_session, $prefs;
56
	global $clean_link;
57
 
58
	//
59
	// Si pas MySQL, fini
60
	//
61
	if (!$GLOBALS['db_ok']) {
62
		spip_log("Erreur base de donnees");
63
		include_ecrire('inc_presentation.php3');
64
		install_debut_html(_T('info_travaux_titre'));
65
		echo _T('titre_probleme_technique');
66
		echo "<p><tt>".spip_sql_errno()." ".spip_sql_error()."</tt></p>";
67
		install_fin_html();
68
		exit;
69
	}
70
 
71
 
72
	//
73
	// Initialiser variables (eviter hacks par URL)
74
	//
75
 
76
	$auth_login = "";
77
	$auth_pass = "";
78
	$auth_pass_ok = false;
79
	$auth_can_disconnect = false;
80
	$auth_htaccess = false;
81
 
82
	//
83
	// Recuperer les donnees d'identification
84
	//
85
 
86
	// Authentification session
87
	if ($cookie_session = $_COOKIE['spip_session']) {
88
		if (verifier_session($cookie_session)) {
89
			if ($auteur_session['statut'] == '0minirezo'
90
			OR $auteur_session['statut'] == '1comite') {
91
				$auth_login = $auteur_session['login'];
92
				$auth_pass_ok = true;
93
				$auth_can_disconnect = true;
94
			}
95
		}
96
	}
97
 
98
	// Peut-etre sommes-nous en auth http?
99
	else if ($_SERVER['PHP_AUTH_USER'] && $_SERVER['PHP_AUTH_PW']
100
	&& !$ignore_auth_http) {
101
 
102
		// Si le login existe dans la base, se loger
103
		if (verifier_php_auth()) {
104
			$auth_login = $_SERVER['PHP_AUTH_USER'];
105
			$auth_pass_ok = true;
106
			$auth_can_disconnect = true;
107
			$_SERVER['PHP_AUTH_PW'] = '';
108
		}
109
		// Sinon c'est un login d'intranet independant de spip, on ignore
110
	}
111
 
112
	// Authentification .htaccess old style, car .htaccess semble
113
	// souvent definir *aussi* PHP_AUTH_USER et PHP_AUTH_PW
114
	else if ($GLOBALS['_SERVER']['REMOTE_USER']
115
	&& !$ignore_remote_user) {
116
		$auth_login = $GLOBALS['_SERVER']['REMOTE_USER'];
117
		$auth_pass_ok = true;
118
		$auth_htaccess = true;
119
	}
120
 
121
	// Tentative de login echec
122
	if ($_GET['bonjour'] == 'oui' AND !$auth_login) {
123
		$link = new Link(_DIR_LOGIN . "spip_cookie.php3?test_echec_cookie=oui");
124
		$clean_link->delVar('bonjour');
125
		$url = str_replace('/./', '/', _DIR_LOGED_IN .$clean_link->getUrl());
126
		$link->addVar('url', $url);
127
		redirige_par_entete($link->getUrl());
128
		exit;
129
	}
130
 
131
	// Si pas authentifie, demander login / mdp
132
	if (!$auth_login) {
133
		$url = str_replace('/./', '/',  _DIR_LOGED_IN
134
			. $clean_link->getUrl());
135
		redirige_par_entete(_DIR_LOGIN . "spip_login.php3?url=".urlencode($url));
136
		exit;
137
	}
138
 
139
 
140
	//
141
	// Chercher le login dans la table auteurs
142
	//
143
 
144
	$auth_login = addslashes($auth_login);
145
	$query = "SELECT * FROM spip_auteurs WHERE login='$auth_login' AND statut!='5poubelle' AND statut!='6forum'";
146
	$result = @spip_query($query);
147
 
148
	if ($row = spip_fetch_array($result)) {
149
		$connect_id_auteur = $row['id_auteur'];
150
		$connect_nom = $row['nom'];
151
		$connect_bio = $row['bio'];
152
		$connect_email = $row['email'];
153
		$connect_nom_site = $row['nom_site'];
154
		$connect_url_site = $row['url_site'];
155
		$connect_login = $row['login'];
156
		$connect_pass = $row['pass'];
157
		$connect_statut = $row['statut'];
158
		$connect_activer_messagerie = "oui"; //$row["messagerie"];
159
		$connect_activer_imessage = "oui "; //$row["imessage"];
160
 
161
		// Special : si dans la fiche auteur on modifie les valeurs
162
		// de messagerie, utiliser ces valeurs plutot que celle de la base.
163
		// D'ou leger bug si on modifie la fiche de quelqu'un d'autre.
164
 
165
		// regler les preferences de l'auteur
166
		$prefs = unserialize($row['prefs']);
167
 
168
		// vieux ! on pourra supprimer post 1.6 finale...
169
		if (! isset($prefs['display'])) { // recuperer les cookies ou creer defaut
170
			if (!$GLOBALS['set_disp'] = $GLOBALS['_COOKIE']['spip_display'])
171
				$GLOBALS['set_disp'] = 2;
172
			if (!$GLOBALS['set_couleur'] = $GLOBALS['_COOKIE']['spip_couleur'])
173
				$GLOBALS['set_couleur'] = 6;
174
			if (!$GLOBALS['set_options'] = $GLOBALS['_COOKIE']['spip_options'])
175
				$GLOBALS['set_options'] = 'basiques';
176
		}
177
 
178
		// Indiquer connexion
179
		if ($connect_activer_messagerie != "non") {
180
			@spip_query("UPDATE spip_auteurs SET en_ligne=NOW() WHERE id_auteur='$connect_id_auteur'");
181
		}
182
 
183
		// Si administrateur, recuperer les rubriques gerees par l'admin
184
		if ($connect_statut == '0minirezo') {
185
			$query_admin = "SELECT id_rubrique FROM spip_auteurs_rubriques WHERE id_auteur=$connect_id_auteur AND id_rubrique!='0'";
186
			$result_admin = spip_query($query_admin);
187
 
188
			$connect_toutes_rubriques = (@spip_num_rows($result_admin) == 0);
189
			if ($connect_toutes_rubriques) {
190
				$connect_id_rubrique = array();
191
			}
192
			else {
193
				for (;;) {
194
					$r = '';
195
					while ($row_admin = spip_fetch_array($result_admin)) {
196
						$id_rubrique = $row_admin['id_rubrique'];
197
						$r[] = $id_rubrique;
198
						$connect_id_rubrique[$id_rubrique] = $id_rubrique;
199
					}
200
					if (!$r) break;
201
					$r = join(',', $r);
202
					$query_admin = "SELECT id_rubrique FROM spip_rubriques WHERE id_parent IN ($r) AND id_rubrique NOT IN ($r)";
203
				 	$result_admin = spip_query($query_admin);
204
				 }
205
			}
206
		}
207
		// Si pas admin, acces egal a toutes rubriques
208
		else {
209
			$connect_toutes_rubriques = false;
210
			$connect_id_rubrique = array();
211
		}
212
	}
213
	else {
214
		// ici on est dans un cas limite : l'auteur a ete identifie OK
215
		// mais il n'existe pas dans la table auteur. Cause possible,
216
		// notamment, une restauration de base de donnees dans laquelle
217
		// il n'existe pas.
218
		include_ecrire('inc_presentation.php3');
219
		include_ecrire('inc_texte.php3');
220
		install_debut_html(_T('avis_erreur_connexion'));
221
		echo "<br><br><p>".
222
		  _T('texte_inc_auth_1', array('auth_login' => $auth_login)).
223
		  " <a href='" .
224
		  _DIR_LOGIN . "spip_cookie.php3?logout=$auth_login'>".
225
                _T('texte_inc_auth_2')."</A>"._T('texte_inc_auth_3');
226
		install_fin_html();
227
		exit;
228
	}
229
 
230
	if (!$auth_pass_ok) {
231
		redirige_par_entete(_DIR_LOGIN . "spip_login.php3?var_erreur=pass");
232
	}
233
 
234
	// Si c'est un nouvel inscrit, le passer de 'nouveau' a '1comite'
235
	// (code presque mort, utilise peut-etre encore sous .htpasswd ?)
236
	if ($connect_statut == 'nouveau') {
237
		$connect_statut =
238
		(lire_meta('accepter_inscriptions') == 'oui') ? '1comite' : '6forum';
239
		spip_query("UPDATE spip_auteurs SET statut='$connect_statut'
240
			WHERE id_auteur=$connect_id_auteur");
241
	}
242
 
243
	return true;
244
}
245
 
246
 
247
if (!auth()) exit;
248
 
249
?>