Completed
Push — master ( 23131e...d8d83b )
by cam
01:02
created
ecrire/auth/spip.php 1 patch
Indentation   +331 added lines, -331 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 /**
@@ -32,110 +32,110 @@  discard block
 block discarded – undo
32 32
  */
33 33
 function auth_spip_dist($login, $pass, $serveur = '', $phpauth = false) {
34 34
 
35
-	// retrouver le login
36
-	$login = auth_spip_retrouver_login($login);
37
-	// login inconnu, n'allons pas plus loin
38
-	if (!$login) {
39
-		return [];
40
-	}
41
-
42
-	$md5pass = '';
43
-	$shapass = $shanext = '';
44
-
45
-	if (preg_match(',^\{([0-9a-f]{64});([0-9a-f]{64})\}$,i', $pass, $regs)) {
46
-		$shapass = $regs[1];
47
-		$shanext = $regs[2];
48
-	} // compat avec une base mixte md5/sha256 : le js a envoye les 2 hash
49
-	elseif (preg_match(',^\{([0-9a-f]{64});([0-9a-f]{64});([0-9a-f]{32});([0-9a-f]{32})\}$,i', $pass, $regs)) {
50
-		$shapass = $regs[1];
51
-		$shanext = $regs[2];
52
-		$md5pass = $regs[3];
53
-		//$md5next = $regs[4];
54
-	} // si envoi non crypte, crypter maintenant
55
-	elseif ($pass) {
56
-		$row = sql_fetsel(
57
-			'alea_actuel, alea_futur',
58
-			'spip_auteurs',
59
-			'login=' . sql_quote($login, $serveur, 'text'),
60
-			'',
61
-			'',
62
-			'',
63
-			'',
64
-			$serveur
65
-		);
66
-
67
-		if ($row) {
68
-			include_spip('auth/sha256.inc');
69
-			$shapass = spip_sha256($row['alea_actuel'] . $pass);
70
-			$shanext = spip_sha256($row['alea_futur'] . $pass);
71
-			$md5pass = md5($row['alea_actuel'] . $pass);
72
-		}
73
-	}
74
-
75
-	// login inexistant ou mot de passe vide
76
-	if (!$shapass and !$md5pass) {
77
-		return [];
78
-	}
79
-
80
-	$row = sql_fetsel(
81
-		'*',
82
-		'spip_auteurs',
83
-		'login=' . sql_quote($login, $serveur, 'text') . ' AND pass=' . sql_quote(
84
-			$shapass,
85
-			$serveur,
86
-			'text'
87
-		) . " AND statut<>'5poubelle'",
88
-		'',
89
-		'',
90
-		'',
91
-		'',
92
-		$serveur
93
-	);
94
-
95
-	// compat avec les anciennes bases en md5
96
-	if (!$row and $md5pass) {
97
-		$row = sql_fetsel(
98
-			'*',
99
-			'spip_auteurs',
100
-			'login=' . sql_quote($login, $serveur, 'text') . ' AND pass=' . sql_quote(
101
-				$md5pass,
102
-				$serveur,
103
-				'text'
104
-			) . " AND statut<>'5poubelle'",
105
-			'',
106
-			'',
107
-			'',
108
-			'',
109
-			$serveur
110
-		);
111
-	}
112
-
113
-	// login/mot de passe incorrect
114
-	if (!$row) {
115
-		return [];
116
-	}
117
-
118
-	// fait tourner le codage du pass dans la base
119
-	// sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action()
120
-	if ($shanext and !$phpauth) {
121
-		include_spip('inc/acces'); // pour creer_uniqid
122
-		@sql_update('spip_auteurs', [
123
-			'alea_actuel' => 'alea_futur',
124
-			'pass' => sql_quote($shanext, $serveur, 'text'),
125
-			'alea_futur' => sql_quote(creer_uniqid(), $serveur, 'text')
126
-		], 'id_auteur=' . $row['id_auteur'] . ' AND pass IN (' . sql_quote(
127
-			$shapass,
128
-			$serveur,
129
-			'text'
130
-		) . ', ' . sql_quote($md5pass, $serveur, 'text') . ')', '', $serveur);
131
-		// En profiter pour verifier la securite de tmp/
132
-		// Si elle ne fonctionne pas a l'installation, prevenir
133
-		if (!verifier_htaccess(_DIR_TMP) and defined('_ECRIRE_INSTALL')) {
134
-			return false;
135
-		}
136
-	}
137
-
138
-	return $row;
35
+    // retrouver le login
36
+    $login = auth_spip_retrouver_login($login);
37
+    // login inconnu, n'allons pas plus loin
38
+    if (!$login) {
39
+        return [];
40
+    }
41
+
42
+    $md5pass = '';
43
+    $shapass = $shanext = '';
44
+
45
+    if (preg_match(',^\{([0-9a-f]{64});([0-9a-f]{64})\}$,i', $pass, $regs)) {
46
+        $shapass = $regs[1];
47
+        $shanext = $regs[2];
48
+    } // compat avec une base mixte md5/sha256 : le js a envoye les 2 hash
49
+    elseif (preg_match(',^\{([0-9a-f]{64});([0-9a-f]{64});([0-9a-f]{32});([0-9a-f]{32})\}$,i', $pass, $regs)) {
50
+        $shapass = $regs[1];
51
+        $shanext = $regs[2];
52
+        $md5pass = $regs[3];
53
+        //$md5next = $regs[4];
54
+    } // si envoi non crypte, crypter maintenant
55
+    elseif ($pass) {
56
+        $row = sql_fetsel(
57
+            'alea_actuel, alea_futur',
58
+            'spip_auteurs',
59
+            'login=' . sql_quote($login, $serveur, 'text'),
60
+            '',
61
+            '',
62
+            '',
63
+            '',
64
+            $serveur
65
+        );
66
+
67
+        if ($row) {
68
+            include_spip('auth/sha256.inc');
69
+            $shapass = spip_sha256($row['alea_actuel'] . $pass);
70
+            $shanext = spip_sha256($row['alea_futur'] . $pass);
71
+            $md5pass = md5($row['alea_actuel'] . $pass);
72
+        }
73
+    }
74
+
75
+    // login inexistant ou mot de passe vide
76
+    if (!$shapass and !$md5pass) {
77
+        return [];
78
+    }
79
+
80
+    $row = sql_fetsel(
81
+        '*',
82
+        'spip_auteurs',
83
+        'login=' . sql_quote($login, $serveur, 'text') . ' AND pass=' . sql_quote(
84
+            $shapass,
85
+            $serveur,
86
+            'text'
87
+        ) . " AND statut<>'5poubelle'",
88
+        '',
89
+        '',
90
+        '',
91
+        '',
92
+        $serveur
93
+    );
94
+
95
+    // compat avec les anciennes bases en md5
96
+    if (!$row and $md5pass) {
97
+        $row = sql_fetsel(
98
+            '*',
99
+            'spip_auteurs',
100
+            'login=' . sql_quote($login, $serveur, 'text') . ' AND pass=' . sql_quote(
101
+                $md5pass,
102
+                $serveur,
103
+                'text'
104
+            ) . " AND statut<>'5poubelle'",
105
+            '',
106
+            '',
107
+            '',
108
+            '',
109
+            $serveur
110
+        );
111
+    }
112
+
113
+    // login/mot de passe incorrect
114
+    if (!$row) {
115
+        return [];
116
+    }
117
+
118
+    // fait tourner le codage du pass dans la base
119
+    // sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action()
120
+    if ($shanext and !$phpauth) {
121
+        include_spip('inc/acces'); // pour creer_uniqid
122
+        @sql_update('spip_auteurs', [
123
+            'alea_actuel' => 'alea_futur',
124
+            'pass' => sql_quote($shanext, $serveur, 'text'),
125
+            'alea_futur' => sql_quote(creer_uniqid(), $serveur, 'text')
126
+        ], 'id_auteur=' . $row['id_auteur'] . ' AND pass IN (' . sql_quote(
127
+            $shapass,
128
+            $serveur,
129
+            'text'
130
+        ) . ', ' . sql_quote($md5pass, $serveur, 'text') . ')', '', $serveur);
131
+        // En profiter pour verifier la securite de tmp/
132
+        // Si elle ne fonctionne pas a l'installation, prevenir
133
+        if (!verifier_htaccess(_DIR_TMP) and defined('_ECRIRE_INSTALL')) {
134
+            return false;
135
+        }
136
+    }
137
+
138
+    return $row;
139 139
 }
