Project

General

Profile

Download (40.4 KB) Statistics
| Branch: | Tag: | Revision:
1 d799787e Matthew Grooms
<?php 
2
/*
3
	vpn_openvpn_server.php
4
5
	Copyright (C) 2008 Shrew Soft Inc.
6
	All rights reserved. 
7
8
	Redistribution and use in source and binary forms, with or without
9
	modification, are permitted provided that the following conditions are met:
10
	
11
	1. Redistributions of source code must retain the above copyright notice,
12
	   this list of conditions and the following disclaimer.
13
	
14
	2. Redistributions in binary form must reproduce the above copyright
15
	   notice, this list of conditions and the following disclaimer in the
16
	   documentation and/or other materials provided with the distribution.
17
	
18
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
19
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
20
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
22
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
	POSSIBILITY OF SUCH DAMAGE.
28
*/
29
30
##|+PRIV
31
##|*IDENT=page-openvpn-server
32
##|*NAME=OpenVPN: Server page
33
##|*DESCR=Allow access to the 'OpenVPN: Server' page.
34
##|*MATCH=vpn_openvpn_server.php*
35
##|-PRIV
36
37
38
require("guiconfig.inc");
39
40
$pgtitle = array("OpenVPN", "Server");
41
42
if (!is_array($config['openvpn']['openvpn-server']))
43
	$config['openvpn']['openvpn-server'] = array();
44
45
$a_server = &$config['openvpn']['openvpn-server'];
46
47
$id = $_GET['id'];
48
if (isset($_POST['id']))
49
	$id = $_POST['id'];
50
51
$act = $_GET['act'];
52
if (isset($_POST['act']))
53
	$act = $_POST['act'];
