Project

General

Profile

Download (26.2 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 0c9f92bf Erik Fonnesbeck
$reserved_keywords = array("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 bd413d76 Renato Botelho
			$input_errors[] = gettext("The alias name 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
					$file_contents_split = split("\n", $file_contents);
217
					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
							$tmp_split = split("#", $tmp);
224
							$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
						$wrongaliases .= " " . $_POST["address{$x}"];
256
				} else if ($_POST['type'] == "port") {
257 231e0606 Ermal Lu?i
					if (!is_port($_POST["address{$x}"]))
258 24148939 Carlos Eduardo Ramos
						$input_errors[] = $_POST["address{$x}"] . " " . gettext("is not a valid port or alias.");
259 f71e0ac6 Ermal Lu?i
				} else if ($_POST['type'] == "host" || $_POST['type'] == "network") {
260 ecd1f2d9 jim-p
					if (!is_ipaddr($_POST["address{$x}"])
261
					 && !is_hostname($_POST["address{$x}"])
262
					 && !is_iprange($_POST["address{$x}"]))
263 ddc55e12 Erik Fonnesbeck
						$input_errors[] = sprintf(gettext('%1$s is not a valid %2$s alias.'), $_POST["address{$x}"], $_POST['type']);
264 f71e0ac6 Ermal Lu?i
				}
265 6c33fb4b Ermal
				if (is_iprange($_POST["address{$x}"])) {
266
					list($startip, $endip) = explode('-', $_POST["address{$x}"]);
267
					$rangesubnets = ip_range_to_subnet_array($startip, $endip);
268 9ae9a7fc Ermal
					$address = array_merge($address, $rangesubnets);
269 6c33fb4b Ermal
				} else {
270
					$tmpaddress = $_POST["address{$x}"];
271 6775c54e Ermal
					if(is_ipaddr($_POST["address{$x}"]) && $_POST["address_subnet{$x}"] <> "")
272 6c33fb4b Ermal
						$tmpaddress .= "/" . $_POST["address_subnet{$x}"];
273
					$address[] = $tmpaddress;
274
				}
275
				if ($_POST["detail{$x}"] <> "")
276
					$final_address_details[] = $_POST["detail{$x}"];
277
				else
278 24148939 Carlos Eduardo Ramos
					$final_address_details[] = sprintf(gettext("Entry added %s"), date('r'));
279 5e34cdb2 Ermal Lu?i
			}
280 d2cfb7a4 Scott Ullrich
		}
281 5e34cdb2 Ermal Lu?i
		if ($wrongaliases <> "")
282 bcc8d8a3 Erik Fonnesbeck
			$input_errors[] = sprintf(gettext('The alias(es): %s cannot be nested because they are not of the same type.'), $wrongaliases);
283 ba393f6c Scott Dale
	}
284 d2cfb7a4 Scott Ullrich
285 ba393f6c Scott Dale
	if (!$input_errors) {
286 c7de8be4 jim-p
		$alias['address'] = is_array($address) ? implode(" ", $address) : $address;
287 d865241e jim-p
		$alias['descr'] = $_POST['descr'];
288 ba393f6c Scott Dale
		$alias['type'] = $_POST['type'];
289 6c33fb4b Ermal
		$alias['detail'] = implode("||", $final_address_details);
290 d2cfb7a4 Scott Ullrich
291 ed0b7949 Scott Ullrich
		/*   Check to see if alias name needs to be
292
		 *   renamed on referenced rules and such
293
		 */
294
		if ($_POST['name'] <> $_POST['origname']) {
295
			// Firewall rules
296 f1ac1733 Erik Fonnesbeck
			update_alias_names_upon_change(array('filter', 'rule'), array('source', 'address'), $_POST['name'], $origname);
297
			update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
298
			update_alias_names_upon_change(array('filter', 'rule'), array('source', 'port'), $_POST['name'], $origname);
299
			update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'port'), $_POST['name'], $origname);
300 ed0b7949 Scott Ullrich
			// NAT Rules
301 f1ac1733 Erik Fonnesbeck
			update_alias_names_upon_change(array('nat', 'rule'), array('source', 'address'), $_POST['name'], $origname);
