Project

General

Profile

Download (32.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 09a68ea4 Phil Davis
	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 5b237745 Scott Ullrich
require("guiconfig.inc");
48 7a927e67 Scott Ullrich
require_once("functions.inc");
49
require_once("filter.inc");
50
require_once("shaper.inc");
51 5b237745 Scott Ullrich
52 b13f7f80 Carlos Eduardo Ramos
$pgtitle = array(gettext("Firewall"),gettext("Aliases"),gettext("Edit"));
53
54 c48fdaa4 Renato Botelho
// Keywords not allowed in names
55
$reserved_keywords = array("all", "pass", "block", "out", "queue", "max", "min", "pptp", "pppoe", "L2TP", "OpenVPN", "IPsec");
56
57 24445691 Phil Davis
// Add all Load balance names to reserved_keywords
58 c48fdaa4 Renato Botelho
if (is_array($config['load_balancer']['lbpool']))
59
	foreach ($config['load_balancer']['lbpool'] as $lbpool)
60
		$reserved_keywords[] = $lbpool['name'];
61
62 7c9d8d71 Ermal Lu?i
$reserved_ifs = get_configured_interface_list(false, true);
63 c48fdaa4 Renato Botelho
$reserved_keywords = array_merge($reserved_keywords, $reserved_ifs, $reserved_table_names);
64 7c9d8d71 Ermal Lu?i
65 5b237745 Scott Ullrich
if (!is_array($config['aliases']['alias']))
66
	$config['aliases']['alias'] = array();
67
$a_aliases = &$config['aliases']['alias'];
68 f29109d0 Renato Botelho
69 ac7f1763 Renato Botelho
$tab = $_REQUEST['tab'];
70
71 ed0b7949 Scott Ullrich
if($_POST)
72
	$origname = $_POST['origname'];
73
74
// Debugging
75 f5200c44 Scott Ullrich
if($debug)
76 552f5a6a Renato Botelho
	unlink_if_exists("{$g['tmp_path']}/alias_rename_log.txt");
77 ed0b7949 Scott Ullrich
78 5e34cdb2 Ermal Lu?i
function alias_same_type($name, $type) {
79
	global $config;
80 f29109d0 Renato Botelho
81 5e34cdb2 Ermal Lu?i
	foreach ($config['aliases']['alias'] as $alias) {
82
		if ($name == $alias['name']) {
83 d6c9ab97 Ermal Lu?i
			if (in_array($type, array("host", "network")) &&
84 5e34cdb2 Ermal Lu?i
				in_array($alias['type'], array("host", "network")))
85
				return true;
86
			if ($type  == $alias['type'])
87
				return true;
88
			else
89
				return false;
90
		}
91
	}
92
	return true;
93
}
94
95 5b237745 Scott Ullrich
$id = $_GET['id'];
96
if (isset($_POST['id']))
97
	$id = $_POST['id'];
98
99
if (isset($id) && $a_aliases[$id]) {
100 ed0b7949 Scott Ullrich
	$original_alias_name = $a_aliases[$id]['name'];
101 5b237745 Scott Ullrich
	$pconfig['name'] = $a_aliases[$id]['name'];
102 ba393f6c Scott Dale
	$pconfig['detail'] = $a_aliases[$id]['detail'];
103
	$pconfig['address'] = $a_aliases[$id]['address'];
104 b4deddce Ermal Lu?i
	$pconfig['type'] = $a_aliases[$id]['type'];
105 ba393f6c Scott Dale
	$pconfig['descr'] = html_entity_decode($a_aliases[$id]['descr']);
106 e47c266d Scott Ullrich
107 9bc8788a Erik Fonnesbeck
	/* interface list */
108
	$iflist = get_configured_interface_with_descr(false, true);
109 cbe3ea96 Ermal Luçi
	foreach ($iflist as $if => $ifdesc)
110 f29109d0 Renato Botelho
		if($ifdesc == $pconfig['descr'])
111 24148939 Carlos Eduardo Ramos
			$input_errors[] = sprintf(gettext("Sorry, an interface is already named %s."), $pconfig['descr']);
112 e47c266d Scott Ullrich
113 dd042c51 Renato Botelho
	if(preg_match("/urltable/i", $a_aliases[$id]['type'])) {
114 c7de8be4 jim-p
		$pconfig['address'] = $a_aliases[$id]['url'];
115
		$pconfig['updatefreq'] = $a_aliases[$id]['updatefreq'];
116
	}
117 5a1eebc7 Scott Ullrich
	if($a_aliases[$id]['aliasurl'] <> "") {
118 c5eaef8e Renato Botelho
		if(is_array($a_aliases[$id]['aliasurl']))
119
			$pconfig['address'] = implode(" ", $a_aliases[$id]['aliasurl']);
120
		else
121 5a1eebc7 Scott Ullrich
			$pconfig['address'] = $a_aliases[$id]['aliasurl'];
122
	}
123 5b237745 Scott Ullrich
}
124
125
if ($_POST) {
126
	unset($input_errors);
127 24445691 Phil Davis
	$vertical_bar_err_text = gettext("Vertical bars (|) at start or end, or double in the middle of descriptions not allowed. Descriptions have been cleaned. Check and save again.");
128 5b237745 Scott Ullrich
129
	/* input validation */
130 0cd7ed19 Scott Ullrich
131 69d2ad77 Erik Fonnesbeck
	$reqdfields = explode(" ", "name");
132 bd413d76 Renato Botelho
	$reqdfieldsn = array(gettext("Name"));
133 69d2ad77 Erik Fonnesbeck
134 1e9b4611 Renato Botelho
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
135 69d2ad77 Erik Fonnesbeck
136 0df6adf8 Bill Marquette
	$x = is_validaliasname($_POST['name']);
137
	if (!isset($x)) {
138 24148939 Carlos Eduardo Ramos
		$input_errors[] = gettext("Reserved word used for alias name.");
139 3deb92f7 Renato Botelho
	} else if ($_POST['type'] == "port" && (getservbyname($_POST['name'], "tcp") || getservbyname($_POST['name'], "udp"))) {
140 bd413d76 Renato Botelho
		$input_errors[] = gettext("Reserved word used for alias name.");
141 3deb92f7 Renato Botelho
	} else {
142
		if (is_validaliasname($_POST['name']) == false)
143 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, _.";
144 3deb92f7 Renato Botelho
	}
145 5b237745 Scott Ullrich
	/* check for name conflicts */
146 6c33fb4b Ermal
	if (empty($a_aliases[$id])) {
147 6b487ec6 Ermal
		foreach ($a_aliases as $alias) {
148
			if ($alias['name'] == $_POST['name']) {
149 24148939 Carlos Eduardo Ramos
				$input_errors[] = gettext("An alias with this name already exists.");
150 6b487ec6 Ermal
				break;
151
			}
152 5b237745 Scott Ullrich
		}
153
	}
154 5a1eebc7 Scott Ullrich
155 f76a479d sullrich
	/* Check for reserved keyword names */
156 f29109d0 Renato Botelho
	foreach($reserved_keywords as $rk)
157 f76a479d sullrich
		if($rk == $_POST['name'])
158 24148939 Carlos Eduardo Ramos
			$input_errors[] = sprintf(gettext("Cannot use a reserved keyword as alias name %s"), $rk);
159 f76a479d sullrich
160 cfa466bb Scott Ullrich
	/* check for name interface description conflicts */
161
	foreach($config['interfaces'] as $interface) {
162
		if($interface['descr'] == $_POST['name']) {
163 24148939 Carlos Eduardo Ramos
			$input_errors[] = gettext("An interface description with this name already exists.");
164 5a1eebc7 Scott Ullrich
			break;
165 cfa466bb Scott Ullrich
		}
166 5a1eebc7 Scott Ullrich
	}
167 f29109d0 Renato Botelho
168 ba393f6c Scott Dale
	$alias = array();
169 6c33fb4b Ermal
	$address = array();
170
	$final_address_details = array();
171 ba393f6c Scott Dale
	$alias['name'] = $_POST['name'];
172 c7de8be4 jim-p
173 dd042c51 Renato Botelho
	if (preg_match("/urltable/i", $_POST['type'])) {
174 c7de8be4 jim-p
		$address = "";
175
		$isfirst = 0;
176
177 24445691 Phil Davis
		/* item is a url table type */
178 c7de8be4 jim-p
		if ($_POST['address0']) {
179
			/* fetch down and add in */
180 fd86d829 Cristian Feldman
			$_POST['address0'] = trim($_POST['address0']);
181 c7de8be4 jim-p
			$isfirst = 0;
182 578c81b6 bcyrill
			$address[] = $_POST['address0'];
183 c7de8be4 jim-p
			$alias['url'] = $_POST['address0'];
184
			$alias['updatefreq'] = $_POST['address_subnet0'] ? $_POST['address_subnet0'] : 7;
185
			if (!is_URL($alias['url']) || empty($alias['url'])) {
186 24148939 Carlos Eduardo Ramos
				$input_errors[] = gettext("You must provide a valid URL.");
187 c7de8be4 jim-p
			} elseif (! process_alias_urltable($alias['name'], $alias['url'], 0, true)) {
188 24148939 Carlos Eduardo Ramos
				$input_errors[] = gettext("Unable to fetch usable data.");
189 c7de8be4 jim-p
			}
190 24445691 Phil Davis
			if ($_POST["detail0"] <> "") {
191
				if ((strpos($_POST["detail0"], "||") === false) && (substr($_POST["detail0"], 0, 1) != "|") && (substr($_POST["detail0"], -1, 1) != "|")) {
192
					$final_address_details[] = $_POST["detail0"];
193
				} else {
194
					/* Remove leading and trailing vertical bars and replace multiple vertical bars with single, */
195
					/* and put in the output array so the text is at least redisplayed for the user. */
196
					$final_address_details[] = preg_replace('/\|\|+/', '|', trim($_POST["detail0"], "|"));
197
					$input_errors[] = $vertical_bar_err_text;
198
				}
199
			} else
200 0b9e4e8f Renato Botelho
				$final_address_details[] = sprintf(gettext("Entry added %s"), date('r'));
201 c7de8be4 jim-p
		}
202 079d1952 Renato Botelho
	} else if ($_POST['type'] == "url" || $_POST['type'] == "url_ports") {
203 d2cfb7a4 Scott Ullrich
		$isfirst = 0;
204 ba393f6c Scott Dale
		$address_count = 2;
205 24445691 Phil Davis
		$desc_fmt_err_found = false;
206 ba393f6c Scott Dale
207
		/* item is a url type */
208 ae5f96c8 Renato Botelho
		for($x=0; $x<4999; $x++) {
209 fd86d829 Cristian Feldman
			$_POST['address' . $x] = trim($_POST['address' . $x]);
210 ba393f6c Scott Dale
			if($_POST['address' . $x]) {
211
				/* fetch down and add in */
212
				$isfirst = 0;
213 7c872d3b Scott Ullrich
				$temp_filename = tempnam("{$g['tmp_path']}/", "alias_import");
214 552f5a6a Renato Botelho
				unlink_if_exists($temp_filename);
215 76590ffe Renato Botelho
				$verify_ssl = isset($config['system']['checkaliasesurlcert']);
216 d31ca336 Renato Botelho
				mkdir($temp_filename);
217 76590ffe Renato Botelho
				download_file($_POST['address' . $x], $temp_filename . "/aliases", $verify_ssl);
218
219 ba393f6c Scott Dale
				/* if the item is tar gzipped then extract */
220
				if(stristr($_POST['address' . $x], ".tgz"))
221
					process_alias_tgz($temp_filename);
222 86ffa26d Renato Botelho
				else if(stristr($_POST['address' . $x], ".zip"))
223
					process_alias_unzip($temp_filename);
224 ae5f96c8 Renato Botelho
225
				if (!isset($alias['aliasurl']))
226
					$alias['aliasurl'] = array();
227
228
				$alias['aliasurl'][] = $_POST['address' . $x];
229 24445691 Phil Davis
				if ($_POST["detail{$x}"] <> "") {
230
					if ((strpos($_POST["detail{$x}"], "||") === false) && (substr($_POST["detail{$x}"], 0, 1) != "|") && (substr($_POST["detail{$x}"], -1, 1) != "|")) {
231
						$final_address_details[] = $_POST["detail{$x}"];
232
					} else {
233
						/* Remove leading and trailing vertical bars and replace multiple vertical bars with single, */
234
						/* and put in the output array so the text is at least redisplayed for the user. */
235
						$final_address_details[] = preg_replace('/\|\|+/', '|', trim($_POST["detail{$x}"], "|"));
236
						if (!$desc_fmt_err_found) {
237
							$input_errors[] = $vertical_bar_err_text;
238
							$desc_fmt_err_found = true;
239
						}
240
					}
241
				} else
242 ae5f96c8 Renato Botelho
					$final_address_details[] = sprintf(gettext("Entry added %s"), date('r'));
243
244 ba393f6c Scott Dale
				if(file_exists("{$temp_filename}/aliases")) {
245
					$file_contents = file_get_contents("{$temp_filename}/aliases");
246
					$file_contents = str_replace("#", "\n#", $file_contents);
247 cfbfd941 smos
					$file_contents_split = explode("\n", $file_contents);
248 ba393f6c Scott Dale
					foreach($file_contents_split as $fc) {
249 c7de8be4 jim-p
						// Stop at 3000 items, aliases larger than that tend to break both pf and the WebGUI.
250
						if ($address_count >= 3000)
251
							break;
252 ba393f6c Scott Dale
						$tmp = trim($fc);
253
						if(stristr($fc, "#")) {
254 cfbfd941 smos
							$tmp_split = explode("#", $tmp);
255 ba393f6c Scott Dale
							$tmp = trim($tmp_split[0]);
256 5a1eebc7 Scott Ullrich
						}
257 74e861e3 jim-p
						$tmp = trim($tmp);
258 079d1952 Renato Botelho
						if ($_POST['type'] == "url")
259
							$is_valid = (is_ipaddr($tmp) || is_subnet($tmp));
260
						else
261
							$is_valid = (is_port($tmp) || is_portrange($tmp));
262
263
						if (!empty($tmp) && $is_valid) {
264 6c33fb4b Ermal
							$address[] = $tmp;
265 ae5f96c8 Renato Botelho
							$isfirst = 1;
266 c7de8be4 jim-p
							$address_count++;
267 5a1eebc7 Scott Ullrich
						}
268 ba393f6c Scott Dale
					}
269
					if($isfirst == 0) {
270
						/* nothing was found */
271 7cbeade1 Renato Botelho
						$input_errors[] = sprintf(gettext("You must provide a valid URL. Could not fetch usable data from '%s'."), $_POST['address' . $x]);
272 5a1eebc7 Scott Ullrich
					}
273 d31ca336 Renato Botelho
					mwexec("/bin/rm -rf " . escapeshellarg($temp_filename));
274 ba393f6c Scott Dale
				} else {
275 7cbeade1 Renato Botelho
					$input_errors[] = sprintf(gettext("URL '%s' is not valid."), $_POST['address' . $x]);
276 5a1eebc7 Scott Ullrich
				}
277
			}
278 ba393f6c Scott Dale
		}
279 24445691 Phil Davis
		unset($desc_fmt_err_found);
280 079d1952 Renato Botelho
		if ($_POST['type'] == "url_ports")
281
			$address = group_ports($address);
282 ba393f6c Scott Dale
	} else {
283
		/* item is a normal alias type */
284 5e34cdb2 Ermal Lu?i
		$wrongaliases = "";
285 24445691 Phil Davis
		$desc_fmt_err_found = false;
286 a2d8d3dd Ermal Luçi
		for($x=0; $x<4999; $x++) {
287 b6f3005c Ermal Luçi
			if($_POST["address{$x}"] <> "") {
288 fd86d829 Cristian Feldman
				$_POST["address{$x}"] = trim($_POST["address{$x}"]);
289 f71e0ac6 Ermal Lu?i
				if (is_alias($_POST["address{$x}"])) {
290
					if (!alias_same_type($_POST["address{$x}"], $_POST['type']))
291 ae660b3c Evgeny Yurchenko
						// But alias type network can include alias type urltable. Feature#1603.
292
						if (!($_POST['type'] == 'network' &&
293 dd042c51 Renato Botelho
						      preg_match("/urltable/i", alias_get_type($_POST["address{$x}"]))))
294 ae660b3c Evgeny Yurchenko
							$wrongaliases .= " " . $_POST["address{$x}"];
295 f71e0ac6 Ermal Lu?i
				} else if ($_POST['type'] == "port") {
296 231e0606 Ermal Lu?i
					if (!is_port($_POST["address{$x}"]))
297 24148939 Carlos Eduardo Ramos
						$input_errors[] = $_POST["address{$x}"] . " " . gettext("is not a valid port or alias.");
298 f71e0ac6 Ermal Lu?i
				} else if ($_POST['type'] == "host" || $_POST['type'] == "network") {
299 ee41ab02 Ermal
					if (is_subnet($_POST["address{$x}"]) || (!is_ipaddr($_POST["address{$x}"])
300 ecd1f2d9 jim-p
					 && !is_hostname($_POST["address{$x}"])
301 ee41ab02 Ermal
					 && !is_iprange($_POST["address{$x}"])))
302 ddc55e12 Erik Fonnesbeck
						$input_errors[] = sprintf(gettext('%1$s is not a valid %2$s alias.'), $_POST["address{$x}"], $_POST['type']);
303 f71e0ac6 Ermal Lu?i
				}
304 6c33fb4b Ermal
				if (is_iprange($_POST["address{$x}"])) {
305
					list($startip, $endip) = explode('-', $_POST["address{$x}"]);
306
					$rangesubnets = ip_range_to_subnet_array($startip, $endip);
307 9ae9a7fc Ermal
					$address = array_merge($address, $rangesubnets);
308 6c33fb4b Ermal
				} else {
309
					$tmpaddress = $_POST["address{$x}"];
310 c00e6bd4 Renato Botelho
					if($_POST['type'] != "host" && is_ipaddr($_POST["address{$x}"]) && $_POST["address_subnet{$x}"] <> "") {
311
						if (!is_subnet($_POST["address{$x}"] . "/" . $_POST["address_subnet{$x}"]))
312
							$input_errors[] = sprintf(gettext('%s/%s is not a valid subnet.'), $_POST["address{$x}"], $_POST["address_subnet{$x}"]);
313
						else
314
							$tmpaddress .= "/" . $_POST["address_subnet{$x}"];
315
					}
316 6c33fb4b Ermal
					$address[] = $tmpaddress;
317
				}
318 24445691 Phil Davis
				if ($_POST["detail{$x}"] <> "") {
319
					if ((strpos($_POST["detail{$x}"], "||") === false) && (substr($_POST["detail{$x}"], 0, 1) != "|") && (substr($_POST["detail{$x}"], -1, 1) != "|")) {
320
						$final_address_details[] = $_POST["detail{$x}"];
321
					} else {
322
						/* Remove leading and trailing vertical bars and replace multiple vertical bars with single, */
323
						/* and put in the output array so the text is at least redisplayed for the user. */
324
						$final_address_details[] = preg_replace('/\|\|+/', '|', trim($_POST["detail{$x}"], "|"));
325
						if (!$desc_fmt_err_found) {
326
							$input_errors[] = $vertical_bar_err_text;
327
							$desc_fmt_err_found = true;
328
						}
329
					}
330
				} else
331 24148939 Carlos Eduardo Ramos
					$final_address_details[] = sprintf(gettext("Entry added %s"), date('r'));
332 5e34cdb2 Ermal Lu?i
			}
333 d2cfb7a4 Scott Ullrich
		}
334 24445691 Phil Davis
		unset($desc_fmt_err_found);
335 5e34cdb2 Ermal Lu?i
		if ($wrongaliases <> "")
336 bcc8d8a3 Erik Fonnesbeck
			$input_errors[] = sprintf(gettext('The alias(es): %s cannot be nested because they are not of the same type.'), $wrongaliases);
337 ba393f6c Scott Dale
	}
338 d2cfb7a4 Scott Ullrich
339 24445691 Phil Davis
	unset($vertical_bar_err_text);
340
341 f29109d0 Renato Botelho
	// Allow extending of the firewall edit page and include custom input validation
342 439cc13f Scott Ullrich
	pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/input_validation");
343
344 ba393f6c Scott Dale
	if (!$input_errors) {
345 c7de8be4 jim-p
		$alias['address'] = is_array($address) ? implode(" ", $address) : $address;
346 d865241e jim-p
		$alias['descr'] = $_POST['descr'];
347 ba393f6c Scott Dale
		$alias['type'] = $_POST['type'];
348 6c33fb4b Ermal
		$alias['detail'] = implode("||", $final_address_details);
349 d2cfb7a4 Scott Ullrich
350 ed0b7949 Scott Ullrich
		/*   Check to see if alias name needs to be
351
		 *   renamed on referenced rules and such
352
		 */
353
		if ($_POST['name'] <> $_POST['origname']) {
354
			// Firewall rules
355 f1ac1733 Erik Fonnesbeck
			update_alias_names_upon_change(array('filter', 'rule'), array('source', 'address'), $_POST['name'], $origname);
356
			update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
357
			update_alias_names_upon_change(array('filter', 'rule'), array('source', 'port'), $_POST['name'], $origname);
358
			update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'port'), $_POST['name'], $origname);
359 ed0b7949 Scott Ullrich
			// NAT Rules
360 f1ac1733 Erik Fonnesbeck
			update_alias_names_upon_change(array('nat', 'rule'), array('source', 'address'), $_POST['name'], $origname);
361
			update_alias_names_upon_change(array('nat', 'rule'), array('source', 'port'), $_POST['name'], $origname);
362
			update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
363
			update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'port'), $_POST['name'], $origname);
