Project

General

Profile

Download (10.6 KB) Statistics
| Branch: | Tag: | Revision:
1 1d2d6b3c Colin Smith
<?php
2
/* $Id$ */
3
/*
4 359893b0 Colin Smith
    diag_confbak.php
5
    Copyright (C) 2005 Colin Smith
6 957e2f1f jim-p
    Copyright (C) 2010 Jim Pingle
7 1d2d6b3c Colin Smith
    All rights reserved.
8
9
    Redistribution and use in source and binary forms, with or without
10
    modification, are permitted provided that the following conditions are met:
11
12
    1. Redistributions of source code must retain the above copyright notice,
13
       this list of conditions and the following disclaimer.
14
15
    2. Redistributions in binary form must reproduce the above copyright
16
       notice, this list of conditions and the following disclaimer in the
17
       documentation and/or other materials provided with the distribution.
18
19
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
20
    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
21
    AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
22
    AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
23
    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24
    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26
    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27
    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28
    POSSIBILITY OF SUCH DAMAGE.
29
*/
30
31 f8ec8de4 Renato Botelho
/*
32 13d193c2 Scott Ullrich
	pfSense_MODULE:	config
33
*/
34
35 6b07c15a Matthew Grooms
##|+PRIV
36
##|*IDENT=page-diagnostics-configurationhistory
37
##|*NAME=Diagnostics: Configuration History page
38
##|*DESCR=Allow access to the 'Diagnostics: Configuration History' page.
39
##|*MATCH=diag_confbak.php*
40
##|-PRIV
41
42 359893b0 Colin Smith
require("guiconfig.inc");
43 2f8d0729 Bill Marquette
44 e1ebe9e2 jim-p
if (isset($_POST['backupcount'])) {
45
	if (is_numeric($_POST['backupcount']) && ($_POST['backupcount'] >= 0)) {
46
		$config['system']['backupcount'] = $_POST['backupcount'];
47
		$changedescr = $config['system']['backupcount'];
48
	} else {
49
		unset($config['system']['backupcount']);
50
		$changedescr = "(platform default)";
51
	}
52
	write_config("Changed backup revision count to {$changedescr}");
53
}
54
55 359893b0 Colin Smith
if($_GET['newver'] != "") {
56 91bfbd00 Scott Ullrich
	conf_mount_rw();
57 1d478d96 Colin Smith
	$confvers = unserialize(file_get_contents($g['cf_conf_path'] . '/backup/backup.cache'));
58 486b4999 Matthew Grooms
	if(config_restore($g['conf_path'] . '/backup/config-' . $_GET['newver'] . '.xml') == 0)
59 f8ec8de4 Renato Botelho
60 ddc55e12 Erik Fonnesbeck
	$savemsg = sprintf(gettext('Successfully reverted to timestamp %1$s with description "%2$s".'), date(gettext("n/j/y H:i:s"), $_GET['newver']), $confvers[$_GET['newver']]['description']);
61 486b4999 Matthew Grooms
	else
62 f8ec8de4 Renato Botelho
		$savemsg = gettext("Unable to revert to the selected configuration.");
63 91bfbd00 Scott Ullrich
	conf_mount_ro();
64 359893b0 Colin Smith
}
65 2f8d0729 Bill Marquette
66 359893b0 Colin Smith
if($_GET['rmver'] != "") {
67 91bfbd00 Scott Ullrich
	conf_mount_rw();
68 1d478d96 Colin Smith
	$confvers = unserialize(file_get_contents($g['cf_conf_path'] . '/backup/backup.cache'));
69 359893b0 Colin Smith
	unlink_if_exists($g['conf_path'] . '/backup/config-' . $_GET['rmver'] . '.xml');
70 ddc55e12 Erik Fonnesbeck
	$savemsg = sprintf(gettext('Deleted backup with timestamp %1$s and description "%2$s".'), date(gettext("n/j/y H:i:s"), $_GET['rmver']),$confvers[$_GET['rmver']]['description']);
71 91bfbd00 Scott Ullrich
	conf_mount_ro();
72 2f8d0729 Bill Marquette
}
73
74 9f9b88e2 jim-p
if($_GET['getcfg'] != "") {
75
	$file = $g['conf_path'] . '/backup/config-' . $_GET['getcfg'] . '.xml';
76
77
	$exp_name = urlencode("config-{$config['system']['hostname']}.{$config['system']['domain']}-{$_GET['getcfg']}.xml");
78
	$exp_data = file_get_contents($file);
79
	$exp_size = strlen($exp_data);
80
81
	header("Content-Type: application/octet-stream");
82
	header("Content-Disposition: attachment; filename={$exp_name}");
83
	header("Content-Length: $exp_size");
84
	echo $exp_data;
85
	exit;
86
}
87
88 957e2f1f jim-p
if (($_GET['diff'] == 'Diff') && isset($_GET['oldtime']) && isset($_GET['newtime'])
89
      && is_numeric($_GET['oldtime']) && (is_numeric($_GET['newtime']) || ($_GET['newtime'] == 'current'))) {
90
	$diff = "";
91
	$oldfile = $g['conf_path'] . '/backup/config-' . $_GET['oldtime'] . '.xml';
92
	$oldtime = $_GET['oldtime'];
93
	if ($_GET['newtime'] == 'current') {
94
		$newfile = $g['conf_path'] . '/config.xml';
95
		$newtime = $config['revision']['time'];
96
	} else {
97
		$newfile = $g['conf_path'] . '/backup/config-' . $_GET['newtime'] . '.xml';
98
		$newtime = $_GET['newtime'];
99
	}
100
	if (file_exists($oldfile) && file_exists($newfile)) {
101
		exec("/usr/bin/diff -u " . escapeshellarg($oldfile) . " " . escapeshellarg($newfile), $diff);
102
	}
103
}
104
105 e1ebe9e2 jim-p
cleanup_backupcache(false);
106 359893b0 Colin Smith
$confvers = get_backups();
107
unset($confvers['versions']);
108 1d2d6b3c Colin Smith
109 f8ec8de4 Renato Botelho
$pgtitle = array(gettext("Diagnostics"),gettext("Configuration History"));
110 b63695db Scott Ullrich
include("head.inc");
111
112 1d2d6b3c Colin Smith
?>
113
114
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
115 486b4999 Matthew Grooms
	<?php