54
55
if ($_GET['act'] == "del") {
56
57
	if (!$a_server[$id]) {
58
		pfSenseHeader("vpn_openvpn_server.php");
59
		exit;
60
	}
61
62 dc408939 Matthew Grooms
	openvpn_delete('server', $a_server[$id]);
63 d799787e Matthew Grooms
	unset($a_server[$id]);
64
	write_config();
65
	$savemsg = gettext("Server successfully deleted")."<br/>";
66
}
67
68 f432e364 Matthew Grooms
if($_GET['act']=="new"){
69 3c11bd3c Matthew Grooms
	$pconfig['autokey_enable'] = "yes";
70
	$pconfig['tlsauth_enable'] = "yes";
71
	$pconfig['autotls_enable'] = "yes";
72 fe787fc7 Matthew Grooms
	$pconfig['dh_length'] = 1024;
73 f432e364 Matthew Grooms
	$pconfig['interface'] = "wan";
74
	$pconfig['local_port'] = openvpn_port_next('UDP');
75
	$pconfig['pool_enable'] = "yes";
76
}
77
78 d799787e Matthew Grooms
if($_GET['act']=="edit"){
79
80
	if (isset($id) && $a_server[$id]) {
81
82
		$pconfig['disable'] = $a_server[$id]['disable'];
83 3c11bd3c Matthew Grooms
		$pconfig['mode'] = $a_server[$id]['mode'];
84 d799787e Matthew Grooms
		$pconfig['protocol'] = $a_server[$id]['protocol'];
85
		$pconfig['interface'] = $a_server[$id]['interface'];
86
		$pconfig['local_port'] = $a_server[$id]['local_port'];
87
		$pconfig['description'] = $a_server[$id]['description'];
88 a9a613dd Scott Ullrich
		$pconfig['custom_options'] = $a_server[$id]['custom_options'];
89 d799787e Matthew Grooms
90 3c11bd3c Matthew Grooms
		if ($pconfig['mode'] != "p2p_shared_key") {
91
			if ($a_server[$id]['tls']) {
92
				$pconfig['tlsauth_enable'] = "yes";
93
				$pconfig['tls'] = base64_decode($a_server[$id]['tls']);
94
			}
95 fe787fc7 Matthew Grooms
			$pconfig['caref'] = $a_server[$id]['caref'];
96
			$pconfig['certref'] = $a_server[$id]['certref'];
97
			$pconfig['dh_length'] = $a_server[$id]['dh_length'];
98 3c11bd3c Matthew Grooms
		} else
99
			$pconfig['shared_key'] = base64_decode($a_server[$id]['shared_key']);
100 d799787e Matthew Grooms
		$pconfig['crypto'] = $a_server[$id]['crypto'];
101
102
		$pconfig['tunnel_network'] = $a_server[$id]['tunnel_network'];
103
		$pconfig['remote_network'] = $a_server[$id]['remote_network'];
104
		$pconfig['gwredir'] = $a_server[$id]['gwredir'];
105
		$pconfig['local_network'] = $a_server[$id]['local_network'];
106
		$pconfig['maxclients'] = $a_server[$id]['maxclients'];
107
		$pconfig['compression'] = $a_server[$id]['compression'];
108 1cb0b40a Matthew Grooms
		$pconfig['passtos'] = $a_server[$id]['passtos'];
109 d799787e Matthew Grooms
		$pconfig['client2client'] = $a_server[$id]['client2client'];
110
111
		$pconfig['pool_enable'] = $a_server[$id]['pool_enable'];
112
113
		$pconfig['dns_domain'] = $a_server[$id]['dns_domain'];
114
		if ($pconfig['dns_domain'])
115
			$pconfig['dns_domain_enable'] = true;
116
117
		$pconfig['dns_server1'] = $a_server[$id]['dns_server1'];
118
		$pconfig['dns_server2'] = $a_server[$id]['dns_server2'];
119
		$pconfig['dns_server3'] = $a_server[$id]['dns_server3'];
120
		$pconfig['dns_server4'] = $a_server[$id]['dns_server4'];
121
		if ($pconfig['dns_server1'] ||
122
			$pconfig['dns_server2'] ||
123
			$pconfig['dns_server3'] ||
124
			$pconfig['dns_server4'])
125
			$pconfig['dns_server_enable'] = true;
126
127
		$pconfig['ntp_server1'] = $a_server[$id]['ntp_server1'];
128
		$pconfig['ntp_server2'] = $a_server[$id]['ntp_server2'];
129
		if ($pconfig['ntp_server1'] ||
130
			$pconfig['ntp_server2'])
131
			$pconfig['ntp_server_enable'] = true;
132
133
		$pconfig['netbios_enable'] = $a_server[$id]['netbios_enable'];
134
		$pconfig['netbios_ntype'] = $a_server[$id]['netbios_ntype'];
135
		$pconfig['netbios_scope'] = $a_server[$id]['netbios_scope'];
136
137
		$pconfig['wins_server1'] = $a_server[$id]['wins_server1'];
138
		$pconfig['wins_server2'] = $a_server[$id]['wins_server2'];
139
		if ($pconfig['wins_server1'] ||
140
			$pconfig['wins_server2'])
141
			$pconfig['wins_server_enable'] = true;
142
143
		$pconfig['nbdd_server1'] = $a_server[$id]['nbdd_server1'];
144
		if ($pconfig['nbdd_server1'])
145
			$pconfig['nbdd_server_enable'] = true;
146 3c11bd3c Matthew Grooms
147
		// just in case the modes switch
148
		$pconfig['autokey_enable'] = "yes";
149
		$pconfig['autotls_enable'] = "yes";
150 d799787e Matthew Grooms
	}
151
}
152
153
if ($_POST) {
154
155
	unset($input_errors);
156
	$pconfig = $_POST;
157
158 f432e364 Matthew Grooms
	if (isset($id) && $a_server[$id])
159
		$vpnid = $a_server[$id]['vpnid'];
160
	else
161
		$vpnid = 0;
162
163 98c0c87a jim-p
	if ($pconfig['mode'] != "p2p_shared_key")
164 3c11bd3c Matthew Grooms
		$tls_mode = true;
165
	else
166
		$tls_mode = false;
167
168 d799787e Matthew Grooms
	/* input validation */
169
	if ($result = openvpn_validate_port($pconfig['local_port'], 'Local port'))
170
		$input_errors[] = $result;
171
172
	if ($result = openvpn_validate_cidr($pconfig['tunnel_network'], 'Tunnel network'))
173
		$input_errors[] = $result;
174
175
	if ($result = openvpn_validate_cidr($pconfig['remote_network'], 'Remote network'))
176
		$input_errors[] = $result;
177
178
	if ($result = openvpn_validate_cidr($pconfig['local_network'], 'Local network'))
179
		$input_errors[] = $result;
180
181 5accf130 jim-p
	$portused = openvpn_port_used($pconfig['protocol'], $pconfig['local_port']);
182
	if (($portused != $vpnid) && ($portused != 0))
183 f432e364 Matthew Grooms
		$input_errors[] = "The specified 'Local port' is in use. Please select another value";
184
185 89e6e210 jim-p
	if ($pconfig['autokey_enable'])
186
		$pconfig['shared_key'] = openvpn_create_key();
187
188 3c11bd3c Matthew Grooms
	if (!$tls_mode && !$pconfig['autokey_enable'])
189 d799787e Matthew Grooms
		if (!strstr($pconfig['shared_key'], "-----BEGIN OpenVPN Static key V1-----") ||
190
			!strstr($pconfig['shared_key'], "-----END OpenVPN Static key V1-----"))
191 3c11bd3c Matthew Grooms
			$input_errors[] = "The field 'Shared Key' does not appear to be valid";
192
193
	if ($tls_mode && $pconfig['tlsauth_enable'] && !$pconfig['autotls_enable'])
194
		if (!strstr($pconfig['tls'], "-----BEGIN OpenVPN Static key V1-----") ||
195
			!strstr($pconfig['tls'], "-----END OpenVPN Static key V1-----"))
196
			$input_errors[] = "The field 'TLS Authentication Key' does not appear to be valid";
197 d799787e Matthew Grooms
198
	if ($pconfig['dns_server_enable']) {
199
		if (!empty($pconfig['dns_server1']) && !is_ipaddr(trim($pconfig['dns_server1'])))
200
			$input_errors[] = "The field 'DNS Server #1' must contain a valid IP address";
201
		if (!empty($pconfig['dns_server2']) && !is_ipaddr(trim($pconfig['dns_server2'])))
202
			$input_errors[] = "The field 'DNS Server #2' must contain a valid IP address";
203
		if (!empty($pconfig['dns_server3']) && !is_ipaddr(trim($pconfig['dns_server3'])))
204
			$input_errors[] = "The field 'DNS Server #3' must contain a valid IP address";
205
		if (!empty($pconfig['dns_server4']) && !is_ipaddr(trim($pconfig['dns_server4'])))
206
			$input_errors[] = "The field 'DNS Server #4' must contain a valid IP address";
207
	}
208
209
	if ($pconfig['ntp_server_enable']) {
210
		if (!empty($pconfig['ntp_server1']) && !is_ipaddr(trim($pconfig['ntp_server1'])))
211
			$input_errors[] = "The field 'NTP Server #1' must contain a valid IP address";
212
		if (!empty($pconfig['ntp_server2']) && !is_ipaddr(trim($pconfig['ntp_server2'])))
213
			$input_errors[] = "The field 'NTP Server #2' must contain a valid IP address";
214
		if (!empty($pconfig['ntp_server3']) && !is_ipaddr(trim($pconfig['ntp_server3'])))
215
			$input_errors[] = "The field 'NTP Server #3' must contain a valid IP address";
216
		if (!empty($pconfig['ntp_server4']) && !is_ipaddr(trim($pconfig['ntp_server4'])))
217
			$input_errors[] = "The field 'NTP Server #4' must contain a valid IP address";
218
	}
219
220
	if ($pconfig['netbios_enable']) {
221
		if ($pconfig['wins_server_enable']) {
222
			if (!empty($pconfig['wins_server1']) && !is_ipaddr(trim($pconfig['wins_server1'])))
223
				$input_errors[] = "The field 'WINS Server #1' must contain a valid IP address";
224
			if (!empty($pconfig['wins_server2']) && !is_ipaddr(trim($pconfig['wins_server2'])))
225
				$input_errors[] = "The field 'WINS Server #2' must contain a valid IP address";
226
		}
227
		if ($pconfig['nbdd_server_enable'])
228
			if (!empty($pconfig['nbdd_server1']) && !is_ipaddr(trim($pconfig['nbdd_server1'])))
229
				$input_errors[] = "The field 'NetBIOS Data Distribution Server #1' must contain a valid IP address";
230
	}
231
232
	if ($pconfig['maxclients'] && !is_numeric($pconfig['maxclients']))
233
		$input_errors[] = "The field 'Concurrent connections' must be numeric.";
234
235 89e6e210 jim-p
	if (!$tls_mode && !$pconfig['autokey_enable']) {
236 872d9195 Matthew Grooms
		$reqdfields = array('shared_key');
237 69aae7e3 jim-p
		$reqdfieldsn = array('Shared key');
238 d799787e Matthew Grooms
    } else {
239 872d9195 Matthew Grooms
		$reqdfields = explode(" ", "caref certref");
240
		$reqdfieldsn = explode(",", "Certificate Authority,Certificate");;
241 d799787e Matthew Grooms
	}
242
243 872d9195 Matthew Grooms
	$reqdfields[] = 'tunnel_network';
244
	$reqdfieldsn[] = 'Tunnel network';
245
246 d799787e Matthew Grooms
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
247
	
248
	if (!$input_errors) {
249
250
		$server = array();
251
252 f432e364 Matthew Grooms
		if ($vpnid)
253
			$server['vpnid'] = $vpnid;
254 e28120e5 Matthew Grooms
		else
255 d799787e Matthew Grooms
			$server['vpnid'] = openvpn_vpnid_next();
256
257
		$server['disable'] = $pconfig['disable'];
258 3c11bd3c Matthew Grooms
		$server['mode'] = $pconfig['mode'];
259 d799787e Matthew Grooms
		$server['protocol'] = $pconfig['protocol'];
260
		$server['interface'] = $pconfig['interface'];
261
		$server['local_port'] = $pconfig['local_port'];
262
		$server['description'] = $pconfig['description'];
263 a9a613dd Scott Ullrich
		$server['custom_options'] = $pconfig['custom_options'];
264 d799787e Matthew Grooms
265 3c11bd3c Matthew Grooms
		if ($tls_mode) {
266
			if ($pconfig['tlsauth_enable']) {
267
				if ($pconfig['autotls_enable'])
268
					$pconfig['tls'] = openvpn_create_key();
269
				$server['tls'] = base64_encode($pconfig['tls']);
270
			}
271 fe787fc7 Matthew Grooms
			$server['caref'] = $pconfig['caref'];
272
			$server['certref'] = $pconfig['certref'];
273
			$server['dh_length'] = $pconfig['dh_length'];
274 3c11bd3c Matthew Grooms
		} else {
275
			$server['shared_key'] = base64_encode($pconfig['shared_key']);
276 d799787e Matthew Grooms
		}
277
		$server['crypto'] = $pconfig['crypto'];
278
279
		$server['tunnel_network'] = $pconfig['tunnel_network'];
280
		$server['remote_network'] = $pconfig['remote_network'];
281
		$server['gwredir'] = $pconfig['gwredir'];
282
		$server['local_network'] = $pconfig['local_network'];
283
		$server['maxclients'] = $pconfig['maxclients'];
284
		$server['compression'] = $pconfig['compression'];
285 1cb0b40a Matthew Grooms
		$server['passtos'] = $pconfig['passtos'];
286 d799787e Matthew Grooms
		$server['client2client'] = $pconfig['client2client'];
287
288
		$server['pool_enable'] = $pconfig['pool_enable'];
289
290
		if ($pconfig['dns_domain_enable'])
291
			$server['dns_domain'] = $pconfig['dns_domain'];
292
293
		if ($pconfig['dns_server_enable']) {
294
			$server['dns_server1'] = $pconfig['dns_server1'];
295
			$server['dns_server2'] = $pconfig['dns_server2'];
296
			$server['dns_server3'] = $pconfig['dns_server3'];
297
			$server['dns_server4'] = $pconfig['dns_server4'];
298
		}
299
300
		if ($pconfig['ntp_server_enable']) {
301
			$server['ntp_server1'] = $pconfig['ntp_server1'];
302
			$server['ntp_server2'] = $pconfig['ntp_server2'];
303
		}
304
305
		$server['netbios_enable'] = $pconfig['netbios_enable'];
306
		$server['netbios_ntype'] = $pconfig['netbios_ntype'];
307
		$server['netbios_scope'] = $pconfig['netbios_scope'];
308
309
		if ($pconfig['netbios_enable']) {
310
311
			if ($pconfig['wins_server_enable']) {
312
				$server['wins_server1'] = $pconfig['wins_server1'];
313
				$server['wins_server2'] = $pconfig['wins_server2'];
314
			}
315
316
			if ($pconfig['dns_server_enable'])
317
				$server['nbdd_server1'] = $pconfig['nbdd_server1'];
318
		}
319
	
320
		if (isset($id) && $a_server[$id])
321
			$a_server[$id] = $server;
322
		else
323
			$a_server[] = $server;
324
325 dc408939 Matthew Grooms
		openvpn_resync('server', $server);
326 d799787e Matthew Grooms
		write_config();
327
		
328
		header("Location: vpn_openvpn_server.php");
329
		exit;
330
	}
331
}
332
333
include("head.inc");
334
335
?>
336
337
<body link="#000000" vlink="#000000" alink="#000000" onload="<?= $jsevents["body"]["onload"] ?>">
338
<?php include("fbegin.inc"); ?>
339
<script language="JavaScript">
340
<!--
341
342 3c11bd3c Matthew Grooms
function mode_change() {
343
	index = document.iform.mode.selectedIndex;
344
	value = document.iform.mode.options[index].value;
345 d799787e Matthew Grooms
	switch(value) {
346 3c11bd3c Matthew Grooms
		case "p2p_tls":
347
		case "server_tls":
348
		case "server_user":
349
		case "server_tls_user":
350
			document.getElementById("tls").style.display="";
351
			document.getElementById("tls_ca").style.display="";
352
			document.getElementById("tls_cert").style.display="";
353 fe787fc7 Matthew Grooms
			document.getElementById("tls_dh").style.display="";
354 d799787e Matthew Grooms
			document.getElementById("psk").style.display="none";
355
			break;
356 3c11bd3c Matthew Grooms
		case "p2p_shared_key":
357
			document.getElementById("tls").style.display="none";
358
			document.getElementById("tls_ca").style.display="none";
359
			document.getElementById("tls_cert").style.display="none";
360 fe787fc7 Matthew Grooms
			document.getElementById("tls_dh").style.display="none";
361 d799787e Matthew Grooms
			document.getElementById("psk").style.display="";
362
			break;
363
	}
364 3c11bd3c Matthew Grooms
	switch(value) {
365
		case "p2p_tls":
366
		case "p2p_shared_key":
367
			document.getElementById("client_opts").style.display="none";
368
			document.getElementById("remote_opts").style.display="";
369
			break;
370
		default:
371
			document.getElementById("client_opts").style.display="";
372
			document.getElementById("remote_opts").style.display="none";
373
			break;
374
	}
375
}
376
377
function autokey_change() {
378
379
	if (document.iform.autokey_enable.checked)
380
		document.getElementById("autokey_opts").style.display="none";
381
	else
382
		document.getElementById("autokey_opts").style.display="";
383
}
384
385
function tlsauth_change() {
386
387
<?php if (!$pconfig['tls']): ?>
388
	if (document.iform.tlsauth_enable.checked)
389
		document.getElementById("tlsauth_opts").style.display="";
390
	else
391
		document.getElementById("tlsauth_opts").style.display="none";
392
<?php endif; ?>
393
394
	autotls_change();
395
}
396
397
function autotls_change() {
398
399
<?php if (!$pconfig['tls']): ?>
400
	autocheck = document.iform.autotls_enable.checked;
401
<?php else: ?>
402
	autocheck = false;
403
<?php endif; ?>
404
405
	if (document.iform.tlsauth_enable.checked && !autocheck)
406
		document.getElementById("autotls_opts").style.display="";
407
	else
408
		document.getElementById("autotls_opts").style.display="none";
409 d799787e Matthew Grooms
}
410
411
function gwredir_change() {
412
413
	if (document.iform.gwredir.checked)
414
		document.getElementById("local_opts").style.display="none";
415
	else
416
		document.getElementById("local_opts").style.display="";
417
}
418
419
function dns_domain_change() {
420
421
	if (document.iform.dns_domain_enable.checked)
422
		document.getElementById("dns_domain_data").style.display="";
423
	else
424
		document.getElementById("dns_domain_data").style.display="none";
425
}
426
427
function dns_server_change() {
428
429
	if (document.iform.dns_server_enable.checked)
430
		document.getElementById("dns_server_data").style.display="";
431
	else
432
		document.getElementById("dns_server_data").style.display="none";
433
}
434
435
function wins_server_change() {
436
437
	if (document.iform.wins_server_enable.checked)
438
		document.getElementById("wins_server_data").style.display="";
439
	else
440
		document.getElementById("wins_server_data").style.display="none";
441
}
442
443
function ntp_server_change() {
444
445
	if (document.iform.ntp_server_enable.checked)
446
		document.getElementById("ntp_server_data").style.display="";
447
	else
448
		document.getElementById("ntp_server_data").style.display="none";
449
}
450
451
function netbios_change() {
452
453
	if (document.iform.netbios_enable.checked) {
454
		document.getElementById("netbios_data").style.display="";
455
		document.getElementById("wins_opts").style.display="";
456
	} else {
457
		document.getElementById("netbios_data").style.display="none";
458
		document.getElementById("wins_opts").style.display="none";
459
	}
460
}
461
462
//-->
463
</script>
464
<?php
465
	if ($input_errors)