364
			update_alias_names_upon_change(array('nat', 'rule'), array('target'), $_POST['name'], $origname);
365
			update_alias_names_upon_change(array('nat', 'rule'), array('local-port'), $_POST['name'], $origname);
366 b43b7613 Erik Fonnesbeck
			// NAT 1:1 Rules
367
			//update_alias_names_upon_change(array('nat', 'onetoone'), array('external'), $_POST['name'], $origname);
368
			//update_alias_names_upon_change(array('nat', 'onetoone'), array('source', 'address'), $_POST['name'], $origname);
369
			update_alias_names_upon_change(array('nat', 'onetoone'), array('destination', 'address'), $_POST['name'], $origname);
370
			// NAT Outbound Rules
371
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('source', 'network'), $_POST['name'], $origname);
372 ca640261 Erik Fonnesbeck
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('sourceport'), $_POST['name'], $origname);
373 b43b7613 Erik Fonnesbeck
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
374 ca640261 Erik Fonnesbeck
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('dstport'), $_POST['name'], $origname);
375 b43b7613 Erik Fonnesbeck
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('target'), $_POST['name'], $origname);
376 f43ba926 Scott Ullrich
			// Alias in an alias
377 f1ac1733 Erik Fonnesbeck
			update_alias_names_upon_change(array('aliases', 'alias'), array('address'), $_POST['name'], $origname);
