Project

General

Profile

Download (13.2 KB) Statistics
| Branch: | Tag: | Revision:
1 5b237745 Scott Ullrich
<?php 
2
/*
3
	system_routes_edit.php
4
	part of m0n0wall (http://m0n0.ch/wall)
5
	
6
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
7 38936dc7 Ermal Lu?i
	Copyright (C) 2010 Scott Ullrich
8 5b237745 Scott Ullrich
	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 1d333258 Scott Ullrich
/*
32
	pfSense_MODULE:	routing
33
*/
34 5b237745 Scott Ullrich
35 6b07c15a Matthew Grooms
##|+PRIV
36
##|*IDENT=page-system-staticroutes-editroute
37
##|*NAME=System: Static Routes: Edit route page
38
##|*DESCR=Allow access to the 'System: Static Routes: Edit route' page.
39
##|*MATCH=system_routes_edit.php*
40
##|-PRIV
41
42 4504a769 Ermal Lu?i
function staticroutecmp($a, $b) {
43
	return strcmp($a['network'], $b['network']);
44
}
45
46 0d64af59 Ermal Lu?i
function staticroutes_sort() {
47
        global $g, $config;
48
49
        if (!is_array($config['staticroutes']['route']))
50
                return;
51
52
        usort($config['staticroutes']['route'], "staticroutecmp");
53
}
54 6b07c15a Matthew Grooms
55 5b237745 Scott Ullrich
require("guiconfig.inc");
56
57
if (!is_array($config['staticroutes']['route']))
58
	$config['staticroutes']['route'] = array();
59
60
$a_routes = &$config['staticroutes']['route'];
61 a529aced Ermal
$a_gateways = return_gateways_array(true);
62 5b237745 Scott Ullrich
63
$id = $_GET['id'];
64
if (isset($_POST['id']))
65
	$id = $_POST['id'];
66
67 18f7352b Seth Mos
if (isset($_GET['dup'])) {
68
	$id = $_GET['dup'];
69
}
70
71 5b237745 Scott Ullrich
if (isset($id) && $a_routes[$id]) {
72
	list($pconfig['network'],$pconfig['network_subnet']) = 
73
		explode('/', $a_routes[$id]['network']);
74
	$pconfig['gateway'] = $a_routes[$id]['gateway'];
75
	$pconfig['descr'] = $a_routes[$id]['descr'];
76
}
77
78 18f7352b Seth Mos
if (isset($_GET['dup']))
79
	unset($id);