302
			update_alias_names_upon_change(array('nat', 'rule'), array('source', 'port'), $_POST['name'], $origname);
303
			update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
304
			update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'port'), $_POST['name'], $origname);
305
			update_alias_names_upon_change(array('nat', 'rule'), array('target'), $_POST['name'], $origname);
306
			update_alias_names_upon_change(array('nat', 'rule'), array('local-port'), $_POST['name'], $origname);
307 f43ba926 Scott Ullrich
			// Alias in an alias
308 f1ac1733 Erik Fonnesbeck
			update_alias_names_upon_change(array('aliases', 'alias'), array('address'), $_POST['name'], $origname);
309 ed0b7949 Scott Ullrich
		}
310
311 171aa30d Ermal Lu?i
		if (isset($id) && $a_aliases[$id]) {
312
			if ($a_aliases[$id]['name'] <> $alias['name']) {
313
				foreach ($a_aliases as $aliasid => $aliasd) {
314 16f78ff0 Ermal Lu?i
					if ($aliasd['address'] <> "") {
315 96b4269c Ermal Lu?i
						$tmpdirty = false;
316 16f78ff0 Ermal Lu?i
						$tmpaddr = explode(" ", $aliasd['address']);
317
						foreach ($tmpaddr as $tmpidx => $tmpalias) {
318 96b4269c Ermal Lu?i
							if ($tmpalias == $a_aliases[$id]['name']) {
319 16f78ff0 Ermal Lu?i
								$tmpaddr[$tmpidx] = $alias['name'];
320 96b4269c Ermal Lu?i
								$tmpdirty = true;
321
							}
322 16f78ff0 Ermal Lu?i
						}
323 96b4269c Ermal Lu?i
						if ($tmpdirty == true)
324
							$a_aliases[$aliasid]['address'] = implode(" ", $tmpaddr);
325 16f78ff0 Ermal Lu?i
					}
326 171aa30d Ermal Lu?i
				}
327
			}
328 ba393f6c Scott Dale
			$a_aliases[$id] = $alias;
329 171aa30d Ermal Lu?i
		} else
330 ba393f6c Scott Dale
			$a_aliases[] = $alias;
331 a18b6b97 Scott Ullrich
332 a368a026 Ermal Lu?i
		mark_subsystem_dirty('aliases');
333 a18b6b97 Scott Ullrich
334 974cbfe0 Ermal Lu?i
		// Sort list
335
		$a_aliases = msort($a_aliases, "name");
336
337 ba393f6c Scott Dale
		write_config();
338 d2cfb7a4 Scott Ullrich
339 ba393f6c Scott Dale
		header("Location: firewall_aliases.php");
340
		exit;		
341
	}
342
	//we received input errors, copy data to prevent retype
343
	else
344
	{
345 c7de8be4 jim-p
		$pconfig['name'] = $_POST['name'];
346 d865241e jim-p
		$pconfig['descr'] = $_POST['descr'];
347 6c33fb4b Ermal
		$pconfig['address'] = implode(" ", $address);
348 ba393f6c Scott Dale
		$pconfig['type'] = $_POST['type'];
349 6c33fb4b Ermal
		$pconfig['detail'] = implode("||", $final_address_details);
350 5b237745 Scott Ullrich
	}
