Project

General

Profile

Download (25.3 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
$pgtitle = array("Firewall","Aliases","Edit");
48

    
49
// Keywords not allowed in names
50
$reserved_keywords = array("pass", "out", "queue", "max", "min", "pptp", "pppoe", "l2tp", "openvpn");
51

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

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

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

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

    
71
function alias_same_type($name, $type) {
72
	global $config;
73
	
74
	foreach ($config['aliases']['alias'] as $alias) {
75
		if ($name == $alias['name']) {
76
			if (in_array($type, array("host", "network")) &&
77
				in_array($alias['type'], array("host", "network")))
78
				return true;
79
			if ($type  == $alias['type'])
80
				return true;
81
			else
82
				return false;
83
		}
84
	}
85
	return true;
86
}
87

    
88
$id = $_GET['id'];
89
if (isset($_POST['id']))
90
	$id = $_POST['id'];
91

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

    
100
	/* optional if list */
101
	$iflist = get_configured_interface_with_descr(true, true);
102
	foreach ($iflist as $if => $ifdesc)
103
		if($ifdesc == $pconfig['descr']) 
104
			$input_errors[] = "Sorry, an interface is already named {$pconfig['descr']}.";
105

    
106
	if($a_aliases[$id]['type'] == "urltable") {
107
		$pconfig['address'] = $a_aliases[$id]['url'];
108
		$pconfig['updatefreq'] = $a_aliases[$id]['updatefreq'];
109
	}
110
	if($a_aliases[$id]['aliasurl'] <> "") {
111
		$pconfig['type'] = "url";
112
		if(is_array($a_aliases[$id]['aliasurl'])) {
113
			$isfirst = 0;
114
			$pconfig['address'] = "";
115
			foreach($a_aliases[$id]['aliasurl'] as $aa) {
116
				if($isfirst == 1)
117
					$pconfig['address'] .= " ";
118
				$isfirst = 1;
119
				$pconfig['address'] .= $aa;
120
			}
121
		} else {
122
			$pconfig['address'] = $a_aliases[$id]['aliasurl'];
123
		}
124
	}
125
}
126

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

    
130
	/* input validation */
131

    
132
	$reqdfields = explode(" ", "name");
133
	$reqdfieldsn = explode(",", "Name");
134

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

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

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

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

    
174
	if ($_POST['type'] == "urltable") {
175
		$address = "";
176
		$isfirst = 0;
177

    
178
		/* item is a url type */
179
		if ($_POST['address0']) {
180
			/* fetch down and add in */
181
			$isfirst = 0;
182
			$address = "";
183
			$alias['url'] = $_POST['address0'];
184
			$alias['updatefreq'] = $_POST['address_subnet0'] ? $_POST['address_subnet0'] : 7;
185
			if (!is_URL($alias['url']) || empty($alias['url'])) {
186
				$input_errors[] = "You must provide a valid URL.";
187
				$dont_update = true;
188
			} elseif (! process_alias_urltable($alias['name'], $alias['url'], 0, true)) {
189
				$input_errors[] = "Unable to fetch usable data.";
190
				$dont_update = true;
191
			}
192
		}
193
	} elseif($_POST['type'] == "url") {
194
		$isfirst = 0;
195
		$address_count = 2;
196

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

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

    
290
		/*   Check to see if alias name needs to be
291
		 *   renamed on referenced rules and such
292
		 */
293
		if ($_POST['name'] <> $_POST['origname']) {
294
			// Firewall rules
295
			update_alias_names_upon_change('filter', 'rule', 'source', 'address', $_POST['name'], $origname);
296
			update_alias_names_upon_change('filter', 'rule', 'destination', 'address', $_POST['name'], $origname);
297
			// NAT Rules
298
			update_alias_names_upon_change('nat', 'rule', 'source', 'address', $_POST['name'], $origname);
299
			update_alias_names_upon_change('nat', 'rule', 'source', 'port', $_POST['name'], $origname);
300
			update_alias_names_upon_change('nat', 'rule', 'destination', 'address', $_POST['name'], $origname);
301
			update_alias_names_upon_change('nat', 'rule', 'destination', 'port', $_POST['name'], $origname);
302
			update_alias_names_upon_change('nat', 'rule', 'target', '', $_POST['name'], $origname);
303
			update_alias_names_upon_change('nat', 'rule', 'local-port', ''	, $_POST['name'], $origname);
304
			// Alias in an alias
305
			update_alias_names_upon_change('aliases', 'alias', 'address', ''	, $_POST['name'], $origname);
306
		}
307

    
308
		if (isset($id) && $a_aliases[$id]) {
309
			if ($a_aliases[$id]['name'] <> $alias['name']) {
310
				foreach ($a_aliases as $aliasid => $aliasd) {
311
					if ($aliasd['address'] <> "") {
312
						$tmpdirty = false;
313
						$tmpaddr = explode(" ", $aliasd['address']);
314
						foreach ($tmpaddr as $tmpidx => $tmpalias) {
315
							if ($tmpalias == $a_aliases[$id]['name']) {
316
								$tmpaddr[$tmpidx] = $alias['name'];
317
								$tmpdirty = true;
318
							}
319
						}
320
						if ($tmpdirty == true)
321
							$a_aliases[$aliasid]['address'] = implode(" ", $tmpaddr);
322
					}
323
				}
324
			}
325
			$a_aliases[$id] = $alias;
326
		} else
327
			$a_aliases[] = $alias;
328

    
329
		mark_subsystem_dirty('aliases');
330

    
331
		// Sort list
332
		$a_aliases = msort($a_aliases, "name");
333

    
334
		write_config();
335
		filter_configure();
336

    
337
		header("Location: firewall_aliases.php");
338
		exit;		
339
	}
