Blame


1 4db75ba3 2022-09-05 mischa <?php
2 4db75ba3 2022-09-05 mischa //
3 4db75ba3 2022-09-05 mischa // OpenSMTPD Admin
4 4db75ba3 2022-09-05 mischa // by Mischa Peters <mischa at high5 dot nl>
5 4db75ba3 2022-09-05 mischa // Copyright (c) 2022 High5!
6 4db75ba3 2022-09-05 mischa // License Info: LICENSE.TXT
7 4db75ba3 2022-09-05 mischa //
8 4db75ba3 2022-09-05 mischa // File: backup.php
9 4db75ba3 2022-09-05 mischa //
10 4db75ba3 2022-09-05 mischa // Template File: -none-
11 4db75ba3 2022-09-05 mischa //
12 4db75ba3 2022-09-05 mischa // Template Variables:
13 4db75ba3 2022-09-05 mischa //
14 4db75ba3 2022-09-05 mischa // -none-
15 4db75ba3 2022-09-05 mischa //
16 4db75ba3 2022-09-05 mischa // POST / GET Variables:
17 4db75ba3 2022-09-05 mischa //
18 4db75ba3 2022-09-05 mischa // -none-
19 4db75ba3 2022-09-05 mischa //
20 4db75ba3 2022-09-05 mischa require_once './functions.inc.php';
21 4db75ba3 2022-09-05 mischa include './languages/' . check_language() . '.lang';
22 4db75ba3 2022-09-05 mischa date_default_timezone_set('Europe/Amsterdam');
23 4db75ba3 2022-09-05 mischa
24 4db75ba3 2022-09-05 mischa $SESSID_USERNAME = check_session();
25 1575a178 2022-09-06 mischa $ROLE = check_role($SESSID_USERNAME);
26 4db75ba3 2022-09-05 mischa
27 080e0cc0 2022-09-05 mischa if ($ROLE != ADMIN_ROLE) {
28 4db75ba3 2022-09-05 mischa header("Location: list-domain.php");
29 4db75ba3 2022-09-05 mischa die();;
30 4db75ba3 2022-09-05 mischa }
31 4db75ba3 2022-09-05 mischa
32 4db75ba3 2022-09-05 mischa if ($_SERVER['REQUEST_METHOD'] == "GET") {
33 4db75ba3 2022-09-05 mischa umask(077);
34 4db75ba3 2022-09-05 mischa $filename = "opensmtpadmin-" . date("Ymd") . "-" . getmypid() . ".sql";
35 4db75ba3 2022-09-05 mischa $backup = "/tmp/" . $filename;
36 4db75ba3 2022-09-05 mischa $header = "#\n# OpenSMTPD Admin " . VERSION . "\n# Date: " . date("D M j G:i:s T Y") . "\n#\n";
37 4db75ba3 2022-09-05 mischa $tables = array('admin','alias','domain','domain_admins','log','mailbox','vacation');
38 4db75ba3 2022-09-05 mischa
39 4db75ba3 2022-09-05 mischa if (!$fh = fopen($backup, 'w')) {
40 4db75ba3 2022-09-05 mischa $message = "<div class=\"error_msg\">Cannot open file ($backup)</div>";
41 4db75ba3 2022-09-05 mischa }
42 4db75ba3 2022-09-05 mischa
43 4db75ba3 2022-09-05 mischa if (empty($message)) {
44 4db75ba3 2022-09-05 mischa fwrite($fh, $header);
45 4db75ba3 2022-09-05 mischa $dbh = pdo_connect();
46 4db75ba3 2022-09-05 mischa foreach ($tables as $table) {
47 4db75ba3 2022-09-05 mischa $sth = $dbh->query("SHOW CREATE TABLE $table");
48 4db75ba3 2022-09-05 mischa $row = $sth->fetch(PDO::FETCH_ASSOC);
49 4db75ba3 2022-09-05 mischa fwrite ($fh, $row['Create Table']. "\n\n");
50 4db75ba3 2022-09-05 mischa }
51 4db75ba3 2022-09-05 mischa foreach ($tables as $table) {
52 4db75ba3 2022-09-05 mischa $sth = $dbh->query("SELECT * FROM $table");
53 4db75ba3 2022-09-05 mischa while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
54 4db75ba3 2022-09-05 mischa foreach ($row as $k => $v) {
55 4db75ba3 2022-09-05 mischa $keys[] = $k;
56 4db75ba3 2022-09-05 mischa $values[] = $v;
57 4db75ba3 2022-09-05 mischa }
58 4db75ba3 2022-09-05 mischa fwrite($fh, "INSERT INTO ". $table . " (". implode (',',$keys) . ") VALUES ('" . implode ('\',\'',$values) . "')\n");
59 4db75ba3 2022-09-05 mischa $keys = array();
60 4db75ba3 2022-09-05 mischa $values = array();
61 4db75ba3 2022-09-05 mischa }
62 4db75ba3 2022-09-05 mischa }
63 4db75ba3 2022-09-05 mischa header("Content-Type: application/octet-stream");
64 4db75ba3 2022-09-05 mischa header("Content-Disposition: attachment; filename=\"$filename\"");
65 4db75ba3 2022-09-05 mischa header("Content-Transfer-Encoding: binary");
66 4db75ba3 2022-09-05 mischa header("Content-Length: " . filesize("$backup"));
67 4db75ba3 2022-09-05 mischa header("Content-Description: OpenSMTPD Admin");
68 4db75ba3 2022-09-05 mischa $download_backup = fopen("$backup", "r");
69 4db75ba3 2022-09-05 mischa unlink("$backup");
70 4db75ba3 2022-09-05 mischa fpassthru($download_backup);
71 4db75ba3 2022-09-05 mischa } else {
72 4db75ba3 2022-09-05 mischa include './templates/header.tpl';
73 4db75ba3 2022-09-05 mischa include './templates/menu.tpl';
74 4db75ba3 2022-09-05 mischa include './templates/message.tpl';
75 4db75ba3 2022-09-05 mischa include './templates/footer.tpl';
76 4db75ba3 2022-09-05 mischa }
77 4db75ba3 2022-09-05 mischa }
78 4db75ba3 2022-09-05 mischa ?>