Project

General

Profile

Download (27 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/* $Id$ */
3
/*
4
	firewall_aliases_edit.php
5
	Copyright (C) 2004 Scott Ullrich
6
	Copyright (C) 2009 Ermal Lu?i
7
	Copyright (C) 2010 Jim Pingle
8
	All rights reserved.
9

    
10
	originially part of m0n0wall (http://m0n0.ch/wall)
11
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
12
	All rights reserved.
13

    
14
	Redistribution and use in source and binary forms, with or without
15
	modification, are permitted provided that the following conditions are met:
16

    
17
	1. Redistributions of source code must retain the above copyright notice,
18
	   this list of conditions and the following disclaimer.
19

    
20
	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

    
24
	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
/*
36
	pfSense_BUILDER_BINARIES:	/bin/rm	/bin/mkdir	/usr/bin/fetch
37
	pfSense_MODULE:	aliases
38
*/
39

    
40
##|+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

    
48
// Keywords not allowed in names
49
$reserved_keywords = array("pass", "out", "queue", "max", "min", "pptp", "pppoe", "L2TP", "OpenVPN", "IPsec");
50

    
51
require("guiconfig.inc");
52
require_once("functions.inc");
53
require_once("filter.inc");
54
require_once("shaper.inc");
55

    
56
$pgtitle = array(gettext("Firewall"),gettext("Aliases"),gettext("Edit"));
57

    
58
$reserved_ifs = get_configured_interface_list(false, true);
59
$reserved_keywords = array_merge($reserved_keywords, $reserved_ifs);
60

    
61
if (!is_array($config['aliases']['alias']))
62
	$config['aliases']['alias'] = array();
63
$a_aliases = &$config['aliases']['alias'];
64
	
65
if($_POST)
66
	$origname = $_POST['origname'];
67

    
68
// Debugging
69
if($debug)
70
	exec("rm -f {$g['tmp_path']}/alias_rename_log.txt");
71

    
72
function alias_same_type($name, $type) {
73
	global $config;
74
	
75
	foreach ($config['aliases']['alias'] as $alias) {
76
		if ($name == $alias['name']) {
77
			if (in_array($type, array("host", "network")) &&
78
				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
$id = $_GET['id'];
90
if (isset($_POST['id']))
91
	$id = $_POST['id'];
92

    
93
if (isset($id) && $a_aliases[$id]) {
94
	$original_alias_name = $a_aliases[$id]['name'];
95
	$pconfig['name'] = $a_aliases[$id]['name'];
96
	$pconfig['detail'] = $a_aliases[$id]['detail'];
97
	$pconfig['address'] = $a_aliases[$id]['address'];
98
	$pconfig['type'] = $a_aliases[$id]['type'];
99
	$pconfig['descr'] = html_entity_decode($a_aliases[$id]['descr']);
100

    
101
	/* interface list */
102
	$iflist = get_configured_interface_with_descr(false, true);
103
	foreach ($iflist as $if => $ifdesc)
104
		if($ifdesc == $pconfig['descr']) 
105
			$input_errors[] = sprintf(gettext("Sorry, an interface is already named %s."), $pconfig['descr']);
106

    
107
	if($a_aliases[$id]['type'] == "urltable") {
108
		$pconfig['address'] = $a_aliases[$id]['url'];
109
		$pconfig['updatefreq'] = $a_aliases[$id]['updatefreq'];
110
	}
111
	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
}
127

    
128
if ($_POST) {
129
	unset($input_errors);
130

    
131
	/* input validation */
132

    
133
	$reqdfields = explode(" ", "name");
134
	$reqdfieldsn = array(gettext("Name"));
135

    
136
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
137

    
138
	$x = is_validaliasname($_POST['name']);
139
	if (!isset($x)) {
140
		$input_errors[] = gettext("Reserved word used for alias name.");
141
	} else if ($_POST['type'] == "port" && (getservbyname($_POST['name'], "tcp") || getservbyname($_POST['name'], "udp"))) {
142
		$input_errors[] = gettext("Reserved word used for alias name.");
143
	} else {
144
		if (is_validaliasname($_POST['name']) == false)
145
			$input_errors[] = gettext("The alias name may only consist of the characters") . " a-z, A-Z, 0-9, _.";
146
	}
147
	/* check for name conflicts */
148
	if (empty($a_aliases[$id])) {
149
		foreach ($a_aliases as $alias) {
150
			if ($alias['name'] == $_POST['name']) {
151
				$input_errors[] = gettext("An alias with this name already exists.");
152
				break;
153
			}
154
		}
155
	}
156

    
157
	/* Check for reserved keyword names */
158
	foreach($reserved_keywords as $rk) 
159
		if($rk == $_POST['name'])
160
			$input_errors[] = sprintf(gettext("Cannot use a reserved keyword as alias name %s"), $rk);
161

    
162
	/* check for name interface description conflicts */
163
	foreach($config['interfaces'] as $interface) {
164
		if($interface['descr'] == $_POST['name']) {
165
			$input_errors[] = gettext("An interface description with this name already exists.");
166
			break;
167
		}
168
	}
169
	
170
	$alias = array();
171
	$address = array();
172
	$final_address_details = array();
173
	$alias['name'] = $_POST['name'];
174

    
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
				$input_errors[] = gettext("You must provide a valid URL.");
188
				$dont_update = true;
189
			} elseif (! process_alias_urltable($alias['name'], $alias['url'], 0, true)) {
190
				$input_errors[] = gettext("Unable to fetch usable data.");
191
				$dont_update = true;
192
			}
193
		}
194
	} elseif($_POST['type'] == "url") {
195
		$isfirst = 0;
196
		$address_count = 2;
197

    
198
		/* item is a url type */
199
		for($x=0; isset($_POST['address'. $x]); $x++) {
200
			if($_POST['address' . $x]) {
201
				/* fetch down and add in */
202
				$isfirst = 0;
203
				$temp_filename = tempnam("{$g['tmp_path']}/", "alias_import");
204
				unlink($temp_filename);
205
				$fda = fopen("{$g['tmp_path']}/tmpfetch","w");
206
				fwrite($fda, "/usr/bin/fetch -q -o \"{$temp_filename}/aliases\" \"" . $_POST['address' . $x] . "\"");
207
				fclose($fda);
208
				mwexec("/bin/mkdir -p {$temp_filename}");
209
				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
						// Stop at 3000 items, aliases larger than that tend to break both pf and the WebGUI.
219
						if ($address_count >= 3000)
220
							break;
221
						$tmp = trim($fc);
222
						if(stristr($fc, "#")) {
223
							$tmp_split = split("#", $tmp);
224
							$tmp = trim($tmp_split[0]);
225
						}
226
						$tmp = trim($tmp);
227
						if(!empty($tmp) && (is_ipaddr($tmp) || is_subnet($tmp))) {
228
							$address[] = $tmp;
229
							$isfirst = 1;
230
							$address_count++;
231
						}
232
					}
233
					if($isfirst == 0) {
234
						/* nothing was found */
235
						$input_errors[] = gettext("You must provide a valid URL. Could not fetch usable data.");
236
						$dont_update = true;
237
						break;
238
					}
239
					$alias['aliasurl'][] = $_POST['address' . $x];
240
					mwexec("/bin/rm -rf {$temp_filename}");
241
				} else {
242
					$input_errors[] = gettext("You must provide a valid URL.");
243
					$dont_update = true;
244
					break;
245
				}
246
			}
247
		}
248
	} else {
249
		/* item is a normal alias type */
250
		$wrongaliases = "";
251
		for($x=0; $x<4999; $x++) {
252
			if($_POST["address{$x}"] <> "") {
253
				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
					if (!is_port($_POST["address{$x}"]))
258
						$input_errors[] = $_POST["address{$x}"] . " " . gettext("is not a valid port or alias.");
259
				} else if ($_POST['type'] == "host" || $_POST['type'] == "network") {
260
					if (!is_ipaddr($_POST["address{$x}"])
261
					 && !is_hostname($_POST["address{$x}"])
262
					 && !is_iprange($_POST["address{$x}"]))
263
						$input_errors[] = sprintf(gettext('%1$s is not a valid %2$s alias.'), $_POST["address{$x}"], $_POST['type']);
264
				}
265
				if (is_iprange($_POST["address{$x}"])) {
266
					list($startip, $endip) = explode('-', $_POST["address{$x}"]);
267
					$rangesubnets = ip_range_to_subnet_array($startip, $endip);
268
					$address = array_merge($address, $rangesubnets);
269
				} else {
270
					$tmpaddress = $_POST["address{$x}"];
271
					if(is_ipaddr($_POST["address{$x}"]) && $_POST["address_subnet{$x}"] <> "")
272
						$tmpaddress .= "/" . $_POST["address_subnet{$x}"];
273
					$address[] = $tmpaddress;
274
				}
275
				if ($_POST["detail{$x}"] <> "")
276
					$final_address_details[] = $_POST["detail{$x}"];
277
				else
278
					$final_address_details[] = sprintf(gettext("Entry added %s"), date('r'));
279
			}
280
		}
281
		if ($wrongaliases <> "")
282
			$input_errors[] = sprintf(gettext('The alias(es): %s cannot be nested because they are not of the same type.'), $wrongaliases);
283
	}