351
}
352 da7ae7ef Bill Marquette
353
include("head.inc");
354
355 5a1eebc7 Scott Ullrich
$jscriptstr = <<<EOD
356 da7ae7ef Bill Marquette
357 5a1eebc7 Scott Ullrich
<script type="text/javascript">
358 0cea9a23 Ermal Lu?i
359
var objAlias = new Array(4999);
360 5b237745 Scott Ullrich
function typesel_change() {
361
	switch (document.iform.type.selectedIndex) {
362
		case 0:	/* host */
363 d2cfb7a4 Scott Ullrich
			var cmd;
364 5a1eebc7 Scott Ullrich
365 b6f3005c Ermal Luçi
			newrows = totalrows;
366
			for(i=0; i<newrows; i++) {
367 5a1eebc7 Scott Ullrich
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
368
				eval(comd);
369
				comd = 'document.iform.address_subnet' + i + '.value = "";';
370
				eval(comd);
371 d2cfb7a4 Scott Ullrich
			}
372 5b237745 Scott Ullrich
			break;
373
		case 1:	/* network */
374 d2cfb7a4 Scott Ullrich
			var cmd;
375 5a1eebc7 Scott Ullrich
376 b6f3005c Ermal Luçi
			newrows = totalrows;
377
			for(i=0; i<newrows; i++) {
378 5a1eebc7 Scott Ullrich
				comd = 'document.iform.address_subnet' + i + '.disabled = 0;';
379
				eval(comd);
380 d2cfb7a4 Scott Ullrich
			}
381 5b237745 Scott Ullrich
			break;
382 4d6b6263 Scott Ullrich
		case 2:	/* port */
383
			var cmd;
384 5a1eebc7 Scott Ullrich
385 b6f3005c Ermal Luçi
			newrows = totalrows;
386
			for(i=0; i<newrows; i++) {
387 5a1eebc7 Scott Ullrich
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
388
				eval(comd);
389
				comd = 'document.iform.address_subnet' + i + '.value = "32";';
390
				eval(comd);
391
			}
392
			break;
393 cd35a596 Scott Ullrich
		case 3:	/* OpenVPN Users */
394 5a1eebc7 Scott Ullrich
			var cmd;
395 cd35a596 Scott Ullrich
396 b6f3005c Ermal Luçi
			newrows = totalrows;
397
			for(i=0; i<newrows; i++) {
398 cd35a596 Scott Ullrich
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
399
				eval(comd);
400
				comd = 'document.iform.address_subnet' + i + '.value = "";';
401 5a1eebc7 Scott Ullrich
				eval(comd);
402 4d6b6263 Scott Ullrich
			}
403
			break;
404 6e7e1814 Scott Ullrich
405 cd35a596 Scott Ullrich
		case 4:	/* url */
406 6e7e1814 Scott Ullrich
			var cmd;
407 b6f3005c Ermal Luçi
			newrows = totalrows;
408
			for(i=0; i<newrows; i++) {
409 a0fc25ae Scott Ullrich
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
410 6e7e1814 Scott Ullrich
				eval(comd);
411
			}
412
			break;
413 c7de8be4 jim-p
414
		case 5:	/* urltable */
415
			var cmd;
416
			newrows = totalrows;
417
			for(i=0; i<newrows; i++) {
418
				comd = 'document.iform.address_subnet' + i + '.disabled = 0;';
419
				eval(comd);
420
			}
421
			break;
422 5b237745 Scott Ullrich
	}
423
}
424 d2cfb7a4 Scott Ullrich
425 0cea9a23 Ermal Lu?i
function add_alias_control() {
426
	var name = "address" + (totalrows - 1);
427
	obj = document.getElementById(name);
428
	obj.setAttribute('class', 'formfldalias');
429
	obj.setAttribute('autocomplete', 'off');
430
	objAlias[totalrows - 1] = new AutoSuggestControl(obj, new StateSuggestions(addressarray));
431
}
432 5a1eebc7 Scott Ullrich
EOD;
433
434
$network_str = gettext("Network");
435
$networks_str = gettext("Network(s)");
436
$cidr_str = gettext("CIDR");
437
$description_str = gettext("Description");
438
$hosts_str = gettext("Host(s)");
439
$ip_str = gettext("IP");
440
$ports_str = gettext("Port(s)");
441
$port_str = gettext("Port");
442
$url_str = gettext("URL");
443 c7de8be4 jim-p
$urltable_str = gettext("URL Table");
444 5a1eebc7 Scott Ullrich
$update_freq_str = gettext("Update Freq.");
445
446 7a288dc9 jim-p
$networks_help = gettext("Networks are specified in CIDR format.  Select the CIDR mask that pertains to each entry. /32 specifies a single host, /24 specifies 255.255.255.0, etc. Hostnames (FQDNs) may also be specified, using a /32 mask. 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.");
447 974ff781 Chris Buechler
$hosts_help = gettext("Enter as many hosts as you would like.  Hosts must be specified by their IP address.");
448 5a1eebc7 Scott Ullrich
$ports_help = gettext("Enter as many ports as you wish.  Port ranges can be expressed by seperating with a colon.");
449 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']);
450
$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']);
451 5a1eebc7 Scott Ullrich
452 3ebd97eb Scott Ullrich
$openvpn_str = gettext("Username");
453
$openvpn_user_str = gettext("OpenVPN Users");
454
$openvpn_help = gettext("Enter as many usernames as you wish.");
455 bd413d76 Renato Botelho
$openvpn_freq = "";
456 3ebd97eb Scott Ullrich
457 5a1eebc7 Scott Ullrich
$jscriptstr .= <<<EOD
458
459 d2cfb7a4 Scott Ullrich
function update_box_type() {
460
	var indexNum = document.forms[0].type.selectedIndex;
461
	var selected = document.forms[0].type.options[indexNum].text;
462 5a1eebc7 Scott Ullrich
	if(selected == '{$networks_str}') {
463
		document.getElementById ("addressnetworkport").firstChild.data = "{$networks_str}";
464
		document.getElementById ("onecolumn").firstChild.data = "{$network_str}";
465
		document.getElementById ("twocolumn").firstChild.data = "{$cidr_str}";
466
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
467
		document.getElementById ("itemhelp").firstChild.data = "{$networks_help}";
468 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
469 5a1eebc7 Scott Ullrich
	} else if(selected == '{$hosts_str}') {
470
		document.getElementById ("addressnetworkport").firstChild.data = "{$hosts_str}";
471
		document.getElementById ("onecolumn").firstChild.data = "{$ip_str}";
472
		document.getElementById ("twocolumn").firstChild.data = "";
473
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
474
		document.getElementById ("itemhelp").firstChild.data = "{$hosts_help}";
475 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
476 5a1eebc7 Scott Ullrich
	} else if(selected == '{$ports_str}') {
477
		document.getElementById ("addressnetworkport").firstChild.data = "{$ports_str}";
478
		document.getElementById ("onecolumn").firstChild.data = "{$port_str}";
479
		document.getElementById ("twocolumn").firstChild.data = "";
480
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
481
		document.getElementById ("itemhelp").firstChild.data = "{$ports_help}";
482 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
483 5a1eebc7 Scott Ullrich
	} else if(selected == '{$url_str}') {
484
		document.getElementById ("addressnetworkport").firstChild.data = "{$url_str}";
485
		document.getElementById ("onecolumn").firstChild.data = "{$url_str}";
486 a0fc25ae Scott Ullrich
		document.getElementById ("twocolumn").firstChild.data = "";
487 5a1eebc7 Scott Ullrich
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
488
		document.getElementById ("itemhelp").firstChild.data = "{$url_help}";
489 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
490 6e7e1814 Scott Ullrich
	} else if(selected == '{$openvpn_user_str}') {
491
		document.getElementById ("addressnetworkport").firstChild.data = "{$openvpn_user_str}";
492 3ebd97eb Scott Ullrich
		document.getElementById ("onecolumn").firstChild.data = "{$openvpn_str}";
493 4c743413 Scott Ullrich
		document.getElementById ("twocolumn").firstChild.data = "{$openvpn_freq}";
494 6e7e1814 Scott Ullrich
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
495 3ebd97eb Scott Ullrich
		document.getElementById ("itemhelp").firstChild.data = "{$openvpn_help}";
496 c7de8be4 jim-p
		document.getElementById ("addrowbutton").style.display = 'block';
497
	} else if(selected == '{$urltable_str}') {
498
		if ((typeof(totalrows) == "undefined") || (totalrows < 1)) {
499
			addRowTo('maintable', 'formfldalias');
500
			typesel_change();
501
			add_alias_control(this);
502
		}
503
		document.getElementById ("addressnetworkport").firstChild.data = "{$url_str}";
504
		document.getElementById ("onecolumn").firstChild.data = "{$url_str}";
505
		document.getElementById ("twocolumn").firstChild.data = "{$update_freq_str}";
506
		document.getElementById ("threecolumn").firstChild.data = "";
507
		document.getElementById ("threecolumn").style.display = 'none';
508
		document.getElementById ("itemhelp").firstChild.data = "{$urltable_help}";
509
		document.getElementById ("addrowbutton").style.display = 'none';
510 d2cfb7a4 Scott Ullrich
	}
511
}
512 5b237745 Scott Ullrich
</script>
513
514 66138bf6 Scott Dale
EOD;
515 d2cfb7a4 Scott Ullrich
516 5a1eebc7 Scott Ullrich
?>
517 d2cfb7a4 Scott Ullrich
518 5a1eebc7 Scott Ullrich
<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
519
<?php
520
	include("fbegin.inc");