466
		print_input_errors($input_errors);
467
	if ($savemsg)
468
		print_info_box($savemsg);
469
?>
470
<table width="100%" border="0" cellpadding="0" cellspacing="0">
471 5a3b0d3b mgrooms
	<tr>
472 d799787e Matthew Grooms
		<td class="tabnavtbl">
473
			<ul id="tabnav">
474
			<?php 
475
				$tab_array = array();
476
				$tab_array[] = array(gettext("Server"), true, "vpn_openvpn_server.php");
477
				$tab_array[] = array(gettext("Client"), false, "vpn_openvpn_client.php");
478
				$tab_array[] = array(gettext("Client Specific Overrides"), false, "vpn_openvpn_csc.php");
479 b63f2e8b Matthew Grooms
				add_package_tabs("OpenVPN", $tab_array);
480 d799787e Matthew Grooms
				display_top_tabs($tab_array);
481
			?>
482
			</ul>
483
		</td>
484
	</tr>    
485
	<tr>
486
		<td class="tabcont">
487
488
			<?php if($act=="new" || $act=="edit"): ?>
489
490
			<form action="vpn_openvpn_server.php" method="post" name="iform" id="iform" onsubmit="presubmit()">
491
				<table width="100%" border="0" cellpadding="6" cellspacing="0">