116
		include("fbegin.inc");
117
		if($savemsg)
118
			print_info_box($savemsg);
119
	?>
120 8cb8751e Renato Botelho
	<?php if ($diff) { ?>
121 a3457472 Colin Fleming
	<table align="center" width="100%" border="0" cellspacing="0" style="padding-top: 4px; padding-bottom: 4px; vertical-align:middle;" summary="diag confbak">
122 f8ec8de4 Renato Botelho
		<tr><td><?=gettext("Configuration diff from");?> <?php echo date(gettext("n/j/y H:i:s"), $oldtime); ?> <?=gettext("to");?> <?php echo date(gettext("n/j/y H:i:s"), $newtime); ?></td></tr>
123 db67053a jim-p
		<?php foreach ($diff as $line) {
124
			switch (substr($line, 0, 1)) {
125
				case "+":
126
					$color = "#caffd3";
127
					break;
128
				case "-":
129
					$color = "#ffe8e8";
130
					break;
131
				case "@":
132
					$color = "#a0a0a0";
133
					break;
134
				default:
135 a3457472 Colin Fleming
					$color = "#ffffff";
136 db67053a jim-p
			}
137
			?>
138 957e2f1f jim-p
		<tr>
139 db67053a jim-p
			<td valign="middle" bgcolor="<?php echo $color; ?>" style="white-space: pre-wrap;"><?php echo htmlentities($line);?></td>
140 957e2f1f jim-p
		</tr>
141 db67053a jim-p
		<?php } ?>
142 957e2f1f jim-p
	</table>
143 db67053a jim-p
	<br />
144 8cb8751e Renato Botelho
	<?php } ?>
145 a3457472 Colin Fleming
	<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="stats">
146 486b4999 Matthew Grooms
		<tr>
147
			<td>
148
			<?php
149
				$tab_array = array();