521
	echo $jscriptstr;
522
?>
523
524 625dcc40 Bill Marquette
<script type="text/javascript" src="/javascript/row_helper.js">
525 5a1eebc7 Scott Ullrich
</script>
526 0cea9a23 Ermal Lu?i
<script type="text/javascript" src="/javascript/autosuggest.js">
527
</script>
528
<script type="text/javascript" src="/javascript/suggestions.js">
529
</script>
530 d2cfb7a4 Scott Ullrich
531 5a1eebc7 Scott Ullrich
<input type='hidden' name='address_type' value='textbox' />
532
<input type='hidden' name='address_subnet_type' value='select' />
533 d2cfb7a4 Scott Ullrich
534 5a1eebc7 Scott Ullrich
<script type="text/javascript">
535
	rowname[0] = "address";
536
	rowtype[0] = "textbox";
537
	rowsize[0] = "30";
538 d2cfb7a4 Scott Ullrich
539 5a1eebc7 Scott Ullrich
	rowname[1] = "address_subnet";
540
	rowtype[1] = "select";
541
	rowsize[1] = "1";
542 d2cfb7a4 Scott Ullrich
543 5a1eebc7 Scott Ullrich
	rowname[2] = "detail";
544
	rowtype[2] = "textbox";
545 b6f3005c Ermal Luçi
	rowsize[2] = "50";