340
	//we received input errors, copy data to prevent retype
341
	else
342
	{
343
		$pconfig['name'] = $_POST['name'];
344
		$pconfig['descr'] = mb_convert_encoding($_POST['descr'],"HTML-ENTITIES","auto");
345
		$pconfig['address'] = implode(" ", $address);
346
		$pconfig['type'] = $_POST['type'];
347
		$pconfig['detail'] = implode("||", $final_address_details);
348
	}
349
}
350

    
351
include("head.inc");
352

    
353
$jscriptstr = <<<EOD
354

    
355
<script type="text/javascript">
356

    
357
var objAlias = new Array(4999);
358
function typesel_change() {
359
	switch (document.iform.type.selectedIndex) {
360
		case 0:	/* host */
361
			var cmd;
362

    
363
			newrows = totalrows;
364
			for(i=0; i<newrows; i++) {
365
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
366
				eval(comd);
367
				comd = 'document.iform.address_subnet' + i + '.value = "";';
368
				eval(comd);
369
			}
370
			break;
371
		case 1:	/* network */
372
			var cmd;
373

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

    
383
			newrows = totalrows;
384
			for(i=0; i<newrows; i++) {
385
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
386
				eval(comd);
387
				comd = 'document.iform.address_subnet' + i + '.value = "32";';
388
				eval(comd);
389
			}
390
			break;
391
		case 3:	/* OpenVPN Users */
392
			var cmd;
393

    
394
			newrows = totalrows;
395
			for(i=0; i<newrows; i++) {
396
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
397
				eval(comd);
398
				comd = 'document.iform.address_subnet' + i + '.value = "";';
399
				eval(comd);
400
			}
401
			break;
402

    
403
		case 4:	/* url */
404
			var cmd;
405
			newrows = totalrows;
406
			for(i=0; i<newrows; i++) {
407
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
408
				eval(comd);
409
			}
410
			break;
411

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

    
423
function add_alias_control() {
424
	var name = "address" + (totalrows - 1);
425
	obj = document.getElementById(name);
426
	obj.setAttribute('class', 'formfldalias');
427
	obj.setAttribute('autocomplete', 'off');
428
	objAlias[totalrows - 1] = new AutoSuggestControl(obj, new StateSuggestions(addressarray));
429
}
430
EOD;
431

    
432
$network_str = gettext("Network");
433
$networks_str = gettext("Network(s)");
434
$cidr_str = gettext("CIDR");
435
$description_str = gettext("Description");
436
$hosts_str = gettext("Host(s)");
437
$ip_str = gettext("IP");
438
$ports_str = gettext("Port(s)");
439
$port_str = gettext("Port");
440
$url_str = gettext("URL");
441
$urltable_str = gettext("URL Table");
442
$update_freq_str = gettext("Update Freq.");
443

    
444
$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.");
445
$hosts_help = gettext("Enter as many hosts as you would like.  Hosts must be specified by their IP address.");
446
$ports_help = gettext("Enter as many ports as you wish.  Port ranges can be expressed by seperating with a colon.");
447
$url_help = gettext("Enter as many URLs as you wish. After saving {$g['product_name']} will download the URL and import the items into the alias. Use only with small sets of IP addresses (less than 3000).");
448
$urltable_help = gettext("Enter a single URL containing a large number of IPs and/or Subnets. After saving {$g['product_name']} 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.");
449

    
450
$openvpn_str = gettext("Username");
451
$openvpn_user_str = gettext("OpenVPN Users");
452
$openvpn_help = gettext("Enter as many usernames as you wish.");
453
$openvpn_freq = gettext("");
454

    
455
$jscriptstr .= <<<EOD
456

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

    
512
EOD;
513

    
514
?>
515

    
516
<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
517
<?php
518
	include("fbegin.inc");
519
	echo $jscriptstr;
520
?>
521

    
522
<script type="text/javascript" src="/javascript/row_helper.js">
523
</script>
524
<script type="text/javascript" src="/javascript/autosuggest.js">
525
</script>
526
<script type="text/javascript" src="/javascript/suggestions.js">
527
</script>
528

    
529
<input type='hidden' name='address_type' value='textbox' />
530
<input type='hidden' name='address_subnet_type' value='select' />
531

    
532
<script type="text/javascript">
533
	rowname[0] = "address";
534
	rowtype[0] = "textbox";
535
	rowsize[0] = "30";
536

    
537
	rowname[1] = "address_subnet";
538
	rowtype[1] = "select";
539
	rowsize[1] = "1";
540

    
541
	rowname[2] = "detail";
542
	rowtype[2] = "textbox";
543
	rowsize[2] = "50";
544
</script>
545

    
546
<?php if ($input_errors) print_input_errors($input_errors); ?>
547
<div id="inputerrors"></div>
548

    
549
<form action="firewall_aliases_edit.php" method="post" name="iform" id="iform">
550
<table width="100%" border="0" cellpadding="6" cellspacing="0">
551
  <tr>
552
	<td colspan="2" valign="top" class="listtopic">Alias Edit</td>
553
  </tr>
554
  <tr>
555
    <td valign="top" class="vncellreq">Name</td>
556
    <td class="vtable">
557
      <input name="origname" type="hidden" id="origname" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['name']);?>" />
558
      <input name="name" type="text" id="name" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['name']);?>" />