150 f8ec8de4 Renato Botelho
				$tab_array[0] = array(gettext("Config History"), true, "diag_confbak.php");
151
				$tab_array[1] = array(gettext("Backup/Restore"), false, "diag_backup.php");
152 486b4999 Matthew Grooms
				display_top_tabs($tab_array);
153 f8ec8de4 Renato Botelho
			?>
154 486b4999 Matthew Grooms
			</td>
155
		</tr>
156
		<tr>
157
			<td>
158
				<div id="mainarea">
159 e1ebe9e2 jim-p
					<form action="diag_confbak.php" method="post">
160 a3457472 Colin Fleming
					<table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="tabcont">
161 e1ebe9e2 jim-p
						<tr>
162
							<td width="10%">&nbsp;</td>
163
							<td width="15%" valign="top"><?=gettext("Backup Count");?></td>
164 a3457472 Colin Fleming
							<td width="10%">
165 e1ebe9e2 jim-p
							<input name="backupcount" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($config['system']['backupcount']);?>"/>
166
							</td>
167
							<td width="60%">
168
							<?= gettext("Enter the number of older configurations to keep in the local backup cache. By default this is 30 for a full install or 5 on NanoBSD."); ?>
169
							</td>
170 a3457472 Colin Fleming
							<td width= "5%"><input name="save" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" /></td>
171 e1ebe9e2 jim-p
						</tr>
172
						<tr>
173
							<td class="vncell">&nbsp;</td>
174
							<td colspan="4" class="vncell">
175
							<?= gettext("NOTE: Be aware of how much space is consumed by backups before adjusting this value. Current space used by backups: "); ?> <?= exec("/usr/bin/du -sh /conf/backup | /usr/bin/awk '{print $1;}'") ?>
176
							</td>
177
						</tr>
178
					</table>
179
					</form>
180 3ae16b9b Colin Fleming
					<form action="diag_confbak.php" method="get">
181 a3457472 Colin Fleming
					<table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0" summary="difference">
182 486b4999 Matthew Grooms
						<?php if (is_array($confvers)): ?>
183 e1ebe9e2 jim-p
						<tr>
184
							<td colspan="7" class="list">
185
							<?= gettext("To view the differences between an older configuration and a newer configuration, select the older configuration using the left column of radio options and select the newer configuration in the right colomn, then press the Diff button."); ?>
186 8cd558b6 ayvis
							<br /><br />
187 e1ebe9e2 jim-p
							</td>
188
						</tr>
189 486b4999 Matthew Grooms
						<tr>
190 a3457472 Colin Fleming
							<td width="5%" colspan="2" valign="middle" align="center" class="list nowrap"><input type="submit" name="diff" value="<?=gettext("Diff"); ?>" /></td>
191 bfe615ee jim-p
							<td width="20%" class="listhdrr"><?=gettext("Date");?></td>
192
							<td width="5%" class="listhdrr"><?=gettext("Version");?></td>
193
							<td width="5%" class="listhdrr"><?=gettext("Size");?></td>
194
							<td width="60%" class="listhdrr"><?=gettext("Configuration Change");?></td>
195
							<td width="5%" class="list">&nbsp;</td>
196 486b4999 Matthew Grooms
						</tr>
197
						<tr valign="top">
198 a3457472 Colin Fleming
							<td valign="middle" class="list nowrap"></td>
199 957e2f1f jim-p
							<td class="list">
200 a3457472 Colin Fleming
								<input type="radio" name="newtime" value="current" />
201 957e2f1f jim-p
							</td>
202 f8ec8de4 Renato Botelho
							<td class="listlr"> <?= date(gettext("n/j/y H:i:s"), $config['revision']['time']) ?></td>
203 92420c0a jim-p
							<td class="listr"> <?= $config['version'] ?></td>
204 bfe615ee jim-p
							<td class="listr"> <?= format_bytes(filesize("/conf/config.xml")) ?></td>
205 486b4999 Matthew Grooms
							<td class="listr"> <?= $config['revision']['description'] ?></td>
206 a3457472 Colin Fleming
							<td valign="middle" class="list nowrap"><b><?=gettext("Current");?></b></td>
