Project

General

Profile

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