140 140
 
141 141
 /**
@@ -145,41 +145,41 @@  discard block
 block discarded – undo
145 145
  * @return array
146 146
  */
147 147
 function auth_spip_formulaire_login($flux) {
148
-	// faut il encore envoyer md5 ?
149
-	// on regarde si il reste des pass md5 en base pour des auteurs en statut pas poubelle
150
-	// les hash md5 ont une longueur 32, les sha 64
151
-	// en evitant une requete sql a chaque affichage du formulaire login sans session
152
-	// (perf issue pour les sites qui mettent le formulaire de login sur la home)
153
-	$compat_md5 = false;
154
-	if (!isset($GLOBALS['meta']['sha_256_only']) or _request('var_mode')) {
155
-		$compat_md5 = sql_countsel('spip_auteurs', "length(pass)=32 AND statut<>'poubelle'");
156
-		if ($compat_md5 and isset($GLOBALS['meta']['sha_256_only'])) {
157
-			effacer_meta('sha_256_only');
158
-		}
159
-		if (!$compat_md5) {
160
-			ecrire_meta('sha_256_only', 'oui');
161
-		}
162
-	}
163
-
164
-	// javascript qui gere la securite du login en evitant de faire circuler le pass en clair
165
-	$flux['data'] .=
166
-		($compat_md5 ? '<script type="text/javascript" src="' . _DIR_JAVASCRIPT . 'md5.js"></script>' : '')
167
-		. '<script type="text/javascript" src="' . _DIR_JAVASCRIPT . 'login-sha-min.js"></script>'
168
-		. '<script type="text/javascript">/*<![CDATA[*/'
169
-		. "var login_info={'alea_actuel':'" . $flux['args']['contexte']['_alea_actuel'] . "',"
170
-		. "'alea_futur':'" . $flux['args']['contexte']['_alea_futur'] . "',"
171
-		. "'login':'" . $flux['args']['contexte']['var_login'] . "',"
172
-		. "'page_auteur': '" . generer_url_public('informer_auteur') . "',"
173
-		. "'informe_auteur_en_cours':false,"
174
-		. "'attente_informe':0,"
175
-		. "'compat_md5':" . ($compat_md5 ? 'true' : 'false') . '};'
176
-		. "jQuery(function(){
148
+    // faut il encore envoyer md5 ?
149
+    // on regarde si il reste des pass md5 en base pour des auteurs en statut pas poubelle
150
+    // les hash md5 ont une longueur 32, les sha 64
151
+    // en evitant une requete sql a chaque affichage du formulaire login sans session
152
+    // (perf issue pour les sites qui mettent le formulaire de login sur la home)
153
+    $compat_md5 = false;
154
+    if (!isset($GLOBALS['meta']['sha_256_only']) or _request('var_mode')) {
155
+        $compat_md5 = sql_countsel('spip_auteurs', "length(pass)=32 AND statut<>'poubelle'");
156
+        if ($compat_md5 and isset($GLOBALS['meta']['sha_256_only'])) {
157
+            effacer_meta('sha_256_only');
158
+        }
159
+        if (!$compat_md5) {
160
+            ecrire_meta('sha_256_only', 'oui');
161
+        }
162
+    }
163
+
164
+    // javascript qui gere la securite du login en evitant de faire circuler le pass en clair
165
+    $flux['data'] .=
166
+        ($compat_md5 ? '<script type="text/javascript" src="' . _DIR_JAVASCRIPT . 'md5.js"></script>' : '')
167
+        . '<script type="text/javascript" src="' . _DIR_JAVASCRIPT . 'login-sha-min.js"></script>'
168
+        . '<script type="text/javascript">/*<![CDATA[*/'
169
+        . "var login_info={'alea_actuel':'" . $flux['args']['contexte']['_alea_actuel'] . "',"
170
+        . "'alea_futur':'" . $flux['args']['contexte']['_alea_futur'] . "',"
171
+        . "'login':'" . $flux['args']['contexte']['var_login'] . "',"
172
+        . "'page_auteur': '" . generer_url_public('informer_auteur') . "',"
173
+        . "'informe_auteur_en_cours':false,"
174
+        . "'attente_informe':0,"
175
+        . "'compat_md5':" . ($compat_md5 ? 'true' : 'false') . '};'
176
+        . "jQuery(function(){
177 177
 	jQuery('#var_login').change(actualise_auteur);
178 178
 	jQuery('form#formulaire_login').submit(login_submit);
179 179
 });"