284

    
285
	if (!$input_errors) {
286
		$alias['address'] = is_array($address) ? implode(" ", $address) : $address;
287
		$alias['descr'] = $_POST['descr'];
288
		$alias['type'] = $_POST['type'];
289
		$alias['detail'] = implode("||", $final_address_details);
290

    
291
		/*   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
			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
			// NAT Rules
301
			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
			// NAT 1:1 Rules
308
			//update_alias_names_upon_change(array('nat', 'onetoone'), array('external'), $_POST['name'], $origname);
309
			//update_alias_names_upon_change(array('nat', 'onetoone'), array('source', 'address'), $_POST['name'], $origname);
310
			update_alias_names_upon_change(array('nat', 'onetoone'), array('destination', 'address'), $_POST['name'], $origname);
311
			// NAT Outbound Rules
312
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('source', 'network'), $_POST['name'], $origname);
313
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
314
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('target'), $_POST['name'], $origname);
315
			// Alias in an alias
316
			update_alias_names_upon_change(array('aliases', 'alias'), array('address'), $_POST['name'], $origname);
317
		}
318

    
319
		if (isset($id) && $a_aliases[$id]) {
320
			if ($a_aliases[$id]['name'] <> $alias['name']) {
321
				foreach ($a_aliases as $aliasid => $aliasd) {
322
					if ($aliasd['address'] <> "") {
323
						$tmpdirty = false;
324
						$tmpaddr = explode(" ", $aliasd['address']);
325
						foreach ($tmpaddr as $tmpidx => $tmpalias) {
326
							if ($tmpalias == $a_aliases[$id]['name']) {
327
								$tmpaddr[$tmpidx] = $alias['name'];
328
								$tmpdirty = true;
329
							}
330
						}
331
						if ($tmpdirty == true)
332
							$a_aliases[$aliasid]['address'] = implode(" ", $tmpaddr);
333
					}
334
				}
335
			}
336
			$a_aliases[$id] = $alias;
337
		} else
338
			$a_aliases[] = $alias;
339

    
340
		mark_subsystem_dirty('aliases');
341

    
342
		// Sort list
343
		$a_aliases = msort($a_aliases, "name");
344

    
345
		write_config();
346

    
347
		header("Location: firewall_aliases.php");
348
		exit;		
349
	}
350
	//we received input errors, copy data to prevent retype
351
	else
352
	{
353
		$pconfig['name'] = $_POST['name'];
354
		$pconfig['descr'] = $_POST['descr'];
355
		$pconfig['address'] = implode(" ", $address);
356
		$pconfig['type'] = $_POST['type'];
357
		$pconfig['detail'] = implode("||", $final_address_details);
358
	}
359
}
360

    
361
include("head.inc");
362

    
363
$jscriptstr = <<<EOD
364

    
365
<script type="text/javascript">
366

    
367
var objAlias = new Array(4999);
368
function typesel_change() {
369
	switch (document.iform.type.selectedIndex) {
370
		case 0:	/* host */
371
			var cmd;
372

    
373
			newrows = totalrows;
374
			for(i=0; i<newrows; i++) {
375
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
376
				eval(comd);
377
				comd = 'document.iform.address_subnet' + i + '.value = "";';
378
				eval(comd);
379
			}
380
			break;
381
		case 1:	/* network */
382
			var cmd;
383

    
384
			newrows = totalrows;
385
			for(i=0; i<newrows; i++) {
386
				comd = 'document.iform.address_subnet' + i + '.disabled = 0;';
387
				eval(comd);
388
			}
389
			break;
390
		case 2:	/* port */
391
			var cmd;
392

    
393
			newrows = totalrows;
394
			for(i=0; i<newrows; i++) {
395
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
396
				eval(comd);
397
				comd = 'document.iform.address_subnet' + i + '.value = "32";';
398
				eval(comd);
399
			}
400
			break;
401
		case 3:	/* OpenVPN Users */
402
			var cmd;
403

    
404
			newrows = totalrows;
405
			for(i=0; i<newrows; i++) {
406
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
407
				eval(comd);
408
				comd = 'document.iform.address_subnet' + i + '.value = "";';
409
				eval(comd);
410
			}
411
			break;
412

    
413
		case 4:	/* url */
414
			var cmd;
415
			newrows = totalrows;
416
			for(i=0; i<newrows; i++) {
417
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
418
				eval(comd);
419
			}
420
			break;
421

    
422
		case 5:	/* urltable */
423
			var cmd;
424
			newrows = totalrows;
425
			for(i=0; i<newrows; i++) {
426
				comd = 'document.iform.address_subnet' + i + '.disabled = 0;';
427
				eval(comd);
428
			}
429
			break;
430
	}