559
      <?php if (isset($id) && $a_aliases[$id]): ?>
560
      <input name="id" type="hidden" value="<?=$id;?>" />
561
      <?php endif; ?>
562
      <br />
563
      <span class="vexpl">
564
        The name of the alias may only consist of the characters a-z, A-Z and 0-9.
565
      </span>
566
    </td>
567
  </tr>
568
  <tr>
569
    <td width="22%" valign="top" class="vncell">Description</td>
570
    <td width="78%" class="vtable">
571
      <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=$pconfig['descr'];?>" />
572
      <br />
573
      <span class="vexpl">
574
        You may enter a description here for your reference (not parsed).
575
      </span>
576
    </td>
577
  </tr>
578
  <tr>
579
    <td valign="top" class="vncellreq">Type</td>
580
    <td class="vtable">
581
      <select name="type" class="formselect" id="type" onchange="update_box_type(); typesel_change();">
582
        <option value="host" <?php if ($pconfig['type'] == "host") echo "selected"; ?>>Host(s)</option>
583
        <option value="network" <?php if ($pconfig['type'] == "network") echo "selected"; ?>>Network(s)</option>
584
        <option value="port" <?php if ($pconfig['type'] == "port") echo "selected"; ?>>Port(s)</option>
585
        <option value="openvpn" <?php if ($pconfig['type'] == "openvpn") echo "selected"; ?>>OpenVPN Users</option>
586
        <option value="url" <?php if ($pconfig['type'] == "url") echo "selected"; ?>>URL</option>
587
        <option value="urltable" <?php if ($pconfig['type'] == "urltable") echo "selected"; ?>>URL Table</option>
588
      </select>
589
    </td>
590
  </tr>
591
  <tr>