546 d2cfb7a4 Scott Ullrich
</script>
547
548 5b237745 Scott Ullrich
<?php if ($input_errors) print_input_errors($input_errors); ?>
549 5a1eebc7 Scott Ullrich
<div id="inputerrors"></div>
550
551
<form action="firewall_aliases_edit.php" method="post" name="iform" id="iform">
552
<table width="100%" border="0" cellpadding="6" cellspacing="0">
553 c823d56b Scott Ullrich
  <tr>
554 24148939 Carlos Eduardo Ramos
	<td colspan="2" valign="top" class="listtopic"><?=gettext("Alias Edit"); ?></td>
555 c823d56b Scott Ullrich
  </tr>
556 5a1eebc7 Scott Ullrich
  <tr>
557 24148939 Carlos Eduardo Ramos
    <td valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
558 5a1eebc7 Scott Ullrich
    <td class="vtable">
559 ed0b7949 Scott Ullrich
      <input name="origname" type="hidden" id="origname" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['name']);?>" />
560 b5c78501 Seth Mos
      <input name="name" type="text" id="name" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['name']);?>" />
561 6c33fb4b Ermal
      <?php if (isset($id) && $a_aliases[$id]): ?>
562 225a2f0b Scott Ullrich
      <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
563 6c33fb4b Ermal
      <?php endif; ?>
564 5a1eebc7 Scott Ullrich
      <br />
565
      <span class="vexpl">
566 731df1af Carlos Eduardo Ramos
        <?=gettext("The name of the alias may only consist of the characters \"a-z, A-Z and 0-9\"."); ?>
567 5a1eebc7 Scott Ullrich
      </span>
568
    </td>
569
  </tr>
570
  <tr>
571 24148939 Carlos Eduardo Ramos
    <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
572 5a1eebc7 Scott Ullrich
    <td width="78%" class="vtable">
573 dd5bf424 Scott Ullrich
      <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
574 5a1eebc7 Scott Ullrich
      <br />
575
      <span class="vexpl">