180
-		. '/*]]>*/</script>';
180
+        . '/*]]>*/</script>';
181 181
 
182
-	return $flux;
182
+    return $flux;
183 183
 }
184 184
 
185 185
 
@@ -191,10 +191,10 @@  discard block
 block discarded – undo
191 191
  *   toujours true pour un auteur cree dans SPIP
192 192
  */
193 193
 function auth_spip_autoriser_modifier_login($serveur = '') {
194
-	if (strlen($serveur)) {
195
-		return false;
196
-	} // les fonctions d'ecriture sur base distante sont encore incompletes
197
-	return true;
194
+    if (strlen($serveur)) {
195
+        return false;
196
+    } // les fonctions d'ecriture sur base distante sont encore incompletes
197
+    return true;
198 198
 }
199 199
 
200 200
 /**
@@ -208,25 +208,25 @@  discard block
 block discarded – undo
208 208
  *  message d'erreur si login non valide, chaine vide sinon
209 209
  */
210 210
 function auth_spip_verifier_login($new_login, $id_auteur = 0, $serveur = '') {
211
-	// login et mot de passe
212
-	if (strlen($new_login)) {
213
-		if (strlen($new_login) < _LOGIN_TROP_COURT) {
214
-			return _T('info_login_trop_court_car_pluriel', ['nb' => _LOGIN_TROP_COURT]);
215
-		} else {
216
-			$n = sql_countsel(
217
-				'spip_auteurs',
218
-				'login=' . sql_quote($new_login) . ' AND id_auteur!=' . intval($id_auteur) . " AND statut!='5poubelle'",
219
-				'',
220
-				'',
221
-				$serveur
222
-			);
223
-			if ($n) {
224
-				return _T('info_login_existant');
225
-			}
226
-		}
227
-	}
228
-
229
-	return '';
211
+    // login et mot de passe
212
+    if (strlen($new_login)) {
213
+        if (strlen($new_login) < _LOGIN_TROP_COURT) {
214
+            return _T('info_login_trop_court_car_pluriel', ['nb' => _LOGIN_TROP_COURT]);
215
+        } else {
216
+            $n = sql_countsel(
217
+                'spip_auteurs',
218
+                'login=' . sql_quote($new_login) . ' AND id_auteur!=' . intval($id_auteur) . " AND statut!='5poubelle'",
219
+                '',
220
+                '',
221
+                $serveur
222
+            );
223
+            if ($n) {
224
+                return _T('info_login_existant');
225
+            }
226
+        }
227
+    }
228
+
229
+    return '';
230 230
 }
231 231
 
232 232
 /**
@@ -238,41 +238,41 @@  discard block
 block discarded – undo
238 238
  * @return bool
239 239
  */