378 ed0b7949 Scott Ullrich
		}
379
380 b22bf161 Scott Ullrich
		pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/pre_write_config");
381
382 171aa30d Ermal Lu?i
		if (isset($id) && $a_aliases[$id]) {
383
			if ($a_aliases[$id]['name'] <> $alias['name']) {
384
				foreach ($a_aliases as $aliasid => $aliasd) {
385 16f78ff0 Ermal Lu?i
					if ($aliasd['address'] <> "") {
386 96b4269c Ermal Lu?i
						$tmpdirty = false;
387 16f78ff0 Ermal Lu?i
						$tmpaddr = explode(" ", $aliasd['address']);
388
						foreach ($tmpaddr as $tmpidx => $tmpalias) {
389 96b4269c Ermal Lu?i
							if ($tmpalias == $a_aliases[$id]['name']) {
390 16f78ff0 Ermal Lu?i
								$tmpaddr[$tmpidx] = $alias['name'];
391 96b4269c Ermal Lu?i
								$tmpdirty = true;
392
							}
393 16f78ff0 Ermal Lu?i
						}
394 96b4269c Ermal Lu?i
						if ($tmpdirty == true)
395
							$a_aliases[$aliasid]['address'] = implode(" ", $tmpaddr);
396 16f78ff0 Ermal Lu?i
					}
397 171aa30d Ermal Lu?i
				}
398
			}
399 ba393f6c Scott Dale
			$a_aliases[$id] = $alias;
400 171aa30d Ermal Lu?i
		} else
