Project

General

Profile

Download (27.7 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 must be less than 32 characters long and 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
	// Allow extending of the firewall edit page and include custom input validation 
286
	pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/input_validation");
287

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

    
294
		/*   Check to see if alias name needs to be
295
		 *   renamed on referenced rules and such
296
		 */
297
		if ($_POST['name'] <> $_POST['origname']) {
298
			// Firewall rules
299
			update_alias_names_upon_change(array('filter', 'rule'), array('source', 'address'), $_POST['name'], $origname);
300
			update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
301
			update_alias_names_upon_change(array('filter', 'rule'), array('source', 'port'), $_POST['name'], $origname);
302
			update_alias_names_upon_change(array('filter', 'rule'), array('destination', 'port'), $_POST['name'], $origname);
303
			// NAT Rules
304
			update_alias_names_upon_change(array('nat', 'rule'), array('source', 'address'), $_POST['name'], $origname);
305
			update_alias_names_upon_change(array('nat', 'rule'), array('source', 'port'), $_POST['name'], $origname);
306
			update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
307
			update_alias_names_upon_change(array('nat', 'rule'), array('destination', 'port'), $_POST['name'], $origname);
308
			update_alias_names_upon_change(array('nat', 'rule'), array('target'), $_POST['name'], $origname);
309
			update_alias_names_upon_change(array('nat', 'rule'), array('local-port'), $_POST['name'], $origname);
310
			// NAT 1:1 Rules
311
			//update_alias_names_upon_change(array('nat', 'onetoone'), array('external'), $_POST['name'], $origname);
312
			//update_alias_names_upon_change(array('nat', 'onetoone'), array('source', 'address'), $_POST['name'], $origname);
313
			update_alias_names_upon_change(array('nat', 'onetoone'), array('destination', 'address'), $_POST['name'], $origname);
314
			// NAT Outbound Rules
315
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('source', 'network'), $_POST['name'], $origname);
316
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('sourceport'), $_POST['name'], $origname);
317
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('destination', 'address'), $_POST['name'], $origname);
318
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('dstport'), $_POST['name'], $origname);
319
			update_alias_names_upon_change(array('nat', 'advancedoutbound', 'rule'), array('target'), $_POST['name'], $origname);
320
			// Alias in an alias
321
			update_alias_names_upon_change(array('aliases', 'alias'), array('address'), $_POST['name'], $origname);
322
		}
323

    
324
		pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/pre_write_config");
325

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

    
347
		mark_subsystem_dirty('aliases');
348

    
349
		// Sort list
350
		$a_aliases = msort($a_aliases, "name");
351

    
352
		write_config();
353

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

    
368
include("head.inc");
369

    
370
$jscriptstr = <<<EOD
371

    
372
<script type="text/javascript">
373

    
374
var objAlias = new Array(4999);
375
function typesel_change() {
376
	switch (document.iform.type.selectedIndex) {
377
		case 0:	/* host */
378
			var cmd;
379

    
380
			newrows = totalrows;
381
			for(i=0; i<newrows; i++) {
382
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
383
				eval(comd);
384
				comd = 'document.iform.address_subnet' + i + '.value = "";';
385
				eval(comd);
386
			}
387
			break;
388
		case 1:	/* network */
389
			var cmd;
390

    
391
			newrows = totalrows;
392
			for(i=0; i<newrows; i++) {
393
				comd = 'document.iform.address_subnet' + i + '.disabled = 0;';
394
				eval(comd);
395
			}
396
			break;
397
		case 2:	/* port */
398
			var cmd;
399

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

    
411
			newrows = totalrows;
412
			for(i=0; i<newrows; i++) {
413
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
414
				eval(comd);
415
				comd = 'document.iform.address_subnet' + i + '.value = "";';
416
				eval(comd);
417
			}
418
			break;
419

    
420
		case 4:	/* url */
421
			var cmd;
422
			newrows = totalrows;
423
			for(i=0; i<newrows; i++) {
424
				comd = 'document.iform.address_subnet' + i + '.disabled = 1;';
425
				eval(comd);
426
			}
427
			break;
428

    
429
		case 5:	/* urltable */
430
			var cmd;
431
			newrows = totalrows;
432
			for(i=0; i<newrows; i++) {
433
				comd = 'document.iform.address_subnet' + i + '.disabled = 0;';
434
				eval(comd);
435
			}
436
			break;
437
	}
438
}
439

    
440
function add_alias_control() {
441
	var name = "address" + (totalrows - 1);
442
	obj = document.getElementById(name);
443
	obj.setAttribute('class', 'formfldalias');
444
	obj.setAttribute('autocomplete', 'off');
445
	objAlias[totalrows - 1] = new AutoSuggestControl(obj, new StateSuggestions(addressarray));
446
}
447
EOD;
448

    
449
$network_str = gettext("Network");
450
$networks_str = gettext("Network(s)");
451
$cidr_str = gettext("CIDR");
452
$description_str = gettext("Description");
453
$hosts_str = gettext("Host(s)");
454
$ip_str = gettext("IP");
455
$ports_str = gettext("Port(s)");
456
$port_str = gettext("Port");
457
$url_str = gettext("URL");
458
$urltable_str = gettext("URL Table");
459
$update_freq_str = gettext("Update Freq.");
460

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

    
467
$openvpn_str = gettext("Username");
468
$openvpn_user_str = gettext("OpenVPN Users");
469
$openvpn_help = gettext("Enter as many usernames as you wish.");
470
$openvpn_freq = "";
471

    
472
$jscriptstr .= <<<EOD
473

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

    
529
EOD;
530

    
531
?>
532

    
533
<body link="#0000CC" vlink="#0000CC" alink="#0000CC" onload="<?= $jsevents["body"]["onload"] ?>">
534
<?php
535
	include("fbegin.inc");
