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
8 4db75ba3 2022-09-05 mischa // File: backup.php
10 4db75ba3 2022-09-05 mischa // Template File: -none-
12 4db75ba3 2022-09-05 mischa // Template Variables:
16 4db75ba3 2022-09-05 mischa // POST / GET Variables:
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');
24 4db75ba3 2022-09-05 mischa $SESSID_USERNAME = check_session();
25 1575a178 2022-09-06 mischa $ROLE = check_role($SESSID_USERNAME);
27 080e0cc0 2022-09-05 mischa if ($ROLE != ADMIN_ROLE) {
28 4db75ba3 2022-09-05 mischa header("Location: list-domain.php");
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');
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>";
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");
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;
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();
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);
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';