401 ba393f6c Scott Dale
			$a_aliases[] = $alias;
402 a18b6b97 Scott Ullrich
403 974cbfe0 Ermal Lu?i
		// Sort list
404
		$a_aliases = msort($a_aliases, "name");
405
406 3a343d73 jim-p
		if (write_config())
407
			mark_subsystem_dirty('aliases');
408 d2cfb7a4 Scott Ullrich
409 ac7f1763 Renato Botelho
		if(!empty($tab))
410
			header("Location: firewall_aliases.php?tab=" . htmlspecialchars ($tab));
411 a5416de2 Warren Baker
		else
412
			header("Location: firewall_aliases.php");
413
		exit;
414 ba393f6c Scott Dale
	}
415
	//we received input errors, copy data to prevent retype
416
	else
417
	{
418 c7de8be4 jim-p
		$pconfig['name'] = $_POST['name'];
419 d865241e jim-p
		$pconfig['descr'] = $_POST['descr'];
420 079d1952 Renato Botelho
		if (($_POST['type'] == 'url') || ($_POST['type'] == 'url_ports'))
421 6a45942f Renato Botelho
			$pconfig['address'] = implode(" ", $alias['aliasurl']);
422
		else
423
			$pconfig['address'] = implode(" ", $address);
424 ba393f6c Scott Dale
		$pconfig['type'] = $_POST['type'];
425 6c33fb4b Ermal
		$pconfig['detail'] = implode("||", $final_address_details);
426 5b237745 Scott Ullrich
	}