80
81 5b237745 Scott Ullrich
if ($_POST) {
82
83
	unset($input_errors);
84
	$pconfig = $_POST;
85
86
	/* input validation */
87 dde169d9 Vinicius Coque
	$reqdfields = explode(" ", "network network_subnet gateway");
88 38fb1109 Vinicius Coque
	$reqdfieldsn = explode(",",
89
			gettext("Destination network") . "," .
90
			gettext("Destination network bit count") . "," .
91
			gettext("Gateway"));		
92 5b237745 Scott Ullrich
	
93
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
94
	
95
	if (($_POST['network'] && !is_ipaddr($_POST['network']))) {
96 169e0008 Carlos Eduardo Ramos
		$input_errors[] = gettext("A valid destination network must be specified.");
97 5b237745 Scott Ullrich
	}
98
	if (($_POST['network_subnet'] && !is_numeric($_POST['network_subnet']))) {
99 169e0008 Carlos Eduardo Ramos
		$input_errors[] = gettext("A valid destination network bit count must be specified.");
100 5b237745 Scott Ullrich
	}
101 d173230c Seth Mos
	if ($_POST['gateway']) {
102 a529aced Ermal
		if (!isset($a_gateways[$_POST['gateway']]))
103 169e0008 Carlos Eduardo Ramos
			$input_errors[] = gettext("A valid gateway must be specified.");
104 5b237745 Scott Ullrich
	}
105
106
	/* check for overlaps */
107
	$osn = gen_subnet($_POST['network'], $_POST['network_subnet']) . "/" . $_POST['network_subnet'];
108
	foreach ($a_routes as $route) {
109
		if (isset($id) && ($a_routes[$id]) && ($a_routes[$id] === $route))
110
			continue;
111
112
		if ($route['network'] == $osn) {
113 169e0008 Carlos Eduardo Ramos
			$input_errors[] = gettext("A route to this destination network already exists.");
114 5b237745 Scott Ullrich
			break;
115
		}
116
	}
117
118
	if (!$input_errors) {
119
		$route = array();
120
		$route['network'] = $osn;
121
		$route['gateway'] = $_POST['gateway'];
122
		$route['descr'] = $_POST['descr'];
123
124 e8471084 Ermal
		if (!isset($id))
125
                        $id = count($a_routes);
126
                if (file_exists("{$g['tmp_path']}/.system_routes.apply"))
127
                        $toapplylist = unserialize(file_get_contents("{$g['tmp_path']}/.system_routes.apply"));
128
                else
129
                        $toapplylist = array();
130
                $oroute = $a_routes[$id];
131
132
		$a_routes[$id] = $route;
133
134
		if (!empty($oroute)) {
135
			$osn = explode('/', $oroute['network']);
136
			$sn = explode('/', $route['network']);
137
			if ($oroute['network'] <> $route['network'])
138
				$toapplylist[] = "/sbin/route delete {$oroute['network']}"; 
139
		}
140
		file_put_contents("{$g['tmp_path']}/.system_routes.apply", serialize($toapplylist));
141 0e3aa71c Erik Fonnesbeck
		staticroutes_sort();
142 5b237745 Scott Ullrich
		
143 a368a026 Ermal Lu?i
		mark_subsystem_dirty('staticroutes');
144 5b237745 Scott Ullrich
		
145
		write_config();
146
		
147
		header("Location: system_routes.php");
148
		exit;
149
	}
150
}
151 4df96eff Scott Ullrich
152 169e0008 Carlos Eduardo Ramos
$pgtitle = array(gettext("System"),gettext("Static Routes"),gettext("Edit route"));
153 4df96eff Scott Ullrich
include("head.inc");
154
155 5b237745 Scott Ullrich
?>
156 4df96eff Scott Ullrich
157 5b237745 Scott Ullrich
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
158
<?php include("fbegin.inc"); ?>
159
<?php if ($input_errors) print_input_errors($input_errors); ?>
160
            <form action="system_routes_edit.php" method="post" name="iform" id="iform">
161
              <table width="100%" border="0" cellpadding="6" cellspacing="0">
162 0cece4a2 Scott Ullrich
				<tr>
163 169e0008 Carlos Eduardo Ramos
					<td colspan="2" valign="top" class="listtopic"><?=gettext("Edit route entry"); ?></td>
164 0cece4a2 Scott Ullrich
				</tr>	
165 5b237745 Scott Ullrich
                <tr>
166 169e0008 Carlos Eduardo Ramos
                  <td width="22%" valign="top" class="vncellreq"><?=gettext("Destination network"); ?></td>
167 5b237745 Scott Ullrich
                  <td width="78%" class="vtable"> 
168 b5c78501 Seth Mos
                    <input name="network" type="text" class="formfld unknown" id="network" size="20" value="<?=htmlspecialchars($pconfig['network']);?>"> 
169 5b237745 Scott Ullrich
				  / 
170 b5c78501 Seth Mos
                    <select name="network_subnet" class="formselect" id="network_subnet">
171 5b237745 Scott Ullrich
                      <?php for ($i = 32; $i >= 1; $i--): ?>
172
                      <option value="<?=$i;?>" <?php if ($i == $pconfig['network_subnet']) echo "selected"; ?>>
173
                      <?=$i;?>
174
                      </option>
175
                      <?php endfor; ?>
176
                    </select>
177 169e0008 Carlos Eduardo Ramos
                    <br> <span class="vexpl"><?=gettext("Destination network for this static route"); ?></span></td>
178 5b237745 Scott Ullrich
                </tr>
179 d173230c Seth Mos
                <tr> 
180 169e0008 Carlos Eduardo Ramos
                  <td width="22%" valign="top" class="vncellreq"><?=gettext("Gateway"); ?></td>
181 d173230c Seth Mos
                  <td width="78%" class="vtable">
182 38936dc7 Ermal Lu?i
			<select name="gateway" id="gateway" class="formselect">
183 d173230c Seth Mos
			<?php