240 240
 function auth_spip_modifier_login($new_login, $id_auteur, $serveur = '') {
241
-	if (is_null($new_login) or auth_spip_verifier_login($new_login, $id_auteur, $serveur) != '') {
242
-		return false;
243
-	}
244
-	if (
245
-		!$id_auteur = intval($id_auteur)
246
-		or !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur)
247
-	) {
248
-		return false;
249
-	}
250
-	if ($new_login == $auteur['login']) {
251
-		return true;
252
-	} // on a rien fait mais c'est bon !
253
-
254
-	include_spip('action/editer_auteur');
255
-
256
-	// vider le login des auteurs a la poubelle qui avaient ce meme login
257
-	if (strlen($new_login)) {
258
-		$anciens = sql_allfetsel(
259
-			'id_auteur',
260
-			'spip_auteurs',
261
-			'login=' . sql_quote($new_login, $serveur, 'text') . " AND statut='5poubelle'",
262
-			'',
263
-			'',
264
-			'',
265
-			'',
266
-			$serveur
267
-		);
268
-		while ($row = array_pop($anciens)) {
269
-			auteur_modifier($row['id_auteur'], ['login' => ''], true); // manque la gestion de $serveur
270
-		}
271
-	}
272
-
273
-	auteur_modifier($id_auteur, ['login' => $new_login], true); // manque la gestion de $serveur
274
-
275
-	return true;
241
+    if (is_null($new_login) or auth_spip_verifier_login($new_login, $id_auteur, $serveur) != '') {
242
+        return false;
243
+    }
244
+    if (
245
+        !$id_auteur = intval($id_auteur)
246
+        or !$auteur = sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur)
247
+    ) {
248
+        return false;
249
+    }
250
+    if ($new_login == $auteur['login']) {
251
+        return true;
252
+    } // on a rien fait mais c'est bon !
253
+
254
+    include_spip('action/editer_auteur');
255
+
256
+    // vider le login des auteurs a la poubelle qui avaient ce meme login
257
+    if (strlen($new_login)) {
258
+        $anciens = sql_allfetsel(
259
+            'id_auteur',
260
+            'spip_auteurs',
261
+            'login=' . sql_quote($new_login, $serveur, 'text') . " AND statut='5poubelle'",
262
+            '',
263
+            '',
264
+            '',
265
+            '',
266
+            $serveur
267
+        );
268
+        while ($row = array_pop($anciens)) {
269
+            auteur_modifier($row['id_auteur'], ['login' => ''], true); // manque la gestion de $serveur
270
+        }
271
+    }
272
+
273
+    auteur_modifier($id_auteur, ['login' => $new_login], true); // manque la gestion de $serveur
274
+
275
+    return true;
276 276
 }
277 277
 
278 278
 /**
@@ -284,44 +284,44 @@  discard block
 block discarded – undo
284 284
  * @return string
285 285
  */
286 286
 function auth_spip_retrouver_login($login, $serveur = '') {
287
-	if (!strlen($login)) {
288
-		return null;
289
-	} // pas la peine de requeter
290
-	$l = sql_quote($login, $serveur, 'text');
291
-	if (
292
-		$r = sql_getfetsel(
293
-			'login',
294
-			'spip_auteurs',
295
-			"statut<>'5poubelle'" .
296
-			' AND (length(pass)>0)' .
297
-			" AND (login=$l)",
298
-			'',
299
-			'',
300
-			'',
301
-			'',
302
-			$serveur
303
-		)
304
-	) {
305
-		return $r;
306
-	}
307
-	// Si pas d'auteur avec ce login
308
-	// regarder s'il a saisi son nom ou son mail.
309
-	// Ne pas fusionner avec la requete precedente
310
-	// car un nom peut etre homonyme d'un autre login
311
-	else {
312
-		return sql_getfetsel(
313
-			'login',
314
-			'spip_auteurs',
315
-			"statut<>'5poubelle'" .
316
-			' AND (length(pass)>0)' .
317
-			" AND (login<>'' AND (nom=$l OR email=$l))",
318
-			'',
319
-			'',
320
-			'',
321
-			'',
322
-			$serveur
323
-		);
324
-	}
287
+    if (!strlen($login)) {
288
+        return null;
289
+    } // pas la peine de requeter
290
+    $l = sql_quote($login, $serveur, 'text');
291
+    if (
292
+        $r = sql_getfetsel(
293
+            'login',
294
+            'spip_auteurs',
295
+            "statut<>'5poubelle'" .
296
+            ' AND (length(pass)>0)' .
297
+            " AND (login=$l)",
298
+            '',
299
+            '',
300
+            '',
301
+            '',
302
+            $serveur
303
+        )
304
+    ) {
305
+        return $r;
306
+    }
307
+    // Si pas d'auteur avec ce login
308
+    // regarder s'il a saisi son nom ou son mail.
309
+    // Ne pas fusionner avec la requete precedente
310
+    // car un nom peut etre homonyme d'un autre login
311
+    else {
312
+        return sql_getfetsel(
313
+            'login',
314
+            'spip_auteurs',
315
+            "statut<>'5poubelle'" .
316
+            ' AND (length(pass)>0)' .
317
+            " AND (login<>'' AND (nom=$l OR email=$l))",
318
+            '',
319
+            '',
320
+            '',
321
+            '',
322
+            $serveur
323
+        );
324
+    }
325 325
 }
326 326
 
327 327
 
@@ -339,11 +339,11 @@  discard block
 block discarded – undo
339 339
  */
340 340
 function auth_spip_informer_login($infos, $row, $serveur = '') {
341 341
 
342
-	// pour la methode SPIP on a besoin des alea en plus pour encoder le pass avec
343
-	$infos['alea_actuel'] = $row['alea_actuel'];
344
-	$infos['alea_futur'] = $row['alea_futur'];
342
+    // pour la methode SPIP on a besoin des alea en plus pour encoder le pass avec
343
+    $infos['alea_actuel'] = $row['alea_actuel'];
344
+    $infos['alea_futur'] = $row['alea_futur'];
345 345
 
346
-	return $infos;
346
+    return $infos;
347 347
 }
348 348
 
349 349
 /**
@@ -354,10 +354,10 @@  discard block
 block discarded – undo
354 354
  *  toujours true pour un auteur cree dans SPIP
355 355
  */