576 24148939 Carlos Eduardo Ramos
        <?=gettext("You may enter a description here for your reference (not parsed)."); ?>
577 5a1eebc7 Scott Ullrich
      </span>
578
    </td>
579
  </tr>
580
  <tr>
581 24148939 Carlos Eduardo Ramos
    <td valign="top" class="vncellreq"><?=gettext("Type"); ?></td>
582 5a1eebc7 Scott Ullrich
    <td class="vtable">
583
      <select name="type" class="formselect" id="type" onchange="update_box_type(); typesel_change();">
584 731df1af Carlos Eduardo Ramos
        <option value="host" <?php if ($pconfig['type'] == "host") echo "selected"; ?>><?=gettext("Host(s)"); ?></option>
585 24148939 Carlos Eduardo Ramos
        <option value="network" <?php if ($pconfig['type'] == "network") echo "selected"; ?>><?=gettext("Network(s)"); ?></option>
586
        <option value="port" <?php if ($pconfig['type'] == "port") echo "selected"; ?>><?=gettext("Port(s)"); ?></option>
587 0b821acf Chris Buechler
<!--        <option value="openvpn" <?php if ($pconfig['type'] == "openvpn") echo "selected"; ?>><?=gettext("OpenVPN Users"); ?></option> -->
588 0183a568 Scott Ullrich
		<option value="url" <?php if ($pconfig['type'] == "url") echo "selected"; ?>><?=gettext("URL");?></option>
589 24148939 Carlos Eduardo Ramos
        <option value="urltable" <?php if ($pconfig['type'] == "urltable") echo "selected"; ?>><?=gettext("URL Table"); ?></option>
590 5a1eebc7 Scott Ullrich
      </select>
591
    </td>
592
  </tr>
593
  <tr>
594 731df1af Carlos Eduardo Ramos
    <td width="22%" valign="top" class="vncellreq"><div id="addressnetworkport"><?=gettext("Host(s)"); ?></div></td>
595 5a1eebc7 Scott Ullrich
    <td width="78%" class="vtable">
596
      <table id="maintable">
597
        <tbody>
598
          <tr>
599
            <td colspan="4">
600 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>
601 5a1eebc7 Scott Ullrich
            </td>
602
          </tr>
603
          <tr>
604 24148939 Carlos Eduardo Ramos
            <td><div id="onecolumn"><?=gettext("Network"); ?></div></td>
605 5a1eebc7 Scott Ullrich
            <td><div id="twocolumn">CIDR</div></td>
606 24148939 Carlos Eduardo Ramos
           <td><div id="threecolumn"><?=gettext("Description"); ?></div></td>
607 5a1eebc7 Scott Ullrich
          </tr>
608 d2cfb7a4 Scott Ullrich
609 0d3f3e90 Ermal Luçi
	<?php
610
	$counter = 0;
611
	$address = $pconfig['address'];
612
	if ($address <> "") {
613
		$item = explode(" ", $address);
614
		$item3 = explode("||", $pconfig['detail']);
615
		foreach($item as $ww) {
616
			$address = $item[$counter];
617
			$address_subnet = "";
618
			$item2 = explode("/", $address);
619
			foreach($item2 as $current) {
620
				if($item2[1] <> "") {
621
					$address = $item2[0];
622
					$address_subnet = $item2[1];
623 d2cfb7a4 Scott Ullrich
				}
624 6c33fb4b Ermal
				
625 0d3f3e90 Ermal Luçi
			}
626
			$item4 = $item3[$counter];
627
			$tracker = $counter;
628
	?>
629 5a1eebc7 Scott Ullrich
          <tr>
630
            <td>
631 0cea9a23 Ermal Lu?i
              <input autocomplete="off" name="address<?php echo $tracker; ?>" type="text" class="formfldalias" id="address<?php echo $tracker; ?>" size="30" value="<?=htmlspecialchars($address);?>" />
632 5a1eebc7 Scott Ullrich
            </td>
633
            <td>
634
			        <select name="address_subnet<?php echo $tracker; ?>" class="formselect" id="address_subnet<?php echo $tracker; ?>">
635 6c33fb4b Ermal
				<option></option>
636 5a1eebc7 Scott Ullrich
			          <?php for ($i = 32; $i >= 1; $i--): ?>
637 c7de8be4 jim-p
			          <option value="<?=$i;?>" <?php if (($i == $address_subnet) || ($i == $pconfig['updatefreq'])) echo "selected"; ?>><?=$i;?></option>
638 5a1eebc7 Scott Ullrich
			          <?php endfor; ?>
639
			        </select>
640
			      </td>
641
            <td>
642 b5c78501 Seth Mos
              <input name="detail<?php echo $tracker; ?>" type="text" class="formfld unknown" id="detail<?php echo $tracker; ?>" size="50" value="<?=$item4;?>" />
643 5a1eebc7 Scott Ullrich
            </td>
644
            <td>
645 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>
646 b6f3005c Ermal Luçi
	      </td>
647 5a1eebc7 Scott Ullrich
          </tr>
648 0d3f3e90 Ermal Luçi
<?php
649
        	$counter++;
650 5a1eebc7 Scott Ullrich
651 0d3f3e90 Ermal Luçi
       		} // end foreach
652
	} // end if