431
}
432

    
433
function add_alias_control() {
434
	var name = "address" + (totalrows - 1);
435
	obj = document.getElementById(name);
436
	obj.setAttribute('class', 'formfldalias');
437
	obj.setAttribute('autocomplete', 'off');
438
	objAlias[totalrows - 1] = new AutoSuggestControl(obj, new StateSuggestions(addressarray));
439
}
440
EOD;
441

    
442
$network_str = gettext("Network");
443
$networks_str = gettext("Network(s)");
444
$cidr_str = gettext("CIDR");
445
$description_str = gettext("Description");
446
$hosts_str = gettext("Host(s)");
447
$ip_str = gettext("IP");
448
$ports_str = gettext("Port(s)");
449
$port_str = gettext("Port");
450
$url_str = gettext("URL");
451
$urltable_str = gettext("URL Table");
452
$update_freq_str = gettext("Update Freq.");
453

    
454
$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.");
455
$hosts_help = gettext("Enter as many hosts as you would like.  Hosts must be specified by their IP address.");
456
$ports_help = gettext("Enter as many ports as you wish.  Port ranges can be expressed by seperating with a colon.");
457
$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']);
458
$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']);
459

    
460
$openvpn_str = gettext("Username");
461
$openvpn_user_str = gettext("OpenVPN Users");
462
$openvpn_help = gettext("Enter as many usernames as you wish.");
463
$openvpn_freq = "";
464

    
465
$jscriptstr .= <<<EOD
466

    
467
function update_box_type() {
468
	var indexNum = document.forms[0].type.selectedIndex;
469
	var selected = document.forms[0].type.options[indexNum].text;
470
	if(selected == '{$networks_str}') {
471
		document.getElementById ("addressnetworkport").firstChild.data = "{$networks_str}";
472
		document.getElementById ("onecolumn").firstChild.data = "{$network_str}";
473
		document.getElementById ("twocolumn").firstChild.data = "{$cidr_str}";
474
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
475
		document.getElementById ("itemhelp").firstChild.data = "{$networks_help}";
476
		document.getElementById ("addrowbutton").style.display = 'block';
477
	} else if(selected == '{$hosts_str}') {
478
		document.getElementById ("addressnetworkport").firstChild.data = "{$hosts_str}";
479
		document.getElementById ("onecolumn").firstChild.data = "{$ip_str}";
480
		document.getElementById ("twocolumn").firstChild.data = "";
481
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
482
		document.getElementById ("itemhelp").firstChild.data = "{$hosts_help}";
483
		document.getElementById ("addrowbutton").style.display = 'block';
484
	} else if(selected == '{$ports_str}') {
485
		document.getElementById ("addressnetworkport").firstChild.data = "{$ports_str}";
486
		document.getElementById ("onecolumn").firstChild.data = "{$port_str}";
487
		document.getElementById ("twocolumn").firstChild.data = "";
488
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
489
		document.getElementById ("itemhelp").firstChild.data = "{$ports_help}";
490
		document.getElementById ("addrowbutton").style.display = 'block';
491
	} else if(selected == '{$url_str}') {
492
		document.getElementById ("addressnetworkport").firstChild.data = "{$url_str}";
493
		document.getElementById ("onecolumn").firstChild.data = "{$url_str}";
494
		document.getElementById ("twocolumn").firstChild.data = "";
495
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
496
		document.getElementById ("itemhelp").firstChild.data = "{$url_help}";
497
		document.getElementById ("addrowbutton").style.display = 'block';
498
	} else if(selected == '{$openvpn_user_str}') {
499
		document.getElementById ("addressnetworkport").firstChild.data = "{$openvpn_user_str}";
500
		document.getElementById ("onecolumn").firstChild.data = "{$openvpn_str}";
501
		document.getElementById ("twocolumn").firstChild.data = "{$openvpn_freq}";
502
		document.getElementById ("threecolumn").firstChild.data = "{$description_str}";
503
		document.getElementById ("itemhelp").firstChild.data = "{$openvpn_help}";
504
		document.getElementById ("addrowbutton").style.display = 'block';
505
	} else if(selected == '{$urltable_str}') {
506
		if ((typeof(totalrows) == "undefined") || (totalrows < 1)) {
507
			addRowTo('maintable', 'formfldalias');
508
			typesel_change();
509
			add_alias_control(this);
510
		}
511
		document.getElementById ("addressnetworkport").firstChild.data = "{$url_str}";
512
		document.getElementById ("onecolumn").firstChild.data = "{$url_str}";
513
		document.getElementById ("twocolumn").firstChild.data = "{$update_freq_str}";
514
		document.getElementById ("threecolumn").firstChild.data = "";
515
		document.getElementById ("threecolumn").style.display = 'none';
516
		document.getElementById ("itemhelp").firstChild.data = "{$urltable_help}";
517
		document.getElementById ("addrowbutton").style.display = 'none';
518
	}
519
}
520
</script>
521

    
522
EOD;
523

    
524
?>
525

    
526
<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
527
<?php
528
	include("fbegin.inc");
