Project

General

Profile

Download (28 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
						// But alias type network can include alias type urltable. Feature#1603.
256
						if (!($_POST['type'] == 'network' &&
257
						      alias_get_type($_POST["address{$x}"]) == 'urltable'))
258
							$wrongaliases .= " " . $_POST["address{$x}"];
259
				} else if ($_POST['type'] == "port") {
260
					if (!is_port($_POST["address{$x}"]))
261
						$input_errors[] = $_POST["address{$x}"] . " " . gettext("is not a valid port or alias.");
262
				} else if ($_POST['type'] == "host" || $_POST['type'] == "network") {
263
					if (!is_ipaddr($_POST["address{$x}"])
264
					 && !is_hostname($_POST["address{$x}"])
265
					 && !is_iprange($_POST["address{$x}"]))
266
						$input_errors[] = sprintf(gettext('%1$s is not a valid %2$s alias.'), $_POST["address{$x}"], $_POST['type']);
267
				}
268
				if (is_iprange($_POST["address{$x}"])) {
269
					list($startip, $endip) = explode('-', $_POST["address{$x}"]);
270
					$rangesubnets = ip_range_to_subnet_array($startip, $endip);
271
					$address = array_merge($address, $rangesubnets);
272
				} else {
273
					$tmpaddress = $_POST["address{$x}"];
274
					if(is_ipaddr($_POST["address{$x}"]) && $_POST["address_subnet{$x}"] <> "")
275
						$tmpaddress .= "/" . $_POST["address_subnet{$x}"];
276
					$address[] = $tmpaddress;
277
				}
278
				if ($_POST["detail{$x}"] <> "")
279
					$final_address_details[] = $_POST["detail{$x}"];
280
				else
281
					$final_address_details[] = sprintf(gettext("Entry added %s"), date('r'));
282
			}
283
		}
284
		if ($wrongaliases <> "")
285
			$input_errors[] = sprintf(gettext('The alias(es): %s cannot be nested because they are not of the same type.'), $wrongaliases);
286
	}
287

    
288
	// Allow extending of the firewall edit page and include custom input validation 
289
	pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/input_validation");
290

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

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

    
327
		pfSense_handle_custom_code("/usr/local/pkg/firewall_aliases_edit/pre_write_config");
328

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

    
350
		mark_subsystem_dirty('aliases');
351

    
352
		// Sort list
353
		$a_aliases = msort($a_aliases, "name");
354

    
355
		write_config();
356

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

    
371
include("head.inc");
372

    
373
$jscriptstr = <<<EOD
374

    
375
<script type="text/javascript">
376

    
377
var objAlias = new Array(4999);
378
function typesel_change() {
379
	switch (document.iform.type.selectedIndex) {
380
		case 0:	/* host */
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 = "";';
388
				eval(comd);
389
			}
390
			break;
391
		case 1:	/* network */
392
			var cmd;
393

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

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

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

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

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

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

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

    
464
$networks_help = gettext("Networks are specified in CIDR format.  Select the CIDR mask that pertains to each entry. /32 specifies a single IPv4 host, /128 specifies a single IPv6 host, /24 specifies 255.255.255.0, /64 specifies a normal IPv6 network, etc. Hostnames (FQDNs) may also be specified, using a /32 mask for IPv4 or /128 for IPv6. 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.");
465
$hosts_help = gettext("Enter as many hosts as you would like.  Hosts must be specified by their IP address.");
466
$ports_help = gettext("Enter as many ports as you wish.  Port ranges can be expressed by seperating with a colon.");
467
$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']);
468
$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']);
469

    
470
$openvpn_str = gettext("Username");
471
$openvpn_user_str = gettext("OpenVPN Users");
472
$openvpn_help = gettext("Enter as many usernames as you wish.");
473
$openvpn_freq = "";
474

    
475
$jscriptstr .= <<<EOD
476

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

    
532
EOD;
533

    
534
?>
535

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

    
542
<script type="text/javascript" src="/javascript/row_helper.js">
543
</script>
544
<script type="text/javascript" src="/javascript/autosuggest.js">
545
</script>
546
<script type="text/javascript" src="/javascript/suggestions.js">
547
</script>
548

    
549
<input type='hidden' name='address_type' value='textbox' />
550
<input type='hidden' name='address_subnet_type' value='select' />
551

    
552
<script type="text/javascript">
553
	rowname[0] = "address";
554
	rowtype[0] = "textbox";
555
	rowsize[0] = "30";
556

    
557
	rowname[1] = "address_subnet";
558
	rowtype[1] = "select";
559
	rowsize[1] = "1";
560

    
561
	rowname[2] = "detail";
562
	rowtype[2] = "textbox";
563
	rowsize[2] = "50";
564
</script>
565

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

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

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

    
671
       		} // end foreach
672
	} // end if
673
?>
674
        </tbody>
675
        <tfoot>
676

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

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

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

    
716
        var addressarray=new Array(<?php echo $aliasesaddr; ?>);
717

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

    
725
setTimeout("createAutoSuggest();", 500);
726

    
727
</script>
728

    
729
<?php include("fend.inc"); ?>
730
</body>
731
</html>
(54-54/237)