427
}
428 da7ae7ef Bill Marquette
429
include("head.inc");
430
431 5a1eebc7 Scott Ullrich
$jscriptstr = <<<EOD
432 da7ae7ef Bill Marquette
433 5a1eebc7 Scott Ullrich
<script type="text/javascript">
434 709e62f0 Colin Fleming
//<![CDATA[
435 0cea9a23 Ermal Lu?i
var objAlias = new Array(4999);
436 5b237745 Scott Ullrich
function typesel_change() {
437 6794e407 Renato Botelho
	var field_disabled = 0;
438
	var field_value = "";
439
	var set_value = false;
440 5b237745 Scott Ullrich
	switch (document.iform.type.selectedIndex) {
441
		case 0:	/* host */
442 6794e407 Renato Botelho
			field_disabled = 1;
443
			field_value = "";
444
			set_value = true;
445 5b237745 Scott Ullrich
			break;
446
		case 1:	/* network */
447 6794e407 Renato Botelho
			field_disabled = 0;
448 5b237745 Scott Ullrich
			break;
449 4d6b6263 Scott Ullrich
		case 2:	/* port */
450 6794e407 Renato Botelho
			field_disabled = 1;
451
			field_value = "128";
452
			set_value = true;
453 4d6b6263 Scott Ullrich
			break;
454 aa11af07 jim-p
		case 3:	/* url */
455 6794e407 Renato Botelho
			field_disabled = 1;
456 6e7e1814 Scott Ullrich
			break;
457 079d1952 Renato Botelho
		case 4:	/* url_ports */
458 6794e407 Renato Botelho
			field_disabled = 1;
459 079d1952 Renato Botelho
			break;
460
		case 5:	/* urltable */
461 6794e407 Renato Botelho
			field_disabled = 0;
462 c7de8be4 jim-p
			break;
463 dd042c51 Renato Botelho
		case 6:	/* urltable_ports */
464 6794e407 Renato Botelho
			field_disabled = 0;
465 dd042c51 Renato Botelho
			break;
466 5b237745 Scott Ullrich
	}
467 6794e407 Renato Botelho
468 4dd00d25 Phil Davis
	jQuery("select[id^='address_subnet']").prop("disabled", field_disabled);
469
	if (set_value == true)
470
		jQuery("select[id^='address_subnet']").prop("value", field_value);
471 5b237745 Scott Ullrich
}
472 d2cfb7a4 Scott Ullrich
473 0cea9a23 Ermal Lu?i
function add_alias_control() {
474
	var name = "address" + (totalrows - 1);
475
	obj = document.getElementById(name);
476
	obj.setAttribute('class', 'formfldalias');
477
	obj.setAttribute('autocomplete', 'off');
478
	objAlias[totalrows - 1] = new AutoSuggestControl(obj, new StateSuggestions(addressarray));
479
}
480 5a1eebc7 Scott Ullrich
EOD;
481
482
$network_str = gettext("Network");
483
$networks_str = gettext("Network(s)");
484
$cidr_str = gettext("CIDR");
485
$description_str = gettext("Description");
486
$hosts_str = gettext("Host(s)");
487
$ip_str = gettext("IP");
488
$ports_str = gettext("Port(s)");
489
$port_str = gettext("Port");
490 079d1952 Renato Botelho
$url_str = gettext("URL (IPs)");
491
$url_ports_str = gettext("URL (Ports)");
492 dd042c51 Renato Botelho
$urltable_str = gettext("URL Table (IPs)");
493
$urltable_ports_str = gettext("URL Table (Ports)");
494 2b6e6fee Renato Botelho
$update_freq_str = gettext("Update Freq. (days)");
495 5a1eebc7 Scott Ullrich
496 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.");
497 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.");
498 5aa68a55 Renato Botelho
$ports_help = gettext("Enter as many ports as you wish.  Port ranges can be expressed by separating with a colon.");
499 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']);
500 079d1952 Renato Botelho
$url_ports_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 Ports (less than 3000)."), $g['product_name']);
501 24148939 Carlos Eduardo Ramos
$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']);
502 dd042c51 Renato Botelho
$urltable_ports_help = sprintf(gettext("Enter a single URL containing a list of Port numbers and/or Port ranges. After saving %s will download the URL."), $g['product_name']);
503 5a1eebc7 Scott Ullrich
504 3ebd97eb Scott Ullrich
$openvpn_str = gettext("Username");
505
$openvpn_user_str = gettext("OpenVPN Users");
506
$openvpn_help = gettext("Enter as many usernames as you wish.");
507 bd413d76 Renato Botelho
$openvpn_freq = "";
508 3ebd97eb Scott Ullrich
509 5a1eebc7 Scott Ullrich
$jscriptstr .= <<<EOD
510
511 d2cfb7a4 Scott Ullrich
function update_box_type() {
512
	var indexNum = document.forms[0].type.selectedIndex;
513
	var selected = document.forms[0].type.options[indexNum].text;
514 5a1eebc7 Scott Ullrich
	if(selected == '{$networks_str}') {
515
		document.getElementById ("addressnetworkport").firstChild.data = "{$networks_str}";
516
		document.getElementById ("onecolumn").firstChild.data = "{$network_str}";
517
		document.getElementById ("twocolumn").firstChild.data = "{$cidr_str}";
518
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
519
		document.getElementById ("itemhelp").firstChild.data = "{$networks_help}";
520 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
521 5a1eebc7 Scott Ullrich
	} else if(selected == '{$hosts_str}') {
522
		document.getElementById ("addressnetworkport").firstChild.data = "{$hosts_str}";
523
		document.getElementById ("onecolumn").firstChild.data = "{$ip_str}";
524
		document.getElementById ("twocolumn").firstChild.data = "";
525
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
526
		document.getElementById ("itemhelp").firstChild.data = "{$hosts_help}";
527 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
528 5a1eebc7 Scott Ullrich
	} else if(selected == '{$ports_str}') {
529
		document.getElementById ("addressnetworkport").firstChild.data = "{$ports_str}";
530
		document.getElementById ("onecolumn").firstChild.data = "{$port_str}";
531
		document.getElementById ("twocolumn").firstChild.data = "";
532
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
533
		document.getElementById ("itemhelp").firstChild.data = "{$ports_help}";
534 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
535 5a1eebc7 Scott Ullrich
	} else if(selected == '{$url_str}') {
536
		document.getElementById ("addressnetworkport").firstChild.data = "{$url_str}";
537
		document.getElementById ("onecolumn").firstChild.data = "{$url_str}";
538 a0fc25ae Scott Ullrich
		document.getElementById ("twocolumn").firstChild.data = "";
539 5a1eebc7 Scott Ullrich
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
540
		document.getElementById ("itemhelp").firstChild.data = "{$url_help}";
541 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
542 079d1952 Renato Botelho
	} else if(selected == '{$url_ports_str}') {
543
		document.getElementById ("addressnetworkport").firstChild.data = "{$url_ports_str}";
544
		document.getElementById ("onecolumn").firstChild.data = "{$url_ports_str}";
545
		document.getElementById ("twocolumn").firstChild.data = "";
546
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
547
		document.getElementById ("itemhelp").firstChild.data = "{$url_ports_help}";
548
		document.getElementById ("addrowbutton").style.display = 'block';
549 6e7e1814 Scott Ullrich
	} else if(selected == '{$openvpn_user_str}') {
550
		document.getElementById ("addressnetworkport").firstChild.data = "{$openvpn_user_str}";
551 3ebd97eb Scott Ullrich
		document.getElementById ("onecolumn").firstChild.data = "{$openvpn_str}";
552 4c743413 Scott Ullrich
		document.getElementById ("twocolumn").firstChild.data = "{$openvpn_freq}";
553 6e7e1814 Scott Ullrich
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
554 3ebd97eb Scott Ullrich
		document.getElementById ("itemhelp").firstChild.data = "{$openvpn_help}";
555 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
556
	} else if(selected == '{$urltable_str}') {
557
		if ((typeof(totalrows) == "undefined") || (totalrows < 1)) {
558
			addRowTo('maintable', 'formfldalias');
559
			typesel_change();
560
			add_alias_control(this);
561
		}
562
		document.getElementById ("addressnetworkport").firstChild.data = "{$url_str}";
563
		document.getElementById ("onecolumn").firstChild.data = "{$url_str}";
564
		document.getElementById ("twocolumn").firstChild.data = "{$update_freq_str}";
565
		document.getElementById ("threecolumn").firstChild.data = "";
566
		document.getElementById ("threecolumn").style.display = 'none';
567
		document.getElementById ("itemhelp").firstChild.data = "{$urltable_help}";
568
		document.getElementById ("addrowbutton").style.display = 'none';
569 dd042c51 Renato Botelho
	} else if(selected == '{$urltable_ports_str}') {
570
		if ((typeof(totalrows) == "undefined") || (totalrows < 1)) {
571
			addRowTo('maintable', 'formfldalias');
572
			typesel_change();
573
			add_alias_control(this);
574
		}
575
		document.getElementById ("addressnetworkport").firstChild.data = "{$url_str}";
576
		document.getElementById ("onecolumn").firstChild.data = "{$url_str}";
577
		document.getElementById ("twocolumn").firstChild.data = "{$update_freq_str}";
578
		document.getElementById ("threecolumn").firstChild.data = "";
579
		document.getElementById ("threecolumn").style.display = 'none';
580
		document.getElementById ("itemhelp").firstChild.data = "{$urltable_ports_help}";
581
		document.getElementById ("addrowbutton").style.display = 'none';
582 d2cfb7a4 Scott Ullrich
	}
583
}
584 709e62f0 Colin Fleming
//]]>
585 5b237745 Scott Ullrich
</script>
586
587 66138bf6 Scott Dale
EOD;
588 d2cfb7a4 Scott Ullrich
589 5a1eebc7 Scott Ullrich
?>
590 d2cfb7a4 Scott Ullrich
591 5a1eebc7 Scott Ullrich
<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
592
<?php
593
	include("fbegin.inc");
