Project

General

Profile

Download (27.8 KB) Statistics
| Branch: | Tag: | Revision:
1 d2cfb7a4 Scott Ullrich
<?php
2 b46bfcf5 Bill Marquette
/* $Id$ */
3 5b237745 Scott Ullrich
/*
4
	firewall_aliases_edit.php
5 2e9ab96b Scott Ullrich
	Copyright (C) 2004 Scott Ullrich
6 460b3848 Ermal Lu?i
	Copyright (C) 2009 Ermal Lu?i
7 fff3d2b9 jim-p
	Copyright (C) 2010 Jim Pingle
8 2e9ab96b Scott Ullrich
	All rights reserved.
9
10
	originially part of m0n0wall (http://m0n0.ch/wall)
11 5b237745 Scott Ullrich
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
12
	All rights reserved.
13 d2cfb7a4 Scott Ullrich
14 5b237745 Scott Ullrich
	Redistribution and use in source and binary forms, with or without
15
	modification, are permitted provided that the following conditions are met:
16 d2cfb7a4 Scott Ullrich
17 5b237745 Scott Ullrich
	1. Redistributions of source code must retain the above copyright notice,
18
	   this list of conditions and the following disclaimer.
19 d2cfb7a4 Scott Ullrich
20 5b237745 Scott Ullrich
	2. Redistributions in binary form must reproduce the above copyright
21
	   notice, this list of conditions and the following disclaimer in the
22
	   documentation and/or other materials provided with the distribution.
23 d2cfb7a4 Scott Ullrich
24 5b237745 Scott Ullrich
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
25
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
26
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
28
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
	POSSIBILITY OF SUCH DAMAGE.
34
*/
35 7ac5a4cb Scott Ullrich
/*
36
	pfSense_BUILDER_BINARIES:	/bin/rm	/bin/mkdir	/usr/bin/fetch
37
	pfSense_MODULE:	aliases
38
*/
39 5b237745 Scott Ullrich
40 6b07c15a Matthew Grooms
##|+PRIV
41
##|*IDENT=page-firewall-alias-edit
42
##|*NAME=Firewall: Alias: Edit page
43
##|*DESCR=Allow access to the 'Firewall: Alias: Edit' page.
44
##|*MATCH=firewall_aliases_edit.php*
45
##|-PRIV
46
47 5a1eebc7 Scott Ullrich
48 f76a479d sullrich
// Keywords not allowed in names
49 66fc1f14 Scott Ullrich
$reserved_keywords = array("all", "pass", "out", "queue", "max", "min", "pptp", "pppoe", "L2TP", "OpenVPN", "IPsec");
50 f76a479d sullrich
51 5b237745 Scott Ullrich
require("guiconfig.inc");
52 7a927e67 Scott Ullrich
require_once("functions.inc");
53
require_once("filter.inc");
54
require_once("shaper.inc");
55 5b237745 Scott Ullrich
56 b13f7f80 Carlos Eduardo Ramos
$pgtitle = array(gettext("Firewall"),gettext("Aliases"),gettext("Edit"));
57
58 7c9d8d71 Ermal Lu?i
$reserved_ifs = get_configured_interface_list(false, true);
59
$reserved_keywords = array_merge($reserved_keywords, $reserved_ifs);
60
61 5b237745 Scott Ullrich
if (!is_array($config['aliases']['alias']))
62
	$config['aliases']['alias'] = array();
63
$a_aliases = &$config['aliases']['alias'];
64 ed0b7949 Scott Ullrich
	
65
if($_POST)
66
	$origname = $_POST['origname'];
67
68
// Debugging
69 f5200c44 Scott Ullrich
if($debug)
70 7515fb4b Ermal Lu?i
	exec("rm -f {$g['tmp_path']}/alias_rename_log.txt");
71 ed0b7949 Scott Ullrich
72 5e34cdb2 Ermal Lu?i
function alias_same_type($name, $type) {
73
	global $config;
74
	
75
	foreach ($config['aliases']['alias'] as $alias) {
76
		if ($name == $alias['name']) {
77 d6c9ab97 Ermal Lu?i
			if (in_array($type, array("host", "network")) &&
78 5e34cdb2 Ermal Lu?i
				in_array($alias['type'], array("host", "network")))
79
				return true;
80
			if ($type  == $alias['type'])
81
				return true;
82
			else
83
				return false;
84
		}
85
	}
86
	return true;
87
}
88
89 5b237745 Scott Ullrich
$id = $_GET['id'];
90
if (isset($_POST['id']))
91
	$id = $_POST['id'];
