Overview
Comment: | Ne pas permettre l'import d'un fichier SQL où l'administrateur n'est plus administrateur pour éviter de se tirer une balle dans le pied |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk | stable |
Files: | files | file ages | folders |
SHA1: |
27c9ac2dd05d36e4b3f5765dfa3640ed |
User & Date: | bohwaz on 2016-12-04 21:56:25 |
Other Links: | manifest | tags |
References
2020-12-08
| ||
23:25 | • Wiki page "Changelog/0.9" artifact: b9c916b4d1 user: bohwaz | |
Context
2016-12-07
| ||
22:08 | New release check-in: e683f5cefe user: bohwaz tags: trunk, stable, 0.7.6 | |
2016-12-04
| ||
21:56 | Ne pas permettre l'import d'un fichier SQL où l'administrateur n'est plus administrateur pour éviter de se tirer une balle dans le pied check-in: 27c9ac2dd0 user: bohwaz tags: trunk, stable | |
2016-11-29
| ||
09:14 | Fix typo français check-in: c5d08ca357 user: bohwaz tags: trunk | |
Changes
Modified src/include/lib/Garradin/Sauvegarde.php from [5f91b166c3] to [4833dc42ef].
︙ | ︙ | |||
175 176 177 178 179 180 181 | } /** * Restaure une copie distante (fichier envoyé) * @param array $file Tableau provenant de $_FILES * @return boolean true */ | | | | | 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 | } /** * Restaure une copie distante (fichier envoyé) * @param array $file Tableau provenant de $_FILES * @return boolean true */ public function restoreFromUpload($file, $user_id) { if (empty($file['size']) || empty($file['tmp_name']) || !empty($file['error'])) { throw new UserException('Le fichier n\'a pas été correctement envoyé. Essayer de le renvoyer à nouveau.'); } $r = $this->restoreDB($file['tmp_name'], $user_id); if ($r) { unlink($file['tmp_name']); } return $r; } /** * Restauration de base de données, la fonction qui le fait vraiment * @param string $file Chemin absolu vers la base de données à utiliser * @return mixed true si rien ne va plus, ou self::NEED_UPGRADE si la version de la DB * ne correspond pas à la version de Garradin (mise à jour nécessaire). */ protected function restoreDB($file, $user_id = false) { // Essayons déjà d'ouvrir la base de données à restaurer en lecture try { $db = new \SQLite3($file, SQLITE3_OPEN_READONLY); } catch (\Exception $e) { |
︙ | ︙ | |||
227 228 229 230 231 232 233 234 235 236 237 238 239 240 | // un peu vieille, mais on vérifie quand même que ça ressemble un minimum à une base garradin $table = $db->querySingle('SELECT 1 FROM sqlite_master WHERE type=\'table\' AND tbl_name=\'config\';'); if (!$table) { throw new UserException('Le fichier fourni ne semble pas contenir de données liées à Garradin.'); } // On récupère la version pour plus tard $version = $db->querySingle('SELECT valeur FROM config WHERE cle=\'version\';'); $db->close(); $backup = str_replace('.sqlite', date('.Y-m-d-His') . '.avant_restauration.sqlite', DB_FILE); | > > > > > > > > > > > > > > | 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 | // un peu vieille, mais on vérifie quand même que ça ressemble un minimum à une base garradin $table = $db->querySingle('SELECT 1 FROM sqlite_master WHERE type=\'table\' AND tbl_name=\'config\';'); if (!$table) { throw new UserException('Le fichier fourni ne semble pas contenir de données liées à Garradin.'); } if ($user_id) { // Empêchons l'admin de se tirer une balle dans le pied $is_still_admin = $db->querySingle('SELECT 1 FROM membres_categories WHERE id = (SELECT id_categorie FROM membres WHERE id = ?) AND droit_config >= ' . Membres::DROIT_ADMIN . ' AND droit_connexion >= ' . Membres::DROIT_ACCES); if (!$is_still_admin) { throw new UserException('Vous n\'êtes pas administrateur dans le fichier de sauvegarde fourni.'); } } // On récupère la version pour plus tard $version = $db->querySingle('SELECT valeur FROM config WHERE cle=\'version\';'); $db->close(); $backup = str_replace('.sqlite', date('.Y-m-d-His') . '.avant_restauration.sqlite', DB_FILE); |
︙ | ︙ |
Modified src/include/lib/Garradin/Utils.php from [8a553d4fe8] to [787abfba04].
︙ | ︙ | |||
576 577 578 579 580 581 582 | } return $out; } static public function getMaxUploadSize() { | | | > > | > > > > > | 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 | } return $out; } static public function getMaxUploadSize() { $limits = [ self::return_bytes(ini_get('upload_max_filesize')), self::return_bytes(ini_get('post_max_size')), self::return_bytes(ini_get('memory_limit')) ]; return min(array_filter($limits)); } static public function return_bytes($size_str) { if ($size_str == '-1') { return false; } switch (substr($size_str, -1)) { case 'G': case 'g': return (int)$size_str * pow(1024, 3); case 'M': case 'm': return (int)$size_str * pow(1024, 2); case 'K': case 'k': return (int)$size_str * 1024; default: return $size_str; } |
︙ | ︙ |
Modified src/www/admin/config/donnees.php from [a856d32ebf] to [f33ac12b59].
︙ | ︙ | |||
93 94 95 96 97 98 99 | if (!Utils::CSRF_check('backup_restore')) { $error = 'Une erreur est survenue, merci de renvoyer le formulaire.'; } else { try { | | | 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | if (!Utils::CSRF_check('backup_restore')) { $error = 'Une erreur est survenue, merci de renvoyer le formulaire.'; } else { try { $s->restoreFromUpload($_FILES['file'], $user['id']); Utils::redirect('/admin/config/donnees.php?ok=restore'); } catch (UserException $e) { $error = $e->getMessage(); } } } |
︙ | ︙ |