594
	echo $jscriptstr;
595
?>
596
597 709e62f0 Colin Fleming
<script type="text/javascript" src="/javascript/jquery.ipv4v6ify.js"></script>
598
<script type="text/javascript" src="/javascript/row_helper.js"></script>
599
<script type="text/javascript" src="/javascript/autosuggest.js"></script>
600
<script type="text/javascript" src="/javascript/suggestions.js"></script>
601 d2cfb7a4 Scott Ullrich
602 5a1eebc7 Scott Ullrich
<input type='hidden' name='address_type' value='textbox' />
603
<input type='hidden' name='address_subnet_type' value='select' />
604 d2cfb7a4 Scott Ullrich
605 5a1eebc7 Scott Ullrich
<script type="text/javascript">
606 709e62f0 Colin Fleming
//<![CDATA[
607 5a1eebc7 Scott Ullrich
	rowname[0] = "address";
608 a8fe61f1 Darren Embry
	rowtype[0] = "textbox,ipv4v6";
609 5a1eebc7 Scott Ullrich
	rowsize[0] = "30";
610 d2cfb7a4 Scott Ullrich
611 5a1eebc7 Scott Ullrich
	rowname[1] = "address_subnet";
612 a8fe61f1 Darren Embry
	rowtype[1] = "select,ipv4v6";