92
93
if (isset($id) && $a_aliases[$id]) {
94 ed0b7949 Scott Ullrich
	$original_alias_name = $a_aliases[$id]['name'];
95 5b237745 Scott Ullrich
	$pconfig['name'] = $a_aliases[$id]['name'];
96 ba393f6c Scott Dale
	$pconfig['detail'] = $a_aliases[$id]['detail'];
97
	$pconfig['address'] = $a_aliases[$id]['address'];
98 b4deddce Ermal Lu?i
	$pconfig['type'] = $a_aliases[$id]['type'];
99 ba393f6c Scott Dale
	$pconfig['descr'] = html_entity_decode($a_aliases[$id]['descr']);
100 e47c266d Scott Ullrich
101 9bc8788a Erik Fonnesbeck
	/* interface list */
102
	$iflist = get_configured_interface_with_descr(false, true);
103 cbe3ea96 Ermal Luçi
	foreach ($iflist as $if => $ifdesc)
104
		if($ifdesc == $pconfig['descr']) 
105 24148939 Carlos Eduardo Ramos
			$input_errors[] = sprintf(gettext("Sorry, an interface is already named %s."), $pconfig['descr']);
106 e47c266d Scott Ullrich
107 c7de8be4 jim-p
	if($a_aliases[$id]['type'] == "urltable") {
108
		$pconfig['address'] = $a_aliases[$id]['url'];
109
		$pconfig['updatefreq'] = $a_aliases[$id]['updatefreq'];
110
	}
111 5a1eebc7 Scott Ullrich
	if($a_aliases[$id]['aliasurl'] <> "") {
112
		$pconfig['type'] = "url";
113
		if(is_array($a_aliases[$id]['aliasurl'])) {
114
			$isfirst = 0;
115
			$pconfig['address'] = "";
116
			foreach($a_aliases[$id]['aliasurl'] as $aa) {
117
				if($isfirst == 1)
118
					$pconfig['address'] .= " ";
119
				$isfirst = 1;
120
				$pconfig['address'] .= $aa;
121
			}
122
		} else {
123
			$pconfig['address'] = $a_aliases[$id]['aliasurl'];
124
		}
125
	}
126 5b237745 Scott Ullrich
}
127
128
if ($_POST) {
129
	unset($input_errors);
130
131
	/* input validation */
132 0cd7ed19 Scott Ullrich
133 69d2ad77 Erik Fonnesbeck
	$reqdfields = explode(" ", "name");
134 bd413d76 Renato Botelho
	$reqdfieldsn = array(gettext("Name"));
135 69d2ad77 Erik Fonnesbeck
136
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
137
138 0df6adf8 Bill Marquette
	$x = is_validaliasname($_POST['name']);
139
	if (!isset($x)) {
140 24148939 Carlos Eduardo Ramos
		$input_errors[] = gettext("Reserved word used for alias name.");
141 3deb92f7 Renato Botelho
	} else if ($_POST['type'] == "port" && (getservbyname($_POST['name'], "tcp") || getservbyname($_POST['name'], "udp"))) {
142 bd413d76 Renato Botelho
		$input_errors[] = gettext("Reserved word used for alias name.");
143 3deb92f7 Renato Botelho
	} else {
144
		if (is_validaliasname($_POST['name']) == false)
145 bac9941b jim-p
			$input_errors[] = gettext("The alias name must be less than 32 characters long and may only consist of the characters") . " a-z, A-Z, 0-9, _.";
146 3deb92f7 Renato Botelho
	}
147 5b237745 Scott Ullrich
	/* check for name conflicts */
148 6c33fb4b Ermal
	if (empty($a_aliases[$id])) {
149 6b487ec6 Ermal
		foreach ($a_aliases as $alias) {
150
			if ($alias['name'] == $_POST['name']) {
151 24148939 Carlos Eduardo Ramos
				$input_errors[] = gettext("An alias with this name already exists.");
152 6b487ec6 Ermal
				break;
153
			}
154 5b237745 Scott Ullrich
		}
155
	}
156 5a1eebc7 Scott Ullrich
157 f76a479d sullrich
	/* Check for reserved keyword names */
158
	foreach($reserved_keywords as $rk) 
159
		if($rk == $_POST['name'])
160 24148939 Carlos Eduardo Ramos
			$input_errors[] = sprintf(gettext("Cannot use a reserved keyword as alias name %s"), $rk);
161 f76a479d sullrich
162 cfa466bb Scott Ullrich
	/* check for name interface description conflicts */
163
	foreach($config['interfaces'] as $interface) {
164
		if($interface['descr'] == $_POST['name']) {
165 24148939 Carlos Eduardo Ramos
			$input_errors[] = gettext("An interface description with this name already exists.");
166 5a1eebc7 Scott Ullrich
			break;
167 cfa466bb Scott Ullrich
		}
168 5a1eebc7 Scott Ullrich
	}
169 ba393f6c Scott Dale
	
170
	$alias = array();
171 6c33fb4b Ermal
	$address = array();
172
	$final_address_details = array();
173 ba393f6c Scott Dale
	$alias['name'] = $_POST['name'];
174 c7de8be4 jim-p
175
	if ($_POST['type'] == "urltable") {
176
		$address = "";
177
		$isfirst = 0;
178
179
		/* item is a url type */
180
		if ($_POST['address0']) {
181
			/* fetch down and add in */
182
			$isfirst = 0;
183
			$address = "";
184
			$alias['url'] = $_POST['address0'];
185
			$alias['updatefreq'] = $_POST['address_subnet0'] ? $_POST['address_subnet0'] : 7;
186
			if (!is_URL($alias['url']) || empty($alias['url'])) {
187 24148939 Carlos Eduardo Ramos
				$input_errors[] = gettext("You must provide a valid URL.");
188 c7de8be4 jim-p
				$dont_update = true;
189
			} elseif (! process_alias_urltable($alias['name'], $alias['url'], 0, true)) {
190 24148939 Carlos Eduardo Ramos
				$input_errors[] = gettext("Unable to fetch usable data.");
191 c7de8be4 jim-p
				$dont_update = true;
192
			}
193
		}
194
	} elseif($_POST['type'] == "url") {
195 d2cfb7a4 Scott Ullrich
		$isfirst = 0;
196 ba393f6c Scott Dale
		$address_count = 2;
197
198
		/* item is a url type */
199 d8898df4 Scott Ullrich
		for($x=0; isset($_POST['address'. $x]); $x++) {
200 ba393f6c Scott Dale
			if($_POST['address' . $x]) {
201
				/* fetch down and add in */
202
				$isfirst = 0;
203 7c872d3b Scott Ullrich
				$temp_filename = tempnam("{$g['tmp_path']}/", "alias_import");
204 ba393f6c Scott Dale
				unlink($temp_filename);
205 7515fb4b Ermal Lu?i
				$fda = fopen("{$g['tmp_path']}/tmpfetch","w");
206 ba393f6c Scott Dale
				fwrite($fda, "/usr/bin/fetch -q -o \"{$temp_filename}/aliases\" \"" . $_POST['address' . $x] . "\"");
207
				fclose($fda);
208 7ac5a4cb Scott Ullrich
				mwexec("/bin/mkdir -p {$temp_filename}");
209 ba393f6c Scott Dale
				mwexec("/usr/bin/fetch -q -o \"{$temp_filename}/aliases\" \"" . $_POST['address' . $x] . "\"");
210
				/* if the item is tar gzipped then extract */
211
				if(stristr($_POST['address' . $x], ".tgz"))
212
					process_alias_tgz($temp_filename);
213
				if(file_exists("{$temp_filename}/aliases")) {
214
					$file_contents = file_get_contents("{$temp_filename}/aliases");
215
					$file_contents = str_replace("#", "\n#", $file_contents);
216 cfbfd941 smos
					$file_contents_split = explode("\n", $file_contents);
217 ba393f6c Scott Dale
					foreach($file_contents_split as $fc) {
218 c7de8be4 jim-p
						// Stop at 3000 items, aliases larger than that tend to break both pf and the WebGUI.
219
						if ($address_count >= 3000)
220
							break;
221 ba393f6c Scott Dale
						$tmp = trim($fc);
222
						if(stristr($fc, "#")) {
223 cfbfd941 smos
							$tmp_split = explode("#", $tmp);
224 ba393f6c Scott Dale
							$tmp = trim($tmp_split[0]);
225 5a1eebc7 Scott Ullrich
						}
226 74e861e3 jim-p
						$tmp = trim($tmp);
227
						if(!empty($tmp) && (is_ipaddr($tmp) || is_subnet($tmp))) {
228 6c33fb4b Ermal
							$address[] = $tmp;
229 ba393f6c Scott Dale
							$isfirst = 1;
230 c7de8be4 jim-p
							$address_count++;
231 5a1eebc7 Scott Ullrich
						}
232 ba393f6c Scott Dale
					}
233
					if($isfirst == 0) {
234
						/* nothing was found */
235 24148939 Carlos Eduardo Ramos
						$input_errors[] = gettext("You must provide a valid URL. Could not fetch usable data.");
236 5a1eebc7 Scott Ullrich
						$dont_update = true;
237
						break;
238
					}
239 ba393f6c Scott Dale
					$alias['aliasurl'][] = $_POST['address' . $x];
240
					mwexec("/bin/rm -rf {$temp_filename}");
241
				} else {
242 24148939 Carlos Eduardo Ramos
					$input_errors[] = gettext("You must provide a valid URL.");
243 ba393f6c Scott Dale
					$dont_update = true;
244
					break;
245 5a1eebc7 Scott Ullrich
				}
246
			}
247 ba393f6c Scott Dale
		}
248
	} else {
249
		/* item is a normal alias type */
250 5e34cdb2 Ermal Lu?i
		$wrongaliases = "";
251 a2d8d3dd Ermal Luçi
		for($x=0; $x<4999; $x++) {
252 b6f3005c Ermal Luçi
			if($_POST["address{$x}"] <> "") {
253 f71e0ac6 Ermal Lu?i
				if (is_alias($_POST["address{$x}"])) {
254
					if (!alias_same_type($_POST["address{$x}"], $_POST['type']))
255 ae660b3c Evgeny Yurchenko
						// But alias type network can include alias type urltable. Feature#1603.
256
						if (!($_POST['type'] == 'network' &&
257 5ffa3389 Ermal
						      alias_get_type($_POST["address{$x}"]) == 'urltable'))
258 ae660b3c Evgeny Yurchenko
							$wrongaliases .= " " . $_POST["address{$x}"];
259 f71e0ac6 Ermal Lu?i
				} else if ($_POST['type'] == "port") {
260 231e0606 Ermal Lu?i
					if (!is_port($_POST["address{$x}"]))
261 24148939 Carlos Eduardo Ramos
						$input_errors[] = $_POST["address{$x}"] . " " . gettext("is not a valid port or alias.");
262 f71e0ac6 Ermal Lu?i
				} else if ($_POST['type'] == "host" || $_POST['type'] == "network") {
263 ecd1f2d9 jim-p
					if (!is_ipaddr($_POST["address{$x}"])
264
					 && !is_hostname($_POST["address{$x}"])
265
					 && !is_iprange($_POST["address{$x}"]))
266 ddc55e12 Erik Fonnesbeck
						$input_errors[] = sprintf(gettext('%1$s is not a valid %2$s alias.'), $_POST["address{$x}"], $_POST['type']);
267 f71e0ac6 Ermal Lu?i
				}
268 6c33fb4b Ermal
				if (is_iprange($_POST["address{$x}"])) {
269
					list($startip, $endip) = explode('-', $_POST["address{$x}"]);
270
					$rangesubnets = ip_range_to_subnet_array($startip, $endip);
271 9ae9a7fc Ermal
					$address = array_merge($address, $rangesubnets);
272 6c33fb4b Ermal
				} else {
273
					$tmpaddress = $_POST["address{$x}"];
274 6775c54e Ermal
					if(is_ipaddr($_POST["address{$x}"]) && $_POST["address_subnet{$x}"] <> "")
275 6c33fb4b Ermal
						$tmpaddress .= "/" . $_POST["address_subnet{$x}"];
276
					$address[] = $tmpaddress;
277
				}
278
				if ($_POST["detail{$x}"] <> "")
279
					$final_address_details[] = $_POST["detail{$x}"];
280
				else
281 24148939 Carlos Eduardo Ramos
					$final_address_details[] = sprintf(gettext("Entry added %s"), date('r'));
282 5e34cdb2 Ermal Lu?i
			}
283 d2cfb7a4 Scott Ullrich
		}
284 5e34cdb2 Ermal Lu?i
		if ($wrongaliases <> "")
285 bcc8d8a3 Erik Fonnesbeck
			$input_errors[] = sprintf(gettext('The alias(es): %s cannot be nested because they are not of the same type.'), $wrongaliases);
286 ba393f6c Scott Dale
	}
287 d2cfb7a4 Scott Ullrich
288 439cc13f Scott Ullrich
	// Allow extending of the firewall edit page and include custom input validation 
289
	pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/input_validation");
290
291 ba393f6c Scott Dale
	if (!$input_errors) {
292 c7de8be4 jim-p
		$alias['address'] = is_array($address) ? implode(" ", $address) : $address;
293 d865241e jim-p
		$alias['descr'] = $_POST['descr'];
294 ba393f6c Scott Dale
		$alias['type'] = $_POST['type'];
295 6c33fb4b Ermal
		$alias['detail'] = implode("||", $final_address_details);
296 d2cfb7a4 Scott Ullrich
297 ed0b7949 Scott Ullrich
		/*   Check to see if alias name needs to be
298
		 *   renamed on referenced rules and such
299
		 */
300
		if ($_POST['name'] <> $_POST['origname']) {
301
			// Firewall rules
302 f1ac1733 Erik Fonnesbeck
			update_alias_names_upon_change(array('filter', 'rule'), array('source', 'address'), $_POST['name'], $origname);
303
			update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
304
			update_alias_names_upon_change(array('filter', 'rule'), array('source', 'port'), $_POST['name'], $origname);
305
			update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'port'), $_POST['name'], $origname);
306 ed0b7949 Scott Ullrich
			// NAT Rules
307 f1ac1733 Erik Fonnesbeck
			update_alias_names_upon_change(array('nat', 'rule'), array('source', 'address'), $_POST['name'], $origname);
308
			update_alias_names_upon_change(array('nat', 'rule'), array('source', 'port'), $_POST['name'], $origname);
309
			update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
310
			update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'port'), $_POST['name'], $origname);
