Project

General

Profile

Download (10.9 KB) Statistics
| Branch: | Tag: | Revision:
1 5b237745 Scott Ullrich
#!/usr/local/bin/php
2 8ccc8f1a Scott Ullrich
<?php
3 b46bfcf5 Bill Marquette
/* $Id$ */
4 5b237745 Scott Ullrich
/*
5
	diag_backup.php
6 07bd3f83 Scott Ullrich
	part of m0n0wall (http://m0n0.ch/wall)
7 8ccc8f1a Scott Ullrich
8 5b237745 Scott Ullrich
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
9
	All rights reserved.
10 8ccc8f1a Scott Ullrich
11 5b237745 Scott Ullrich
	Redistribution and use in source and binary forms, with or without
12
	modification, are permitted provided that the following conditions are met:
13 8ccc8f1a Scott Ullrich
14 5b237745 Scott Ullrich
	1. Redistributions of source code must retain the above copyright notice,
15
	   this list of conditions and the following disclaimer.
16 8ccc8f1a Scott Ullrich
17 5b237745 Scott Ullrich
	2. Redistributions in binary form must reproduce the above copyright
18
	   notice, this list of conditions and the following disclaimer in the
19
	   documentation and/or other materials provided with the distribution.
20 8ccc8f1a Scott Ullrich
21 5b237745 Scott Ullrich
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
22
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
23
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
25
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
	POSSIBILITY OF SUCH DAMAGE.
31
*/
32
33
/* omit no-cache headers because it confuses IE with file downloads */
34
$omit_nocacheheaders = true;
35 8ccc8f1a Scott Ullrich
require("guiconfig.inc");
36 5b237745 Scott Ullrich
37 df157bb7 Scott Ullrich
function spit_out_select_items($area) {
38 8e35abee Scott Ullrich
	$select = <<<EOD
39 df157bb7 Scott Ullrich
	<select name="{$area}">
40 8e35abee Scott Ullrich
		<option VALUE="">ALL</option>
41 5161a6e6 Scott Ullrich
		<option VALUE="aliases">Aliases</option>
42 8e35abee Scott Ullrich
		<option VALUE="shaper">Traffic Shaper</option>
43
		<option VALUE="filter">Firewall Rules</option>
44
		<option VALUE="nat">NAT</option>
45
		<option VALUE="pptpd">PPTP Server</option>
46
		<option VALUE="ipsec">IPSEC VPN</option>
47
		<option VALUE="captiveportal">Captive Portal</option>
48
		<option VALUE="installedpackages">Package Manager</option>
49
		<option VALUE="interfaces">Interfaces</option>
50
		<option VALUE="dhcpd">DHCP Server</option>
51
		<option VALUE="syslog">Syslog</option>
52
		<option VALUE="system">System</option>
53
	</select>
54
EOD;
55
	echo $select;
56
57
}
58
59 5b237745 Scott Ullrich
if ($_POST) {
60
	unset($input_errors);
61 7cf03119 Bill Marquette
	if (stristr($_POST['Submit'], "Restore configuration"))
62 5b237745 Scott Ullrich
		$mode = "restore";
63 8ccc8f1a Scott Ullrich
	else if (stristr($_POST['Submit'], "Reinstall"))
64
		$mode = "reinstallpackages";
65 5b237745 Scott Ullrich
	else if (stristr($_POST['Submit'], "Download"))
66
		$mode = "download";
67 7cf03119 Bill Marquette
	else if (stristr($_POST['Submit'], "Restore version"))
68
		$mode = "restore_ver";
69
70 aab57926 Scott Ullrich
	if ($_POST["nopackages"] <> "")
71 528cad39 Colin Smith
		$options = "nopackages";
72 8ccc8f1a Scott Ullrich
73 7cf03119 Bill Marquette
	if ($_POST["ver"] <> "")
74
		$ver2restore = $_POST["ver"];
75
76 5b237745 Scott Ullrich
	if ($mode) {
77
		if ($mode == "download") {
78
			config_lock();
79 8ccc8f1a Scott Ullrich
			$fn = "config-" . $config['system']['hostname'] . "." .
80 5b237745 Scott Ullrich
				$config['system']['domain'] . "-" . date("YmdHis") . ".xml";
81 528cad39 Colin Smith
			if($options == "nopackages") {
82
				exec("sed '/<installedpackages>/,/<\/installedpackages>/d' /conf/config.xml > /tmp/config.xml.nopkg");
83 f66683e6 Bill Marquette
				$fs = filesize("{$g['tmp_path']}/config.xml.nopkg");
84 528cad39 Colin Smith
				header("Content-Type: application/octet-stream");
85
                        	header("Content-Disposition: attachment; filename=$fn");
86
                        	header("Content-Length: $fs");
87 f66683e6 Bill Marquette
				readfile("{$g['tmp_path']}/config.xml.nopkg");
88 528cad39 Colin Smith
			} else {
89 181462b5 Scott Ullrich
				if($_POST['backuparea'] <> "") {
90
					/* user wishes to backup specific area of configuration */
91
					$current_trafficshaper_section = backup_config_section($_POST['backuparea']);
92
					/* generate aliases xml */
93
					$fout = fopen("{$g['tmp_path']}/backup_section.txt","w");
94
					fwrite($fout, $current_trafficshaper_section);
95
					fclose($fout);
96
					$fs = filesize($g['tmp_path'] . "/backup_section.txt");
97
					header("Content-Type: application/octet-stream");
98
					$fn = $_POST['backuparea'] . "-" . $fn;
99
					header("Content-Disposition: attachment; filename=$fn");
100
					header("Content-Length: $fs");
101 e55f5da6 Scott Ullrich
					readfile($g['tmp_path'] . "/backup_section.txt");
102 7e036443 Scott Ullrich
					unlink($g['tmp_path'] . "/backup_section.txt");
103 181462b5 Scott Ullrich
				} else {
104
					$fs = filesize($g['conf_path'] . "/config.xml");
105
					header("Content-Type: application/octet-stream");
106
					header("Content-Disposition: attachment; filename=$fn");
107
					header("Content-Length: $fs");
108
					readfile($g['conf_path'] . "/config.xml");
109
				}
110 528cad39 Colin Smith
			}
111 5b237745 Scott Ullrich
			config_unlock();
112
			exit;
113
		} else if ($mode == "restore") {
114
			if (is_uploaded_file($_FILES['conffile']['tmp_name'])) {
115 181462b5 Scott Ullrich
				$fd = fopen($_FILES['conffile']['tmp_name'], "r");
116
				if(!$fd) {
117
					log_error("Warning, could not open " . $_FILES['conffile']['tmp_name']);
118
					return 1;
119
				}
120
				while(!feof($fd)) {
121
					    $tmp .= fread($fd,49);
122
				}
123
				fclose($fd);
124 9d10caaa Scott Ullrich
				if(stristr($tmp, "m0n0wall") == true) {
125 181462b5 Scott Ullrich
					log_error("Upgrading m0n0wall configuration to pfsense.");
126
					/* m0n0wall was found in config.  convert it. */
127
					$upgradedconfig = str_replace("m0n0wall", "pfsense", $tmp);
128 6198d330 Scott Ullrich
					$fd = fopen($_FILES['conffile']['tmp_name'], "w");
129 181462b5 Scott Ullrich
					fwrite($fd, $upgradedconfig);
130 bfd3e487 Scott Ullrich
					fclose($fd);
131 db3996df Scott Ullrich
					$m0n0wall_upgrade = true;
132 181462b5 Scott Ullrich
				}
133 fdef6434 Bill Marquette
				if($_POST['restorearea'] <> "") {
134 181462b5 Scott Ullrich
					/* restore a specific area of the configuration */
135 7822d966 Colin Smith
					$rules = file_get_contents($_FILES['conffile']['tmp_name']);
136 afc4d0b7 Scott Ullrich
					if(stristr($rules, $_POST['restorearea']) == false) {
137 9fd18b1f Scott Ullrich
						$input_errors[] = "You have selected to restore a area but we could not locate the correct xml tag.";
138
					} else {
139
						restore_config_section($_POST['restorearea'], $rules);
140
						filter_configure();
141
						$savemsg = "The configuration area has been restored.";
142
					}
143 5b237745 Scott Ullrich
				} else {
144 9c72b993 Scott Ullrich
					$rules = file_get_contents($_FILES['conffile']['tmp_name']);
145
					if(stristr($rules, "pfsense") == false) {
146
						$input_errors[] = "You have selected to restore the full configuration but we could not locate a pfsense tag.";
147 181462b5 Scott Ullrich
					} else {
148 db3996df Scott Ullrich
						/* restore the entire configuration */
149 9c72b993 Scott Ullrich
						if (config_install($_FILES['conffile']['tmp_name']) == 0) {
150
							/* this will be picked up by /index.php */
151
							conf_mount_rw();
152
							touch("/needs_package_sync");
153
							$reloadall = true;
154 7866a4c8 Scott Ullrich
							$savemsg = "The configuration has been restored. The firewall is now reloading..";
155 db3996df Scott Ullrich
							/* remove cache, we will force a config reload */
156
							if(file_exists("/tmp/config.cache"))
157
								unlink("/tmp/config.cache");
158
							if($m0n0wall_upgrade == true) {
159 8999a2bd Scott Ullrich
								$config = parse_config(true);
160 db3996df Scott Ullrich
								if($config['system']['gateway'] <> "") {
161
									$config['interfaces']['wan']['gateway'] = $config['system']['gateway'];
162
								}
163
								unset($config['shaper']);
164 6b524b56 Scott Ullrich
								write_config();
165
								conf_mount_ro();
166 89d6fe70 Scott Ullrich
								$savemsg = "The m0n0wall configuration has been restored and upgraded to pfSense.<p>The firewall is now rebooting.";
167 db3996df Scott Ullrich
							}
168 9c72b993 Scott Ullrich
						} else {
169
							$input_errors[] = "The configuration could not be restored.";
170
						}
171 181462b5 Scott Ullrich
					}
172 db3996df Scott Ullrich
				}
173 5b237745 Scott Ullrich
			} else {
174
				$input_errors[] = "The configuration could not be restored (file upload error).";
175
			}
176 8ccc8f1a Scott Ullrich
		} else if ($mode == "reinstallpackages") {
177
			header("Location: pkg_mgr_install.php?mode=reinstallall");
178
			exit;
179 7cf03119 Bill Marquette
                } else if ($mode == "restore_ver") {
180
			$input_errors[] = "XXX - this feature may hose your config (do NOT backrev configs!) - billm";
181
			if ($ver2restore <> "") {
182
				$conf_file = "{$g['cf_conf_path']}/bak/config-" . strtotime($ver2restore) . ".xml";
183
                                if (config_install($conf_file) == 0) {
184 8ed1f1a9 Scott Ullrich
					$reloadall = true;
185 4cf2cc4a Scott Ullrich
                                        $savemsg = "The configuration has been restored. The firewall is now reloading the settings.";
186 7cf03119 Bill Marquette
                                } else {
187
                                        $input_errors[] = "The configuration could not be restored.";
188
                                }
189
                        } else {
190
                                $input_errors[] = "No version selected.";
191
                        }
192 5b237745 Scott Ullrich
		}
193
	}
194
}
195 6a1e6651 Bill Marquette
196 02e1170d Scott Ullrich
$id = rand() . '.' . time();
197
198
$mth = ini_get('upload_progress_meter.store_method');
199
$dir = ini_get('upload_progress_meter.file.filename_template');
200
201 b63695db Scott Ullrich
$pgtitle = "Diagnostics: Backup/restore";
202
include("head.inc");
203
204 5b237745 Scott Ullrich
?>
205
206
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
207
<?php include("fbegin.inc"); ?>
208 310b2c06 Bill Marquette
<p class="pgtitle"><?=$pgtitle?></p>
209 9e2a4fce Erik Kristensen
210
<form action="diag_backup.php" method="post" enctype="multipart/form-data" onSubmit="check_upload_status(<?= $id; ?>);">
211
<?php if ($input_errors) print_input_errors($input_errors); ?>
212
<?php if ($savemsg) print_info_box($savemsg); ?>
213
<table width="100%" border="0" cellspacing="0" cellpadding="0">
214
	<tr>