356 356
 function auth_spip_autoriser_modifier_pass($serveur = '') {
357
-	if (strlen($serveur)) {
358
-		return false;
359
-	} // les fonctions d'ecriture sur base distante sont encore incompletes
360
-	return true;
357
+    if (strlen($serveur)) {
358
+        return false;
359
+    } // les fonctions d'ecriture sur base distante sont encore incompletes
360
+    return true;
361 361
 }
362 362
 
363 363
 
@@ -378,12 +378,12 @@  discard block
 block discarded – undo
378 378
  *  message d'erreur si login non valide, chaine vide sinon
379 379
  */
380 380
 function auth_spip_verifier_pass($login, $new_pass, $id_auteur = 0, $serveur = '') {
381
-	// login et mot de passe
382
-	if (strlen($new_pass) < _PASS_LONGUEUR_MINI) {
383
-		return _T('info_passe_trop_court_car_pluriel', ['nb' => _PASS_LONGUEUR_MINI]);
384
-	}
381
+    // login et mot de passe
382
+    if (strlen($new_pass) < _PASS_LONGUEUR_MINI) {
383
+        return _T('info_passe_trop_court_car_pluriel', ['nb' => _PASS_LONGUEUR_MINI]);
384
+    }
385 385
 
386
-	return '';
386
+    return '';
387 387
 }
388 388
 
389 389
 /**
@@ -397,38 +397,38 @@  discard block
 block discarded – undo
397 397
  * @return bool
398 398
  */
399 399
 function auth_spip_modifier_pass($login, $new_pass, $id_auteur, $serveur = '') {
400
-	if (is_null($new_pass) or auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') {
401
-		return false;
402
-	}
403
-
404
-	if (
405
-		!$id_auteur = intval($id_auteur)
406
-		or !sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur)
407
-	) {
408
-		return false;
409
-	}
410
-
411
-	$c = [];
412
-	include_spip('inc/acces');
413
-	include_spip('auth/sha256.inc');
414
-	if ($generer_htpass = charger_fonction('generer_htpass', 'inc', true)) {
415
-		$htpass = $generer_htpass($new_pass);
416
-	} else {
417
-		$htpass = '';
418
-	}
419
-	$alea_actuel = creer_uniqid();
420
-	$alea_futur = creer_uniqid();
421
-	$pass = spip_sha256($alea_actuel . $new_pass);
422
-	$c['pass'] = $pass;
423
-	$c['htpass'] = $htpass;
424
-	$c['alea_actuel'] = $alea_actuel;
425
-	$c['alea_futur'] = $alea_futur;
426
-	$c['low_sec'] = '';
427
-
428
-	include_spip('action/editer_auteur');
429
-	auteur_modifier($id_auteur, $c, true); // manque la gestion de $serveur
430
-
431
-	return true; // on a bien modifie le pass
400
+    if (is_null($new_pass) or auth_spip_verifier_pass($login, $new_pass, $id_auteur, $serveur) != '') {
401
+        return false;
402
+    }
403
+
404
+    if (
405
+        !$id_auteur = intval($id_auteur)
406
+        or !sql_fetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur), '', '', '', '', $serveur)
407
+    ) {
408
+        return false;
409
+    }
410
+
411
+    $c = [];
412
+    include_spip('inc/acces');
413
+    include_spip('auth/sha256.inc');
414
+    if ($generer_htpass = charger_fonction('generer_htpass', 'inc', true)) {
415
+        $htpass = $generer_htpass($new_pass);
416
+    } else {
417
+        $htpass = '';
418
+    }
419
+    $alea_actuel = creer_uniqid();
420
+    $alea_futur = creer_uniqid();
421
+    $pass = spip_sha256($alea_actuel . $new_pass);
422
+    $c['pass'] = $pass;
423
+    $c['htpass'] = $htpass;
424
+    $c['alea_actuel'] = $alea_actuel;
425
+    $c['alea_futur'] = $alea_futur;
426
+    $c['low_sec'] = '';
427
+
428
+    include_spip('action/editer_auteur');
429
+    auteur_modifier($id_auteur, $c, true); // manque la gestion de $serveur
430
+
431
+    return true; // on a bien modifie le pass
432 432
 }
433 433
 
434 434
 /**
@@ -442,58 +442,58 @@  discard block
 block discarded – undo
442 442
  * @return void
443 443
  */