311
			update_alias_names_upon_change(array('nat', 'rule'), array('target'), $_POST['name'], $origname);
312
			update_alias_names_upon_change(array('nat', 'rule'), array('local-port'), $_POST['name'], $origname);
313 b43b7613 Erik Fonnesbeck
			// NAT 1:1 Rules
314
			//update_alias_names_upon_change(array('nat', 'onetoone'), array('external'), $_POST['name'], $origname);
315
			//update_alias_names_upon_change(array('nat', 'onetoone'), array('source', 'address'), $_POST['name'], $origname);
316
			update_alias_names_upon_change(array('nat', 'onetoone'), array('destination', 'address'), $_POST['name'], $origname);
317
			// NAT Outbound Rules
318
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('source', 'network'), $_POST['name'], $origname);
319 ca640261 Erik Fonnesbeck
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('sourceport'), $_POST['name'], $origname);
320 b43b7613 Erik Fonnesbeck
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
321 ca640261 Erik Fonnesbeck
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('dstport'), $_POST['name'], $origname);
322 b43b7613 Erik Fonnesbeck
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('target'), $_POST['name'], $origname);
323 f43ba926 Scott Ullrich
			// Alias in an alias
324 f1ac1733 Erik Fonnesbeck
			update_alias_names_upon_change(array('aliases', 'alias'), array('address'), $_POST['name'], $origname);