184 a529aced Ermal
				foreach ($a_gateways as $gateway) {
185 a63d867a Ermal
	                      		echo "<option value='{$gateway['name']}' ";
186
					if ($gateway['name'] == $pconfig['gateway'])
187
						echo "selected";
188 189ceb32 Chris Buechler
	                      		echo ">" . htmlspecialchars($gateway['name']) . " - " . htmlspecialchars($gateway['gateway']) . "</option>\n";
189 a529aced Ermal
				}
190
			?>
191 38936dc7 Ermal Lu?i
                    </select> <br />
192
			<div id='addgwbox'>
193 ea53e38f Renato Botelho
				<?=gettext("Choose which gateway this route applies to or"); ?> <a OnClick="show_add_gateway();" href="#"><?=gettext("add a new one.");?></a>
194 38936dc7 Ermal Lu?i
								</div>
195
								<div id='notebox'>
196
								</div>
197
								<div style="display:none" name ="status" id="status">
198
								</div>								
199
								<div style="display:none" id="addgateway" name="addgateway">
200
									<p> 
201
									<table border="1" style="background:#990000; border-style: none none none none; width:225px;"><tr><td>
202
										<table bgcolor="#990000" cellpadding="1" cellspacing="1">
203
											<tr><td>&nbsp;</td>
204
											<tr>
205 ea53e38f Renato Botelho
												<td colspan="2"><center><b><font color="white"><?=gettext("Add new gateway:"); ?></b></center></td>
206 38936dc7 Ermal Lu?i
											</tr>
207
											<tr><td>&nbsp;</td>
208
											<tr>
209 a980df9c Ermal
												<td width="45%" align="right"><font color="white"><?=gettext("Default gateway:"); ?></td><td><input type="checkbox" id="defaultgw" name="defaultgw"></td>
210 38936dc7 Ermal Lu?i
											</tr>												
211
											<tr>
212 ea53e38f Renato Botelho
												<td width="45%" align="right"><font color="white"><?=gettext("Interface:"); ?></td>
213 38936dc7 Ermal Lu?i
												<td><select name="addinterfacegw" id="addinterfacegw">
214
												<?php $gwifs = get_configured_interface_with_descr();
215
													foreach($gwifs as $fif => $dif)
216
														echo "<option value=\"{$fif}\">{$dif}</option>\n";
217
												?>
218
												</select></td>
219
											</tr>
220
											<tr>
221 ea53e38f Renato Botelho
												<td align="right"><font color="white"><?=gettext("Gateway Name:"); ?></td><td><input id="name" name="name" value="GW"></td>
222 38936dc7 Ermal Lu?i
											</tr>
223
											<tr>
224 ea53e38f Renato Botelho
												<td align="right"><font color="white"><?=gettext("Gateway IP:"); ?></td><td><input id="gatewayip" name="gatewayip"></td>
225 38936dc7 Ermal Lu?i
											</tr>
226
											<tr>
227 ea53e38f Renato Botelho
												<td align="right"><font color="white"><?=gettext("Description:"); ?></td><td><input id="gatewaydescr" name="gatewaydescr"></td>
228 38936dc7 Ermal Lu?i
											</tr>
229
											<tr><td>&nbsp;</td>
230
											<tr>
231
												<td colspan="2">
232
													<center>
233
														<div id='savebuttondiv'>
234
															<input type="hidden" name="addrtype" id="addrtype" value="IPv4" />
235 169e0008 Carlos Eduardo Ramos
															<input id="gwsave" type="Button" value="<?=gettext("Save Gateway"); ?>" onClick='hide_add_gatewaysave();'> 
236
															<input id="gwcancel" type="Button" value="<?=gettext("Cancel"); ?>" onClick='hide_add_gateway();'>
237 38936dc7 Ermal Lu?i
														</div>
238
													</center>
239
												</td>
240
											</tr>
241
											<tr><td>&nbsp;</td>
242
										</table>
243
										</td></tr></table>
244
									<p/>
245
								</div>
246 5b237745 Scott Ullrich
                </tr>
247 d173230c Seth Mos
		<tr>
248 169e0008 Carlos Eduardo Ramos
                  <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
249 5b237745 Scott Ullrich
                  <td width="78%" class="vtable"> 
250 b5c78501 Seth Mos
                    <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
251 ea53e38f Renato Botelho
                    <br> <span class="vexpl"><?=gettext("You may enter a description here for your reference (not parsed)."); ?></span></td>
252 5b237745 Scott Ullrich
                </tr>
253
                <tr>