492 47c00c09 Scott Ullrich
					<tr>
493
						<td colspan="2" valign="top" class="listtopic">General information</td>
494 b63f2e8b Matthew Grooms
					</tr>
495 d799787e Matthew Grooms
					<tr>
496
						<td width="22%" valign="top" class="vncellreq">Disabled</td>
497
						<td width="78%" class="vtable">
498
							<table border="0" cellpadding="0" cellspacing="0">
499
								<tr>
500
									<td>
501
										<?php set_checked($pconfig['disable'],$chk); ?>
502
										<input name="disable" type="checkbox" value="yes" <?=$chk;?>/>
503
									</td>
504
									<td>
505
										&nbsp;
506
										<span class="vexpl">
507
											<strong>Disable this server</strong><br>
508
										</span>
509
									</td>
510
								</tr>
511
							</table>
512
							Set this option to disable this server without removing it from the list.
513
						</td>
514
					</tr>
515 3c11bd3c Matthew Grooms
					<tr>
516
						<td width="22%" valign="top" class="vncellreq"><?=gettext("Server Mode");?></td>
517
							<td width="78%" class="vtable">
518
							<select name='mode' id='mode' class="formselect" onchange='mode_change()'>
519
							<?php
520
								foreach ($openvpn_server_modes as $name => $desc):
521
									$selected = "";
522
									if ($pconfig['mode'] == $name)
523
										$selected = "selected";
524
							?>
525
								<option value="<?=$name;?>" <?=$selected;?>><?=$desc;?></option>
526
							<?php endforeach; ?>
527
							</select>
528
						</td>
529
					</tr>
530 d799787e Matthew Grooms
					<tr>
531
						<td width="22%" valign="top" class="vncellreq"><?=gettext("Protocol");?></td>
532
							<td width="78%" class="vtable">
533
							<select name='protocol' class="formselect">
534
							<?php
535
								foreach ($openvpn_prots as $prot):
536
									$selected = "";
537
									if ($pconfig['protocol'] == $prot)
538
										$selected = "selected";
539
							?>
540
								<option value="<?=$prot;?>" <?=$selected;?>><?=$prot;?></option>
541
							<?php endforeach; ?>
542
							</select>
543
							</td>
544
					</tr>
545
					<tr>
546
						<td width="22%" valign="top" class="vncellreq">Interface</td>
547
						<td width="78%" class="vtable">
548
							<select name="interface" class="formselect">
549
								<?php
550
									$interfaces = get_configured_interface_with_descr();
551
									foreach ($interfaces as $iface => $ifacename):
552 1d3bcd2a Matthew Grooms
										$selected = "";
553
										if ($iface == $pconfig['interface'])
554
											$selected = "selected";
555 d799787e Matthew Grooms
								?>
556 1d3bcd2a Matthew Grooms
									<option value="<?=$iface;?>" <?=$selected;?>>
557
										<?=htmlspecialchars($ifacename);?>
558
									</option>
559 d799787e Matthew Grooms
								<?php endforeach; ?>
560
							</select> <br>
561
						</td>
562
					</tr>
563
					<tr>
564
						<td width="22%" valign="top" class="vncellreq"><?=gettext("Local port");?></td>
565
						<td width="78%" class="vtable">
566
							<input name="local_port" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($pconfig['local_port']);?>"/>
567
						</td>
568
					</tr>
569
					<tr> 
570
						<td width="22%" valign="top" class="vncell">Description</td>
571
						<td width="78%" class="vtable"> 
572
							<input name="description" type="text" class="formfld unknown" size="30" value="<?=htmlspecialchars($pconfig['description']);?>">
573
							<br>
574
							You may enter a description here for your reference (not parsed).
