Project

General

Profile

Download (28.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 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 = explode("\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 = explode("#", $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 or fully qualified domain name (FQDN). FQDN hostnames are periodically re-resolved and updated. If multiple IPs are returned by a DNS query, all are used.");
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/jquery.ipv4v6ify.js">
543
</script>
544
<script type="text/javascript" src="/javascript/row_helper.js">
545
</script>
546
<script type="text/javascript" src="/javascript/autosuggest.js">
547
</script>
548
<script type="text/javascript" src="/javascript/suggestions.js">
549
</script>
550

    
551
<input type='hidden' name='address_type' value='textbox' />
552
<input type='hidden' name='address_subnet_type' value='select' />
553

    
554
<script type="text/javascript">
555
	rowname[0] = "address";
556
	rowtype[0] = "textbox,ipv4v6";
557
	rowsize[0] = "30";
558

    
559
	rowname[1] = "address_subnet";
560
	rowtype[1] = "select,ipv4v6";
561
	rowsize[1] = "1";
562

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

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

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

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

    
673
       		} // end foreach
674
	} // end if
675
?>
676
        </tbody>
677
        <tfoot>
678

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

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

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

    
718
        var addressarray=new Array(<?php echo $aliasesaddr; ?>);
719

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

    
727
setTimeout("createAutoSuggest();", 500);
728

    
729
</script>
730

    
731
<?php include("fend.inc"); ?>
732
</body>
733
</html>
(55-55/240)