536
	echo $jscriptstr;
537
?>
538

    
539
<script type="text/javascript" src="/javascript/row_helper.js">
540
</script>
541
<script type="text/javascript" src="/javascript/autosuggest.js">
542
</script>
543
<script type="text/javascript" src="/javascript/suggestions.js">
544
</script>
545

    
546
<input type='hidden' name='address_type' value='textbox' />
547
<input type='hidden' name='address_subnet_type' value='select' />
548

    
549
<script type="text/javascript">
550
	rowname[0] = "address";
551
	rowtype[0] = "textbox";
552
	rowsize[0] = "30";
553

    
554
	rowname[1] = "address_subnet";
555
	rowtype[1] = "select";
556
	rowsize[1] = "1";
557

    
558
	rowname[2] = "detail";
559
	rowtype[2] = "textbox";
560
	rowsize[2] = "50";
561
</script>
562

    
563
<?php pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/pre_input_errors"); ?>
564
<?php if ($input_errors) print_input_errors($input_errors); ?>
565
<div id="inputerrors"></div>
566

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

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

    
668
       		} // end foreach
669
	} // end if
670
?>
671
        </tbody>
672
        <tfoot>
673

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

    
690
<script type="text/javascript">
691
	field_counter_js = 3;
692
	rows = 1;
693
	totalrows = <?php echo $counter; ?>;
694
	loaded = <?php echo $counter; ?>;
695
	typesel_change();
696
	update_box_type();
697

    
698
<?php
699
        $isfirst = 0;
700
        $aliases = "";
701
        $addrisfirst = 0;
702
        $aliasesaddr = "";
703
        if(isset($config['aliases']['alias']) && is_array($config['aliases']['alias']))
704
                foreach($config['aliases']['alias'] as $alias_name) {
705
			if ($pconfig['name'] <> "" && $pconfig['name'] == $alias_name['name'])
706
				continue;
707
			if($addrisfirst == 1) $aliasesaddr .= ",";
708
			$aliasesaddr .= "'" . $alias_name['name'] . "'";
709
			$addrisfirst = 1;
710
                }
711
?>
712

    
713
        var addressarray=new Array(<?php echo $aliasesaddr; ?>);
714

    
715
function createAutoSuggest() {
716
<?php  
717
	for ($jv = 0; $jv < $counter; $jv++)
718
		echo "objAlias[{$jv}] = new AutoSuggestControl(document.getElementById(\"address{$jv}\"), new StateSuggestions(addressarray));\n";
719
?>
720
}
721

    
722
setTimeout("createAutoSuggest();", 500);
723

    
724
</script>
725

    
726
<?php include("fend.inc"); ?>
727
</body>
728
</html>
(54-54/228)