529
	echo $jscriptstr;
530
?>
531

    
532
<script type="text/javascript" src="/javascript/row_helper.js">
533
</script>
534
<script type="text/javascript" src="/javascript/autosuggest.js">
535
</script>
536
<script type="text/javascript" src="/javascript/suggestions.js">
537
</script>
538

    
539
<input type='hidden' name='address_type' value='textbox' />
540
<input type='hidden' name='address_subnet_type' value='select' />
541

    
542
<script type="text/javascript">
543
	rowname[0] = "address";
544
	rowtype[0] = "textbox";
545
	rowsize[0] = "30";
546

    
547
	rowname[1] = "address_subnet";
548
	rowtype[1] = "select";
549
	rowsize[1] = "1";
550

    
551
	rowname[2] = "detail";
552
	rowtype[2] = "textbox";
553
	rowsize[2] = "50";
554
</script>
555

    
556
<?php if ($input_errors) print_input_errors($input_errors); ?>
557
<div id="inputerrors"></div>
558

    
559
<form action="firewall_aliases_edit.php" method="post" name="iform" id="iform">
560
<table width="100%" border="0" cellpadding="6" cellspacing="0">
561
  <tr>
562
	<td colspan="2" valign="top" class="listtopic"><?=gettext("Alias Edit"); ?></td>