613 5a1eebc7 Scott Ullrich
	rowsize[1] = "1";
614 d2cfb7a4 Scott Ullrich
615 5a1eebc7 Scott Ullrich
	rowname[2] = "detail";
616
	rowtype[2] = "textbox";
617 b6f3005c Ermal Luçi
	rowsize[2] = "50";
618 709e62f0 Colin Fleming
//]]>
619 d2cfb7a4 Scott Ullrich
</script>
620
621 193716d0 Scott Ullrich
<?php pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/pre_input_errors"); ?>
622 5b237745 Scott Ullrich
<?php if ($input_errors) print_input_errors($input_errors); ?>
623 5a1eebc7 Scott Ullrich
<div id="inputerrors"></div>
624
625
<form action="firewall_aliases_edit.php" method="post" name="iform" id="iform">
626 ac7f1763 Renato Botelho
<?php
627
if (empty($tab)) {
628 079d1952 Renato Botelho
	if (preg_match("/url/i", $pconfig['type']))
629 ac7f1763 Renato Botelho
		$tab = 'url';
630
	else if ($pconfig['type'] == 'host')
631
		$tab = 'ip';
632
	else
633
		$tab = $pconfig['type'];
634
}
635
?>
636
<input name="tab" type="hidden" id="tab" value="<?=htmlspecialchars($tab);?>" />
637 709e62f0 Colin Fleming
<table class="tabcont" width="100%" border="0" cellpadding="6" cellspacing="0" summary="firewall aliases edit">
638 f29109d0 Renato Botelho
	<tr>
639
		<td colspan="2" valign="top" class="listtopic"><?=gettext("Alias Edit"); ?></td>
640
	</tr>
641
	<tr>
642
		<td valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
643
		<td class="vtable">
644
			<input name="origname" type="hidden" id="origname" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['name']);?>" />
645
			<input name="name" type="text" id="name" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['name']);?>" />
646
			<?php if (isset($id) && $a_aliases[$id]): ?>
647
				<input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
648
			<?php endif; ?>
649
			<br />
650
			<span class="vexpl">
651
				<?=gettext("The name of the alias may only consist of the characters \"a-z, A-Z, 0-9 and _\"."); ?>
652
			</span>
653
		</td>
654
	</tr>
655
	<?php pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/after_first_tr"); ?>
656
	<tr>
657
		<td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
658
		<td width="78%" class="vtable">
659
			<input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
660
			<br />
661
			<span class="vexpl">
662
				<?=gettext("You may enter a description here for your reference (not parsed)."); ?>
663
			</span>
664
		</td>
665
	</tr>
666
	<tr>
667
		<td valign="top" class="vncellreq"><?=gettext("Type"); ?></td>
668
		<td class="vtable">
669
			<select name="type" class="formselect" id="type" onchange="update_box_type(); typesel_change();">
670 709e62f0 Colin Fleming
				<option value="host" <?php if ($pconfig['type'] == "host") echo "selected=\"selected\""; ?>><?=gettext("Host(s)"); ?></option>
671
				<option value="network" <?php if ($pconfig['type'] == "network") echo "selected=\"selected\""; ?>><?=gettext("Network(s)"); ?></option>
672 09a68ea4 Phil Davis
				<option value="port" <?php if (($pconfig['type'] == "port") || (empty($pconfig['type']) && ($tab == "port"))) echo "selected=\"selected\""; ?>><?=gettext("Port(s)"); ?></option>
673 709e62f0 Colin Fleming
				<!--<option value="openvpn" <?php if ($pconfig['type'] == "openvpn") echo "selected=\"selected\""; ?>><?=gettext("OpenVPN Users"); ?></option> -->
674 09a68ea4 Phil Davis
				<option value="url" <?php if (($pconfig['type'] == "url") || (empty($pconfig['type']) && ($tab == "url"))) echo "selected=\"selected\""; ?>><?=gettext("URL (IPs)");?></option>
