diff --git a/backup.php b/backup.php index 6a9021ca..059fd7e0 100644 --- a/backup.php +++ b/backup.php @@ -33,101 +33,98 @@ if ('pgsql'==$CONF['database_type']) print '

Sorry: Backup is currently not supported for your DBMS.

'; } /* - SELECT attnum,attname,typname,atttypmod-4,attnotnull,atthasdef,adsrc - AS def FROM pg_attribute,pg_class,pg_type,pg_attrdef - WHERE pg_class.oid=attrelid AND pg_type.oid=atttypid - AND attnum>0 AND pg_class.oid=adrelid AND adnum=attnum AND atthasdef='t' AND lower(relname)='admin' - UNION SELECT attnum,attname,typname,atttypmod-4,attnotnull,atthasdef,'' - AS def FROM pg_attribute,pg_class,pg_type - WHERE pg_class.oid=attrelid - AND pg_type.oid=atttypid - AND attnum>0 - AND atthasdef='f' - AND lower(relname)='admin' + SELECT attnum,attname,typname,atttypmod-4,attnotnull,atthasdef,adsrc + AS def FROM pg_attribute,pg_class,pg_type,pg_attrdef + WHERE pg_class.oid=attrelid AND pg_type.oid=atttypid + AND attnum>0 AND pg_class.oid=adrelid AND adnum=attnum AND atthasdef='t' AND lower(relname)='admin' + UNION SELECT attnum,attname,typname,atttypmod-4,attnotnull,atthasdef,'' + AS def FROM pg_attribute,pg_class,pg_type + WHERE pg_class.oid=attrelid + AND pg_type.oid=atttypid + AND attnum>0 + AND atthasdef='f' + AND lower(relname)='admin' $db = $_GET['db']; $cmd = "pg_dump -c -D -f /tix/miner/miner.sql -F p -N -U postgres $db"; $res = `$cmd`; // Alternate: $res = shell_exec($cmd); echo $res; -*/ + */ if ($_SERVER['REQUEST_METHOD'] == "GET") { - umask (077); - $path = (ini_get('upload_tmp_dir') != '') ? ini_get('upload_tmp_dir') : '/tmp'; - $filename = "postfixadmin-" . date ("Ymd") . "-" . getmypid() . ".sql"; - $backup = $path . DIRECTORY_SEPARATOR . $filename; + umask (077); + $path = (ini_get('upload_tmp_dir') != '') ? ini_get('upload_tmp_dir') : '/tmp'; + $filename = "postfixadmin-" . date ("Ymd") . "-" . getmypid() . ".sql"; + $backup = $path . DIRECTORY_SEPARATOR . $filename; + + $header = "#\n# Postfix Admin $version\n# Date: " . date ("D M j G:i:s T Y") . "\n#\n"; - $header = "#\n# Postfix Admin $version\n# Date: " . date ("D M j G:i:s T Y") . "\n#\n"; + if (!$fh = fopen ($backup, 'w')) + { + $tMessage = "
Cannot open file ($backup)
"; + include ("templates/header.php"); + include ("templates/menu.php"); + include ("templates/message.php"); + include ("templates/footer.php"); + } + else + { + fwrite ($fh, $header); - if (!$fh = fopen ($backup, 'w')) - { - $tMessage = "
Cannot open file ($backup)
"; - include ("templates/header.php"); - include ("templates/menu.php"); - include ("templates/message.php"); - include ("templates/footer.php"); - } - else - { - fwrite ($fh, $header); - - $tables = array( - 'admin', - 'alias', - 'alias_domain', - 'config', - 'domain', - 'domain_admins', - 'fetchmail', - 'log', - 'mailbox', - 'quota', - 'quota2', - 'vacation', - 'vacation_notification' - ); + $tables = array( + 'admin', + 'alias', + 'alias_domain', + 'config', + 'domain', + 'domain_admins', + 'fetchmail', + 'log', + 'mailbox', + 'quota', + 'quota2', + 'vacation', + 'vacation_notification' + ); - for ($i = 0 ; $i < sizeof ($tables) ; ++$i) - { - $result = db_query ("SHOW CREATE TABLE " . table_by_key($tables[$i])); - if ($result['rows'] > 0) - { - while ($row = db_array ($result['result'])) + for ($i = 0 ; $i < sizeof ($tables) ; ++$i) + { + $result = db_query ("SHOW CREATE TABLE " . table_by_key($tables[$i])); + if ($result['rows'] > 0) { - fwrite ($fh, "$row[1];\n\n"); + while ($row = db_array ($result['result'])) + { + fwrite ($fh, "$row[1];\n\n"); + } } - } - } + } - for ($i = 0 ; $i < sizeof ($tables) ; ++$i) - { - $result = db_query ("SELECT * FROM " . table_by_key($tables[$i])); - if ($result['rows'] > 0) - { - while ($row = db_assoc ($result['result'])) + for ($i = 0 ; $i < sizeof ($tables) ; ++$i) + { + $result = db_query ("SELECT * FROM " . table_by_key($tables[$i])); + if ($result['rows'] > 0) { - foreach ($row as $key=>$val) - { - $fields[] = $key; - $values[] = $val; - } - - fwrite ($fh, "INSERT INTO ". $tables[$i] . " (". implode (',',$fields) . ") VALUES ('" . implode ('\',\'',$values) . "');\n"); - $fields = ""; - $values = ""; + while ($row = db_assoc ($result['result'])) + { + $fields = array_keys($row); + $values = array_values($row); + $values = array_map('escape_string', $values); + fwrite ($fh, "INSERT INTO ". $tables[$i] . " (". implode (',',$fields) . ") VALUES ('" . implode ('\',\'',$values) . "');\n"); + $fields = ""; + $values = ""; + } } - } - } - } - header ("Content-Type: text/plain"); - header ("Content-Disposition: attachment; filename=\"$filename\""); - header ("Content-Transfer-Encoding: binary"); - header ("Content-Length: " . filesize("$backup")); - header ("Content-Description: Postfix Admin"); - $download_backup = fopen ("$backup", "r"); - unlink ("$backup"); - fpassthru ($download_backup); + } + } + header ("Content-Type: text/plain"); + header ("Content-Disposition: attachment; filename=\"$filename\""); + header ("Content-Transfer-Encoding: binary"); + header ("Content-Length: " . filesize("$backup")); + header ("Content-Description: Postfix Admin"); + $download_backup = fopen ("$backup", "r"); + unlink ("$backup"); + fpassthru ($download_backup); } /* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */ ?>