444 444
 function auth_spip_synchroniser_distant($id_auteur, $champs, $options = [], $serveur = '') {
445
-	// ne rien faire pour une base distante : on ne sait pas regenerer les htaccess
446
-	if (strlen($serveur)) {
447
-		return;
448
-	}
449
-	// si un login, pass ou statut a ete modifie
450
-	// regenerer les fichier htpass
451
-	if (
452
-		isset($champs['login'])
453
-		or isset($champs['pass'])
454
-		or isset($champs['statut'])
455
-		or (isset($options['all']) and $options['all'])
456
-	) {
457
-		$htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
458
-		$htpasswd = _DIR_TMP . _AUTH_USER_FILE;
459
-
460
-		// Cette variable de configuration peut etre posee par un plugin
461
-		// par exemple acces_restreint ;
462
-		// si .htaccess existe, outrepasser spip_meta
463
-		if (
464
-			(!isset($GLOBALS['meta']['creer_htpasswd']) or ($GLOBALS['meta']['creer_htpasswd'] != 'oui'))
465
-			and !@file_exists($htaccess)
466
-		) {
467
-			spip_unlink($htpasswd);
468
-			spip_unlink($htpasswd . '-admin');
469
-
470
-			return;
471
-		}
472
-
473
-		# remarque : ici on laisse passer les "nouveau" de maniere a leur permettre
474
-		# de devenir redacteur le cas echeant (auth http)... a nettoyer
475
-		// attention, il faut au prealable se connecter a la base (necessaire car utilise par install)
476
-
477
-		$p1 = ''; // login:htpass pour tous
478
-		$p2 = ''; // login:htpass pour les admins
479
-		$s = sql_select(
480
-			'login, htpass, statut',
481
-			'spip_auteurs',
482
-			sql_in('statut', ['1comite', '0minirezo', 'nouveau'])
483
-		);
484
-		while ($t = sql_fetch($s)) {
485
-			if (strlen($t['login']) and strlen($t['htpass'])) {
486
-				$p1 .= $t['login'] . ':' . $t['htpass'] . "\n";
487
-				if ($t['statut'] == '0minirezo') {
488
-					$p2 .= $t['login'] . ':' . $t['htpass'] . "\n";
489
-				}
490
-			}
491
-		}
492
-		sql_free($s);
493
-		if ($p1) {
494
-			ecrire_fichier($htpasswd, $p1);
495
-			ecrire_fichier($htpasswd . '-admin', $p2);
496
-			spip_log("Ecriture de $htpasswd et $htpasswd-admin");
497
-		}
498
-	}
445
+    // ne rien faire pour une base distante : on ne sait pas regenerer les htaccess
446
+    if (strlen($serveur)) {
447
+        return;
448
+    }
449
+    // si un login, pass ou statut a ete modifie
450
+    // regenerer les fichier htpass
451
+    if (
452
+        isset($champs['login'])
453
+        or isset($champs['pass'])
454
+        or isset($champs['statut'])
455
+        or (isset($options['all']) and $options['all'])
456
+    ) {
457
+        $htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
458
+        $htpasswd = _DIR_TMP . _AUTH_USER_FILE;
459
+
460
+        // Cette variable de configuration peut etre posee par un plugin
461
+        // par exemple acces_restreint ;
462
+        // si .htaccess existe, outrepasser spip_meta
463
+        if (
464
+            (!isset($GLOBALS['meta']['creer_htpasswd']) or ($GLOBALS['meta']['creer_htpasswd'] != 'oui'))
465
+            and !@file_exists($htaccess)
466
+        ) {
467
+            spip_unlink($htpasswd);
468
+            spip_unlink($htpasswd . '-admin');
469
+
470
+            return;
471
+        }
472
+
473
+        # remarque : ici on laisse passer les "nouveau" de maniere a leur permettre
474
+        # de devenir redacteur le cas echeant (auth http)... a nettoyer
475
+        // attention, il faut au prealable se connecter a la base (necessaire car utilise par install)
476
+
477
+        $p1 = ''; // login:htpass pour tous
478
+        $p2 = ''; // login:htpass pour les admins
479
+        $s = sql_select(
480
+            'login, htpass, statut',
481
+            'spip_auteurs',
482
+            sql_in('statut', ['1comite', '0minirezo', 'nouveau'])
483
+        );
484
+        while ($t = sql_fetch($s)) {
485
+            if (strlen($t['login']) and strlen($t['htpass'])) {
486
+                $p1 .= $t['login'] . ':' . $t['htpass'] . "\n";
487
+                if ($t['statut'] == '0minirezo') {
488
+                    $p2 .= $t['login'] . ':' . $t['htpass'] . "\n";
489
+                }
490
+            }
491
+        }
492
+        sql_free($s);
493
+        if ($p1) {
494
+            ecrire_fichier($htpasswd, $p1);
495
+            ecrire_fichier($htpasswd . '-admin', $p2);
496
+            spip_log("Ecriture de $htpasswd et $htpasswd-admin");
497
+        }
498
+    }
499 499
 }
Please login to merge, or discard this patch.
ecrire/install/etape_3b.php 1 patch
Indentation   +139 added lines, -139 removed lines patch added patch discarded remove patch
@@ -11,148 +11,148 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 include_spip('inc/headers');
18 18
 