575
						</td>
576
					</tr>
577
					<tr>
578
						<td colspan="2" class="list" height="12"></td>
579
					</tr>
580
					<tr>
581
						<td colspan="2" valign="top" class="listtopic">Cryptographic Settings</td>
582
					</tr>
583 3c11bd3c Matthew Grooms
					<tr id="tls">
584
						<td width="22%" valign="top" class="vncellreq">TLS Authentication</td>
585
						<td width="78%" class="vtable">
586
							<table border="0" cellpadding="2" cellspacing="0">
587
								<tr>
588
									<td>
589
										<?php set_checked($pconfig['tlsauth_enable'],$chk); ?>
590
										<input name="tlsauth_enable" id="tlsauth_enable" type="checkbox" value="yes" <?=$chk;?> onClick="tlsauth_change()">
591
									</td>
592
									<td>
593
										<span class="vexpl">
594
											Enable authentication of TLS packets.
595
										</span>
596
									</td>
597
								</tr>
598
							</table>
599
							<?php if (!$pconfig['tls']): ?>
600
							<table border="0" cellpadding="2" cellspacing="0" id='tlsauth_opts'>
601
								<tr>
602
									<td>
603
										<?php set_checked($pconfig['autotls_enable'],$chk); ?>
604
										<input name="autotls_enable" id="autotls_enable" type="checkbox" value="yes" <?=$chk;?> onClick="autotls_change()">
605
									</td>
606
									<td>
607
										<span class="vexpl">
608
											Automatically generate a shared TLS authentication key.
609
										</span>
610
									</td>
611
								</tr>
612
							</table>
613
							<?php endif; ?>
614
							<table border="0" cellpadding="2" cellspacing="0" id='autotls_opts'>
615
								<tr>
616
									<td>
617
										<textarea name="tls" cols="65" rows="7" class="formpre"><?=htmlspecialchars($pconfig['tls']);?></textarea>
618
										<br/>
619
										Paste your shared key here.
620
									</td>
621
								</tr>
622
							</table>
623
						</td>
624 d799787e Matthew Grooms
					</tr>
625 3c11bd3c Matthew Grooms
					<tr id="tls_ca">
626
						<td width="22%" valign="top" class="vncellreq">Peer Certificate Authority</td>
627 d799787e Matthew Grooms
							<td width="78%" class="vtable">
628
							<select name='caref' class="formselect">
629
							<?php
630
								foreach ($config['system']['ca'] as $ca):
631
									$selected = "";
632
									if ($pconfig['caref'] == $ca['refid'])
633
										$selected = "selected";
634
							?>
635
								<option value="<?=$ca['refid'];?>" <?=$selected;?>><?=$ca['name'];?></option>
636
							<?php endforeach; ?>
637
							</select>
638
							</td>
639
					</tr>
640 3c11bd3c Matthew Grooms
					<tr id="tls_cert">
641
						<td width="22%" valign="top" class="vncellreq">Server Certificate</td>
642 d799787e Matthew Grooms
							<td width="78%" class="vtable">
643
							<select name='certref' class="formselect">
644
							<?php
645
								foreach ($config['system']['cert'] as $cert):
646
									$selected = "";
647
									if ($pconfig['certref'] == $cert['refid'])
648
										$selected = "selected";
649
							?>
650
								<option value="<?=$cert['refid'];?>" <?=$selected;?>><?=$cert['name'];?></option>
651
							<?php endforeach; ?>
652
							</select>
653
						</td>
654
					</tr>
655 fe787fc7 Matthew Grooms
					<tr id="tls_dh">
656
						<td width="22%" valign="top" class="vncellreq">DH Parameters Length</td>
657
						<td width="78%" class="vtable">
658
							<select name="dh_length" class="formselect">
659
								<?php
660
									foreach ($openvpn_dh_lengths as $length):
661
									$selected = '';
662
									if ($length == $pconfig['dh_length'])
663
										$selected = ' selected';
664
								?>
665
								<option<?=$selected?>><?=$length;?></option>
666
								<?php endforeach; ?>
667
							</select>
668
							<span class="vexpl">
669
								bits
670
							</span>
671
						</td>
672
					</tr>
673 d799787e Matthew Grooms
					<tr id="psk">
674
						<td width="22%" valign="top" class="vncellreq">Shared Key</td>
675 3c11bd3c Matthew Grooms
						<td width="78%" class="vtable">
676
							<?php if (!$pconfig['shared_key']): ?>
677
							<table border="0" cellpadding="2" cellspacing="0">
678
								<tr>
679
									<td>
680
										<?php set_checked($pconfig['autokey_enable'],$chk); ?>
681
										<input name="autokey_enable" type="checkbox" value="yes" <?=$chk;?> onClick="autokey_change()">
682
									</td>
683
									<td>
684
										<span class="vexpl">
685
											Automatically generate a shared key.
686
										</span>
687
									</td>
688
								</tr>
689
							</table>
690
							<?php endif; ?>
691
							<table border="0" cellpadding="2" cellspacing="0" id='autokey_opts'>
692
								<tr>
693
									<td>
694
										<textarea name="shared_key" cols="65" rows="7" class="formpre"><?=htmlspecialchars($pconfig['shared_key']);?></textarea>
695
										<br/>
696
										Paste your shared key here.
697
									</td>
698
								</tr>
699
							</table>
700 d799787e Matthew Grooms
						</td>
701
					</tr>
702
					<tr>
703
						<td width="22%" valign="top" class="vncellreq">Encryption algorithm</td>
704
						<td width="78%" class="vtable">
705
							<select name="crypto" class="formselect">
706
								<?php
707
									$cipherlist = openvpn_get_cipherlist();
708
									foreach ($cipherlist as $name => $desc):
709
									$selected = '';
710
									if ($name == $pconfig['crypto'])
711
										$selected = ' selected';
712
								?>
713
								<option value="<?=$name;?>"<?=$selected?>>
714
									<?=htmlspecialchars($desc);?>
715
								</option>
716
								<?php endforeach; ?>
717
							</select>
718
						</td>
719
					</tr>
720
					<tr>
721
						<td colspan="2" class="list" height="12"></td>
722
					</tr>
723
					<tr>
724
						<td colspan="2" valign="top" class="listtopic">Tunnel Settings</td>
725
					</tr>
726
					<tr>
727
						<td width="22%" valign="top" class="vncellreq">Tunnel Network</td>
728
						<td width="78%" class="vtable">
729
							<input name="tunnel_network" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['tunnel_network']);?>">
730
							<br>
731
							This is the virtual network used for private
732
							communications between this server and client
733
							hosts expressed using CIDR (eg. 10.0.8.0/24).
734
							The first network address will be assigned to
735
							the	server virtual interface. The remaining