653
?>
654 5a1eebc7 Scott Ullrich
        </tbody>
655
        <tfoot>
656
657
        </tfoot>
658
		  </table>
659 c7de8be4 jim-p
			<div id="addrowbutton"><a onclick="javascript:addRowTo('maintable', 'formfldalias'); typesel_change(); add_alias_control(this); return false;" href="#">
660 331a89ca Erik Fonnesbeck
        <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry"); ?>" /></a></div>
661 5a1eebc7 Scott Ullrich
		</td>
662
  </tr>
663
  <tr>
664
    <td width="22%" valign="top">&nbsp;</td>
665
    <td width="78%">
666 24148939 Carlos Eduardo Ramos
      <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
667
      <a href="firewall_aliases.php"><input id="cancelbutton" name="cancelbutton" type="button" class="formbtn" value="<?=gettext("Cancel"); ?>" /></a>
668 5a1eebc7 Scott Ullrich
    </td>
669
  </tr>
670
</table>
671 5b237745 Scott Ullrich
</form>
672 5a1eebc7 Scott Ullrich
673
<script type="text/javascript">
674
	field_counter_js = 3;
675
	rows = 1;
676
	totalrows = <?php echo $counter; ?>;
677
	loaded = <?php echo $counter; ?>;
678
	typesel_change();
679
	update_box_type();
680 0cea9a23 Ermal Lu?i
681
<?php
682
        $isfirst = 0;
683
        $aliases = "";
684
        $addrisfirst = 0;
685
        $aliasesaddr = "";
686
        if(isset($config['aliases']['alias']) && is_array($config['aliases']['alias']))
687
                foreach($config['aliases']['alias'] as $alias_name) {
688 5e34cdb2 Ermal Lu?i
			if ($pconfig['name'] <> "" && $pconfig['name'] == $alias_name['name'])
689
				continue;
690 0cea9a23 Ermal Lu?i
			if($addrisfirst == 1) $aliasesaddr .= ",";
691
			$aliasesaddr .= "'" . $alias_name['name'] . "'";
692
			$addrisfirst = 1;
693
                }
694
?>
695
696
        var addressarray=new Array(<?php echo $aliasesaddr; ?>);
697
698 6c33fb4b Ermal
function createAutoSuggest() {
699 0cea9a23 Ermal Lu?i
<?php  
700
	for ($jv = 0; $jv < $counter; $jv++)
701
		echo "objAlias[{$jv}] = new AutoSuggestControl(document.getElementById(\"address{$jv}\"), new StateSuggestions(addressarray));\n";
702
?>
703 6c33fb4b Ermal
}
704 0cea9a23 Ermal Lu?i
705 331a89ca Erik Fonnesbeck
setTimeout("createAutoSuggest();", 500);
706 0cea9a23 Ermal Lu?i
707 5b237745 Scott Ullrich
</script>
708 5a1eebc7 Scott Ullrich
709 5b237745 Scott Ullrich
<?php include("fend.inc"); ?>
710
</body>
711
</html>