215
		<td>
216 12af52d9 Scott Ullrich
<?php
217 9e2a4fce Erik Kristensen
		$tab_array = array();
218 cdb0814b Scott Ullrich
		$tab_array[0] = array("Remote", false, "diag_confbak.php");
219
		$tab_array[1] = array("Local", true, "diag_backup.php");
220 9e2a4fce Erik Kristensen
		display_top_tabs($tab_array);
221 12af52d9 Scott Ullrich
?>			
222 9e2a4fce Erik Kristensen
		</td>
223
	</tr>
224
	<tr>
225
		<td>
226
			<div id="mainarea">
227
			<table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
228
				<tr>
229
					<td colspan="2" class="listtopic">Backup configuration</td>
230
				</tr>
231
				<tr>
232
					<td width="22%" valign="baseline" class="vncell">&nbsp;</td>
233
					<td width="78%" class="vtable">
234
						<p>Click this button to download the system configuration in XML format.<br /><br /> Backup area: <?php spit_out_select_items("backuparea"); ?></p>
235
						<p><input name="nopackages" type="checkbox" class="formcheckbox" id="nopackages">Do not backup package information.</p>
236
						<p><input name="Submit" type="submit" class="formbtn" id="download" value="Download configuration"></p>
237
					</td>
238
				</tr>
