Project

General

Profile

Download (21.9 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/*
3
	Copyright (C) 2010 Ermal Lu?i
4
	All rights reserved.
5

    
6
	Redistribution and use in source and binary forms, with or without
7
	modification, are permitted provided that the following conditions are met:
8

    
9
	1. Redistributions of source code must retain the above copyright notice,
10
	   this list of conditions and the following disclaimer.
11

    
12
	2. Redistributions in binary form must reproduce the above copyright
13
	   notice, this list of conditions and the following disclaimer in the
14
	   documentation and/or other materials provided with the distribution.
15

    
16
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
17
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
18
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
20
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25
	POSSIBILITY OF SUCH DAMAGE.
26

    
27
	pfSense_MODULE: openvpn
28
*/
29
require_once("openvpn.inc");
30

    
31
function has_special_chars($text) {
32
	return ereg('[^A-Za-z0-9 _-]', $text);
33
}
34

    
35
function step1_submitphpaction() {
36
	global $stepid, $config;
37
	if ($_POST['authtype'] == "local") {
38
		$stepid = 4;
39
		$config['ovpnserver']['step1']['type'] = "local";
40
	} else if ($_POST['authtype'] == "ldap") {
41
		$stepid = 0;
42
	} else if ($_POST['authtype'] == "radius") {
43
		$stepid = 2;
44
		$config['ovpnserver']['step1']['type'] = "radius";
45
		unset($config['ovpnserver']['step1']['uselist']);
46
	}
47
}
48

    
49
function step2_stepbeforeformdisplay() {
50
	global $pkg, $stepid;
51

    
52
	$fields =& $pkg['step'][1]['fields']['field'];
53

    
54
	$found = false;
55
	$authlist = auth_get_authserver_list();
56
	$fields[1]['options']['option'] = array();
57
	foreach ($authlist as $i => $auth) {
58
		if ($auth['type'] != "ldap")
59
			continue;
60
		$found = true;
61
		$opts = array();
62
		$opts['name'] = $auth['name'];
63
		$opts['value'] = $auth['name'];
64
		$fields[1]['options']['option'][] = $opts;
65
	}
66
	if ($found == false) {
67
		$stepid = 2;
68
	}
69
}
70

    
71
function step2_submitphpaction() {
72
	global $stepid;
73

    
74
	if (isset($_POST['next'])) {
75
		$_POST['uselist'] = "";
76
		$stepid +=3;
77
	}
78
}
79

    
80
function step3_submitphpaction() {
81
	global $stepid, $savemsg, $config;
82

    
83
	/* Default LDAP port is 389 for TCP and 636 for SSL */
84
	if (empty($_POST['port'])) {
85
		if ($_POST['transport'] == "tcp")
86
			$config['ovpnserver']['step2']['port'] = 389;
87
		elseif ($_POST['transport'] == "ssl")
88
			$config['ovpnserver']['step2']['port'] = 636;
89
	} elseif (!is_port($_POST['port'])) {
90
		$stepid--;
91
		$savemsg = "Please enter a valid port number.";
92
	}
93

    
94
	if (empty($_POST['name']) || empty($_POST['ip']) ||empty($_POST['transport']) ||
95
	     empty($_POST['scope']) || empty($_POST['basedn']) || empty($_POST['authscope']) || empty($_POST['nameattr'])) {
96
		$stepid--;
97
		$savemsg = "Please enter all information for authentication server.";
98
	} else if (count(($authcfg = auth_get_authserver($_POST['name']))) > 0) {
99
		$stepid--;
100
		$savemsg = "Please choose a different name because an authentication server with this name already exists.";
101
	} elseif (!is_fqdn($_POST['ip']) && !is_ipaddr($_POST['ip'])) {
102
		$stepid--;
103
		$savemsg = "Please enter a valid IP address or hostname for the authentication server.";
104
	} else {
105
		$config['ovpnserver']['step2']['uselist'] = "on";
106
		$_POST['uselist'] = "on";
107
		$stepid += 2;
108
	}
109
}
110

    
111
function step4_stepbeforeformdisplay() {
112
	global $pkg, $stepid;
113

    
114
	$fields =& $pkg['step'][3]['fields']['field'];
115

    
116
	$found = false;
117
	$authlist = auth_get_authserver_list();
118
	$fields[1]['options']['option'] = array();
119
	foreach ($authlist as $i => $auth) {
120
		if ($auth['type'] != "radius")
121
			continue;
122
		$found = true;
123
		$opts = array();
124
		$opts['name'] = $auth['name'];
125
		$opts['value'] = $auth['name'];
126
		$fields[1]['options']['option'][] = $opts;
127
	}
128
	if ($found == false)
129
		$stepid = 4;
130
}
131

    
132
function step4_submitphpaction() {
133
	global $stepid;
134

    
135
	if (isset($_POST['next'])) {
136
		$_POST['uselist'] = "";
137
		$stepid++;
138
	}
139
}
140

    
141
function step5_submitphpaction() {
142
	global $stepid, $savemsg, $config;
143

    
144
	/* Default RADIUS Auth port = 1812 */
145
	if (empty($_POST['port'])) {
146
		$config['ovpnserver']['step2']['port'] = 1812;
147
	} elseif (!is_port($_POST['port'])) {
148
		$stepid--;
149
		$savemsg = "Please enter a valid port number.";
150
	}
151

    
152
	if (empty($_POST['name']) || empty($_POST['ip']) || empty($_POST['secret'])) {
153
		$stepid--;
154
		$savemsg = "Please enter all information for authentication server.";
155
	} else if (count(($authcfg = auth_get_authserver($_POST['name']))) > 0) {
156
		$stepid--;
157
		$savemsg = "Please choose a different name because an authentication server with this name already exists.";
158
	} elseif (!is_fqdn($_POST['ip']) && !is_ipaddr($_POST['ip'])) {
159
		$stepid--;
160
		$savemsg = "Please enter a valid IP address or hostname for the authentication server.";
161
	} else {
162
		$config['ovpnserver']['step2']['uselist'] = "on";
163
		$_POST['uselist'] = "on";
164
	}
165
}
166

    
167
function step6_stepbeforeformdisplay() {
168
	global $stepid, $config;
169

    
170
	if (count($config['ca']) < 1) {
171
		$stepid++;
172
	}
173
}
174

    
175
function step6_submitphpaction() {
176
	global $stepid, $config;
177

    
178
	if (isset($_POST['next'])) {
179
		$_POST['uselist'] = "";
180
		$stepid++;
181
	} else {
182
		$config['ovpnserver']['step6']['uselist'] = "on";
183
		$_POST['uselist'] = "on";
184
	}
185
}
186

    
187
function step7_submitphpaction() {
188
	global $input_errors, $stepid, $savemsg, $_POST, $config;
189

    
190
	$canames = array();
191
	$cacns = array();
192
	if (is_array($config['ca'])) {
193
		foreach($config['ca'] as $ca) {
194
			$canames[] = $ca['descr'];
195
			$cainfo = cert_get_subject_hash($ca['crt']);
196
			$cacns[] = $cainfo["CN"];
197
		}
198
	}
199

    
200
	if (empty($_POST['descr']) || empty($_POST['keylength']) || empty($_POST['lifetime']) ||
201
	    empty($_POST['country']) || empty($_POST['state']) || empty($_POST['city']) ||
202
	    empty($_POST['organization']) || empty($_POST['email'])) {
203
		$stepid--;
204
		$savemsg = "Please enter all information for the new Certificate Authority.";
205
	} elseif (has_special_chars($_POST['country']) || has_special_chars($_POST['state']) || 
206
	    has_special_chars($_POST['city']) || has_special_chars($_POST['organization'])) {
207
		$stepid--;
208
		$input_errors[] = "Please do not use special characters in Certificate field names.";
209
	} elseif (in_array($_POST['descr'], $canames) || in_array($_POST['descr'], $cacns)) {
210
		$stepid--;
211
		$savemsg = "Please enter a different name for the Certicicate Authority. A Certificate Authority with that name already exists.";
212
	} elseif (strlen($_POST['country']) != 2) {
213
		$stepid--;
214
		$savemsg = "Please enter only a two-letter ISO country code";
215
	} else {
216
		$config['ovpnserver']['step6']['uselist'] = "on";
217
		$_POST['uselist'] = "on";
218
	}
219
}
220

    
221
function step8_stepbeforeformdisplay() {
222
	global $stepid, $config;
223

    
224
	if (count($config['cert']) < 1 ||
225
		(count($config['cert']) == 1 && stristr($config['cert'][0]['descr'], "webconf"))) {
226
		$stepid++;
227
	}
228
}
229

    
230
function step8_submitphpaction() {
231
	global $stepid, $_POST;
232

    
233
	if (isset($_POST['next'])) {
234
		$_POST['uselist'] = "";
235
		$stepid++;
236
	}
237
}
238

    
239
function step9_stepbeforeformdisplay() {
240
	global $config, $pkg, $stepid;
241

    
242
	$pconfig = $config['ovpnserver'];
243

    
244
	if (isset($pconfig['step6']['uselist'])) {
245
		$country = $pconfig['step6']['country'];
246
		$state = $pconfig['step6']['state'];
247
		$city = $pconfig['step6']['city'];
248
		$org = $pconfig['step6']['organization'];
249
	} else {
250
		$ca = lookup_ca($pconfig['step6']['authcertca']);
251
		$cavl = cert_get_subject_array($ca['crt']);
252
		$country = $cavl[0]['v'];
253
		$state = $cavl[1]['v'];
254
		$city = $cavl[2]['v'];
255
		$org = $cavl[3]['v'];
256
	}
257
	$fields =& $pkg['step'][$stepid]['fields']['field'];
258

    
259
	foreach ($fields as $idx => $field) {
260
		switch ($field['name']) {
261
		case 'country':
262
			$fields[$idx]['value'] = $country;
263
			break;
264
		case 'state':
265
			$fields[$idx]['value'] = $state;
266
			break;
267
		case 'city':
268
			$fields[$idx]['value'] = $city;
269
			break;
270
		case 'organization':
271
			$fields[$idx]['value'] = $org;
272
			break;
273
		}
274
	}
275
}
276

    
277
function step9_submitphpaction() {
278
	global $input_errors, $stepid, $savemsg, $_POST, $config;
279

    
280
	$certnames = array();
281
	$certcns = array();
282
	if (is_array($config['cert'])) {
283
		foreach($config['cert'] as $cert) {
284
			$certnames[] = $cert['descr'];
285
			$certinfo = cert_get_subject_hash($cert['crt']);
286
			$certcns[] = $certinfo["CN"];
287
		}	
288
	}
289

    
290
	if (empty($_POST['descr']) || empty($_POST['keylength']) || empty($_POST['lifetime']) ||
291
	    empty($_POST['country']) || empty($_POST['state']) || empty($_POST['city']) ||
292
	    empty($_POST['organization']) || empty($_POST['email'])) {
293
		$stepid--;
294
		$savemsg = "Please enter all information for the new certificate.";
295
	} elseif (has_special_chars($_POST['country']) || has_special_chars($_POST['state']) || 
296
	    has_special_chars($_POST['city']) || has_special_chars($_POST['organization'])) {
297
		$stepid--;
298
		$input_errors[] = "Please do not use special characters in Certificate field names.";
299
	} elseif (in_array($_POST['descr'], $certnames) || in_array($_POST['descr'], $certcns)) {
300
		$stepid--;
301
		$savemsg = "Please enter a different name for the Certicicate. A Certificate with that name/common name already exists.";	
302
	} elseif (strlen($_POST['country']) != 2) {
303
		$stepid--;
304
		$savemsg = "Please enter only a two-letter ISO country code";
305
	} else {
306
		$config['ovpnserver']['step9']['uselist'] = "on";
307
		$_POST['uselist'] = "on";
308
	}
309
}
310

    
311
function step10_stepbeforeformdisplay() {
312
	global $pkg, $stepid, $netbios_nodetypes;
313

    
314
	foreach ($pkg['step'][$stepid]['fields']['field'] as $idx => $field) {
315
		if ($field['name'] == "crypto") {
316
			$pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array();
317
			$cipherlist = openvpn_get_cipherlist();
318
			foreach ($cipherlist as $name => $desc) {
319
				$opt = array();
320
				$opt['name'] = $desc;
321
				$opt['value'] = $name;
322
			$pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt;
323
			}
324
		} else if ($field['name'] == "nbttype") {
325
			$pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'] = array();
326
			foreach ($netbios_nodetypes as $type => $name) {
327
				$opt = array();
328
				$opt['name'] = $name;
329
				$opt['value'] = $type;
330
			$pkg['step'][$stepid]['fields']['field'][$idx]['options']['option'][] = $opt;
331
			}
332
		} else if ($field['name'] == "localport") {
333
			$pkg['step'][$stepid]['fields']['field'][$idx]['value'] = openvpn_port_next('UDP');
334
		}
335
	}
336
}
337

    
338
function step10_submitphpaction() {
339
	global $savemsg, $stepid;
340

    
341
	/* Default OpenVPN port to next available port if left empty. */
342
	if (empty($_POST['localport']))
343
		$pconfig["step10"]["localport"] = openvpn_port_next('UDP');
344

    
345
	/* input validation */
346
	if ($result = openvpn_validate_port($_POST['localport'], 'Local port'))
347
		$input_errors[] = $result;
348

    
349
	if ($result = openvpn_validate_cidr($_POST['tunnelnet'], 'Tunnel network'))
350
		$input_errors[] = $result;
351

    
352
	if ($result = openvpn_validate_cidr($_POST['localnet'], 'Local network'))
353
		$input_errors[] = $result;
354

    
355
	$portused = openvpn_port_used($_POST['protocol'], $_POST['localport']);
356
	if ($portused != 0)
357
		$input_errors[] = "The specified 'Local port' is in use. Please select another value";
358

    
359
	if (!isset($_POST['generatetlskey']) && isset($_POST['tlsauthentication']))
360
		if (!strstr($_POST['tlssharedkey'], "-----BEGIN OpenVPN Static key V1-----") ||
361
			!strstr($_POST['tlssharedkey'], "-----END OpenVPN Static key V1-----"))
362
			$input_errors[] = "The field 'TLS Authentication Key' does not appear to be valid";
363

    
364
	if (!empty($_POST['dnsserver1']) && !is_ipaddr(trim($_POST['dnsserver1'])))
365
		$input_errors[] = "The field 'DNS Server #1' must contain a valid IP address";
366
	if (!empty($_POST['dnsserver2']) && !is_ipaddr(trim($_POST['dnsserver2'])))
367
		$input_errors[] = "The field 'DNS Server #2' must contain a valid IP address";
368
	if (!empty($_POST['dnsserver3']) && !is_ipaddr(trim($_POST['dnsserver3'])))
369
		$input_errors[] = "The field 'DNS Server #3' must contain a valid IP address";
370
	if (!empty($_POST['dnsserver4']) && !is_ipaddr(trim($_POST['dnsserver4'])))
371
		$input_errors[] = "The field 'DNS Server #4' must contain a valid IP address";
372

    
373
	if (!empty($_POST['ntpserver1']) && !is_ipaddr(trim($_POST['ntpserver1'])))
374
		$input_errors[] = "The field 'NTP Server #1' must contain a valid IP address";
375
	if (!empty($_POST['ntpserver2']) && !is_ipaddr(trim($_POST['ntpserver2'])))
376
		$input_errors[] = "The field 'NTP Server #2' must contain a valid IP address";
377

    
378
	if (!empty($_POST['winsserver1']) && !is_ipaddr(trim($_POST['winsserver1'])))
379
		$input_errors[] = "The field 'WINS Server #1' must contain a valid IP address";
380
	if (!empty($_POST['winsserver2']) && !is_ipaddr(trim($_POST['winsserver2'])))
381
		$input_errors[] = "The field 'WINS Server #2' must contain a valid IP address";
382

    
383
	if ($_POST['concurrentcon'] && !is_numeric($_POST['concurrentcon']))
384
		$input_errors[] = "The field 'Concurrent connections' must be numeric.";
385

    
386
	if (empty($_POST['tunnelnet']))
387
		$input_errors[] = "You must specify a 'Tunnel network'.";
388

    
389
	if (count($input_errors) > 0) {
390
		$savemsg = $input_errors[0];
391
		$stepid = $stepid - 1;
392
	}
393
}
394

    
395
function step12_submitphpaction() {
396
	global $config;
397

    
398
	$pconfig = $config['ovpnserver'];
399

    
400
	if (!is_array($config['ovpnserver'])) {
401
		$message = "No configuration found please retry again.";
402
		header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=1&message={$message}");
403
		exit;
404
	}
405

    
406
	if ($pconfig['step1']['type'] == "local") {
407
		$auth = array();
408
		$auth['name'] = "Local Database";
409
		$auth['type'] = "local";
410
	} else if (isset($pconfig['step2']['uselist'])) {
411
		$auth = array();
412
		$auth['type'] = $pconfig['step1']['type'];
413
		$auth['refid'] = uniqid();
414
		$auth['name'] = $pconfig['step2']['authtype'];
415

    
416
		if ($auth['type'] == "ldap") {
417
			$auth['host'] = $pconfig['step2']['ip'];
418
			$auth['ldap_port'] = $pconfig['step2']['port'];
419
			if ($pconfig['step1']['transport'] == "tcp")
420
				$auth['ldap_urltype'] = 'TCP - Standard';
421
			else
422
				$auth['ldap_urltype'] = 'SSL - Encrypted';
423
			$auth['ldap_protver'] = 3;
424
			$auth['ldap_scope'] = $pconfig['step2']['scope'];
425
			$auth['ldap_basedn'] = $pconfig['step2']['basedn'];
426
			$auth['ldap_authcn'] = $pconfig['step2']['authscope'];
427
			$auth['ldap_binddn'] = $pconfig['step2']['userdn'];
428
			$auth['ldap_bindpw'] = $pconfig['step2']['passdn'];
429
			$auth['ldap_attr_user'] = $pconfig['step1']['nameattr'];
430
			$auth['ldap_attr_member'] = $pconfig['step1']['memberattr'];
431
			$auth['ldap_attr_group'] = $pconfig['step1']['groupattr'];
432
		} else if ($auth['type'] == "radius") {
433
			$auth['host'] = $pconfig['step2']['ip'];
434
			$auth['radius_auth_port'] = $pconfig['step2']['port'];
435
			$auth['radius_secret'] = $pconfig['step2']['password'];
436
			$auth['radius_srvcs'] = "auth";
437
		}
438
		if (!is_array($config['system']['authserver']))
439
			$config['system']['authserver'] = array();
440

    
441
		$config['system']['authserver'][] = $auth;
442
	} else if (!isset($pconfig['step2']['uselist']) && empty($pconfig['step2']['authserv'])) {
443
		$message = "Please choose an authentication server .";
444
		header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=1&message={$message}");
445
		exit;
446
	} else if (!($auth = auth_get_authserver($pconfig['step2']['authserv']))) {
447
		$message = "Not a valid authentication server has been specified.";
448
		header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=1&message={$message}");
449
		exit;
450
	}
451

    
452
	if (isset($pconfig['step6']['uselist']) && !empty($pconfig['step6']['certca'])) {
453
		$ca = array();
454
		$ca['refid'] = uniqid();
455
		$ca['descr'] = $pconfig['step6']['certca'];
456
		$dn = array(
457
			'countryName' => $pconfig['step6']['country'],
458
			'stateOrProvinceName' => $pconfig['step6']['state'],
459
			'localityName' => $pconfig['step6']['city'],
460
			'organizationName' => $pconfig['step6']['organization'],
461
			'emailAddress' => $pconfig['step6']['email'],
462
			'commonName' => $pconfig['step6']['certca']);
463

    
464
		ca_create($ca, $pconfig['step6']['keylength'], $pconfig['step6']['lifetime'], $dn);
465
		if (!is_array($config['ca']))
466
			$config['ca'] = array();
467

    
468
		$config['ca'][] = $ca;
469
	} else if (!isset($pconfig['step6']['uselist']) && empty($pconfig['step6']['authcertca'])) {
470
		$message = "Please choose a Certificate Authority.";
471
		header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=5&message={$message}");
472
		exit;
473
	} else if (!($ca = lookup_ca($pconfig['step6']['authcertca']))) {
474
		$message = "Not a valid Certificate Authority specified.";
475
		header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=5&message={$message}");
476
		exit;
477
	}
478

    
479
	if (isset($pconfig['step9']['uselist'])) {
480
		$cert = array();
481
		$cert['refid'] = uniqid();
482
		$cert['descr'] = $pconfig['step9']['certname'];
483
		$dn = array(
484
			'countryName' => $pconfig['step9']['country'],
485
			'stateOrProvinceName' => $pconfig['step9']['state'],
486
			'localityName' => $pconfig['step9']['city'],
487
			'organizationName' => $pconfig['step9']['organization'],
488
			'emailAddress' => $pconfig['step9']['email'],
489
			'commonName' => $pconfig['step9']['certname']);
490

    
491
		cert_create($cert, $ca['refid'], $pconfig['step9']['keylength'], $pconfig['step9']['lifetime'], $dn);
492
		if (!is_array($config['cert']))
493
			$config['cert'] = array();
494

    
495
		$config['cert'][] = $cert;
496
	} else if (!isset($pconfig['step6']['uselist']) && empty($pconfig['step9']['authcertname'])) {
497
		$message = "Please choose a Certificate.";
498
		header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=7&message={$message}");
499
		exit;
500
	} else if (!($cert = lookup_cert($pconfig['step9']['authcertname']))) {
501
		$message = "Not a valid Certificate specified.";
502
		header("Location:wizard.php?xml=openvpn_wizard.xml&stepid=7&message={$message}");
503
		exit;
504
	}
505
	$server = array();
506
	$server['vpnid'] = openvpn_vpnid_next();
507
	switch ($auth['type']) {
508
		case "ldap":
509
			$server['authmode'] = $auth['name'];
510
			$server['mode'] = "server_user";
511
			break;
512
		case "radius":
513
			$server['authmode'] = $auth['name'];
514
			$server['mode'] = "server_user";
515
			break;
516
		default:
517
			$server['authmode'] = "Local Database";
518
			$server['mode'] = "server_tls_user";
519
			break;
520
	}
521
	$server['caref'] = $ca['refid'];
522
	$server['certref'] = $cert['refid'];
523
	$server['protocol'] = $pconfig['step10']['protocol'];
524
	$server['interface'] = $pconfig['step10']['interface'];
525
	if (isset($pconfig['step10']['localport']))
526
		$server['local_port'] = $pconfig['step10']['localport'];
527

    
528
	if (strlen($pconfig['step10']['descr']) > 30)
529
		$pconfig['step10']['descr'] = substr($pconfig['step10']['descr'], 0, 30);
530
	$server['description'] = $pconfig['step10']['descr'];
531
	$server['custom_options'] = $pconfig['step10']['advanced'];
532
	if (isset($pconfig['step10']['tlsauth'])) {
533
		if (isset($pconfig['step10']['gentlskey']))
534
			$tlskey = openvpn_create_key();
535
		else
536
			$tlskey = $pconfig['step10']['tlskey'];
537
		$server['tls'] = base64_encode($tlskey);
538
	}
539
	$server['dh_length'] = $pconfig['step10']['dhkey'];
540
	$server['tunnel_network'] = $pconfig['step10']['tunnelnet'];
541
	if (isset($pconfig['step10']['rdrgw']))
542
		$server['gwredir'] = $pconfig['step10']['rdrgw'];
543
	if (isset($pconfig['step10']['localnet']))
544
		$server['local_network'] = $pconfig['step10']['localnet'];
545
	if (isset($pconfig['step10']['concurrentcon']))
546
		$server['maxclients'] = $pconfig['step10']['concurrentcon'];
547
	if (isset($pconfig['step10']['compression']))
548
		$server['compression'] = $pconfig['step10']['compression'];
549
	if (isset($pconfig['step10']['tos']))
550
		$server['passtos'] = $pconfig['step10']['tos'];
551
	if (isset($pconfig['step10']['interclient']))
552
		$server['client2client'] = $pconfig['step10']['interclient'];
553
	if (isset($pconfig['step10']['dynip']))
554
		$server['dynamic_ip'] = $pconfig['step10']['dynip'];
555
	if (isset($pconfig['step10']['addrpool']))
556
		$server['pool_enable'] = $pconfig['step10']['addrpool'];
557
	if (isset($pconfig['step10']['defaultdomain']))
558
		$server['dns_domain'] = $pconfig['step10']['defaultdomain'];
559
	if (isset($pconfig['step10']['dns1']))
560
		$server['dns_server1'] = $pconfig['step10']['dns1'];
561
	if (isset($pconfig['step10']['dns2']))
562
		$server['dns_server2'] = $pconfig['step10']['dns2'];
563
	if (isset($pconfig['step10']['dns3']))
564
		$server['dns_server3'] = $pconfig['step10']['dns3'];
565
	if (isset($pconfig['step10']['dns4']))
566
		$server['dns_server4'] = $pconfig['step10']['dns4'];
567
	if (isset($pconfig['step10']['ntp1']))
568
		$server['ntp_server1'] = $pconfig['step10']['ntp1'];
569
	if (isset($pconfig['step10']['ntp2']))
570
		$server['ntp_server2'] = $pconfig['step10']['ntp2'];
571
	if (isset($pconfig['step10']['wins1']))
572
		$server['wins_server1'] = $pconfig['step10']['wins1'];
573
	if (isset($pconfig['step10']['wins2']))
574
		$server['wins_server2'] = $pconfig['step10']['wins2'];
575
	if (isset($pconfig['step10']['nbtenable'])) {
576
		$server['netbios_ntype'] = $pconfig['step10']['nbttype'];
577
		if (isset($pconfig['step10']['nbtscope']))
578
			$server['netbios_scope'] = $pconfig['step10']['nbtscope'];
579
		$server['netbios_enable'] = $pconfig['step10']['nbtenable'];
580
	}
581
	$server['crypto'] = $pconfig['step10']['crypto'];
582

    
583
	if (isset($pconfig['step11']['ovpnrule'])) {
584
		$rule = array();
585
		$rule['descr'] = gettext("OpenVPN {$server['description']} wizard");
586
		/* Ensure the rule descr is not too long for pf to handle */
587
		if (strlen($rule['descr']) > 52)
588
			$rule['descr'] = substr($rule['descr'], 0, 52);
589
		$rule['direction'] = "in";
590
		$rule['source']['any'] = TRUE;
591
		$rule['destination']['network'] = $server['interface'] . "ip";
592
		$rule['destination']['port'] = $server['local_port'];
593
		$rule['interface'] = $server['interface'];
594
		$rule['protocol'] = $server['protocol'];
595
		$rule['type'] = "pass";
596
		$rule['enabled'] = "on";
597
		$config['filter']['rule'][] = $rule;
598
	}
599
	if (isset($pconfig['step11']['ovpnallow'])) {
600
		$rule = array();
601
		$rule['descr'] = gettext("OpenVPN {$server['description']} wizard");
602
		/* Ensure the rule descr is not too long for pf to handle */
603
		if (strlen($rule['descr']) > 52)
604
			$rule['descr'] = substr($rule['descr'], 0, 52);
605
		$rule['source']['any'] = TRUE;
606
		$rule['destination']['any'] = TRUE;
607
		$rule['interface'] = "openvpn";
608
		//$rule['protocol'] = $server['protocol'];
609
		$rule['type'] = "pass";
610
		$rule['enabled'] = "on";
611
		$config['filter']['rule'][] = $rule;
612
	}
613

    
614
	if (!is_array($config['openvpn']['openvpn-server']))
615
		$config['openvpn']['openvpn-server'] = array();
616

    
617
	$config['openvpn']['openvpn-server'][] = $server;
618

    
619
	openvpn_resync('server', $server);
620
	write_config();
621
	header("Location: vpn_openvpn_server.php");
622
	exit;
623
}
624

    
625
?>
(1-1/11)