325 ed0b7949 Scott Ullrich
		}
326
327 b22bf161 Scott Ullrich
		pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/pre_write_config");
328
329 171aa30d Ermal Lu?i
		if (isset($id) && $a_aliases[$id]) {
330
			if ($a_aliases[$id]['name'] <> $alias['name']) {
331
				foreach ($a_aliases as $aliasid => $aliasd) {
332 16f78ff0 Ermal Lu?i
					if ($aliasd['address'] <> "") {
333 96b4269c Ermal Lu?i
						$tmpdirty = false;
334 16f78ff0 Ermal Lu?i
						$tmpaddr = explode(" ", $aliasd['address']);
335
						foreach ($tmpaddr as $tmpidx => $tmpalias) {
336 96b4269c Ermal Lu?i
							if ($tmpalias == $a_aliases[$id]['name']) {
337 16f78ff0 Ermal Lu?i
								$tmpaddr[$tmpidx] = $alias['name'];
338 96b4269c Ermal Lu?i
								$tmpdirty = true;
339
							}
340 16f78ff0 Ermal Lu?i
						}
341 96b4269c Ermal Lu?i
						if ($tmpdirty == true)
342
							$a_aliases[$aliasid]['address'] = implode(" ", $tmpaddr);
343 16f78ff0 Ermal Lu?i
					}
344 171aa30d Ermal Lu?i
				}
345
			}
346 ba393f6c Scott Dale
			$a_aliases[$id] = $alias;
347 171aa30d Ermal Lu?i
		} else
348 ba393f6c Scott Dale
			$a_aliases[] = $alias;
349 a18b6b97 Scott Ullrich
350 a368a026 Ermal Lu?i
		mark_subsystem_dirty('aliases');
351 a18b6b97 Scott Ullrich
352 974cbfe0 Ermal Lu?i
		// Sort list
353
		$a_aliases = msort($a_aliases, "name");
354
355 ba393f6c Scott Dale
		write_config();
356 d2cfb7a4 Scott Ullrich
357 ba393f6c Scott Dale
		header("Location: firewall_aliases.php");
358
		exit;		
359
	}
360
	//we received input errors, copy data to prevent retype
361
	else