563
  </tr>
564
  <tr>
565
    <td valign="top" class="vncellreq"><?=gettext("Name"); ?></td>
566
    <td class="vtable">
567
      <input name="origname" type="hidden" id="origname" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['name']);?>" />
568
      <input name="name" type="text" id="name" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['name']);?>" />
569
      <?php if (isset($id) && $a_aliases[$id]): ?>
570
      <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
571
      <?php endif; ?>
572
      <br />
573
      <span class="vexpl">
574
        <?=gettext("The name of the alias may only consist of the characters \"a-z, A-Z and 0-9\"."); ?>
575
      </span>
576
    </td>
577
  </tr>
578
  <tr>
579
    <td width="22%" valign="top" class="vncell"><?=gettext("Description"); ?></td>
580
    <td width="78%" class="vtable">
581
      <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>" />
582
      <br />
583
      <span class="vexpl">
584
        <?=gettext("You may enter a description here for your reference (not parsed)."); ?>
585
      </span>
586
    </td>
587
  </tr>
588
  <tr>
589
    <td valign="top" class="vncellreq"><?=gettext("Type"); ?></td>
590
    <td class="vtable">
591
      <select name="type" class="formselect" id="type" onchange="update_box_type(); typesel_change();">
592
        <option value="host" <?php if ($pconfig['type'] == "host") echo "selected"; ?>><?=gettext("Host(s)"); ?></option>
