Project

General

Profile

Download (24.9 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/* $Id$ */
3
/*
4
	diag_backup.php
5
	Copyright (C) 2004-2009 Scott Ullrich
6
	All rights reserved.
7

    
8
	originally part of m0n0wall (http://m0n0.ch/wall)
9
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
10
	All rights reserved.
11

    
12
	Redistribution and use in source and binary forms, with or without
13
	modification, are permitted provided that the following conditions are met:
14

    
15
	1. Redistributions of source code must retain the above copyright notice,
16
	   this list of conditions and the following disclaimer.
17

    
18
	2. Redistributions in binary form must reproduce the above copyright
19
	   notice, this list of conditions and the following disclaimer in the
20
	   documentation and/or other materials provided with the distribution.
21

    
22
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
23
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
24
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
26
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
	POSSIBILITY OF SUCH DAMAGE.
32
*/
33

    
34
/*
35
	pfSense_BUILDER_BINARIES:	/sbin/shutdown
36
	pfSense_MODULE:	backup
37
*/
38

    
39
##|+PRIV
40
##|*IDENT=page-diagnostics-backup/restore
41
##|*NAME=Diagnostics: Backup/restore page
42
##|*DESCR=Allow access to the 'Diagnostics: Backup/restore' page.
43
##|*MATCH=diag_backup.php*
44
##|-PRIV
45

    
46
/* Allow additional execution time 0 = no limit. */
47
ini_set('max_execution_time', '0');
48
ini_set('max_input_time', '0');
49

    
50
/* omit no-cache headers because it confuses IE with file downloads */
51
$omit_nocacheheaders = true;
52
$nocsrf = true;
53
require("guiconfig.inc");
54
require_once("functions.inc");
55
require_once("filter.inc");
56
require_once("shaper.inc");
57

    
58
function add_base_packages_menu_items() {
59
	global $g, $config;
60
	$base_packages = split($g['base_packages'], ",");
61
	$modified_config = false;
62
	foreach($base_packages as $bp) {
63
		$basepkg_path = "/usr/local/pkg/{$bp}";
64
		$tmpinfo = pathinfo($basepkg_path, PATHINFO_EXTENSION);
65
		if($tmpinfo['extension'] == "xml" && file_exists($basepkg_path)) {
66
			$pkg_config = parse_xml_config_pkg($basepkg_path, "packagegui");
67
			if($pkg_config['menu'] != "") {
68
				if(is_array($pkg_config['menu'])) {
69
					foreach($pkg_config['menu'] as $menu) {
70
						if(is_array($config['installedpackages']['menu']))
71
							foreach($config['installedpackages']['menu'] as $amenu)
72
								if($amenu['name'] == $menu['name'])
73
									continue;
74
						$config['installedpackages']['menu'][] = $menu;
75
						$modified_config = true;
76
					}
77
				}
78
				$static_output .= "done.\n";
79
				update_output_window($static_output);
80
			}
81
		}
82
	}
83
	if($modified_config) {
84
		write_config(gettext("Restored base_package menus after configuration restore."));
85
		$config = parse_config(true);
86
	}
87
}
88

    
89
function remove_bad_chars($string) {
90
	return preg_replace('/[^a-z_0-9]/i','',$string);
91
}
92

    
93
function check_and_returnif_section_exists($section) {
94
	global $config;
95
	if(is_array($config[$section]))
96
		return true;
97
	return false;
98
}
99

    
100
function spit_out_select_items($area, $showall) {
101
	global $config;
102

    
103
	$areas = array("aliases" => gettext("Aliases"),
104
				   "captiveportal" => gettext("Captive Portal"),
105
				   "voucher" => gettext("Captive Portal Vouchers"),
106
				   "dnsmasq" => gettext("DNS Forwarder"),
107
				   "dhcpd" => gettext("DHCP Server"),
108
				   "filter" => gettext("Firewall Rules"),
109
				   "interfaces" => gettext("Interfaces"),
110
				   "ipsec" => gettext("IPSEC"),
111
				   "nat" => gettext("NAT"),
112
				   "ovpn" => gettext("OpenVPN"),
113
				   "installedpackages" => gettext("Package Manager"),
114
				   "pptpd" => gettext("PPTP Server"),
115
				   "cron" => gettext("Scheduled Tasks"),
116
				   "syslog" => gettext("Syslog"),
117
				   "system" => gettext("System"),
118
				   "staticroutes" => gettext("Static routes"),
119
				   "sysctl" => gettext("System tunables"),
120
				   "snmpd" => gettext("SNMP Server"),
121
				   "shaper" => gettext("Traffic Shaper"),
122
				   "vlans" => gettext("VLANS"),
123
				   "wol" => gettext("Wake on LAN")
124
	);
125

    
126
	$select  = "<select name=\"{$area}\" id=\"{$aread}\" ";
127
	if ($area == "backuparea")
128
		$select .= " onChange=backuparea_change(this)";
129
	$select .= " >\n";
130
	$select .= "<option VALUE=\"\">" . gettext("ALL") . "</option>";
131

    
132
	if($showall == true)
133
		foreach($areas as $area => $areaname)
134
			$select .= "<option value='{$area}'>{$areaname}</option>\n";
135
	else
136
		foreach($areas as $area => $areaname)
137
			if(check_and_returnif_section_exists($area) == true)
138
				$select .= "<option value='{$area}'>{$areaname}</option>\n";
139

    
140
	$select .= "</select>\n";
141

    
142
	echo $select;
143

    
144
}
145

    
146
if ($_POST['apply']) {
147
        ob_flush();
148
        flush();
149
		conf_mount_rw();
150
		clear_subsystem_dirty("restore");
151
		conf_mount_ro();
152
        exit;
153
}
154

    
155
if ($_POST) {
156
	unset($input_errors);
157
	if (stristr($_POST['Submit'], gettext("Restore configuration")))
158
		$mode = "restore";
159
	else if (stristr($_POST['Submit'], gettext("Reinstall")))
160
		$mode = "reinstallpackages";
161
	else if (stristr($_POST['Submit'], gettext("Download")))
162
		$mode = "download";
163
	else if (stristr($_POST['Submit'], gettext("Restore version")))
164
		$mode = "restore_ver";
165

    
166
	if ($_POST["nopackages"] <> "")
167
		$options = "nopackages";
168

    
169
	if ($_POST["ver"] <> "")
170
		$ver2restore = $_POST["ver"];
171

    
172
	if ($mode) {
173

    
174
		if ($mode == "download") {
175

    
176
			if ($_POST['encrypt']) {
177
				if(!$_POST['encrypt_password'] || !$_POST['encrypt_passconf'])
178
					$input_errors[] = gettext("You must supply and confirm the password for encryption.");
179
				if($_POST['encrypt_password'] != $_POST['encrypt_passconf'])
180
					$input_errors[] = gettext("The supplied 'Password' and 'Confirm' field values must match.");
181
			}
182

    
183
			if (!$input_errors) {
184

    
185
				//$lockbckp = lock('config');
186

    
187
				$host = "{$config['system']['hostname']}.{$config['system']['domain']}";
188
				$name = "config-{$host}-".date("YmdHis").".xml";
189
				$data = "";
190

    
191
				if($options == "nopackages") {
192
					if(!$_POST['backuparea']) {
193
						/* backup entire configuration */
194
						$data = file_get_contents("{$g['conf_path']}/config.xml");
195
					} else {
196
						/* backup specific area of configuration */
197
						$data = backup_config_section($_POST['backuparea']);
198
						$name = "{$_POST['backuparea']}-{$name}";
199
					}
200
					$sfn = "{$g['tmp_path']}/config.xml.nopkg";
201
					file_put_contents($sfn, $data);
202
					exec("sed '/<installedpackages>/,/<\/installedpackages>/d' {$sfn} > {$sfn}-new");
203
					$data = file_get_contents($sfn . "-new");
204
				} else {
205
					if(!$_POST['backuparea']) {
206
						/* backup entire configuration */
207
						$data = file_get_contents("{$g['conf_path']}/config.xml");
208
					} else {
209
						/* backup specific area of configuration */
210
						$data = backup_config_section($_POST['backuparea']);
211
						$name = "{$_POST['backuparea']}-{$name}";
212
					}
213
				}
214

    
215
				//unlock($lockbckp);
216

    
217
				if ($_POST['encrypt']) {
218
					$data = encrypt_data($data, $_POST['encrypt_password']);
219
					tagfile_reformat($data, $data, "config.xml");
220
				}
221

    
222
				/*
223
				 *  Backup RRD Data
224
				 */
225
				if(!$_POST['donotbackuprrd']) {
226
					$data = str_replace("</" . $g['xml_rootobj'] . ">", "\t<rrddata>", $data);
227
					$rrd_files_var_db_rrd = split("\n",`cd /var/db/rrd && ls *.rrd`);
228
					foreach($rrd_files_var_db_rrd as $rrd) {
229
						if($rrd) {
230
							$rrd_data = file_get_contents("{$g['vardb_path']}/rrd/{$rrd}");
231
							if($rrd_data) {
232
								$data .= "\t\t<rrddatafile>\n";
233
								$data .= "\t\t\t<filename>{$rrd}</filename>\n";
234
								$data .= "\t\t\t<data>" . base64_encode(gzdeflate($rrd_data)) . "</data>\n";
235
								$data .= "\t\t</rrddatafile>\n";
236
							}
237
						}
238
					}
239
					$data .= "\t</rrddata>\n";
240
					$data .= "</" . $g['xml_rootobj'] . ">\n";
241
				}
242

    
243
				$size = strlen($data);
244
				header("Content-Type: application/octet-stream");
245
				header("Content-Disposition: attachment; filename={$name}");
246
				header("Content-Length: $size");
247
				if (isset($_SERVER['HTTPS'])) {
248
					header('Pragma: ');
249
					header('Cache-Control: ');
250
				} else {
251
					header("Pragma: private");
252
					header("Cache-Control: private, must-revalidate");
253
				}
254
				echo $data;
255

    
256
				exit;
257
			}
258
		}
259

    
260
		if ($mode == "restore") {
261

    
262
			if ($_POST['decrypt']) {
263
				if(!$_POST['decrypt_password'] || !$_POST['decrypt_passconf'])
264
					$input_errors[] = gettext("You must supply and confirm the password for decryption.");
265
				if($_POST['decrypt_password'] != $_POST['decrypt_passconf'])
266
					$input_errors[] = gettext("The supplied 'Password' and 'Confirm' field values must match.");
267
			}
268

    
269
			if (!$input_errors) {
270

    
271
				if (is_uploaded_file($_FILES['conffile']['tmp_name'])) {
272

    
273
					/* read the file contents */
274
					$data = file_get_contents($_FILES['conffile']['tmp_name']);
275
					if(!$data) {
276
						log_error(sprintf(gettext("Warning, could not read file %s"), $_FILES['conffile']['tmp_name']));
277
						return 1;
278
					}
279

    
280
					if ($_POST['decrypt']) {
281
						if (!tagfile_deformat($data, $data, "config.xml")) {
282
							$input_errors[] = gettext("The uploaded file does not appear to contain an encrypted pfsense configuration.");
283
							return 1;
284
						}
285
						$data = decrypt_data($data, $_POST['decrypt_password']);
286
					}
287

    
288
					if(stristr($data, "<m0n0wall>")) {
289
						log_error(gettext("Upgrading m0n0wall configuration to pfsense."));
290
						/* m0n0wall was found in config.  convert it. */
291
						$data = str_replace("m0n0wall", "pfsense", $data);
292
						$m0n0wall_upgrade = true;
293
					}
294
					if($_POST['restorearea']) {
295
						/* restore a specific area of the configuration */
296
						if(!stristr($data, $_POST['restorearea'])) {
297
							$input_errors[] = gettext("You have selected to restore an area but we could not locate the correct xml tag.");
298
						} else {
299
							restore_config_section($_POST['restorearea'], $data);
300
							filter_configure();
301
							$savemsg = gettext("The configuration area has been restored.  You may need to reboot the firewall.");
302
						}
303
					} else {
304
						if(!stristr($data, "<" . $g['xml_rootobj'] . ">")) {
305
							$input_errors[] = sprintf(gettext("You have selected to restore the full configuration but we could not locate a %s tag."), $g['xml_rootobj']);
306
						} else {
307
							/* restore the entire configuration */
308
							file_put_contents($_FILES['conffile']['tmp_name'], $data);
309
							if (config_install($_FILES['conffile']['tmp_name']) == 0) {
310
								/* this will be picked up by /index.php */
311
								conf_mount_rw();
312
								mark_subsystem_dirty("restore");
313
								touch("/conf/needs_package_sync");
314
								/* remove cache, we will force a config reboot */
315
								if(file_exists("{$g['tmp_path']}/config.cache"))
316
									unlink("{$g['tmp_path']}/config.cache");
317
								$config = parse_config(true);
318
								/* extract out rrd items, unset from $config when done */
319
								if($config['rrddata']) {
320
									foreach($config['rrddata']['rrddatafile'] as $rrd) {
321
										$rrd_fd = fopen("{$g['vardb_path']}/rrd/{$rrd['filename']}", "w");
322
										$data = base64_decode($rrd['data']);
323
										/* Try to decompress the data. */
324
										$dcomp = @gzinflate($data);
325
										if ($dcomp) {
326
											/* If the decompression worked, write the decompressed data */
327
											fwrite($rrd_fd, $dcomp);
328
										} else {
329
											/* If the decompression failed, it wasn't compressed, so write raw data */
330
											fwrite($rrd_fd, $data);
331
										}
332
										fclose($rrd_fd);
333
									}
334
									unset($config['rrddata']);
335
									unlink_if_exists("{$g['tmp_path']}/config.cache");
336
									write_config();
337
									add_base_packages_menu_items();
338
									convert_config();
339
									conf_mount_ro();
340
								}
341
								if($m0n0wall_upgrade == true) {
342
									if($config['system']['gateway'] <> "")
343
										$config['interfaces']['wan']['gateway'] = $config['system']['gateway'];
344
									unset($config['shaper']);
345
									/* optional if list */
346
									$ifdescrs = get_configured_interface_list(true, true);
347
									/* remove special characters from interface descriptions */
348
									if(is_array($ifdescrs))
349
										foreach($ifdescrs as $iface)
350
											$config['interfaces'][$iface]['descr'] = remove_bad_chars($config['interfaces'][$iface]['descr']);
351
									/* check for interface names with an alias */
352
									if(is_array($ifdescrs)) {
353
										foreach($ifdescrs as $iface) {
354
											if(is_alias($config['interfaces'][$iface]['descr'])) {
355
												// Firewall rules
356
												$origname = $config['interfaces'][$iface]['descr'];
357
												$newname  = $config['interfaces'][$iface]['descr'] . "Alias";
358
												update_alias_names_upon_change('filter', 'rule', 'source', 'address', $newname, $origname);
359
												update_alias_names_upon_change('filter', 'rule', 'destination', 'address', $newname, $origname);
360
												// NAT Rules
361
												update_alias_names_upon_change('nat', 'rule', 'source', 'address', $newname, $origname);
362
												update_alias_names_upon_change('nat', 'rule', 'source', 'port', $newname, $origname);
363
												update_alias_names_upon_change('nat', 'rule', 'destination', 'address', $newname, $origname);
364
												update_alias_names_upon_change('nat', 'rule', 'destination', 'port', $newname, $origname);
365
												update_alias_names_upon_change('nat', 'rule', 'target', '', $newname, $origname);
366
												update_alias_names_upon_change('nat', 'rule', 'local-port', '', $newname, $origname);
367
												// Alias in an alias
368
												update_alias_names_upon_change('aliases', 'alias', 'address', '', $newname, $origname);
369
											}
370
										}
371
									}
372
									unlink_if_exists("{$g['tmp_path']}/config.cache");
373
									// Reset configuration version to something low
374
									// in order to force the config upgrade code to
375
									// run through with all steps that are required.
376
									$config['system']['version'] = "1.0";
377
									// Deal with descriptions longer than 63 characters
378
									for ($i = 0; isset($config["filter"]["rule"][$i]); $i++) {
379
										if(count($config['filter']['rule'][$i]['descr']) > 63)
380
											$config['filter']['rule'][$i]['descr'] = substr($config['filter']['rule'][$i]['descr'], 0, 63);
381
									}
382
									// Move interface from ipsec to enc0
383
									for ($i = 0; isset($config["filter"]["rule"][$i]); $i++) {
384
										if($config['filter']['rule'][$i]['interface'] == "ipsec")
385
											$config['filter']['rule'][$i]['interface'] = "enc0";
386
									}
387
									// Convert icmp types
388
									// http://www.openbsd.org/cgi-bin/man.cgi?query=icmp&sektion=4&arch=i386&apropos=0&manpath=OpenBSD+Current
389
									for ($i = 0; isset($config["filter"]["rule"][$i]); $i++) {
390
										if($config["filter"]["rule"][$i]['icmptype']) {
391
											switch($config["filter"]["rule"][$i]['icmptype']) {
392
												case "echo":
393
													$config["filter"]["rule"][$i]['icmptype'] = "echoreq";
394
													break;
395
					                            case "unreach":
396
													$config["filter"]["rule"][$i]['icmptype'] = "unreach";
397
													break;
398
					                            case "echorep":
399
													$config["filter"]["rule"][$i]['icmptype'] = "echorep";
400
													break;
401
					                            case "squench":
402
													$config["filter"]["rule"][$i]['icmptype'] = "squench";
403
													break;
404
					                            case "redir":
405
													$config["filter"]["rule"][$i]['icmptype'] = "redir";
406
													break;
407
					                            case "timex":
408
													$config["filter"]["rule"][$i]['icmptype'] = "timex";
409
													break;
410
					                            case "paramprob":
411
													$config["filter"]["rule"][$i]['icmptype'] = "paramprob";
412
													break;
413
					                            case "timest":
414
													$config["filter"]["rule"][$i]['icmptype'] = "timereq";
415
													break;
416
					                            case "timestrep":
417
													$config["filter"]["rule"][$i]['icmptype'] = "timerep";
418
													break;
419
					                            case "inforeq":
420
													$config["filter"]["rule"][$i]['icmptype'] = "inforeq";
421
													break;
422
					                            case "inforep":
423
													$config["filter"]["rule"][$i]['icmptype'] = "inforep";
424
													break;
425
					                            case "maskreq":
426
													$config["filter"]["rule"][$i]['icmptype'] = "maskreq";
427
													break;
428
					                            case "maskrep":
429
													$config["filter"]["rule"][$i]['icmptype'] = "maskrep";
430
													break;
431
											}
432
										}
433
									}
434
									$config['diag']['ipv6nat'] = true;
435
									write_config();
436
									add_base_packages_menu_items();
437
									convert_config();
438
									conf_mount_ro();
439
									$savemsg = gettext("The m0n0wall configuration has been restored and upgraded to pfSense.");
440
									mark_subsystem_dirty("restore");
441
								}
442
								if(isset($config['captiveportal']['enable'])) {
443
									/* for some reason ipfw doesn't init correctly except on bootup sequence */
444
									mark_subsystem_dirty("restore");
445
								}
446
								setup_serial_port();
447
								if(is_interface_mismatch() == true) {
448
									touch("/var/run/interface_mismatch_reboot_needed");
449
									clear_subsystem_dirty("restore");
450
									convert_config();
451
									header("Location: interfaces_assign.php");
452
									exit;
453
								}
454
								if (is_interface_vlan_mismatch() == true) {
455
									touch("/var/run/interface_mismatch_reboot_needed");
456
									clear_subsystem_dirty("restore");
457
									convert_config();
458
									header("Location: interfaces_assign.php");
459
									exit;
460
								}
461
							} else {
462
								$input_errors[] = gettext("The configuration could not be restored.");
463
							}
464
						}
465
					}
466
				} else {
467
					$input_errors[] = gettext("The configuration could not be restored (file upload error).");
468
				}
469
			}
470
		}
471

    
472
		if ($mode == "reinstallpackages") {
473

    
474
			header("Location: pkg_mgr_install.php?mode=reinstallall");
475
			exit;
476
                } else if ($mode == "restore_ver") {
477
			$input_errors[] = gettext("XXX - this feature may hose your config (do NOT backrev configs!) - billm");
478
			if ($ver2restore <> "") {
479
				$conf_file = "{$g['cf_conf_path']}/bak/config-" . strtotime($ver2restore) . ".xml";
480
				if (config_install($conf_file) == 0) {
481
						mark_subsystem_dirty("restore");
482
                        } else {
483
                        	$input_errors[] = gettext("The configuration could not be restored.");
484
                        }
485
                } else {
486
                        $input_errors[] = gettext("No version selected.");
487
                }
488
		}
489
	}
490
}
491

    
492
$id = rand() . '.' . time();
493

    
494
$mth = ini_get('upload_progress_meter.store_method');
495
$dir = ini_get('upload_progress_meter.file.filename_template');
496

    
497
$pgtitle = array(gettext("Diagnostics"),gettext("Backup/restore"));
498
include("head.inc");
499

    
500
?>
501

    
502
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
503
<?php include("fbegin.inc"); ?>
504
<script language="JavaScript">
505
<!--
506

    
507
function encrypt_change() {
508

    
509
	if (!document.iform.encrypt.checked)
510
		document.getElementById("encrypt_opts").style.display="none";
511
	else
512
		document.getElementById("encrypt_opts").style.display="";
513
}
514

    
515
function decrypt_change() {
516

    
517
	if (!document.iform.decrypt.checked)
518
		document.getElementById("decrypt_opts").style.display="none";
519
	else
520
		document.getElementById("decrypt_opts").style.display="";
521
}
522

    
523
function backuparea_change(obj) {
524

    
525
        if (obj.value == "")
526
                document.getElementById("dotnotbackuprrd").checked = false;
527
        else
528
                document.getElementById("dotnotbackuprrd").checked = true;
529
}
530
//-->
531
</script>
532

    
533
<?php if ($input_errors) print_input_errors($input_errors); ?>
534
<?php if ($savemsg) print_info_box($savemsg); ?>
535
<?php if (is_subsystem_dirty('restore')): ?><p>
536
<form action="reboot.php" method="post">
537
<input name="Submit" type="hidden" value=" Yes ">
538
<?php print_info_box(gettext("The firewall configuration has been changed.") . "<br/>" . gettext("The firewall is now rebooting."));?><br>
539
</form>
540
<?php endif; ?>
541
<form action="diag_backup.php" method="post" name="iform" enctype="multipart/form-data">
542
<table width="100%" border="0" cellspacing="0" cellpadding="0">
543
	<tr>
544
		<td>
545
<?php
546
		$tab_array = array();
547
		$tab_array[0] = array(gettext("Config History"), false, "diag_confbak.php");
548
		$tab_array[1] = array(gettext("Backup/Restore"), true, "diag_backup.php");
549
		display_top_tabs($tab_array);
550
?>
551
		</td>
552
	</tr>
553
	<tr>
554
		<td>
555
			<div id="mainarea">
556
			<table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
557
				<tr>
558
					<td colspan="2" class="listtopic"><?=gettext("Backup configuration"); ?></td>
559
				</tr>
560
				<tr>
561
					<td width="22%" valign="baseline" class="vncell">&nbsp;</td>
562
					<td width="78%" class="vtable">
563
						<p><?=gettext("Click this button to download the system configuration in XML format."); ?><br /><br /> <?=gettext("Backup area:"); ?> <?php spit_out_select_items("backuparea", false); ?></p>
564
						<table>
565
							<tr>
566
								<td>
567
									<input name="nopackages" type="checkbox" class="formcheckbox" id="nopackages">
568
								</td>
569
								<td>
570
									<span class="vexpl"><?=gettext("Do not backup package information."); ?></span>
571
								</td>
572
							</tr>
573
						</table>
574
						<table>
575
							<tr>
576
								<td>
577
									<input name="encrypt" type="checkbox" class="formcheckbox" id="nopackages" onClick="encrypt_change()">
578
								</td>
579
								<td>
580
									<span class="vexpl"><?=gettext("Encrypt this configuration file."); ?></span>
581
								</td>
582
							</tr>
583
							<tr>
584
								<td>
585
									<input name="donotbackuprrd" type="checkbox" class="formcheckbox" id="dotnotbackuprrd" checked>
586
								</td>
587
								<td>
588
									<span class="vexpl"><?=gettext("Do not backup RRD data (NOTE: RRD Data can consume 4+ megabytes of config.xml space!)"); ?></span>
589
								</td>
590
							</tr>
591
						</table>
592
						<table id="encrypt_opts">
593
							<tr>
594
								<td>
595
									<span class="vexpl"><?=gettext("Password:"); ?> </span>
596
								</td>
597
								<td>
598
									<input name="encrypt_password" type="password" class="formfld pwd" size="20" value="" />
599
								</td>
600
							</tr>
601
							<tr>
602
								<td>
603
									<span class="vexpl"><?=gettext("confirm:"); ?> </span>
604
								</td>
605
								<td>
606
									<input name="encrypt_passconf" type="password" class="formfld pwd" size="20" value="" />
607
								</td>
608
							</tr>
609
						</table>
610
						<p><input name="Submit" type="submit" class="formbtn" id="download" value="<?=gettext("Download configuration"); ?>"></p>
611
					</td>
612
				</tr>
613
				<tr>
614
					<td colspan="2" class="list" height="12">&nbsp;</td>
615
                </tr>
616
                <tr>
617
					<td colspan="2" class="listtopic"><?=gettext("Restore configuration"); ?></td>
618
				</tr>
619
				<tr>
620
					<td width="22%" valign="baseline" class="vncell">&nbsp;</td>
621
					<td width="78%" class="vtable">
622
						<?=gettext("Open a"); ?> <?=$g['[product_name']?> <?=gettext("configuration XML file and click the button below to restore the configuration."); ?> <br /><br /> <?=gettext("Restore area:"); ?> <?php spit_out_select_items("restorearea", true); ?>
623
						<p><input name="conffile" type="file" class="formfld unknown" id="conffile" size="40"></p>
624
						<table>
625
							<tr>
626
								<td>
627
									<input name="decrypt" type="checkbox" class="formcheckbox" id="nopackages" onClick="decrypt_change()">
628
								</td>
629
								<td>
630
									<span class="vexpl"><?=gettext("Configuration file is encrypted."); ?></span>
631
								</td>
632
							</tr>
633
						</table>
634
						<table id="decrypt_opts">
635
							<tr>
636
								<td>
637
									<span class="vexpl"><?=gettext("Password :"); ?></span>
638
								</td>
639
								<td>
640
									<input name="decrypt_password" type="password" class="formfld pwd" size="20" value="" />
641
								</td>
642
							</tr>
643
							<tr>
644
								<td>
645
									<span class="vexpl"><?=gettext("confirm :"); ?></span>
646
								</td>
647
								<td>
648
									<input name="decrypt_passconf" type="password" class="formfld pwd" size="20" value="" />
649
								</td>
650
							</tr>
651
						</table>
652
						<p><input name="Submit" type="submit" class="formbtn" id="restore" value="<?=gettext("Restore configuration"); ?>"></p>
653
						<p><strong><span class="red"><?=gettext("Note:"); ?></span></strong><br /><?=gettext("The firewall will reboot after restoring the configuration."); ?><br /></p>
654
					</td>
655
				</tr>
656
				<?php if($config['installedpackages']['package'] != "") { ?>
657
				<tr>
658
					<td colspan="2" class="list" height="12">&nbsp;</td>
659
				</tr>
660
				<tr>
661
					<td colspan="2" class="listtopic"><?=gettext("Reinstall packages"); ?></td>
662
				</tr>
663
				<tr>
664
					<td width="22%" valign="baseline" class="vncell">&nbsp;</td>
665
					<td width="78%" class="vtable">
666
						<p><?=gettext("Click this button to reinstall all system packages.  This may take a while."); ?> <br /><br />
667
		  				<input name="Submit" type="submit" class="formbtn" id="reinstallpackages" value="<?=gettext("Reinstall packages"); ?>">
668
					</td>
669
				</tr>
670
				<?php } ?>
671
			</table>
672
			</div>
673
		</td>
674
	</tr>
675
</table>
676
</form>
677

    
678
<script language="JavaScript">
679
<!--
680
encrypt_change();
681
decrypt_change();
682
//-->
683
</script>
684

    
685
<?php include("fend.inc"); ?>
686
</body>
687
</html>
688
<?php
689

    
690
if (is_subsystem_dirty('restore'))
691
	system_reboot();
692

    
693
?>
(6-6/223)