aboutsummaryrefslogtreecommitdiffstats
path: root/config/autoconfigbackup/autoconfigbackup.php
diff options
context:
space:
mode:
Diffstat (limited to 'config/autoconfigbackup/autoconfigbackup.php')
-rw-r--r--config/autoconfigbackup/autoconfigbackup.php370
1 files changed, 188 insertions, 182 deletions
diff --git a/config/autoconfigbackup/autoconfigbackup.php b/config/autoconfigbackup/autoconfigbackup.php
index 52b3eca9..5bf40736 100644
--- a/config/autoconfigbackup/autoconfigbackup.php
+++ b/config/autoconfigbackup/autoconfigbackup.php
@@ -1,81 +1,86 @@
<?php
-/* $Id$ */
/*
- autoconfigbackup.php
- Copyright (C) 2008 Scott Ullrich
- All rights reserved.
+ autoconfigbackup.php
+ part of pfSense (https://www.pfSense.org/)
+ Copyright (C) 2008 Scott Ullrich
+ Copyright (C) 2008-2015 Electric Sheep Fencing LP
+ All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
+ 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.
+ 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.
+ 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.
+ 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");
require("autoconfigbackup.inc");
-$pf_version=substr(trim(file_get_contents("/etc/version")),0,3);
-if ($pf_version < 2.0)
+global $pf_version;
+$pf_version = substr(trim(file_get_contents("/etc/version")), 0, 3);
+if ($pf_version < 2.0) {
require("crypt_acb.php");
+}
// Seperator used during client / server communications
-$oper_sep = "\|\|";
+$oper_sep = "\|\|";
-// Encryption password
-$decrypt_password = $config['installedpackages']['autoconfigbackup']['config'][0]['crypto_password'];
+// Encryption password
+$decrypt_password = $config['installedpackages']['autoconfigbackup']['config'][0]['crypto_password'];
// Defined username
-$username = $config['installedpackages']['autoconfigbackup']['config'][0]['username'];
+$username = $config['installedpackages']['autoconfigbackup']['config'][0]['username'];
// Defined password
-$password = $config['installedpackages']['autoconfigbackup']['config'][0]['password'];
+$password = $config['installedpackages']['autoconfigbackup']['config'][0]['password'];
// URL to restore.php
-$get_url = "https://portal.pfsense.org/pfSconfigbackups/restore.php";
+$get_url = "https://portal.pfsense.org/pfSconfigbackups/restore.php";
// URL to stats
-$stats_url = "https://portal.pfsense.org/pfSconfigbackups/showstats.php";
+$stats_url = "https://portal.pfsense.org/pfSconfigbackups/showstats.php";
// URL to delete.php
-$del_url = "https://portal.pfsense.org/pfSconfigbackups/delete.php";
+$del_url = "https://portal.pfsense.org/pfSconfigbackups/delete.php";
// Set hostname
-if($_REQUEST['hostname'])
- $hostname = $_REQUEST['hostname'];
-else
- $hostname = $config['system']['hostname'] . "." . $config['system']['domain'];
+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'];
+$myhostname = $config['system']['hostname'] . "." . $config['system']['domain'];
-if(!$username) {
+if (!$username) {
Header("Location: /pkg_edit.php?xml=autoconfigbackup.xml&id=0&savemsg=Please+setup+Auto+Config+Backup");
exit;
}
-if($_REQUEST['savemsg'])
+if ($_REQUEST['savemsg']) {
$savemsg = htmlentities($_REQUEST['savemsg']);
+}
-if($_REQUEST['download'])
+if ($_REQUEST['download']) {
$pgtitle = "Diagnostics: Auto Configuration Backup revision information";
-else
+} else {
$pgtitle = "Diagnostics: Auto Configuration Backup";
+}
include("head.inc");
@@ -83,16 +88,16 @@ function get_hostnames() {
global $stats_url, $username, $password, $oper_sep, $config, $g;
// Populate available backups
$curl_session = curl_init();
- curl_setopt($curl_session, CURLOPT_URL, $stats_url);
+ curl_setopt($curl_session, CURLOPT_URL, $stats_url);
curl_setopt($curl_session, CURLOPT_HTTPHEADER, array("Authorization: Basic " . base64_encode("{$username}:{$password}")));
- curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, 0);
+ 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");
curl_setopt($curl_session, CURLOPT_USERAGENT, $g['product_name'] . '/' . rtrim(file_get_contents("/etc/version")));
// Proxy
curl_setopt_array($curl_session, configure_proxy());
-
+
$data = curl_exec($curl_session);
if (curl_errno($curl_session)) {
$fd = fopen("/tmp/acb_statsdebug.txt", "w");
@@ -101,15 +106,16 @@ function get_hostnames() {
fwrite($fd, curl_error($curl_session));
fclose($fd);
} else {
- curl_close($curl_session);
+ curl_close($curl_session);
}
// Loop through and create new confvers
- $data_split = split("\n", $data);
+ $data_split = explode("\n", $data);
$statvers = array();
- foreach($data_split as $ds) {
+ foreach ($data_split as $ds) {
$ds_split = split($oper_sep, $ds);
- if($ds_split[0])
- $statvers[] = $ds_split[0];;
+ if ($ds_split[0]) {
+ $statvers[] = $ds_split[0];
+ }
}
return $statvers;
}
@@ -119,99 +125,99 @@ function get_hostnames() {
<div id='maincontent'>
<script src="/javascript/scriptaculous/prototype.js" type="text/javascript"></script>
<?php
- include("fbegin.inc");
- if ($pf_version < 2.0)
+ include("fbegin.inc");
+ if ($pf_version < 2.0) {
echo "<p class=\"pgtitle\">{$pgtitle}</p>";
- if($savemsg) {
+ }
+ if ($savemsg) {
echo "<div id='savemsg'>";
print_info_box($savemsg);
- echo "</div>";
- }
- if ($input_errors)
+ echo "</div>";
+ }
+ if ($input_errors) {
print_input_errors($input_errors);
- if($hostname <> $myhostname)
- print_info_box("Warning! You are currently viewing an alternate host's backup history ($hostname)");
+ }
+ if ($hostname <> $myhostname) {
+ print_info_box("Warning! You are currently viewing an alternate host's backup history ($hostname)");
+ }
?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr><td>
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr><td>
<div id="loading">
- <img src="/themes/metallic/images/misc/loader.gif"> Loading, please wait...
- <p/>&nbsp;
+ <img src="/themes/metallic/images/misc/loader.gif" alt="" /> Loading, please wait...
+ <div>&nbsp;</div>
</div>
<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'])
+ if ($_REQUEST['download']) {
$active = false;
- else
+ } else {
$active = true;
+ }
$tab_array[1] = array("Restore", $active, "/autoconfigbackup.php");
- if($_REQUEST['download'])
+ 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>
+ ?>
+</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">
<?php
- if($_REQUEST['rmver'] != "") {
+ if ($_REQUEST['rmver'] != "") {
$curl_session = curl_init();
curl_setopt($curl_session, CURLOPT_URL, $del_url);
curl_setopt($curl_session, CURLOPT_HTTPHEADER, array("Authorization: Basic " . base64_encode("{$username}:{$password}")));
- 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']));
+ 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']));
curl_setopt($curl_session, CURLOPT_USERAGENT, $g['product_name'] . '/' . rtrim(file_get_contents("/etc/version")));
// Proxy
curl_setopt_array($curl_session, configure_proxy());
-
+
$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, $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);
+ curl_close($curl_session);
$savemsg = "Backup revision {$_REQUEST['rmver']} has been removed.";
}
print_info_box($savemsg);
- }
- if($_REQUEST['newver'] != "") {
+ }
+ 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_HTTPHEADER, array("Authorization: Basic " . base64_encode("{$username}:{$password}")));
- 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']));
+ 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']));
curl_setopt($curl_session, CURLOPT_USERAGENT, $g['product_name'] . '/' . rtrim(file_get_contents("/etc/version")));
// Proxy
curl_setopt_array($curl_session, configure_proxy());
$data = curl_exec($curl_session);
$data_split = split("\+\+\+\+", $data);
- $sha256 = trim($data_split[0]); // sha256
+ $sha256 = trim($data_split[0]);
$data = $data_split[1];
- if (!tagfile_deformat($data, $data, "config.xml"))
+ if (!tagfile_deformat($data, $data, "config.xml")) {
$input_errors[] = "The downloaded file does not appear to contain an encrypted pfSense configuration.";
+ }
$out = decrypt_data($data, $decrypt_password);
-
+
$pos = stripos($out, "</pfsense>");
$data = substr($out, 0, $pos);
$data = $data . "</pfsense>\n";
@@ -219,12 +225,16 @@ function get_hostnames() {
$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)
+ if (strlen($data) < 50) {
+ $input_errors[] = "The decrypted config.xml is under 50 characters, something went wrong. Aborting.";
+ }
+ $ondisksha256 = trim(shell_exec("/sbin/sha256 /tmp/config_restore.xml | /usr/bin/awk '{ print $4 }'"));
+ // We might not have a sha256 on file for older backups
+ if ($sha256 != "0" && $sha256 != "") {
+ if ($ondisksha256 <> $sha256) {
$input_errors[] = "SHA256 values do not match, cannot restore. $ondisksha256 <> $sha256";
+ }
+ }
if (curl_errno($curl_session)) {
/* If an error occured, log the error in /tmp/ */
$fd = fopen("/tmp/acb_restoredebug.txt", "w");
@@ -233,18 +243,18 @@ function get_hostnames() {
fwrite($fd, curl_error($curl_session));
fclose($fd);
} else {
- curl_close($curl_session);
+ curl_close($curl_session);
}
- if(!$input_errors && $data) {
+ if (!$input_errors && $data) {
conf_mount_rw();
- if(config_restore("/tmp/config_restore.xml") == 0) {
+ 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 ">
+ <br />
+ <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 {
@@ -256,42 +266,43 @@ EOF;
}
unlink_if_exists("/tmp/config_restore.xml");
conf_mount_ro();
- }
- if($_REQUEST['download']) {
+ }
+ 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_HTTPHEADER, array("Authorization: Basic " . base64_encode("{$username}:{$password}")));
- 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']));
+ 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']));
curl_setopt($curl_session, CURLOPT_USERAGENT, $g['product_name'] . '/' . rtrim(file_get_contents("/etc/version")));
// Proxy
curl_setopt_array($curl_session, configure_proxy());
$data = curl_exec($curl_session);
- if (!tagfile_deformat($data, $data1, "config.xml"))
+ 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")
+ if ($sha256sum == "0") {
$sha256sum = "None on file.";
+ }
$data = $ds[1];
$configtype = "Encrypted";
- if (!tagfile_deformat($data, $data, "config.xml"))
+ if (!tagfile_deformat($data, $data, "config.xml")) {
$input_errors[] = "The downloaded file does not appear to contain an encrypted pfSense configuration.";
+ }
$data = htmlentities(decrypt_data($data, $decrypt_password));
- if(!strstr($data, "pfsense")) {
- $data = "Could not decrypt. Different encryption key?";
+ if (!strstr($data, "pfsense")) {
+ $data = "Could not decrypt. Different encryption key?";
$input_errors[] = "Could not decrypt config.xml";
}
- echo "<h2>Hostname</h2>";
+ 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>";
@@ -304,20 +315,21 @@ EOF;
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']) . "';\">";
+ if (!$input_errors) {
+ echo "<br /><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;
+ exit;
}
// Populate available backups
$curl_session = curl_init();
- curl_setopt($curl_session, CURLOPT_URL, $get_url);
+ curl_setopt($curl_session, CURLOPT_URL, $get_url);
curl_setopt($curl_session, CURLOPT_HTTPHEADER, array("Authorization: Basic " . base64_encode("{$username}:{$password}")));
- curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, 0);
+ 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}");
@@ -333,97 +345,91 @@ EOF;
fwrite($fd, curl_error($curl_session));
fclose($fd);
} else {
- curl_close($curl_session);
+ curl_close($curl_session);
}
// Loop through and create new confvers
$data_split = split("\n", $data);
$confvers = array();
- foreach($data_split as $ds) {
+ 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])
+ if ($ds_split[2] && $ds_split[0]) {
$confvers[] = $tmp_array;
+ }
}
- if ($input_errors)
+ if ($input_errors) {
print_input_errors($input_errors);
+ }
?>
</td>
</tr>
- <tr>
- <td colspan="2">
- <center>
- <b>Hostname:</b>
- <select id="hostname" name="hostname" onChange="document.location='autoconfigbackup.php?hostname=' + this.value;">
- <?
- $host_not_found = true;
- foreach($hostnames as $hn):
- ?>
- <option value='<?=$hn?>' <? if ($hn == $hostname) {echo " selected=\"selected\""; $host_not_found = false;}?>>
- <?=$hn?>
- </option>
- <?endforeach?>
- <? if ($host_not_found) { ?>
- <option value='<?=$hostname?>' SELECTED><?=$hostname?></option>
- <? } ?>
- </select>
- </td>
- </tr>
-
+ <tr>
+ <td colspan="2">
+ <div style="text-align: center;">
+ <strong>Hostname:</strong>
+ <select id="hostname" name="hostname" onchange="document.location='autoconfigbackup.php?hostname=' + this.value;">
+ <?
+ $host_not_found = true;
+ foreach ($hostnames as $hn):
+ ?>
+ <option value='<?=$hn?>' <? if ($hn == $hostname) {echo " selected=\"selected\""; $host_not_found = false;} ?>>
+ <?=$hn?>
+ </option>
+ <?endforeach?>
+ <? if ($host_not_found) { ?>
+ <option value='<?=$hostname?>' SELECTED><?=$hostname?></option>
+ <? } ?>
+ </select>
+ </div>
+ </td>
+ </tr>
<tr>
<td width="30%" class="listhdrr">Date</td>
<td width="70%" class="listhdrr">Configuration Change</td>
</tr>
-<?php
+<?php
$counter = 0;
echo "<script type=\"text/javascript\">";
echo "$('loading').innerHTML = '';";
- echo "</script>";
- foreach($confvers as $cv):
+ echo "</script>";
+ foreach ($confvers as $cv):
?>
<tr valign="top">
- <td class="listlr"> <?= $cv['time']; ?></td>
+ <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>
+ <td colspan="2" valign="middle" class="list" nowrap="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" alt="" />
+ </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" alt="" />
+ </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" alt="" />
+ </a>
+ </td>
</tr>
<?php
- $counter++;
+ $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 portal.pfsense.org: {$counter}.</td></tr>";
+ if ($counter == 0) {
+ echo "<tr><td colspan='3' align='center'>Sorry, we could not locate any backups at portal.pfsense.org for this hostname ({$hostname}).</td></tr>";
+ } else {
+ echo "<tr><td colspan='3' align='center'><br />Backups hosted currently for this hostname on portal.pfsense.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>
+ </td>
+ <tr><td>
+ <div>
+ <strong>&nbsp;&nbsp;<span class="red">Hint:&nbsp;</span></strong>Click the + sign next to the revision you would like to restore.
+ </div>
+ </td></tr>
+</tr></table>
</form>
<?php include("fend.inc"); ?>
</body>