592
    <td width="22%" valign="top" class="vncellreq"><div id="addressnetworkport">Host(s)</div></td>
593
    <td width="78%" class="vtable">
594
      <table id="maintable">
595
        <tbody>
596
          <tr>
597
            <td colspan="4">
598
      		    <div style="padding:5px; margin-top: 16px; margin-bottom: 16px; border:1px dashed #000066; background-color: #ffffff; color: #000000; font-size: 8pt;" id="itemhelp">Item information</div>
599
            </td>
600
          </tr>
601
          <tr>
602
            <td><div id="onecolumn">Network</div></td>
603
            <td><div id="twocolumn">CIDR</div></td>
604
           <td><div id="threecolumn">Description</div></td>
605
          </tr>
606

    
607
	<?php
608
	$counter = 0;
609
	$address = $pconfig['address'];
610
	if ($address <> "") {
611
		$item = explode(" ", $address);
612
		$item3 = explode("||", $pconfig['detail']);
613
		foreach($item as $ww) {
614
			$address = $item[$counter];
615
			$address_subnet = "";
616
			$item2 = explode("/", $address);
617
			foreach($item2 as $current) {
618
				if($item2[1] <> "") {
619
					$address = $item2[0];
620
					$address_subnet = $item2[1];
621
				}
622
				
623
			}
624
			$item4 = $item3[$counter];
625
			$tracker = $counter;
626
	?>
627
          <tr>
628
            <td>
629
              <input autocomplete="off" name="address<?php echo $tracker; ?>" type="text" class="formfldalias" id="address<?php echo $tracker; ?>" size="30" value="<?=htmlspecialchars($address);?>" />
630
            </td>
631
            <td>
632
			        <select name="address_subnet<?php echo $tracker; ?>" class="formselect" id="address_subnet<?php echo $tracker; ?>">
633
				<option></option>
634
			          <?php for ($i = 32; $i >= 1; $i--): ?>
635
			          <option value="<?=$i;?>" <?php if (($i == $address_subnet) || ($i == $pconfig['updatefreq'])) echo "selected"; ?>><?=$i;?></option>
636
			          <?php endfor; ?>
637
			        </select>
638
			      </td>
639
            <td>
640
              <input name="detail<?php echo $tracker; ?>" type="text" class="formfld unknown" id="detail<?php echo $tracker; ?>" size="50" value="<?=$item4;?>" />
641
            </td>
642
            <td>
643
    		<input type="image" src="/themes/<?echo $g['theme'];?>/images/icons/icon_x.gif" onclick="removeRow(this); return false;" value="Delete" />
644
	      </td>
645
          </tr>
646
<?php
647
        	$counter++;
648

    
649
       		} // end foreach
650
	} // end if
651
?>
652
        </tbody>
653
        <tfoot>
654

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

    
672
<script type="text/javascript">
673
	field_counter_js = 3;
674
	rows = 1;
675
	totalrows = <?php echo $counter; ?>;
676
	loaded = <?php echo $counter; ?>;
677
	typesel_change();
678
	update_box_type();
679

    
680
<?php
681
        $isfirst = 0;
682
        $aliases = "";
683
        $addrisfirst = 0;
684
        $aliasesaddr = "";
685
        if(isset($config['aliases']['alias']) && is_array($config['aliases']['alias']))
686
                foreach($config['aliases']['alias'] as $alias_name) {
687
			if ($pconfig['name'] <> "" && $pconfig['name'] == $alias_name['name'])
688
				continue;
689
			if($addrisfirst == 1) $aliasesaddr .= ",";
690
			$aliasesaddr .= "'" . $alias_name['name'] . "'";
691
			$addrisfirst = 1;
692
                }
693
?>
694

    
695
        var addressarray=new Array(<?php echo $aliasesaddr; ?>);
696

    
697
function createAutoSuggest() {
698
<?php  
699
	for ($jv = 0; $jv < $counter; $jv++)
700
		echo "objAlias[{$jv}] = new AutoSuggestControl(document.getElementById(\"address{$jv}\"), new StateSuggestions(addressarray));\n";
701
?>
702
}
703

    
704
setTimeOut("createAutoSuggest();", 500);
705

    
706
</script>
707

    
708
<?php include("fend.inc"); ?>
709
</body>
710
</html>
(49-49/222)