362
	{
363 c7de8be4 jim-p
		$pconfig['name'] = $_POST['name'];
364 d865241e jim-p
		$pconfig['descr'] = $_POST['descr'];
365 6c33fb4b Ermal
		$pconfig['address'] = implode(" ", $address);
366 ba393f6c Scott Dale
		$pconfig['type'] = $_POST['type'];
367 6c33fb4b Ermal
		$pconfig['detail'] = implode("||", $final_address_details);
368 5b237745 Scott Ullrich
	}
369
}
370 da7ae7ef Bill Marquette
371
include("head.inc");
372
373 5a1eebc7 Scott Ullrich
$jscriptstr = <<<EOD
374 da7ae7ef Bill Marquette
375 5a1eebc7 Scott Ullrich
<script type="text/javascript">
376 0cea9a23 Ermal Lu?i
377
var objAlias = new Array(4999);
378 5b237745 Scott Ullrich
function typesel_change() {
379
	switch (document.iform.type.selectedIndex) {
380
		case 0:	/* host */
381 d2cfb7a4 Scott Ullrich
			var cmd;
382 5a1eebc7 Scott Ullrich
383 b6f3005c Ermal Luçi
			newrows = totalrows;
384
			for(i=0; i<newrows; i++) {
385 5a1eebc7 Scott Ullrich
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
386
				eval(comd);
387
				comd = 'document.iform.address_subnet' + i + '.value = "";';
388
				eval(comd);
389 d2cfb7a4 Scott Ullrich
			}
390 5b237745 Scott Ullrich
			break;
391
		case 1:	/* network */
392 d2cfb7a4 Scott Ullrich
			var cmd;
393 5a1eebc7 Scott Ullrich
394 b6f3005c Ermal Luçi
			newrows = totalrows;
395
			for(i=0; i<newrows; i++) {
396 5a1eebc7 Scott Ullrich
				comd = 'document.iform.address_subnet' + i + '.disabled = 0;';
397
				eval(comd);
398 d2cfb7a4 Scott Ullrich
			}
399 5b237745 Scott Ullrich
			break;
400 4d6b6263 Scott Ullrich
		case 2:	/* port */
401
			var cmd;
402 5a1eebc7 Scott Ullrich
403 b6f3005c Ermal Luçi
			newrows = totalrows;
404
			for(i=0; i<newrows; i++) {
405 5a1eebc7 Scott Ullrich
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
406
				eval(comd);
407 2936a57e Seth Mos
				comd = 'document.iform.address_subnet' + i + '.value = "128";';
408 5a1eebc7 Scott Ullrich
				eval(comd);
409
			}
410
			break;
411 aa11af07 jim-p
/*		case 3:	 // OpenVPN Users
412 5a1eebc7 Scott Ullrich
			var cmd;
413 cd35a596 Scott Ullrich
414 b6f3005c Ermal Luçi
			newrows = totalrows;
415
			for(i=0; i<newrows; i++) {
416 cd35a596 Scott Ullrich
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
417
				eval(comd);
418
				comd = 'document.iform.address_subnet' + i + '.value = "";';
419 5a1eebc7 Scott Ullrich
				eval(comd);
420 4d6b6263 Scott Ullrich
			}
421
			break;
422 aa11af07 jim-p
*/
423
		case 3:	/* url */
424 6e7e1814 Scott Ullrich
			var cmd;
425 b6f3005c Ermal Luçi
			newrows = totalrows;
426
			for(i=0; i<newrows; i++) {
427 a0fc25ae Scott Ullrich
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
428 6e7e1814 Scott Ullrich
				eval(comd);
429
			}
430
			break;
431 c7de8be4 jim-p
432 aa11af07 jim-p
		case 4:	/* urltable */
433 c7de8be4 jim-p
			var cmd;
434
			newrows = totalrows;
435
			for(i=0; i<newrows; i++) {
436
				comd = 'document.iform.address_subnet' + i + '.disabled = 0;';
437
				eval(comd);
438
			}
439
			break;
440 5b237745 Scott Ullrich
	}
441
}
442 d2cfb7a4 Scott Ullrich
443 0cea9a23 Ermal Lu?i
function add_alias_control() {
444
	var name = "address" + (totalrows - 1);
445
	obj = document.getElementById(name);
446
	obj.setAttribute('class', 'formfldalias');
447
	obj.setAttribute('autocomplete', 'off');
448
	objAlias[totalrows - 1] = new AutoSuggestControl(obj, new StateSuggestions(addressarray));
449
}
450 5a1eebc7 Scott Ullrich
EOD;
451
452
$network_str = gettext("Network");
453
$networks_str = gettext("Network(s)");
454
$cidr_str = gettext("CIDR");
455
$description_str = gettext("Description");
456
$hosts_str = gettext("Host(s)");
457
$ip_str = gettext("IP");
458
$ports_str = gettext("Port(s)");
459
$port_str = gettext("Port");
460
$url_str = gettext("URL");
461 c7de8be4 jim-p
$urltable_str = gettext("URL Table");
462 5a1eebc7 Scott Ullrich
$update_freq_str = gettext("Update Freq.");
463
464 2936a57e Seth Mos
$networks_help = gettext("Networks are specified in CIDR format.  Select the CIDR mask that pertains to each entry. /32 specifies a single IPv4 host, /128 specifies a single IPv6 host, /24 specifies 255.255.255.0, /64 specifies a normal IPv6 network, etc. Hostnames (FQDNs) may also be specified, using a /32 mask for IPv4 or /128 for IPv6. You may also enter an IP range such as 192.168.1.1-192.168.1.254 and a list of CIDR networks will be derived to fill the range.");
465 e8e2ffbd jim-p
$hosts_help = gettext("Enter as many hosts as you would like.  Hosts must be specified by their IP address or fully qualified domain name (FQDN). FQDN hostnames are periodically re-resolved and updated. If multiple IPs are returned by a DNS query, all are used.");
466 5a1eebc7 Scott Ullrich
$ports_help = gettext("Enter as many ports as you wish.  Port ranges can be expressed by seperating with a colon.");
467 24148939 Carlos Eduardo Ramos
$url_help = sprintf(gettext("Enter as many URLs as you wish. After saving %s will download the URL and import the items into the alias. Use only with small sets of IP addresses (less than 3000)."), $g['product_name']);
468
$urltable_help = sprintf(gettext("Enter a single URL containing a large number of IPs and/or Subnets. After saving %s will download the URL and create a table file containing these addresses. This will work with large numbers of addresses (30,000+) or small numbers."), $g['product_name']);
469 5a1eebc7 Scott Ullrich
470 3ebd97eb Scott Ullrich
$openvpn_str = gettext("Username");
471
$openvpn_user_str = gettext("OpenVPN Users");
472
$openvpn_help = gettext("Enter as many usernames as you wish.");
473 bd413d76 Renato Botelho
$openvpn_freq = "";
474 3ebd97eb Scott Ullrich
475 5a1eebc7 Scott Ullrich
$jscriptstr .= <<<EOD
476
477 d2cfb7a4 Scott Ullrich
function update_box_type() {
478
	var indexNum = document.forms[0].type.selectedIndex;
479
	var selected = document.forms[0].type.options[indexNum].text;
480 5a1eebc7 Scott Ullrich
	if(selected == '{$networks_str}') {
481
		document.getElementById ("addressnetworkport").firstChild.data = "{$networks_str}";
482
		document.getElementById ("onecolumn").firstChild.data = "{$network_str}";
483
		document.getElementById ("twocolumn").firstChild.data = "{$cidr_str}";
484
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
485
		document.getElementById ("itemhelp").firstChild.data = "{$networks_help}";
486 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
487 5a1eebc7 Scott Ullrich
	} else if(selected == '{$hosts_str}') {
488
		document.getElementById ("addressnetworkport").firstChild.data = "{$hosts_str}";
489
		document.getElementById ("onecolumn").firstChild.data = "{$ip_str}";
490
		document.getElementById ("twocolumn").firstChild.data = "";
491
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
492
		document.getElementById ("itemhelp").firstChild.data = "{$hosts_help}";
493 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
494 5a1eebc7 Scott Ullrich
	} else if(selected == '{$ports_str}') {
495
		document.getElementById ("addressnetworkport").firstChild.data = "{$ports_str}";
496
		document.getElementById ("onecolumn").firstChild.data = "{$port_str}";
497
		document.getElementById ("twocolumn").firstChild.data = "";
498
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
499
		document.getElementById ("itemhelp").firstChild.data = "{$ports_help}";
500 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
501 5a1eebc7 Scott Ullrich
	} else if(selected == '{$url_str}') {
502
		document.getElementById ("addressnetworkport").firstChild.data = "{$url_str}";
503
		document.getElementById ("onecolumn").firstChild.data = "{$url_str}";
504 a0fc25ae Scott Ullrich
		document.getElementById ("twocolumn").firstChild.data = "";
505 5a1eebc7 Scott Ullrich
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
506
		document.getElementById ("itemhelp").firstChild.data = "{$url_help}";
507 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
508 6e7e1814 Scott Ullrich
	} else if(selected == '{$openvpn_user_str}') {
509
		document.getElementById ("addressnetworkport").firstChild.data = "{$openvpn_user_str}";
510 3ebd97eb Scott Ullrich
		document.getElementById ("onecolumn").firstChild.data = "{$openvpn_str}";
511 4c743413 Scott Ullrich
		document.getElementById ("twocolumn").firstChild.data = "{$openvpn_freq}";
512 6e7e1814 Scott Ullrich
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
513 3ebd97eb Scott Ullrich
		document.getElementById ("itemhelp").firstChild.data = "{$openvpn_help}";
514 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
515
	} else if(selected == '{$urltable_str}') {
516
		if ((typeof(totalrows) == "undefined") || (totalrows < 1)) {
517
			addRowTo('maintable', 'formfldalias');
518
			typesel_change();
519
			add_alias_control(this);
520
		}
521
		document.getElementById ("addressnetworkport").firstChild.data = "{$url_str}";
522
		document.getElementById ("onecolumn").firstChild.data = "{$url_str}";
523
		document.getElementById ("twocolumn").firstChild.data = "{$update_freq_str}";
524
		document.getElementById ("threecolumn").firstChild.data = "";
525
		document.getElementById ("threecolumn").style.display = 'none';
526
		document.getElementById ("itemhelp").firstChild.data = "{$urltable_help}";
527
		document.getElementById ("addrowbutton").style.display = 'none';
528 d2cfb7a4 Scott Ullrich
	}
529
}
530 5b237745 Scott Ullrich
</script>
531
532 66138bf6 Scott Dale
EOD;
533 d2cfb7a4 Scott Ullrich
534 5a1eebc7 Scott Ullrich
?>
535 d2cfb7a4 Scott Ullrich
536 5a1eebc7 Scott Ullrich
<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
537
<?php
538
	include("fbegin.inc");