254
                  <td width="22%" valign="top">&nbsp;</td>
255
                  <td width="78%"> 
256 bfb0b9dc Vinicius Coque
                    <input id="save" name="Submit" type="submit" class="formbtn" value="<?=gettext("Save");?>"> <input id="cancel" type="button" value="<?=gettext("Cancel"); ?>" class="formbtn"  onclick="history.back()">
257 5b237745 Scott Ullrich
                    <?php if (isset($id) && $a_routes[$id]): ?>
258 225a2f0b Scott Ullrich
                    <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>">
259 5b237745 Scott Ullrich
                    <?php endif; ?>
260
                  </td>
261
                </tr>
262
              </table>
263
</form>
264 38936dc7 Ermal Lu?i
<script type="text/javascript">
265
					var gatewayip;
266
					var name;
267
					function show_add_gateway() {
268
						document.getElementById("addgateway").style.display = '';
269
						document.getElementById("addgwbox").style.display = 'none';
270
						document.getElementById("gateway").style.display = 'none';
271
						document.getElementById("save").style.display = 'none';
272
						document.getElementById("cancel").style.display = 'none';
273
						document.getElementById("gwsave").style.display = '';
274
						document.getElementById("gwcancel").style.display = '';
275
						$('notebox').innerHTML="";
276
					}
277
					function hide_add_gateway() {
278
						document.getElementById("addgateway").style.display = 'none';
279
						document.getElementById("addgwbox").style.display = '';	
280
						document.getElementById("gateway").style.display = '';
281
						document.getElementById("save").style.display = '';
282
						document.getElementById("cancel").style.display = '';
283
						document.getElementById("gwsave").style.display = '';
284
						document.getElementById("gwcancel").style.display = '';
285
					}
286
					function hide_add_gatewaysave() {
287
						document.getElementById("addgateway").style.display = 'none';
288 169e0008 Carlos Eduardo Ramos
						$('status').innerHTML = '<img src="/themes/metallic/images/misc/loader.gif"> <?=gettext("One moment please..."); ?>';
289 38936dc7 Ermal Lu?i
						var iface = $('addinterfacegw').getValue();
290
						name = $('name').getValue();
291
						var descr = $('gatewaydescr').getValue();
292
						gatewayip = $('gatewayip').getValue();
293
						addrtype = $('addrtype').getValue();
294 a980df9c Ermal
						var defaultgw = '';
295
						if ($('defaultgw').checked)
296
							defaultgw = 'yes';
297 38936dc7 Ermal Lu?i
						var url = "system_gateways_edit.php";
298
						var pars = 'isAjax=true&defaultgw=' + escape(defaultgw) + '&interface=' + escape(iface) + '&name=' + escape(name) + '&descr=' + escape(descr) + '&gateway=' + escape(gatewayip) + '&type=' + escape(addrtype);
299
						var myAjax = new Ajax.Request(
300
							url,
301
							{
302
								method: 'post',
303
								parameters: pars,
304
								onFailure: report_failure,
305
								onComplete: save_callback
306
							});	
307
					}
308
					function addOption(selectbox,text,value)
309
					{
310
						var optn = document.createElement("OPTION");
311
						optn.text = text;
312
						optn.value = value;
313
						selectbox.options.add(optn);
314
						selectbox.selectedIndex = (selectbox.options.length-1);
315 a980df9c Ermal
						$('notebox').innerHTML="<p/><strong><?=gettext("NOTE:");?></strong> <?php printf(gettext("You can manage Gateways %shere%s."), "<a target='_new' href='system_gateways.php'>", "</a>");?> </strong>";
316 38936dc7 Ermal Lu?i
					}				
317
					function report_failure() {
318 ea53e38f Renato Botelho
						alert("<?=gettext("Sorry, we could not create your gateway at this time."); ?>");
319 38936dc7 Ermal Lu?i
						hide_add_gateway();
320
					}
321
					function save_callback(transport) {
322
						var response = transport.responseText;
323
						if (response) {
324
							document.getElementById("addgateway").style.display = 'none';
325
							hide_add_gateway();
326
							$('status').innerHTML = '';
327
							addOption($('gateway'), name, name);
328
						} else {
329
							report_failure();
330
						}
331
					}
332
				</script>
333 5b237745 Scott Ullrich
<?php include("fend.inc"); ?>
334
</body>
335
</html>