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 |
?>
|