736
							network addresses can optionally be assigned
737
							to connecting clients. (see Address Pool)
738
						</td>
739
					</tr>
740
					<tr>
741
						<td width="22%" valign="top" class="vncell">Redirect Gateway</td>
742
						<td width="78%" class="vtable">
743
							<table border="0" cellpadding="2" cellspacing="0">
744
								<tr>
745
									<td>
746
										<?php set_checked($pconfig['gwredir'],$chk); ?>
747
										<input name="gwredir" type="checkbox" value="yes" <?=$chk;?> onClick="gwredir_change()"/>
748
									</td>
749
									<td>
750
										<span class="vexpl">
751
											Force all client generated traffic through the tunnel.
752
										</span>
753
									</td>
754
								</tr>
755
							</table>
756
						</td>
757
					</tr>
758
					<tr id="local_opts">
759
						<td width="22%" valign="top" class="vncell">Local Network</td>
760
						<td width="78%" class="vtable">
761
							<input name="local_network" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['local_network']);?>">
762
							<br>
763
							This is the network that will be accessable
764
							from the remote endpoint. Expressed as a CIDR
765
							range. You may leave this blank if you don't
766
							want to add a route to the local network
767
							through this tunnel on the remote machine.
768
							This is generally set to your LAN network.
769
						</td>
770
					</tr>
771 3c11bd3c Matthew Grooms
					<tr id="remote_opts">
772
						<td width="22%" valign="top" class="vncell">Remote Network</td>
773
						<td width="78%" class="vtable">
774
							<input name="remote_network" type="text" class="formfld unknown" size="20" value="<?=htmlspecialchars($pconfig['remote_network']);?>">
775
							<br>
776
							This is a network that will be routed through
777
							the tunnel, so that a site-to-site VPN can be
778
							established without manually changing the
779
							routing tables. Expressed as a CIDR range. If
780
							this is a site-to-site VPN, enter here the
781
							remote LAN here. You may leave this blank if
782
							you don't want a site-to-site VPN.
783
						</td>
784
					</tr>
785 d799787e Matthew Grooms
					<tr>
786
						<td width="22%" valign="top" class="vncell"><?=gettext("Concurrent connections");?></td>
787
						<td width="78%" class="vtable">
788
							<input name="maxclients" type="text" class="formfld unknown" size="5" value="<?=htmlspecialchars($pconfig['maxclients']);?>"/>
789
							<br/>
790
							Specify the maximum number of clients allowed to concurrently connect to this server.
791
						</td>
792
					</tr>
793
					<tr>
794
						<td width="22%" valign="top" class="vncell">Compression</td>
795
						<td width="78%" class="vtable">
796
							<table border="0" cellpadding="2" cellspacing="0">
797
								<tr>
798
									<td>
799
										<?php set_checked($pconfig['compression'],$chk); ?>
800
										<input name="compression" type="checkbox" value="yes" <?=$chk;?>>
801
									</td>
802
									<td>
803
										<span class="vexpl">
804
											Compress tunnel packets using the LZO algorithm.
805
										</span>
806
									</td>
807
								</tr>
808
							</table>
809
						</td>
810
					</tr>
811
					<tr>
812
						<td width="22%" valign="top" class="vncell">Type-of-Service</td>
813
						<td width="78%" class="vtable">
814
							<table border="0" cellpadding="2" cellspacing="0">
815
								<tr>
816
									<td>
817 1cb0b40a Matthew Grooms
										<?php set_checked($pconfig['passtos'],$chk); ?>
818
										<input name="passtos" type="checkbox" value="yes" <?=$chk;?>>
819 d799787e Matthew Grooms
									</td>
820
									<td>
821
										<span class="vexpl">
822
											Set the TOS IP header value of tunnel packets to match the encapsulated packet value.
823
										</span>
824
									</td>
825
								</tr>
826
							</table>
827
						</td>
828
					</tr>
829
					<tr>
830
						<td width="22%" valign="top" class="vncell">Inter-client communication</td>
831
						<td width="78%" class="vtable">
832
							<table border="0" cellpadding="2" cellspacing="0">
833
								<tr>
834
									<td>
835
										<?php set_checked($pconfig['client2client'],$chk); ?>
836
										<input name="client2client" type="checkbox" value="yes" <?=$chk;?>/>
837
									</td>
838
									<td>
839
										<span class="vexpl">
840
											Allow communication between clients connected to this server
841
										</span>
842
									</td>
843
								</tr>
844
							</table>
845
						</td>
846
					</tr>
847 3c11bd3c Matthew Grooms
				</table>
848
849
				<table width="100%" border="0" cellpadding="6" cellspacing="0" id="client_opts">
850 d799787e Matthew Grooms
					<tr>
851
						<td colspan="2" class="list" height="12"></td>
852
					</tr>
853
					<tr>
854
						<td colspan="2" valign="top" class="listtopic">Client Settings</td>
855
					</tr>
856
					<tr>
857
						<td width="22%" valign="top" class="vncell">Address Pool</td>
858
						<td width="78%" class="vtable">
859
							<table border="0" cellpadding="2" cellspacing="0">
860
								<tr>
861
									<td>
862
										<?php set_checked($pconfig['pool_enable'],$chk); ?>
863
										<input name="pool_enable" type="checkbox" id="pool_enable" value="yes" <?=$chk;?>">
864
									</td>
865
									<td>
866
										<span class="vexpl">
867
											Provide a virtual adapter IP address to clients (see Tunnel Network)<br>
868
										</span>
869
									</td>
870
								</tr>
871
							</table>
872
						</td>
873
					</tr>
874
					<tr>
875
						<td width="22%" valign="top" class="vncell">DNS Default Domain</td>
876
						<td width="78%" class="vtable">
877
							<table border="0" cellpadding="2" cellspacing="0">
878
								<tr>
879
									<td>
880
										<?php set_checked($pconfig['dns_domain_enable'],$chk); ?>
881
										<input name="dns_domain_enable" type="checkbox" id="dns_domain_enable" value="yes" <?=$chk;?> onClick="dns_domain_change()">
882
									</td>
883
									<td>
884
										<span class="vexpl">
885
	                                        Provide a default domain name to clients<br>
886
										</span>
887
									</td>
888
								</tr>
889
							</table>
890
							<table border="0" cellpadding="2" cellspacing="0" id="dns_domain_data">
891
								<tr>
892
									<td>
893
										<input name="dns_domain" type="text" class="formfld unknown" id="dns_domain" size="30" value="<?=htmlspecialchars($pconfig['dns_domain']);?>">
894
									</td>
895
								</tr>
896
							</table>
897
						</td>
898
					</tr>
899
					<tr>
900
						<td width="22%" valign="top" class="vncell">DNS Servers</td>
901
						<td width="78%" class="vtable">