539
	echo $jscriptstr;
540
?>
541
542 f51d5d57 Darren Embry
<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js">
543
</script>
544 625dcc40 Bill Marquette
<script type="text/javascript" src="/javascript/row_helper.js">
545 5a1eebc7 Scott Ullrich
</script>
546 0cea9a23 Ermal Lu?i
<script type="text/javascript" src="/javascript/autosuggest.js">
547
</script>
548
<script type="text/javascript" src="/javascript/suggestions.js">
549
</script>
550 d2cfb7a4 Scott Ullrich
551 5a1eebc7 Scott Ullrich
<input type='hidden' name='address_type' value='textbox' />
552
<input type='hidden' name='address_subnet_type' value='select' />
553 d2cfb7a4 Scott Ullrich
554 5a1eebc7 Scott Ullrich
<script type="text/javascript">
555
	rowname[0] = "address";
556 a8fe61f1 Darren Embry
	rowtype[0] = "textbox,ipv4v6";
557 5a1eebc7 Scott Ullrich
	rowsize[0] = "30";
558 d2cfb7a4 Scott Ullrich
559 5a1eebc7 Scott Ullrich
	rowname[1] = "address_subnet";
560 a8fe61f1 Darren Embry
	rowtype[1] = "select,ipv4v6";
561 5a1eebc7 Scott Ullrich
	rowsize[1] = "1";