593
        <option value="network" <?php if ($pconfig['type'] == "network") echo "selected"; ?>><?=gettext("Network(s)"); ?></option>
594
        <option value="port" <?php if ($pconfig['type'] == "port") echo "selected"; ?>><?=gettext("Port(s)"); ?></option>
595
<!--        <option value="openvpn" <?php if ($pconfig['type'] == "openvpn") echo "selected"; ?>><?=gettext("OpenVPN Users"); ?></option> -->
596
		<option value="url" <?php if ($pconfig['type'] == "url") echo "selected"; ?>><?=gettext("URL");?></option>
597
        <option value="urltable" <?php if ($pconfig['type'] == "urltable") echo "selected"; ?>><?=gettext("URL Table"); ?></option>
598
      </select>
599
    </td>
600
  </tr>
601
  <tr>
602
    <td width="22%" valign="top" class="vncellreq"><div id="addressnetworkport"><?=gettext("Host(s)"); ?></div></td>
603
    <td width="78%" class="vtable">
604
      <table id="maintable">
605
        <tbody>
606
          <tr>
607
            <td colspan="4">
608
      		    <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>
609
            </td>
610
          </tr>
611
          <tr>
612
            <td><div id="onecolumn"><?=gettext("Network"); ?></div></td>
613
            <td><div id="twocolumn">CIDR</div></td>
614
           <td><div id="threecolumn"><?=gettext("Description"); ?></div></td>
615
          </tr>
616

    
617
	<?php
618
	$counter = 0;