902
							<table border="0" cellpadding="2" cellspacing="0">
903
								<tr>
904
									<td>
905
										<?php set_checked($pconfig['dns_server_enable'],$chk); ?>
906
										<input name="dns_server_enable" type="checkbox" id="dns_server_enable" value="yes" <?=$chk;?> onClick="dns_server_change()">
907
									</td>
908
									<td>
909
										<span class="vexpl">
910
											Provide a DNS server list to clients<br>
911
										</span>
912
									</td>
913
								</tr>
914
							</table>
915
							<table border="0" cellpadding="2" cellspacing="0" id="dns_server_data">
916
								<tr>
917
									<td>
918
										<span class="vexpl">
919
											Server #1:&nbsp;
920
										</span>
921
										<input name="dns_server1" type="text" class="formfld unknown" id="dns_server1" size="20" value="<?=$pconfig['dns_server1'];?>">
922
									</td>
923
								</tr>
924
								<tr>
925
									<td>
926
										<span class="vexpl">
927
											Server #2:&nbsp;
928
										</span>
929
										<input name="dns_server2" type="text" class="formfld unknown" id="dns_server2" size="20" value="<?=$pconfig['dns_server2'];?>">
930
									</td>
931
								</tr>
932
								<tr>
933
									<td>
934
										<span class="vexpl">
935
											Server #3:&nbsp;
936
										</span>
937
										<input name="dns_server3" type="text" class="formfld unknown" id="dns_server3" size="20" value="<?=$pconfig['dns_server3'];?>">
938
									</td>
939
								</tr>
940
								<tr>
941
									<td>
942
										<span class="vexpl">
943
											Server #4:&nbsp;
944
										</span>
945
										<input name="dns_server4" type="text" class="formfld unknown" id="dns_server4" size="20" value="<?=$pconfig['dns_server4'];?>">
946
									</td>
947
								</tr>
948
							</table>
949
						</td>
950
					</tr>
951
					<tr>
952
						<td width="22%" valign="top" class="vncell">NTP Servers</td>
953
						<td width="78%" class="vtable">
954
							<table border="0" cellpadding="2" cellspacing="0">
955
								<tr>
956
									<td>
957
										<?php set_checked($pconfig['ntp_server_enable'],$chk); ?>
958
										<input name="ntp_server_enable" type="checkbox" id="ntp_server_enable" value="yes" <?=$chk;?> onClick="ntp_server_change()">
959
									</td>
960
									<td>
961
										<span class="vexpl">
962
											Provide a NTP server list to clients<br>
963
										</span>
964
									</td>
965
								</tr>
966
							</table>
967
							<table border="0" cellpadding="2" cellspacing="0" id="ntp_server_data">
968
								<tr>
969
									<td>
970
										<span class="vexpl">
971
											Server #1:&nbsp;
972
										</span>
973
										<input name="ntp_server1" type="text" class="formfld unknown" id="ntp_server1" size="20" value="<?=$pconfig['ntp_server1'];?>">
974
									</td>
975
								</tr>
976
								<tr>
977
									<td>
978
										<span class="vexpl">
979
											Server #2:&nbsp;
980
										</span>
981
										<input name="ntp_server2" type="text" class="formfld unknown" id="ntp_server2" size="20" value="<?=$pconfig['ntp_server2'];?>">
982
									</td>
983
								</tr>
984
							</table>
985
						</td>
986
					</tr>
987
					<tr>
988
						<td width="22%" valign="top" class="vncell">NetBIOS Options</td>
989
						<td width="78%" class="vtable">
990
							<table border="0" cellpadding="2" cellspacing="0">
991
								<tr>
992
									<td>
993
										<?php set_checked($pconfig['netbios_enable'],$chk); ?>
994
										<input name="netbios_enable" type="checkbox" id="netbios_enable" value="yes" <?=$chk;?> onClick="netbios_change()">
995
									</td>
996
									<td>
997
										<span class="vexpl">
998
											Enable NetBIOS over TCP/IP<br>
999
										</span>
1000
									</td>
1001
								</tr>
1002
							</table>
1003
							If this option is not set, all Netbios-over-TCP/IP options (includeing WINS) will be disabled.
1004
							<br/>
1005
							<table border="0" cellpadding="2" cellspacing="0" id="netbios_data">
1006
								<tr>
1007
									<td>
1008
										<br/>
1009
										<span class="vexpl">
1010
											Node Type:&nbsp;
1011
										</span>
1012
										<select name='netbios_ntype' class="formselect">
1013
										<?php
1014
											foreach ($netbios_nodetypes as $type => $name):
1015
												$selected = "";
1016
												if ($pconfig['netbios_ntype'] == $type)
1017
													$selected = "selected";
1018
										?>
1019
											<option value="<?=$type;?>" <?=$selected;?>><?=$name;?></option>
1020
										<?php endforeach; ?>
1021
										</select>
1022
										<br/>
1023
										Possible options: b-node (broadcasts), p-node
1024
										(point-to-point name queries to a WINS server),
1025
										m-node (broadcast then query name server), and
1026
										h-node (query name server, then broadcast).
1027
									</td>
1028
								</tr>
1029
								<tr>
1030
									<td>
1031
										<br/>
1032
										<span class="vexpl">
1033
											Scope ID:&nbsp;
1034
										</span>
1035
										<input name="netbios_scope" type="text" class="formfld unknown" id="netbios_scope" size="30" value="<?=htmlspecialchars($pconfig['netbios_scope']);?>">
1036
										<br/>
1037
										A NetBIOS Scope	ID provides an extended naming
1038
										service for	NetBIOS over TCP/IP. The NetBIOS
1039
										scope ID isolates NetBIOS traffic on a single
1040
										network to only those nodes with the same
1041
										NetBIOS scope ID.
1042
									</td>
1043
								</tr>
1044
							</table>
1045
						</td>
1046
					</tr>
1047
					<tr id="wins_opts">
1048
						<td width="22%" valign="top" class="vncell">WINS Servers</td>
1049
						<td width="78%" class="vtable">
1050
							<table border="0" cellpadding="2" cellspacing="0">
1051
								<tr>
1052
									<td>
1053
										<?php set_checked($pconfig['wins_server_enable'],$chk); ?>
1054
										<input name="wins_server_enable" type="checkbox" id="wins_server_enable" value="yes" <?=$chk;?> onClick="wins_server_change()">
1055
									</td>
1056
									<td>
1057
										<span class="vexpl">
1058
											Provide a WINS server list to clients<br>
1059
										</span>
1060
									</td>
1061
								</tr>
1062
							</table>
1063
							<table border="0" cellpadding="2" cellspacing="0" id="wins_server_data">
1064
								<tr>
1065
									<td>
1066
										<span class="vexpl">
