aboutsummaryrefslogtreecommitdiffstats
path: root/packages/autoconfigbackup/autoconfigbackup.php
diff options
context:
space:
mode:
Diffstat (limited to 'packages/autoconfigbackup/autoconfigbackup.php')
-rw-r--r--packages/autoconfigbackup/autoconfigbackup.php387
1 files changed, 0 insertions, 387 deletions
diff --git a/packages/autoconfigbackup/autoconfigbackup.php b/packages/autoconfigbackup/autoconfigbackup.php
deleted file mode 100644
index 80db5543..00000000
--- a/packages/autoconfigbackup/autoconfigbackup.php
+++ /dev/null
@@ -1,387 +0,0 @@
-<?php
-/* $Id$ */
-/*
- autoconfigbackup.php
- Copyright (C) 2008 Scott Ullrich
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
-*/
-
-require("guiconfig.inc");
-
-$pfSversion = str_replace("\n", "", file_get_contents("/etc/version"));
-if(strstr($pfSversion, "1.2"))
- require("crypt_acb.php");
-
-// Seperator used during client / server communications
-$oper_sep = "\|\|";
-
-// Encryption password
-$decrypt_password = $config['installedpackages']['autoconfigbackup']['config'][0]['crypto_password'];
-
-// Defined username
-$username = $config['installedpackages']['autoconfigbackup']['config'][0]['username'];
-
-// Defined password
-$password = $config['installedpackages']['autoconfigbackup']['config'][0]['password'];
-
-// URL to restore.php
-$get_url = "https://{$username}:{$password}@portal.pfsense.org/pfSconfigbackups/restore.php";
-
-// URL to stats
-$stats_url = "https://{$username}:{$password}@portal.pfsense.org/pfSconfigbackups/showstats.php";
-
-// URL to delete.php
-$del_url = "https://{$username}:{$password}@portal.pfsense.org/pfSconfigbackups/delete.php";
-
-// Set hostname
-if($_REQUEST['hostname'])
- $hostname = $_REQUEST['hostname'];
-else
- $hostname = $config['system']['hostname'] . "." . $config['system']['domain'];
-
-// Hostname of local machine
-$myhostname = $config['system']['hostname'] . "." . $config['system']['domain'];
-
-if(!$username) {
- Header("Location: /pkg_edit.php?xml=autoconfigbackup.xml&id=0");
- exit;
-}
-
-if($_REQUEST['savemsg'])
- $savemsg = htmlentities($_REQUEST['savemsg']);
-
-if($_REQUEST['download'])
- $pgtitle = "Diagnostics: Auto Configuration Backup revision information";
-else
- $pgtitle = "Diagnostics: Auto Configuration Backup";
-
-include("head.inc");
-
-function get_hostnames() {
- global $stats_url, $username, $oper_sep;
- // Populate available backups
- $curl_session = curl_init();
- curl_setopt($curl_session, CURLOPT_URL, $stats_url);
- curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, 0);
- curl_setopt($curl_session, CURLOPT_POST, 1);
- curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($curl_session, CURLOPT_POSTFIELDS, "action=showstats");
- $data = curl_exec($curl_session);
- if (curl_errno($curl_session)) {
- $fd = fopen("/tmp/acb_statsdebug.txt", "w");
- fwrite($fd, $stats_url . "" . "action=showstats" . "\n\n");
- fwrite($fd, $data);
- fwrite($fd, curl_error($curl_session));
- fclose($fd);
- } else {
- curl_close($curl_session);
- }
- // Loop through and create new confvers
- $data_split = split("\n", $data);
- $statvers = array();
- foreach($data_split as $ds) {
- $ds_split = split($oper_sep, $ds);
- if($ds_split[0])
- $statvers[] = $ds_split[0];;
- }
- return $statvers;
-}
-
-?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<div id='maincontent'>
-<script src="/javascript/scriptaculous/prototype.js" type="text/javascript"></script>
-<?php
- include("fbegin.inc");
- if(strstr($pfSversion, "1.2"))
- echo "<p class=\"pgtitle\">{$pgtitle}</p>";
- if($savemsg) {
- echo "<div id='savemsg'>";
- print_info_box($savemsg);
- echo "</div>";
- }
- if ($input_errors)
- print_input_errors($input_errors);
- if($hostname <> $myhostname)
- print_info_box("Warning! You are currently viewing an alternate hosts backup history ($hostname)");
-?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr><td>
-<div id='feedbackdiv'></div>
- <?php
- $tab_array = array();
- $tab_array[0] = array("Settings", false, "/pkg_edit.php?xml=autoconfigbackup.xml&amp;id=0");
- if($_REQUEST['download'])
- $active = false;
- else
- $active = true;
- $tab_array[1] = array("Restore", $active, "/autoconfigbackup.php");
- if($_REQUEST['download'])
- $tab_array[] = array("Revision", true, "/autoconfigbackup.php?download={$_REQUEST['download']}");
- $tab_array[] = array("Backup now", false, "/autoconfigbackup_backup.php");
- $tab_array[] = array("Stats", false, "/autoconfigbackup_stats.php");
- display_top_tabs($tab_array);
- $hostnames = get_hostnames();
- ?>
- </td></tr>
- <tr>
- <td>
- <table id="backuptable" class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
- <tr>
- <td colspan="2" align="left">
- <div id="loading">
- <img src="themes/metallic/images/misc/loader.gif"> Loading, please wait...
- </div>
- <?php
- if($_REQUEST['rmver'] != "") {
- $curl_session = curl_init();
- curl_setopt($curl_session, CURLOPT_URL, $del_url);
- curl_setopt($curl_session, CURLOPT_POST, 3);
- curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, 0);
- curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($curl_session, CURLOPT_POSTFIELDS, "action=delete" .
- "&hostname=" . urlencode($hostname) .
- "&revision=" . urlencode($_REQUEST['rmver']));
- $data = curl_exec($curl_session);
- if (curl_errno($curl_session)) {
- $fd = fopen("/tmp/acb_deletedebug.txt", "w");
- fwrite($fd, $get_url . "" . "action=delete&hostname=" .
- urlencode($hostname) . "&revision=" .
- urlencode($_REQUEST['rmver']) . "\n\n");
- fwrite($fd, $data);
- fwrite($fd, curl_error($curl_session));
- fclose($fd);
- $savemsg = "An error occurred while trying to remove the item from portal.pfsense.org.";
- } else {
- curl_close($curl_session);
- $savemsg = "Backup revision {$_REQUEST['rmver']} has been removed.";
- }
- print_info_box($savemsg);
- }
- if($_REQUEST['newver'] != "") {
- // Phone home and obtain backups
- $curl_session = curl_init();
- curl_setopt($curl_session, CURLOPT_URL, $get_url);
- curl_setopt($curl_session, CURLOPT_POST, 3);
- curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, 0);
- curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($curl_session, CURLOPT_POSTFIELDS, "action=restore" .
- "&hostname=" . urlencode($hostname) .
- "&revision=" . urlencode($_REQUEST['newver']));
- $data = curl_exec($curl_session);
- $data_split = split("\+\+\+\+", $data);
- $sha256 = $data_split[0]; // sha256
- $data = $data_split[1];
- if (!tagfile_deformat($data, $data, "config.xml"))
- $input_errors[] = "The downloaded file does not appear to contain an encrypted pfSense configuration.";
- $data = decrypt_data($data, $decrypt_password);
- $fd = fopen("/tmp/config_restore.xml", "w");
- fwrite($fd, $data);
- fclose($fd);
- if(strlen($data) < 50)
- $input_errors[] = "The decrypted config.xml is under 50 characters, something went wrong. Aborting.";
- $ondisksha256 = trim(`/sbin/sha256 /tmp/config_restore.xml | awk '{ print $4 }'`);
- if($sha256 != "0" && $sha256 != "") // we might not have a sha256 on file for older backups
- if($ondisksha256 <> $sha256)
- $input_errors[] = "SHA256 values does not match, cannot restore.";
- if (curl_errno($curl_session)) {
- /* If an error occured, log the error in /tmp/ */
- $fd = fopen("/tmp/acb_restoredebug.txt", "w");
- fwrite($fd, $get_url . "" . "action=restore&hostname={$hostname}&revision=" . urlencode($_REQUEST['newver']) . "\n\n");
- fwrite($fd, $data);
- fwrite($fd, curl_error($curl_session));
- fclose($fd);
- } else {
- curl_close($curl_session);
- }
- if(!$input_errors && $data) {
- if(config_restore("/tmp/config_restore.xml") == 0) {
- $savemsg = "Successfully reverted the pfSense configuration to revision " . urldecode($_REQUEST['newver']) . ".";
- $savemsg .= <<<EOF
- <p/>
- <form action="reboot.php" method="post">
- Would you like to reboot?
- <input name="Submit" type="submit" class="formbtn" value=" Yes ">
- <input name="Submit" type="submit" class="formbtn" value=" No ">
- </form>
-EOF;
- } else {
- $savemsg = "Unable to revert to the selected configuration.";
- }
- print_info_box($savemsg);
- }
- unlink("/tmp/config_restore.xml");
- }
- if($_REQUEST['download']) {
- // Phone home and obtain backups
- $curl_session = curl_init();
- curl_setopt($curl_session, CURLOPT_URL, $get_url);
- curl_setopt($curl_session, CURLOPT_POST, 3);
- curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, 0);
- curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($curl_session, CURLOPT_POSTFIELDS, "action=restore" .
- "&hostname=" . urlencode($hostname) .
- "&revision=" . urlencode($_REQUEST['download']));
- $data = curl_exec($curl_session);
- if (!tagfile_deformat($data, $data1, "config.xml"))
- $input_errors[] = "The downloaded file does not appear to contain an encrypted pfSense configuration.";
- if ($input_errors) {
- print_input_errors($input_errors);
- } else {
- $ds = split("\+\+\+\+", $data);
- $revision = $_REQUEST['download'];
- $sha256sum = $ds[0];
- if($sha256sum == "0")
- $sha256sum = "None on file.";
- $data = $ds[1];
- $configtype = "Encrypted";
- if (!tagfile_deformat($data, $data, "config.xml"))
- $input_errors[] = "The downloaded file does not appear to contain an encrypted pfSense configuration.";
- $data = decrypt_data($data, $decrypt_password);
- if(!strstr($data, "pfsense")) {
- $data = "Could not decrypt. Different encryption key?";
- $input_errors[] = "Could not decrypt config.xml";
- }
- echo "<h2>Hostname</h2>";
- echo "<textarea rows='1' cols='70'>{$hostname}</textarea>";
- echo "<h2>Revision date/time</h2>";
- echo "<textarea name='download' rows='1' cols='70'>{$_REQUEST['download']}</textarea>";
- echo "<h2>Revision reason</h2>";
- echo "<textarea name='download' rows='1' cols='70'>{$_REQUEST['reason']}</textarea>";
- echo "<h2>SHA256 summary</h2>";
- echo "<textarea name='shasum' rows='1' cols='70'>{$sha256sum}</textarea>";
- echo "<h2>Encrypted config.xml</h2>";
- echo "<textarea name='config_xml' rows='40' cols='70'>{$ds[1]}</textarea>";
- echo "<h2>Decrypted config.xml</h2>";
- echo "<textarea name='dec_config_xml' rows='40' cols='70'>{$data}</textarea>";
- }
- if(!$input_errors)
- echo "<p/><input type=\"button\" value=\"Install this revision\" onClick=\"document.location='autoconfigbackup.php?newver=" . urlencode($_REQUEST['download']) . "';\">";
- echo "<script type=\"text/javascript\">";
- echo "$('loading').innerHTML = '';";
- echo "</script>";
- echo "</td></tr></table></div></td></td></tr></tr></table></form>";
- require("fend.inc");
- exit;
- }
- // Populate available backups
- $curl_session = curl_init();
- curl_setopt($curl_session, CURLOPT_URL, $get_url);
- curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, 0);
- curl_setopt($curl_session, CURLOPT_POST, 1);
- curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($curl_session, CURLOPT_POSTFIELDS, "action=showbackups&hostname={$hostname}");
- $data = curl_exec($curl_session);
- if (curl_errno($curl_session)) {
- $fd = fopen("/tmp/acb_backupdebug.txt", "w");
- fwrite($fd, $get_url . "" . "action=showbackups" . "\n\n");
- fwrite($fd, $data);
- fwrite($fd, curl_error($curl_session));
- fclose($fd);
- } else {
- curl_close($curl_session);
- }
- // Loop through and create new confvers
- $data_split = split("\n", $data);
- $confvers = array();
- foreach($data_split as $ds) {
- $ds_split = split($oper_sep, $ds);
- $tmp_array = array();
- $tmp_array['username'] = $ds_split[0];
- $tmp_array['reason'] = $ds_split[1];
- $tmp_array['time'] = $ds_split[2];
- if($ds_split[2] && $ds_split[0])
- $confvers[] = $tmp_array;
- }
- ?>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <center>
- <b>Hostname:</b>
- <select id="hostname" name="hostname" onChange="document.location='autoconfigbackup.php?hostname=' + this.value;">
- <?foreach($hostnames as $hn):?>
- <option value='<?=$hn?>'><?=$hn?></option>
- <?endforeach?>
- <option value='<?=$hostname?>' SELECTED><?=$hostname?></option>
- </select>
- </td>
- </tr>
-
- <tr>
- <td width="30%" class="listhdrr">Date</td>
- <td width="70%" class="listhdrr">Configuration Change</td>
- </tr>
-<?php
- $counter = 0;
- echo "<script type=\"text/javascript\">";
- echo "$('loading').innerHTML = '';";
- echo "</script>";
- foreach($confvers as $cv):
-?>
- <tr valign="top">
- <td class="listlr"> <?= $cv['time']; ?></td>
- <td class="listbg"> <?= $cv['reason']; ?></td>
- <td colspan="2" valign="middle" class="list" nowrap>
- <a title="Restore this revision" onClick="return confirm('Are you sure you want to restore <?= $cv['time']; ?>?')" href="autoconfigbackup.php?hostname=<?=urlencode($hostname)?>&newver=<?=urlencode($cv['time']);?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0">
- </a>
- <a title="Show info" href="autoconfigbackup.php?download=<?=urlencode($cv['time']);?>&hostname=<?=urlencode($hostname)?>&reason=<?php echo urlencode($cv['reason']);?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_down.gif" width="17" height="17" border="0">
- </a>
- <a title="Delete" onClick="return confirm('Are you sure you want to delete <?= $cv['time']; ?>?')"href="autoconfigbackup.php?hostname=<?=urlencode($hostname)?>&rmver=<?=urlencode($cv['time']);?>">
- <img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0">
- </a>
- </td>
- </tr>
-<?php
- $counter++;
- endforeach;
- if($counter == 0)
- echo "<tr><td colspan='3'><center>Sorry, we could not locate any backups at portal.pfsense.org for this hostname ({$hostname}).</td></tr>";
- else
- echo "<tr><td colspan='3'><center><br/>Backups hosted currently for this hostname on portalpfsense.org: {$counter}.</td></tr>";
-?>
- </table>
- </div>
- </td>
- <tr>
- <td>
- <p>
- <strong>
- &nbsp;&nbsp;
- <span class="red">
- Hint:&nbsp;
- </span>
- </strong>
- Click the + sign next to the revision you would like to restore.
- </p>
- </td>
- </tr>
- </tr>
-</table>
-</form>
-<?php include("fend.inc"); ?>
-</body>
-</html> \ No newline at end of file