619
	$address = $pconfig['address'];
620
	if ($address <> "") {
621
		$item = explode(" ", $address);
622
		$item3 = explode("||", $pconfig['detail']);
623
		foreach($item as $ww) {
624
			$address = $item[$counter];
625
			$address_subnet = "";
626
			$item2 = explode("/", $address);
627
			foreach($item2 as $current) {
628
				if($item2[1] <> "") {
629
					$address = $item2[0];
630
					$address_subnet = $item2[1];
631
				}
632
				
633
			}
634
			$item4 = $item3[$counter];
635
			$tracker = $counter;
636
	?>
637
          <tr>
638
            <td>
639
              <input autocomplete="off" name="address<?php echo $tracker; ?>" type="text" class="formfldalias" id="address<?php echo $tracker; ?>" size="30" value="<?=htmlspecialchars($address);?>" />
640
            </td>
641
            <td>
642
			        <select name="address_subnet<?php echo $tracker; ?>" class="formselect" id="address_subnet<?php echo $tracker; ?>">
643
				<option></option>
644
			          <?php for ($i = 32; $i >= 1; $i--): ?>
645
			          <option value="<?=$i;?>" <?php if (($i == $address_subnet) || ($i == $pconfig['updatefreq'])) echo "selected"; ?>><?=$i;?></option>
646
			          <?php endfor; ?>
647
			        </select>
648
			      </td>
649
            <td>
650
              <input name="detail<?php echo $tracker; ?>" type="text" class="formfld unknown" id="detail<?php echo $tracker; ?>" size="50" value="<?=$item4;?>" />
651
            </td>
652
            <td>
653
    		<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>
654
	      </td>
655
          </tr>
656
<?php
657
        	$counter++;
658

    
659
       		} // end foreach
660
	} // end if
661
?>
662
        </tbody>
663
        <tfoot>
664

    
665
        </tfoot>
666
		  </table>
667
			<div id="addrowbutton"><a onclick="javascript:addRowTo('maintable', 'formfldalias'); typesel_change(); add_alias_control(this); return false;" href="#">
668
        <img border="0" src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" alt="" title="<?=gettext("add another entry"); ?>" /></a></div>
669
		</td>
670
  </tr>
671
  <tr>
672
    <td width="22%" valign="top">&nbsp;</td>
673
    <td width="78%">
674
      <input id="submit" name="submit" type="submit" class="formbtn" value="<?=gettext("Save"); ?>" />
675
      <a href="firewall_aliases.php"><input id="cancelbutton" name="cancelbutton" type="button" class="formbtn" value="<?=gettext("Cancel"); ?>" /></a>
676
    </td>
677
  </tr>
678
</table>
679
</form>
680

    
681
<script type="text/javascript">
682
	field_counter_js = 3;
683
	rows = 1;
684
	totalrows = <?php echo $counter; ?>;
685
	loaded = <?php echo $counter; ?>;
686
	typesel_change();
687
	update_box_type();
688

    
689
<?php
690
        $isfirst = 0;
691
        $aliases = "";
692
        $addrisfirst = 0;
693
        $aliasesaddr = "";
694
        if(isset($config['aliases']['alias']) && is_array($config['aliases']['alias']))
695
                foreach($config['aliases']['alias'] as $alias_name) {
696
			if ($pconfig['name'] <> "" && $pconfig['name'] == $alias_name['name'])
697
				continue;
698
			if($addrisfirst == 1) $aliasesaddr .= ",";
699
			$aliasesaddr .= "'" . $alias_name['name'] . "'";
700
			$addrisfirst = 1;
701
                }
702
?>
703

    
704
        var addressarray=new Array(<?php echo $aliasesaddr; ?>);
705

    
706
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

    
713
setTimeout("createAutoSuggest();", 500);
714

    
715
</script>
716

    
717
<?php include("fend.inc"); ?>
718
</body>
719
</html>
(51-51/224)