1067
											Server #1:&nbsp;
1068
										</span>
1069
										<input name="wins_server1" type="text" class="formfld unknown" id="wins_server1" size="20" value="<?=$pconfig['wins_server1'];?>">
1070
									</td>
1071
								</tr>
1072
								<tr>
1073
									<td>
1074
										<span class="vexpl">
1075
											Server #2:&nbsp;
1076
										</span>
1077
										<input name="wins_server2" type="text" class="formfld unknown" id="wins_server2" size="20" value="<?=$pconfig['wins_server2'];?>">
1078
									</td>
1079
								</tr>
1080
							</table>
1081
						</td>
1082
					</tr>
1083 3c11bd3c Matthew Grooms
				</table>
1084
1085 2f4f30ee Scott Ullrich
				<table width="100%" border="0" cellpadding="6" cellspacing="0" id="client_opts">
1086
					<tr>
1087
						<td colspan="2" class="list" height="12"></td>
1088
					</tr>
1089
					<tr>
1090
						<td colspan="2" valign="top" class="listtopic">Advanced configuration</td>
1091
					</tr>
1092
					<tr>
1093 6804263e Scott Ullrich
						<td width="22%" valign="top" class="vncell">Advanced</td>
1094 2f4f30ee Scott Ullrich
						<td width="78%" class="vtable">
1095
							<table border="0" cellpadding="2" cellspacing="0">
1096
								<tr>
1097
									<td>
1098 a9a613dd Scott Ullrich
										<textarea rows="6" cols="78" name="custom_options" id="custom_options"><?=$pconfig['custom_options'];?></textarea><br/>
1099 53be9d3c Scott Ullrich
										Paste any additional options you would like to pass through to the openvpn server here seperated by a semicoloin ;<br/>
1100
										EXAMPLE: push "route 10.0.0.0 255.255.255.0";
1101 2f4f30ee Scott Ullrich
									</td>
1102
								</tr>
1103
							</table>
1104
						</td>
1105
					</tr>
1106
				</table>
1107
1108 f68fc963 Scott Ullrich
				<br/>
1109
1110 3c11bd3c Matthew Grooms
				<table width="100%" border="0" cellpadding="6" cellspacing="0" id="client_opts">
1111 d799787e Matthew Grooms
					<tr>
1112
						<td width="22%" valign="top">&nbsp;</td>
1113
						<td width="78%"> 
1114
							<input name="save" type="submit" class="formbtn" value="Save"> 
1115
							<input name="act" type="hidden" value="<?=$act;?>">
1116
							<?php if (isset($id) && $a_server[$id]): ?>
1117
							<input name="id" type="hidden" value="<?=$id;?>">
1118
							<?php endif; ?>
1119
						</td>
1120
					</tr>
1121
				</table>
1122
			</form>
1123
1124
			<?php else: ?>
1125
1126
			<table width="100%" border="0" cellpadding="0" cellspacing="0">
1127
				<tr>
1128
					<td width="10%" class="listhdrr">Disabled</td>
1129
					<td width="10%" class="listhdrr">Protocol</td>
1130
					<td width="30%" class="listhdrr">Tunnel Network</td>
1131
					<td width="40%" class="listhdrr">Description</td>
1132
					<td width="10%" class="list"></td>
1133
				</tr>
1134
				<?php
1135
					$i = 0;
1136
					foreach($a_server as $server):
1137
						$disabled = "NO";
1138
						if ($server['disable'])
1139
							$disabled = "YES";
1140
				?>
1141
				<tr>
1142 d3d9b0ee Scott Ullrich
					<td class="listlr" ondblclick="document.location='vpn_openvpn_server.php?act=edit&id=<?=$i;?>'">
1143 d799787e Matthew Grooms
						<?=$disabled;?>
1144
					</td>
1145 d3d9b0ee Scott Ullrich
					<td class="listr" ondblclick="document.location='vpn_openvpn_server.php?act=edit&id=<?=$i;?>'">
1146 d799787e Matthew Grooms
						<?=htmlspecialchars($server['protocol']);?>
1147
					</td>
1148 d3d9b0ee Scott Ullrich
					<td class="listr" ondblclick="document.location='vpn_openvpn_server.php?act=edit&id=<?=$i;?>'">
1149 d799787e Matthew Grooms
						<?=htmlspecialchars($server['tunnel_network']);?>
1150
					</td>
1151 d3d9b0ee Scott Ullrich
					<td class="listbg" ondblclick="document.location='vpn_openvpn_server.php?act=edit&id=<?=$i;?>'">
1152 d799787e Matthew Grooms
						<?=htmlspecialchars($server['description']);?>
1153
					</td>
1154
					<td valign="middle" nowrap class="list">
1155
						<a href="vpn_openvpn_server.php?act=edit&id=<?=$i;?>">
1156
							<img src="./themes/<?=$g['theme'];?>/images/icons/icon_e.gif" title="edit server" width="17" height="17" border="0">
1157
						</a>
1158
						&nbsp;
1159
						<a href="vpn_openvpn_server.php?act=del&id=<?=$i;?>" onclick="return confirm('Do you really want to delete this server?')">
1160
							<img src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" title="delete server" width="17" height="17" border="0">
1161
						</a>
1162
					</td>
1163
				</tr>
1164
				<?php
1165
					$i++;
1166
					endforeach;
1167
				?>
1168
				<tr>
1169
					<td class="list" colspan="4"></td>
1170
					<td class="list">
1171
						<a href="vpn_openvpn_server.php?act=new"><img src="./themes/<?=$g['theme'];?>/images/icons/icon_plus.gif" title="add server" width="17" height="17" border="0">
1172
						</a>
1173
					</td>
1174
				</tr>
1175
				<tr>
1176
					<td colspan="4">
1177
						<p>
1178
							<?=gettext("Additional OpenVPN servers can be added here.");?>
1179
						</p>
1180
					</td>
1181
				</tr>
1182
			</table>
1183
1184
			<? endif; ?>
1185
1186
		</td>
1187
	</tr>
1188
</table>
1189
<script language="JavaScript">
1190
<!--
1191 3c11bd3c Matthew Grooms
mode_change();
1192
autokey_change();
1193
tlsauth_change();
1194 d799787e Matthew Grooms
gwredir_change();
1195
dns_domain_change();
1196
dns_server_change();
1197
wins_server_change();
1198
ntp_server_change();
1199
netbios_change();
1200
//-->
1201
</script>
1202
</body>
1203
<?php include("fend.inc"); ?>
1204
1205
<?php
1206
1207
/* local utility functions */
1208
1209
function set_checked($var,& $chk) {
1210
    if($var)
1211
        $chk = 'checked';
1212
    else
1213
        $chk = '';
1214
}
1215
1216 53be9d3c Scott Ullrich
?>