19 19
 function install_etape_3b_dist() {
20
-	$login = _request('login');
21
-	$email = _request('email');
22
-	$nom = _request('nom');
23
-	$pass = _request('pass');
24
-	$pass_verif = _request('pass_verif');
25
-
26
-	$server_db = defined('_INSTALL_SERVER_DB')
27
-		? _INSTALL_SERVER_DB
28
-		: _request('server_db');
29
-
30
-	if (!defined('_PASS_LONGUEUR_MINI')) {
31
-		define('_PASS_LONGUEUR_MINI', 6);
32
-	}
33
-	if (!defined('_LOGIN_TROP_COURT')) {
34
-		define('_LOGIN_TROP_COURT', 4);
35
-	}
36
-	if ($login) {
37
-		$echec = ($pass != $pass_verif) ?
38
-			_T('info_passes_identiques')
39
-			: ((strlen($pass) < _PASS_LONGUEUR_MINI) ?
40
-				_T('info_passe_trop_court_car_pluriel', ['nb' => _PASS_LONGUEUR_MINI])
41
-				: ((strlen($login) < _LOGIN_TROP_COURT) ?
42
-					_T('info_login_trop_court')
43
-					: ''));
44
-		include_spip('inc/filtres');
45
-		if (!$echec and $email and !email_valide($email)) {
46
-			$echec = _T('form_email_non_valide');
47
-		}
48
-		if ($echec) {
49
-			echo minipres(
50
-				'AUTO',
51
-				info_progression_etape(3, 'etape_', 'install/', true) .
52
-				"<div class='error'><h3>$echec</h3>\n" .
53
-				'<p>' . _T('avis_connexion_echec_2') . '</p>' .
54
-				'</div>'
55
-			);
56
-			exit;
57
-		}
58
-	}
59
-
60
-	if (@file_exists(_FILE_CHMOD_TMP)) {
61
-		include(_FILE_CHMOD_TMP);
62
-	} else {
63
-		redirige_url_ecrire('install');
64
-	}
65
-
66
-	if (!@file_exists(_FILE_CONNECT_TMP)) {
67
-		redirige_url_ecrire('install');
68
-	}
69
-
70
-	# maintenant on connait le vrai charset du site s'il est deja configure
71
-	# sinon par defaut lire_meta reglera _DEFAULT_CHARSET
72
-	# (les donnees arrivent de toute facon postees en _DEFAULT_CHARSET)
73
-
74
-	lire_metas();
75
-	if ($login) {
76
-		include_spip('inc/charsets');
77
-
78
-		$nom = (importer_charset($nom, _DEFAULT_CHARSET));
79
-		$login = (importer_charset($login, _DEFAULT_CHARSET));
80
-		$email = (importer_charset($email, _DEFAULT_CHARSET));
81
-		# pour le passwd, bizarrement il faut le convertir comme s'il avait
82
-		# ete tape en iso-8859-1 ; car c'est en fait ce que voit md5.js
83
-		$pass = unicode2charset(utf_8_to_unicode($pass), 'iso-8859-1');
84
-		include_spip('auth/sha256.inc');
85
-		include_spip('inc/acces');
86
-		if ($generer_htpass = charger_fonction('generer_htpass', 'inc', true)) {
87
-			$htpass = $generer_htpass($pass);
88
-		} else {
89
-			$htpass = '';
90
-		}
91
-		$alea_actuel = creer_uniqid();
92
-		$alea_futur = creer_uniqid();
93
-		$shapass = spip_sha256($alea_actuel . $pass);
94
-		// prelablement, creer le champ webmestre si il n'existe pas (install neuve
95
-		// sur une vieille base
96
-		$t = sql_showtable('spip_auteurs', true);
97
-		if (!isset($t['field']['webmestre'])) {
98
-			@sql_alter("TABLE spip_auteurs ADD webmestre varchar(3)  DEFAULT 'non' NOT NULL");
99
-		}
100
-
101
-		$id_auteur = sql_getfetsel('id_auteur', 'spip_auteurs', 'login=' . sql_quote($login));
102
-		if ($id_auteur !== null) {
103
-			sql_updateq('spip_auteurs', [
104
-				'nom' => $nom,
105
-				'email' => $email,
106
-				'login' => $login,
107
-				'pass' => $shapass,
108
-				'alea_actuel' => $alea_actuel,
109
-				'alea_futur' => $alea_futur,
110
-				'htpass' => $htpass,
111
-				'statut' => '0minirezo'
112
-			], "id_auteur=$id_auteur");
113
-		} else {
114
-			$id_auteur = sql_insertq('spip_auteurs', [
115
-				'nom' => $nom,
116
-				'email' => $email,
117
-				'login' => $login,
118
-				'pass' => $shapass,
119
-				'htpass' => $htpass,
120
-				'alea_actuel' => $alea_actuel,
121
-				'alea_futur' => $alea_futur,
122
-				'statut' => '0minirezo'
123
-			]);
124
-		}
125
-		// le passer webmestre separrement du reste, au cas ou l'alter n'aurait pas fonctionne
126
-		@sql_updateq('spip_auteurs', ['webmestre' => 'oui'], "id_auteur=$id_auteur");
127
-
128
-		// inserer email comme email webmaster principal
129
-		// (sauf s'il est vide: cas de la re-installation)
130
-		if ($email) {
131
-			ecrire_meta('email_webmaster', $email);
132
-		}
133
-
134
-		// Connecter directement celui qui vient de (re)donner son login
135
-		// mais sans cookie d'admin ni connexion longue
136
-		include_spip('inc/auth');
137
-		if (
138
-			!$auteur = auth_identifier_login($login, $pass)
139
-			or !auth_loger($auteur, true)
140
-		) {
141
-			spip_log("login automatique impossible $auth_spip $session" . count($row));
142
-		}
143
-	}
144
-
145
-	// installer les metas
146
-	$config = charger_fonction('config', 'inc');
147
-	$config();
148
-
149
-	// activer les plugins
150
-	// leur installation ne peut pas se faire sur le meme hit, il faudra donc
151
-	// poursuivre au hit suivant
152
-	include_spip('inc/plugin');
153
-	actualise_plugins_actifs();
154
-
155
-
156
-	include_spip('inc/distant');
157
-	redirige_par_entete(parametre_url(self(), 'etape', '4', '&'));
20
+    $login = _request('login');
21
+    $email = _request('email');
22
+    $nom = _request('nom');
23
+    $pass = _request('pass');
24
+    $pass_verif = _request('pass_verif');
25
+
26
+    $server_db = defined('_INSTALL_SERVER_DB')
27
+        ? _INSTALL_SERVER_DB
28
+        : _request('server_db');
29
+
30
+    if (!defined('_PASS_LONGUEUR_MINI')) {
31
+        define('_PASS_LONGUEUR_MINI', 6);
32
+    }
33
+    if (!defined('_LOGIN_TROP_COURT')) {
34
+        define('_LOGIN_TROP_COURT', 4);
35
+    }
36
+    if ($login) {
37
+        $echec = ($pass != $pass_verif) ?
38
+            _T('info_passes_identiques')
39
+            : ((strlen($pass) < _PASS_LONGUEUR_MINI) ?
40
+                _T('info_passe_trop_court_car_pluriel', ['nb' => _PASS_LONGUEUR_MINI])
41
+                : ((strlen($login) < _LOGIN_TROP_COURT) ?
42
+                    _T('info_login_trop_court')
43
+                    : ''));
44
+        include_spip('inc/filtres');
45
+        if (!$echec and $email and !email_valide($email)) {
46
+            $echec = _T('form_email_non_valide');
47
+        }
48
+        if ($echec) {
49
+            echo minipres(
50
+                'AUTO',
51
+                info_progression_etape(3, 'etape_', 'install/', true) .
52
+                "<div class='error'><h3>$echec</h3>\n" .
53
+                '<p>' . _T('avis_connexion_echec_2') . '</p>' .
54
+                '</div>'
55
+            );
56
+            exit;
57
+        }
58
+    }
59
+
60
+    if (@file_exists(_FILE_CHMOD_TMP)) {
61
+        include(_FILE_CHMOD_TMP);
62
+    } else {
63
+        redirige_url_ecrire('install');
64
+    }
65
+
66
+    if (!@file_exists(_FILE_CONNECT_TMP)) {
67
+        redirige_url_ecrire('install');
68
+    }
69
+
70
+    # maintenant on connait le vrai charset du site s'il est deja configure
71
+    # sinon par defaut lire_meta reglera _DEFAULT_CHARSET
72
+    # (les donnees arrivent de toute facon postees en _DEFAULT_CHARSET)
73
+
74
+    lire_metas();
75
+    if ($login) {
76
+        include_spip('inc/charsets');
77
+
78
+        $nom = (importer_charset($nom, _DEFAULT_CHARSET));
79
+        $login = (importer_charset($login, _DEFAULT_CHARSET));
80
+        $email = (importer_charset($email, _DEFAULT_CHARSET));
81
+        # pour le passwd, bizarrement il faut le convertir comme s'il avait
82
+        # ete tape en iso-8859-1 ; car c'est en fait ce que voit md5.js
83
+        $pass = unicode2charset(utf_8_to_unicode($pass), 'iso-8859-1');
84
+        include_spip('auth/sha256.inc');
85
+        include_spip('inc/acces');
86
+        if ($generer_htpass = charger_fonction('generer_htpass', 'inc', true)) {
87
+            $htpass = $generer_htpass($pass);
88
+        } else {
89
+            $htpass = '';
90
+        }
91
+        $alea_actuel = creer_uniqid();
92
+        $alea_futur = creer_uniqid();
93
+        $shapass = spip_sha256($alea_actuel . $pass);
94
+        // prelablement, creer le champ webmestre si il n'existe pas (install neuve
95
+        // sur une vieille base
96
+        $t = sql_showtable('spip_auteurs', true);
97
+        if (!isset($t['field']['webmestre'])) {
98
+            @sql_alter("TABLE spip_auteurs ADD webmestre varchar(3)  DEFAULT 'non' NOT NULL");
99
+        }
100
+
101
+        $id_auteur = sql_getfetsel('id_auteur', 'spip_auteurs', 'login=' . sql_quote($login));
102
+        if ($id_auteur !== null) {
103
+            sql_updateq('spip_auteurs', [
104
+                'nom' => $nom,
105
+                'email' => $email,
106
+                'login' => $login,
107
+                'pass' => $shapass,
108
+                'alea_actuel' => $alea_actuel,
109
+                'alea_futur' => $alea_futur,
110
+                'htpass' => $htpass,
111
+                'statut' => '0minirezo'
112
+            ], "id_auteur=$id_auteur");
113
+        } else {
114
+            $id_auteur = sql_insertq('spip_auteurs', [
115
+                'nom' => $nom,
116
+                'email' => $email,
117
+                'login' => $login,
118
+                'pass' => $shapass,
119
+                'htpass' => $htpass,
120
+                'alea_actuel' => $alea_actuel,
121
+                'alea_futur' => $alea_futur,
122
+                'statut' => '0minirezo'
123
+            ]);
124
+        }
125
+        // le passer webmestre separrement du reste, au cas ou l'alter n'aurait pas fonctionne
126
+        @sql_updateq('spip_auteurs', ['webmestre' => 'oui'], "id_auteur=$id_auteur");
127
+
128
+        // inserer email comme email webmaster principal
129
+        // (sauf s'il est vide: cas de la re-installation)
130
+        if ($email) {
131
+            ecrire_meta('email_webmaster', $email);
132
+        }
133
+
134
+        // Connecter directement celui qui vient de (re)donner son login
135
+        // mais sans cookie d'admin ni connexion longue
136
+        include_spip('inc/auth');
137
+        if (
138
+            !$auteur = auth_identifier_login($login, $pass)
139
+            or !auth_loger($auteur, true)
140
+        ) {
141
+            spip_log("login automatique impossible $auth_spip $session" . count($row));
142
+        }
143
+    }
144
+
145
+    // installer les metas
146
+    $config = charger_fonction('config', 'inc');
147
+    $config();
148
+
149
+    // activer les plugins
150
+    // leur installation ne peut pas se faire sur le meme hit, il faudra donc
151
+    // poursuivre au hit suivant
152
+    include_spip('inc/plugin');
153
+    actualise_plugins_actifs();
154
+
155
+
156
+    include_spip('inc/distant');
157
+    redirige_par_entete(parametre_url(self(), 'etape', '4', '&'));
158 158
 }
Please login to merge, or discard this patch.