239
				<tr>
240
					<td colspan="2" class="list" height="12">&nbsp;</td>
241 5b237745 Scott Ullrich
                </tr>
242 8ccc8f1a Scott Ullrich
                <tr>
243 9e2a4fce Erik Kristensen
					<td colspan="2" class="listtopic">Restore configuration</td>
244
				</tr>
245
				<tr>
246
					<td width="22%" valign="baseline" class="vncell">&nbsp;</td>
247
					<td width="78%" class="vtable">
248
						Open a pfSense configuration XML file and click the button below to restore the configuration. <br /><br /> Restore area: <?php spit_out_select_items("restorearea"); ?>
249
						<p><input name="conffile" type="file" class="formfld" id="conffile" size="40"></p>
250
						<p><input name="Submit" type="submit" class="formbtn" id="restore" value="Restore configuration"></p>
251
                      	<p><strong><span class="red">Note:</span></strong><br />The firewall will reload the settings after restoring the configuration.<br /></p>
252
					</td>
253
				</tr>
254
				<?php if($config['installedpackages']['package'] != "") { ?>
255
				<tr>
256
					<td colspan="2" class="list" height="12">&nbsp;</td>
257
				</tr>
258
				<tr>
259
					<td colspan="2" class="listtopic">Reinstall packages</td>
260
				</tr>
261
				<tr>
262
					<td width="22%" valign="baseline" class="vncell">&nbsp;</td>
263
					<td width="78%" class="vtable">
264
						<p>Click this button to reinstall all system packages.  This may take a while. <br /><br />
265
		  				<input name="Submit" type="submit" class="formbtn" id="reinstallpackages" value="Reinstall packages">
266
					</td>
267
				</tr>
268
				<?php } ?>
269
			</table>
270
			</div>
271 b24bf37b Colin Smith
		</td>
272 9e2a4fce Erik Kristensen
	</tr>
273
</table>
274
</form>
275
276 5b237745 Scott Ullrich
<?php include("fend.inc"); ?>
277
</body>
278 38d48421 Colin Smith
</html>
279 8ed1f1a9 Scott Ullrich
280
<?php
281
282
if($reloadall == true) {
283 878024b1 Scott Ullrich
	
284
	if(file_exists("{$g['tmp_path']}/config.cache"))
285
		unlink("{$g['tmp_path']}/config.cache");
286
		
287
	parse_config();
288
	
289
	reload_all();
290
	
291 8ed1f1a9 Scott Ullrich
}
292
293 878024b1 Scott Ullrich
?>