562 d2cfb7a4 Scott Ullrich
563 5a1eebc7 Scott Ullrich
	rowname[2] = "detail";
564
	rowtype[2] = "textbox";
565 b6f3005c Ermal Luçi
	rowsize[2] = "50";
566 d2cfb7a4 Scott Ullrich
</script>
567
568 193716d0 Scott Ullrich
<?php pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/pre_input_errors"); ?>
569 5b237745 Scott Ullrich
<?php if ($input_errors) print_input_errors($input_errors); ?>
570 5a1eebc7 Scott Ullrich
<div id="inputerrors"></div>
571
572
<form action="firewall_aliases_edit.php" method="post" name="iform" id="iform">
573
<table width="100%" border="0" cellpadding="6" cellspacing="0">
574 c823d56b Scott Ullrich
  <tr>
575 24148939 Carlos Eduardo Ramos
	<td colspan="2" valign="top" class="listtopic"><?=gettext("Alias Edit"); ?></td>
576 c823d56b Scott Ullrich
  </tr>
577 5a1eebc7 Scott Ullrich
  <tr>
578 24148939 Carlos Eduardo Ramos
    <td valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
579 5a1eebc7 Scott Ullrich
    <td class="vtable">
580 ed0b7949 Scott Ullrich
      <input name="origname" type="hidden" id="origname" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['name']);?>" />
581 b5c78501 Seth Mos
      <input name="name" type="text" id="name" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['name']);?>" />
582 6c33fb4b Ermal
      <?php if (isset($id) && $a_aliases[$id]): ?>
583 225a2f0b Scott Ullrich
      <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
584 6c33fb4b Ermal
      <?php endif; ?>
585 5a1eebc7 Scott Ullrich
      <br />
586
      <span class="vexpl">
587 06f746c3 Warren Baker
        <?=gettext("The name of the alias may only consist of the characters \"a-z, A-Z, 0-9 and _\"."); ?>
588 5a1eebc7 Scott Ullrich
      </span>
589
    </td>
590
  </tr>
591 439cc13f Scott Ullrich
  <?php pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/after_first_tr"); ?>
592 5a1eebc7 Scott Ullrich
  <tr>
593 24148939 Carlos Eduardo Ramos
    <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
594 5a1eebc7 Scott Ullrich
    <td width="78%" class="vtable">
595 dd5bf424 Scott Ullrich
      <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
596 5a1eebc7 Scott Ullrich
      <br />
597
      <span class="vexpl">
598 24148939 Carlos Eduardo Ramos
        <?=gettext("You may enter a description here for your reference (not parsed)."); ?>
599 5a1eebc7 Scott Ullrich
      </span>
600
    </td>
601
  </tr>
602
  <tr>
603 24148939 Carlos Eduardo Ramos
    <td valign="top" class="vncellreq"><?=gettext("Type"); ?></td>
604 5a1eebc7 Scott Ullrich
    <td class="vtable">
605
      <select name="type" class="formselect" id="type" onchange="update_box_type(); typesel_change();">
606 731df1af Carlos Eduardo Ramos
        <option value="host" <?php if ($pconfig['type'] == "host") echo "selected"; ?>><?=gettext("Host(s)"); ?></option>
607 24148939 Carlos Eduardo Ramos
        <option value="network" <?php if ($pconfig['type'] == "network") echo "selected"; ?>><?=gettext("Network(s)"); ?></option>
608
        <option value="port" <?php if ($pconfig['type'] == "port") echo "selected"; ?>><?=gettext("Port(s)"); ?></option>
609 0b821acf Chris Buechler
<!--        <option value="openvpn" <?php if ($pconfig['type'] == "openvpn") echo "selected"; ?>><?=gettext("OpenVPN Users"); ?></option> -->
610 0183a568 Scott Ullrich
		<option value="url" <?php if ($pconfig['type'] == "url") echo "selected"; ?>><?=gettext("URL");?></option>
611 24148939 Carlos Eduardo Ramos
        <option value="urltable" <?php if ($pconfig['type'] == "urltable") echo "selected"; ?>><?=gettext("URL Table"); ?></option>
612 5a1eebc7 Scott Ullrich
      </select>
613
    </td>
614
  </tr>
615
  <tr>
616 731df1af Carlos Eduardo Ramos
    <td width="22%" valign="top" class="vncellreq"><div id="addressnetworkport"><?=gettext("Host(s)"); ?></div></td>
617 5a1eebc7 Scott Ullrich
    <td width="78%" class="vtable">
618
      <table id="maintable">
619
        <tbody>
620
          <tr>
621
            <td colspan="4">
622 24148939 Carlos Eduardo Ramos
      		    <div style="padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066; background-color: #ffffff; color: #000000; font-size: 8pt;" id="itemhelp"><?=gettext("Item information"); ?></div>
