@@ -17,7 +17,7 @@ discard block |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 | } |
@@ -11,148 +11,148 @@ |
||
| 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 | } |