Project

General

Profile

Download (27.2 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("all", "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('sourceport'), $_POST['name'], $origname);
314
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
315
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('dstport'), $_POST['name'], $origname);
316
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('target'), $_POST['name'], $origname);
317
			// Alias in an alias
318
			update_alias_names_upon_change(array('aliases', 'alias'), array('address'), $_POST['name'], $origname);
319
		}
320

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

    
342
		mark_subsystem_dirty('aliases');
343

    
344
		// Sort list
345
		$a_aliases = msort($a_aliases, "name");
346

    
347
		write_config();
348

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

    
363
include("head.inc");
364

    
365
$jscriptstr = <<<EOD
366

    
367
<script type="text/javascript">
368

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

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

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

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

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

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

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

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

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

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

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

    
467
$jscriptstr .= <<<EOD
468

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

    
524
EOD;
525

    
526
?>
527

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

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

    
541
<input type='hidden' name='address_type' value='textbox' />
542
<input type='hidden' name='address_subnet_type' value='select' />
543

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

    
549
	rowname[1] = "address_subnet";
550
	rowtype[1] = "select";
551
	rowsize[1] = "1";
552

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

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

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

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

    
661
       		} // end foreach
662
	} // end if
663
?>
664
        </tbody>
665
        <tfoot>
666

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

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

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

    
706
        var addressarray=new Array(<?php echo $aliasesaddr; ?>);
707

    
708
function createAutoSuggest() {
709
<?php  
710
	for ($jv = 0; $jv < $counter; $jv++)
711
		echo "objAlias[{$jv}] = new AutoSuggestControl(document.getElementById(\"address{$jv}\"), new StateSuggestions(addressarray));\n";
712
?>
713
}
714

    
715
setTimeout("createAutoSuggest();", 500);
716

    
717
</script>
718

    
719
<?php include("fend.inc"); ?>
720
</body>
721
</html>
(52-52/225)