207 486b4999 Matthew Grooms
						</tr>
208
						<?php
209 957e2f1f jim-p
							$c = 0;
210 486b4999 Matthew Grooms
							foreach($confvers as $version):
211
								if($version['time'] != 0)
212 f8ec8de4 Renato Botelho
									$date = date(gettext("n/j/y H:i:s"), $version['time']);
213 486b4999 Matthew Grooms
								else
214 f8ec8de4 Renato Botelho
									$date = gettext("Unknown");
215 486b4999 Matthew Grooms
						?>
216
						<tr valign="top">
217 957e2f1f jim-p
							<td class="list">
218 a3457472 Colin Fleming
								<input type="radio" name="oldtime" value="<?php echo $version['time'];?>" />
219 957e2f1f jim-p
							</td>
220
							<td class="list">
221
								<?php if ($c < (count($confvers) - 1)) { ?>
222 a3457472 Colin Fleming
								<input type="radio" name="newtime" value="<?php echo $version['time'];?>" />
223 8cb8751e Renato Botelho
								<?php } else { ?>
224 957e2f1f jim-p
								&nbsp;
225 8cb8751e Renato Botelho
								<?php }
226 957e2f1f jim-p
								$c++; ?>
227
							</td>
228 486b4999 Matthew Grooms
							<td class="listlr"> <?= $date ?></td>
229 92420c0a jim-p
							<td class="listr"> <?= $version['version'] ?></td>
230 bfe615ee jim-p
							<td class="listr"> <?= format_bytes($version['filesize']) ?></td>
231 92420c0a jim-p
							<td class="listr"> <?= $version['description'] ?></td>
232 a3457472 Colin Fleming
							<td valign="middle" class="list nowrap">
233
							<a href="diag_confbak.php?newver=<?=$version['time'];?>" onclick="return confirm('<?=gettext("Revert to this configuration?");?>')">
234
							<img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="<?=gettext("Revert to this configuration");?>" title="<?=gettext("Revert to this configuration");?>" />
235 486b4999 Matthew Grooms
								</a>
236 f8ec8de4 Renato Botelho
							<a href="diag_confbak.php?rmver=<?=$version['time'];?>" onclick="return confirm('<?=gettext("Delete this configuration backup?");?>')">
237 a3457472 Colin Fleming
							<img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="<?=gettext("Remove this backup");?>" title="<?=gettext("Remove this backup");?>" />
238 486b4999 Matthew Grooms
								</a>
239 9f9b88e2 jim-p
								<a href="diag_confbak.php?getcfg=<?=$version['time'];?>">
240 a3457472 Colin Fleming
								<img src="/themes/<?= $g['theme']; ?>/images/icons/icon_down.gif" width="17" height="17" border="0" alt="<?=gettext("Download this backup");?>" title="<?=gettext("Download this backup");?>" />
241 9f9b88e2 jim-p
								</a>
242
							</td>
243 486b4999 Matthew Grooms
						</tr>
244
						<?php endforeach; ?>
245 957e2f1f jim-p
						<tr>
246 a3457472 Colin Fleming
							<td colspan="2"><input type="submit" name="diff" value="<?=gettext("Diff"); ?>" /></td>
247 957e2f1f jim-p
							<td colspan="5"></td>
248
						</tr>
249 486b4999 Matthew Grooms
						<?php else: ?>
250
						<tr>
251
							<td>
252 f8ec8de4 Renato Botelho
								<?php print_info_box(gettext("No backups found.")); ?>
253 486b4999 Matthew Grooms
							</td>
254
						</tr>
255
						<?php endif; ?>
256
					</table>
257 957e2f1f jim-p
					</form>
258 486b4999 Matthew Grooms
				</div>
259
			</td>
260 2e2d1de7 Bill Marquette
		</tr>
261 0f10aee4 Bill Marquette
	</table>
262 a3457472 Colin Fleming
263 359893b0 Colin Smith
<?php include("fend.inc"); ?>
264 12af52d9 Scott Ullrich
</body>
265 310b2c06 Bill Marquette
</html>