623 5a1eebc7 Scott Ullrich
            </td>
624
          </tr>
625
          <tr>
626 24148939 Carlos Eduardo Ramos
            <td><div id="onecolumn"><?=gettext("Network"); ?></div></td>
627 5a1eebc7 Scott Ullrich
            <td><div id="twocolumn">CIDR</div></td>
628 24148939 Carlos Eduardo Ramos
           <td><div id="threecolumn"><?=gettext("Description"); ?></div></td>
629 5a1eebc7 Scott Ullrich
          </tr>
630 d2cfb7a4 Scott Ullrich
631 0d3f3e90 Ermal Luçi
	<?php
632
	$counter = 0;
633
	$address = $pconfig['address'];
634
	if ($address <> "") {
635
		$item = explode(" ", $address);
636
		$item3 = explode("||", $pconfig['detail']);
637
		foreach($item as $ww) {
638
			$address = $item[$counter];
639
			$address_subnet = "";
640
			$item2 = explode("/", $address);
641
			foreach($item2 as $current) {
642
				if($item2[1] <> "") {
643
					$address = $item2[0];
644
					$address_subnet = $item2[1];
645 d2cfb7a4 Scott Ullrich
				}
646 6c33fb4b Ermal
				
647 0d3f3e90 Ermal Luçi
			}
648
			$item4 = $item3[$counter];
649
			$tracker = $counter;
650
	?>
651 5a1eebc7 Scott Ullrich
          <tr>
652
            <td>
653 a8fe61f1 Darren Embry
              <input autocomplete="off" name="address<?php echo $tracker; ?>" type="text" class="formfldalias ipv4v6" id="address<?php echo $tracker; ?>" size="30" value="<?=htmlspecialchars($address);?>" />
654 5a1eebc7 Scott Ullrich
            </td>
655
            <td>
656 a8fe61f1 Darren Embry
			        <select name="address_subnet<?php echo $tracker; ?>" class="formselect ipv4v6" id="address_subnet<?php echo $tracker; ?>">
657 6c33fb4b Ermal
				<option></option>
658 b2c63fa3 Seth Mos
			          <?php for ($i = 128; $i >= 1; $i--): ?>
659 c7de8be4 jim-p
			          <option value="<?=$i;?>" <?php if (($i == $address_subnet) || ($i == $pconfig['updatefreq'])) echo "selected"; ?>><?=$i;?></option>
660 5a1eebc7 Scott Ullrich
			          <?php endfor; ?>
661
			        </select>
662
			      </td>
663
            <td>
664 b5c78501 Seth Mos
              <input name="detail<?php echo $tracker; ?>" type="text" class="formfld unknown" id="detail<?php echo $tracker; ?>" size="50" value="<?=$item4;?>" />
665 5a1eebc7 Scott Ullrich
            </td>
666
            <td>
667 331a89ca Erik Fonnesbeck
    		<a onclick="removeRow(this); return false;" href="#"><img border="0" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" alt="" title="<?=gettext("remove this entry"); ?>" /></a>
668 b6f3005c Ermal Luçi
	      </td>
669 5a1eebc7 Scott Ullrich
          </tr>
670 0d3f3e90 Ermal Luçi
<?php
671
        	$counter++;
672 5a1eebc7 Scott Ullrich
673 0d3f3e90 Ermal Luçi
       		} // end foreach
674
	} // end if
675
?>
676 5a1eebc7 Scott Ullrich
        </tbody>
677
        <tfoot>
678
679
        </tfoot>
680
		  </table>
681 c7de8be4 jim-p
			<div id="addrowbutton"><a onclick="javascript:addRowTo('maintable', 'formfldalias'); typesel_change(); add_alias_control(this); return false;" href="#">
682 331a89ca Erik Fonnesbeck
        <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry"); ?>" /></a></div>
683 5a1eebc7 Scott Ullrich
		</td>
684
  </tr>
685
  <tr>
686
    <td width="22%" valign="top">&nbsp;</td>
687
    <td width="78%">
688 24148939 Carlos Eduardo Ramos
      <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
689
      <a href="firewall_aliases.php"><input id="cancelbutton" name="cancelbutton" type="button" class="formbtn" value="<?=gettext("Cancel"); ?>" /></a>
690 5a1eebc7 Scott Ullrich
    </td>
691
  </tr>
692
</table>
693 5b237745 Scott Ullrich
</form>
694 5a1eebc7 Scott Ullrich
695
<script type="text/javascript">
696 4dfd930e Darren Embry
//<![CDATA[
697 5a1eebc7 Scott Ullrich
	field_counter_js = 3;
698
	rows = 1;
699
	totalrows = <?php echo $counter; ?>;
700
	loaded = <?php echo $counter; ?>;
701
	typesel_change();
702
	update_box_type();
703 0cea9a23 Ermal Lu?i
704 4dfd930e Darren Embry
	var addressarray = <?= json_encode(array_exclude($pconfig['name'], get_alias_list("port"))) ?>;
705 0cea9a23 Ermal Lu?i
706 4dfd930e Darren Embry
	function createAutoSuggest() {
707
		<?php  
708
		for ($jv = 0; $jv < $counter; $jv++)
709
			echo "objAlias[{$jv}] = new AutoSuggestControl(document.getElementById(\"address{$jv}\"), new StateSuggestions(addressarray));\n";
710
		?>
711
	}
712 0cea9a23 Ermal Lu?i
713 4dfd930e Darren Embry
	setTimeout("createAutoSuggest();", 500);
714
//]]>
715 5b237745 Scott Ullrich
</script>
716 5a1eebc7 Scott Ullrich
717 5b237745 Scott Ullrich
<?php include("fend.inc"); ?>
718
</body>
719
</html>