675 079d1952 Renato Botelho
				<option value="url_ports" <?php if ($pconfig['type'] == "url_ports") echo "selected=\"selected\""; ?>><?=gettext("URL (Ports)");?></option>
676 dd042c51 Renato Botelho
				<option value="urltable" <?php if ($pconfig['type'] == "urltable") echo "selected=\"selected\""; ?>><?=gettext("URL Table (IPs)"); ?></option>
677
				<option value="urltable_ports" <?php if ($pconfig['type'] == "urltable_ports") echo "selected=\"selected\""; ?>><?=gettext("URL Table (Ports)"); ?></option>
678 f29109d0 Renato Botelho
			</select>
679
		</td>
680
	</tr>
681
	<tr>
682
		<td width="22%" valign="top" class="vncellreq"><div id="addressnetworkport"><?=gettext("Host(s)"); ?></div></td>
683
		<td width="78%" class="vtable">
684 709e62f0 Colin Fleming
			<table id="maintable" summary="maintable">
685 f29109d0 Renato Botelho
				<tbody>
686
					<tr>
687
						<td colspan="4">
688
							<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>
689
						</td>
690
					</tr>
691
					<tr>
692
						<td><div id="onecolumn"><?=gettext("Network"); ?></div></td>
693
						<td><div id="twocolumn">CIDR</div></td>
694
						<td><div id="threecolumn"><?=gettext("Description"); ?></div></td>
695
					</tr>
696
697
					<?php
698
					$counter = 0;
699 4e8a79a8 Renato Botelho
					if ($pconfig['address'] <> ""):
700
						$addresses = explode(" ", $pconfig['address']);
701
						$details = explode("||", $pconfig['detail']);
702
						while ($counter < count($addresses)):
703
							if (is_subnet($addresses[$counter])) {
704
								list($address, $address_subnet) = explode("/", $addresses[$counter]);
705
							} else {
706
								$address = $addresses[$counter];
707
								$address_subnet = "";
708 f29109d0 Renato Botelho
							}
709
					?>
710
					<tr>
711
						<td>
712 4e8a79a8 Renato Botelho
							<input autocomplete="off" name="address<?php echo $counter; ?>" type="text" class="formfldalias ipv4v6" id="address<?php echo $counter; ?>" size="30" value="<?=htmlspecialchars($address);?>" />
713 f29109d0 Renato Botelho
						</td>
714
						<td>
715 4e8a79a8 Renato Botelho
							<select name="address_subnet<?php echo $counter; ?>" class="formselect ipv4v6" id="address_subnet<?php echo $counter; ?>">
716 f29109d0 Renato Botelho
								<option></option>
717
								<?php for ($i = 128; $i >= 1; $i--): ?>
718 709e62f0 Colin Fleming
									<option value="<?=$i;?>" <?php if (($i == $address_subnet) || ($i == $pconfig['updatefreq'])) echo "selected=\"selected\""; ?>><?=$i;?></option>
719 f29109d0 Renato Botelho
								<?php endfor; ?>
720
							</select>
721
						</td>
722
						<td>
723 06896c6a Renato Botelho
							<input name="detail<?php echo $counter; ?>" type="text" class="formfld unknown" id="detail<?php echo $counter; ?>" size="50" value="<?=$details[$counter];?>" />
724 f29109d0 Renato Botelho
						</td>
725
						<td>
726
							<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>
727
						</td>
728
					</tr>
729
					<?php
730
						$counter++;
731
732 4e8a79a8 Renato Botelho
						endwhile;
733
					endif;
734 f29109d0 Renato Botelho
					?>
735
				</tbody>
736
			</table>
737
			<div id="addrowbutton">
738
				<a onclick="javascript:addRowTo('maintable', 'formfldalias'); typesel_change(); add_alias_control(this); return false;" href="#">
739
					<img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry"); ?>" />
740
				</a>
741
			</div>
742
		</td>
743
	</tr>
744
	<tr>
745
		<td width="22%" valign="top">&nbsp;</td>
746
		<td width="78%">
747
			<input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
748 5a815dc7 Renato Botelho
			<a href="firewall_aliases.php?tab=<?=$tab;?>"><input id="cancelbutton" name="cancelbutton" type="button" class="formbtn" value="<?=gettext("Cancel"); ?>" /></a>
749 5a1eebc7 Scott Ullrich
		</td>
750 f29109d0 Renato Botelho
	</tr>
751 5a1eebc7 Scott Ullrich
</table>
752 5b237745 Scott Ullrich
</form>
753 5a1eebc7 Scott Ullrich
754
<script type="text/javascript">
755 4dfd930e Darren Embry
//<![CDATA[
756 5a1eebc7 Scott Ullrich
	field_counter_js = 3;
757
	rows = 1;
758
	totalrows = <?php echo $counter; ?>;
759
	loaded = <?php echo $counter; ?>;
760
	typesel_change();
761
	update_box_type();
762 0cea9a23 Ermal Lu?i
763 dd760cfc r-duran
	var addressarray = <?= json_encode(array_exclude($pconfig['name'], get_alias_list($pconfig['type']))) ?>;
764 0cea9a23 Ermal Lu?i
765 4dfd930e Darren Embry
	function createAutoSuggest() {
766 f29109d0 Renato Botelho
		<?php
767 4dfd930e Darren Embry
		for ($jv = 0; $jv < $counter; $jv++)
768
			echo "objAlias[{$jv}] = new AutoSuggestControl(document.getElementById(\"address{$jv}\"), new StateSuggestions(addressarray));\n";
769
		?>
770
	}
771 0cea9a23 Ermal Lu?i
772 4dfd930e Darren Embry
	setTimeout("createAutoSuggest();", 500);
773
//]]>
774 5b237745 Scott Ullrich
</script>
775 5a1eebc7 Scott Ullrich
776 5b237745 Scott Ullrich
<?php include("fend.inc"); ?>
777
</body>
778
</html>