Project

General

Profile

Download (20.5 KB) Statistics
| Branch: | Tag: | Revision:
1 a93e56c5 Matthew Grooms
<?php
2
/*
3
	vpn_ipsec_phase2.php
4
	part of m0n0wall (http://m0n0.ch/wall)
5
6
	Copyright (C) 2008 Shrew Soft Inc
7
	Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
8
	All rights reserved.
9
10
	Redistribution and use in source and binary forms, with or without
11
	modification, are permitted provided that the following conditions are met:
12
13
	1. Redistributions of source code must retain the above copyright notice,
14
	   this list of conditions and the following disclaimer.
15
16
	2. Redistributions in binary form must reproduce the above copyright
17
	   notice, this list of conditions and the following disclaimer in the
18
	   documentation and/or other materials provided with the distribution.
19
20
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
21
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
22
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
23
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
24
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
	POSSIBILITY OF SUCH DAMAGE.
30
*/
31
32 6b07c15a Matthew Grooms
##|+PRIV
33
##|*IDENT=page-vpn-ipsec-editphase2
34
##|*NAME=VPN: IPsec: Edit Phase 2 page
35
##|*DESCR=Allow access to the 'VPN: IPsec: Edit Phase 2' page.
36
##|*MATCH=vpn_ipsec_phase2.php*
37
##|-PRIV
38
39 0f84b741 Scott Ullrich
require("functions.inc");
40 a93e56c5 Matthew Grooms
require("guiconfig.inc");
41 483e6de8 Scott Ullrich
require_once("ipsec.inc");
42
require_once("vpn.inc");
43 a93e56c5 Matthew Grooms
44 3462a529 Matthew Grooms
if (!is_array($config['ipsec']['client']))
45
	$config['ipsec']['client'] = array();
46
47
$a_client = &$config['ipsec']['client'];
48
49 a93e56c5 Matthew Grooms
if (!is_array($config['ipsec']['phase2']))
50
	$config['ipsec']['phase2'] = array();
51
52
$a_phase2 = &$config['ipsec']['phase2'];
53
54
$p2index = $_GET['p2index'];
55
if (isset($_POST['p2index']))
56
	$p2index = $_POST['p2index'];
57
58
if (isset($_GET['dup']))
59
	$p2index = $_GET['dup'];
60
61
if (isset($p2index) && $a_phase2[$p2index])
62
{
63
	$pconfig['ikeid'] = $a_phase2[$p2index]['ikeid'];
64
	$pconfig['disabled'] = isset($a_phase2[$p2index]['disabled']);
65 4b96b367 mgrooms
	$pconfig['mode'] = $a_phase2[$p2index]['mode'];
66 a93e56c5 Matthew Grooms
	$pconfig['descr'] = $a_phase2[$p2index]['descr'];
67 e92fb875 Seth Mos
	$old_ph2ent = $a_phase2[$p2index];
68 a93e56c5 Matthew Grooms
69
	idinfo_to_pconfig("local",$a_phase2[$p2index]['localid'],$pconfig);
70
	idinfo_to_pconfig("remote",$a_phase2[$p2index]['remoteid'],$pconfig);
71
72
	$pconfig['proto'] = $a_phase2[$p2index]['protocol'];
73
	ealgos_to_pconfig($a_phase2[$p2index]['encryption-algorithm-option'],$pconfig);
74
	$pconfig['halgos'] = $a_phase2[$p2index]['hash-algorithm-option'];
75
	$pconfig['pfsgroup'] = $a_phase2[$p2index]['pfsgroup'];
76
	$pconfig['lifetime'] = $a_phase2[$p2index]['lifetime'];
77 87e07f52 mgrooms
	$pconfig['pinghost'] = $a_phase2[$p2index]['pinghost'];
78 3462a529 Matthew Grooms
79
	if (isset($a_phase2[$p2index]['mobile']))
80
		$pconfig['mobile'] = true;
81 a93e56c5 Matthew Grooms
}
82
else
83
{
84
	$pconfig['ikeid'] = $_GET['ikeid'];
85
86
	/* defaults */
87
	$pconfig['localid_type'] = "lan";
88
	$pconfig['remoteid_type'] = "network";
89
	$pconfig['proto'] = "esp";
90
	$pconfig['ealgos'] = explode(",", "3des,blowfish,cast128,aes");
91
	$pconfig['halgos'] = explode(",", "hmac_sha1,hmac_md5");
92
	$pconfig['pfsgroup'] = "0";
93
	$pconfig['lifetime'] = "3600";
94 3462a529 Matthew Grooms
95
    /* mobile client */
96
    if($_GET['mobile'])
97
        $pconfig['mobile']=true;
98 a93e56c5 Matthew Grooms
}
99
100
if (isset($_GET['dup']))
101
	unset($p2index);
102
103
if ($_POST) {
104
105
	unset($input_errors);
106
	$pconfig = $_POST;
107
108
	if (!isset( $_POST['ikeid']))
109
		$input_errors[] = "A valid ikeid must be specified.";
110
111
	/* input validation */
112 3462a529 Matthew Grooms
	$reqdfields = explode(" ", "localid_type halgos");
113
	$reqdfieldsn = explode(",", "Local network type,P2 Hash Algorithms");
114
	if (!isset($pconfig['mobile'])){
115
		$reqdfields[] = "remoteid_type";
116
		$reqdfieldsn[] = "Remote network type";
117
	}
118 a93e56c5 Matthew Grooms
119
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
120
121 4b96b367 mgrooms
	if($pconfig['mode'] == "tunnel")
122
	{
123
		switch ($pconfig['localid_type']) {
124
			case "network":
125
				if (!$pconfig['localid_netbits'] || !is_numeric($pconfig['localid_netbits']))
126
					$input_errors[] = "A valid local network bit count must be specified..";
127
			case "address":
128
				if (!$pconfig['localid_address'] || !is_ipaddr($pconfig['localid_address']))
129
					$input_errors[] = "A valid local network IP address must be specified.";
130
				break;
131
		}
132 a93e56c5 Matthew Grooms
133 4b96b367 mgrooms
		switch ($pconfig['remoteid_type']) {
134
			case "network":
135
				if (!$pconfig['remoteid_netbits'] || !is_numeric($pconfig['remoteid_netbits']))
136
					$input_errors[] = "A valid remote network bit count must be specified..";
137
			case "address":
138
				if (!$pconfig['remoteid_address'] || !is_ipaddr($pconfig['remoteid_address']))
139
					$input_errors[] = "A valid remote network IP address must be specified.";
140
				break;
141
		}
142 a93e56c5 Matthew Grooms
	}
143
144
/* TODO : Validate enabled phase2's are not duplicates */
145
146 3462a529 Matthew Grooms
	$ealgos = pconfig_to_ealgos($pconfig);
147
148 a93e56c5 Matthew Grooms
	if (!count($ealgos)) {
149
		$input_errors[] = "At least one encryption algorithm must be selected.";
150
	}
151
	if (($_POST['lifetime'] && !is_numeric($_POST['lifetime']))) {
152
		$input_errors[] = "The P2 lifetime must be an integer.";
153
	}
154
155
	if (!$input_errors) {
156 3462a529 Matthew Grooms
157
		$ph2ent['ikeid'] = $pconfig['ikeid'];
158 4b96b367 mgrooms
		$ph2ent['mode'] = $pconfig['mode'];
159 3462a529 Matthew Grooms
		$ph2ent['disabled'] = $pconfig['disabled'] ? true : false;
160
161 4b96b367 mgrooms
		if($ph2ent['mode'] == "tunnel") {
162
			$ph2ent['localid'] = pconfig_to_idinfo("local",$pconfig);
163
			$ph2ent['remoteid'] = pconfig_to_idinfo("remote",$pconfig);
164
		}
165 3462a529 Matthew Grooms
166
		$ph2ent['protocol'] = $pconfig['proto'];
167 a93e56c5 Matthew Grooms
		$ph2ent['encryption-algorithm-option'] = $ealgos;
168 3462a529 Matthew Grooms
		$ph2ent['hash-algorithm-option'] = $pconfig['halgos'];
169
		$ph2ent['pfsgroup'] = $pconfig['pfsgroup'];
170
		$ph2ent['lifetime'] = $pconfig['lifetime'];
171 87e07f52 mgrooms
		$ph2ent['pinghost'] = $pconfig['pinghost'];
172 3462a529 Matthew Grooms
		$ph2ent['descr'] = $pconfig['descr'];
173
174
		if (isset($pconfig['mobile']))
175
			$ph2ent['mobile'] = true;
176 a93e56c5 Matthew Grooms
177
		if (isset($p2index) && $a_phase2[$p2index])
178
			$a_phase2[$p2index] = $ph2ent;
179
		else
180
			$a_phase2[] = $ph2ent;
181
182 e92fb875 Seth Mos
183
		/* now we need to find all phase2 entries for this host */
184
		if(is_array($ph2ent)) {
185
			ipsec_lookup_phase1($ph2ent, $ph1ent);
186
			$old_ph1ent = $ph1ent;
187
			reload_tunnel_spd_policy ($ph1ent, $ph2ent, $old_ph1ent, $old_ph2ent);
188
		}
189
190 a93e56c5 Matthew Grooms
		write_config();
191 a368a026 Ermal Lu?i
		mark_subsystem_dirty('ipsec');
192 a93e56c5 Matthew Grooms
193
		header("Location: vpn_ipsec.php");
194
		exit;
195
	}
196
}
197
198 3462a529 Matthew Grooms
if ($pconfig['mobile'])
199
    $pgtitle = array("VPN","IPsec","Edit Phase 2", "Mobile Client");
200
else
201
    $pgtitle = array("VPN","IPsec","Edit Phase 2");
202
203 a93e56c5 Matthew Grooms
include("head.inc");
204
205
?>
206
207
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
208
<?php include("fbegin.inc"); ?>
209
<script language="JavaScript">
210
<!--
211 4b96b367 mgrooms
212
function change_mode() {
213
	index = document.iform.mode.selectedIndex;
214
	value = document.iform.mode.options[index].value;
215
	if (value == 'tunnel') {
216
		document.getElementById('opt_localid').style.display = '';
217
		document.getElementById('opt_remoteid').style.display = '';
218
	} else {
219
		document.getElementById('opt_localid').style.display = 'none';
220
		document.getElementById('opt_remoteid').style.display = 'none';
221
	}
222
}
223
224 a93e56c5 Matthew Grooms
function typesel_change_local(bits) {
225
226
	if (!bits)
227
		bits = 24;
228
229
	switch (document.iform.localid_type.selectedIndex) {
230
		case 0:	/* single */
231
			document.iform.localid_address.disabled = 0;
232
			document.iform.localid_netbits.value = 0;
233
			document.iform.localid_netbits.disabled = 1;
234
			break;
235
		case 1:	/* network */
236
			document.iform.localid_address.disabled = 0;
237
			document.iform.localid_netbits.value = bits;
238
			document.iform.localid_netbits.disabled = 0;
239
			break;
240
		default:
241
			document.iform.localid_address.value = "";
242
			document.iform.localid_address.disabled = 1;
243
			document.iform.localid_netbits.value = 0;
244
			document.iform.localid_netbits.disabled = 1;
245
			break;
246
	}
247
}
248 3462a529 Matthew Grooms
249
<?php if (isset($pconfig['mobile'])): ?>
250
251
function typesel_change_remote(bits) {
252
253
	document.iform.remoteid_address.disabled = 1;
254
	document.iform.remoteid_netbits.disabled = 1;
255
}
256
257
<?php else: ?>
258
259 a93e56c5 Matthew Grooms
function typesel_change_remote(bits) {
260
261
	if (!bits)
262
		bits = 24;
263
264
	switch (document.iform.remoteid_type.selectedIndex) {
265
		case 0:	/* single */
266
			document.iform.remoteid_address.disabled = 0;
267
			document.iform.remoteid_netbits.value = 0;
268
			document.iform.remoteid_netbits.disabled = 1;
269
			break;
270
		case 1:	/* network */
271
			document.iform.remoteid_address.disabled = 0;
272
			document.iform.remoteid_netbits.value = bits;
273
			document.iform.remoteid_netbits.disabled = 0;
274
			break;
275
		default:
276
			document.iform.remoteid_address.value = "";
277
			document.iform.remoteid_address.disabled = 1;
278
			document.iform.remoteid_netbits.value = 0;
279
			document.iform.remoteid_netbits.disabled = 1;
280
			break;
281
	}
282
}
283 3462a529 Matthew Grooms
284
<?php endif; ?>
285
286 4b96b367 mgrooms
function change_protocol() {
287 87e07f52 mgrooms
	index = document.iform.proto.selectedIndex;
288
	value = document.iform.proto.options[index].value;
289
	if (value == 'esp')
290
		document.getElementById('opt_enc').style.display = '';
291
	else
292
		document.getElementById('opt_enc').style.display = 'none';
293
}
294
295 a93e56c5 Matthew Grooms
//-->
296
</script>
297 5a3b0d3b mgrooms
298
<form action="vpn_ipsec_phase2.php" method="post" name="iform" id="iform">
299
300
<?php
301
	if ($input_errors)
302
		print_input_errors($input_errors);
303
?>
304
305
<table width="100%" border="0" cellpadding="0" cellspacing="0">
306
	<tr class="tabnavtbl">
307
		<td id="tabnav">
308
			<?php
309
				$tab_array = array();
310
				$tab_array[0] = array("Tunnels", true, "vpn_ipsec.php");
311
				$tab_array[1] = array("Mobile clients", false, "vpn_ipsec_mobile.php");
312 09725e76 Chris Buechler
				$tab_array[2] = array("Logs", false, "diag_logs_ipsec.php");
313 5a3b0d3b mgrooms
				display_top_tabs($tab_array);
314
			?>
315
		</td>
316
	</tr>
317
	<tr>
318
		<td id="mainarea">
319
			<div class="tabcont">
320
				<table width="100%" border="0" cellpadding="6" cellspacing="0">
321
					<tr>
322
						<td width="22%" valign="top" class="vncellreq">Disabled</td>
323
						<td width="78%" class="vtable">
324
							<input name="disabled" type="checkbox" id="disabled" value="yes" <?php if ($pconfig['disabled']) echo "checked"; ?>>
325
							<strong>Disable this phase2 entry</strong>
326
							<br>
327
							<span class="vexpl">Set this option to disable this phase2 entry without
328
							  removing it from the list.
329
							</span>
330
						</td>
331
					</tr>
332
					<tr>
333 4b96b367 mgrooms
						<td width="22%" valign="top" class="vncellreq">Mode</td>
334
						<td width="78%" class="vtable">
335
							<select name="mode" class="formselect" onChange="change_mode()">
336
								<?php
337
									foreach($p2_modes as $name => $value):
338
										$selected = "";
339
										if ($name == $pconfig['mode'])
340
											$selected = "selected";
341
								?>
342
								<option value="<?=$name;?>" <?=$selected;?>><?=$value;?></option>
343
								<?php endforeach; ?>
344
							</select>
345
						</td>
346
					</tr>
347
					<tr id="opt_localid">
348 5a3b0d3b mgrooms
						<td width="22%" valign="top" class="vncellreq">Local Network</td>
349
						<td width="78%" class="vtable">
350
							<table border="0" cellspacing="0" cellpadding="0">
351
								<tr>
352
									<td>Type:&nbsp;&nbsp;</td>
353
									<td></td>
354
									<td>
355
										<select name="localid_type" class="formselect" onChange="typesel_change_local()">
356
											<option value="address" <?php if ($pconfig['localid_type'] == "address") echo "selected";?>>Address</option>
357
											<option value="network" <?php if ($pconfig['localid_type'] == "network") echo "selected";?>>Network</option>
358
											<option value="lan" <?php if ($pconfig['localid_type'] == "lan" ) echo "selected";?>>LAN subnet</option>
359
										</select>
360
									</td>
361
								</tr>
362
								<tr>
363
									<td>Address:&nbsp;&nbsp;</td>
364
									<td><?=$mandfldhtmlspc;?></td>
365
									<td>
366
										<input name="localid_address" type="text" class="formfld unknown" id="localid_address" size="20" value="<?=$pconfig['localid_address'];?>">
367
										/
368
										<select name="localid_netbits" class="formselect" id="localid_netbits">
369
										<?php for ($i = 32; $i >= 0; $i--): ?>
370
											<option value="<?=$i;?>" <?php if ($i == $pconfig['localid_netbits']) echo "selected"; ?>>
371
												<?=$i;?>
372
											</option>
373
										<?php endfor; ?>
374
										</select>
375
									</td>
376
								</tr>
377
							</table>
378
						</td>
379
					</tr>
380
381
					<?php if (!isset($pconfig['mobile'])): ?>
382
					
383 4b96b367 mgrooms
					<tr id="opt_remoteid">
384 5a3b0d3b mgrooms
						<td width="22%" valign="top" class="vncellreq">Remote Network</td>
385
						<td width="78%" class="vtable">
386
							<table border="0" cellspacing="0" cellpadding="0">
387
								<tr>
388
									<td>Type:&nbsp;&nbsp;</td>
389
									<td></td>
390
									<td>
391
										<select name="remoteid_type" class="formselect" onChange="typesel_change_remote()">
392
											<option value="address" <?php if ($pconfig['remoteid_type'] == "address") echo "selected"; ?>>Address</option>
393
											<option value="network" <?php if ($pconfig['remoteid_type'] == "network") echo "selected"; ?>>Network</option>
394
										</select>
395
									</td>
396
								</tr>
397
								<tr>
398
									<td>Address:&nbsp;&nbsp;</td>
399
									<td><?=$mandfldhtmlspc;?></td>
400
									<td>
401
										<input name="remoteid_address" type="text" class="formfld unknown" id="remoteid_address" size="20" value="<?=$pconfig['remoteid_address'];?>">
402
										/
403
										<select name="remoteid_netbits" class="formselect" id="remoteid_netbits">
404
										<?php for ($i = 32; $i >= 0; $i--): ?>
405
											<option value="<?=$i;?>" <?php if ($i == $pconfig['remoteid_netbits']) echo "selected"; ?>>
406
												<?=$i;?>
407
											</option>
408
										<?php endfor; ?>
409
										</select>
410
									</td>
411
								</tr>
412
							</table>
413 a93e56c5 Matthew Grooms
						</td>
414 5a3b0d3b mgrooms
					</tr>
415
					
416 3462a529 Matthew Grooms
					<?php endif; ?>
417 5a3b0d3b mgrooms
					
418
					<tr>
419
						<td width="22%" valign="top" class="vncell">Description</td>
420
						<td width="78%" class="vtable">
421
							<input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
422
							<br>
423
							<span class="vexpl">
424
								You may enter a description here
425
								for your reference (not parsed).
426
							</span>
427
						</td>
428
					</tr>
429
					<tr>
430
						<td colspan="2" class="list" height="12"></td>
431
					</tr>
432
					<tr>
433
						<td colspan="2" valign="top" class="listtopic">
434
							Phase 2 proposal (SA/Key Exchange)
435
						</td>
436
					</tr>
437
					<tr>
438
						<td width="22%" valign="top" class="vncellreq">Protocol</td>
439
						<td width="78%" class="vtable">
440 4b96b367 mgrooms
							<select name="proto" class="formselect" onChange="change_protocol()">
441 5a3b0d3b mgrooms
							<?php foreach ($p2_protos as $proto => $protoname): ?>
442
								<option value="<?=$proto;?>" <?php if ($proto == $pconfig['proto']) echo "selected"; ?>>
443
									<?=htmlspecialchars($protoname);?>
444
								</option>
445
							<?php endforeach; ?>
446
							</select>
447
							<br>
448
							<span class="vexpl">
449
								ESP is encryption, AH is authentication only
450
							</span>
451
						</td>
452
					</tr>
453 87e07f52 mgrooms
					<tr id="opt_enc">
454 5a3b0d3b mgrooms
						<td width="22%" valign="top" class="vncellreq">Encryption algorithms</td>
455
						<td width="78%" class="vtable">
456
							<table border="0" cellspacing="0" cellpadding="0">
457
							<?php
458
								foreach ($p2_ealgos as $algo => $algodata):
459
									$checked = '';
460
									if (in_array($algo,$pconfig['ealgos']))
461
										$checked = " checked";
462
								?>
463
								<tr>
464
									<td>
465
										<input type="checkbox" name="ealgos[]" value="<?=$algo;?>"<?=$checked?>>
466
									</td>
467
									<td>
468
										<?=htmlspecialchars($algodata['name']);?>
469
									</td>
470
									<td>
471
										<?php if(is_array($algodata['keysel'])): ?>
472
										&nbsp;&nbsp;
473
										<select name="keylen_<?=$algo;?>" class="formselect">
474
											<option value="auto">auto</option>
475
											<?php
476
												$key_hi = $algodata['keysel']['hi'];
477
												$key_lo = $algodata['keysel']['lo'];
478
												$key_step = $algodata['keysel']['step'];
479
												for ($keylen = $key_hi; $keylen >= $key_lo; $keylen -= $key_step):
480
													$selected = '';
481
				//									if ($checked && in_array("keylen_".$algo,$pconfig))
482
													if ($keylen == $pconfig["keylen_".$algo])
483
														$selected = " selected";
484
											?>
485
											<option value="<?=$keylen;?>"<?=$selected;?>><?=$keylen;?> bits</option>
486
											<?php endfor; ?>
487
										</select>
488
										<?php endif; ?>
489
									</td>
490
								</tr>
491
								
492
								<?php endforeach; ?>
493
								
494
							</table>
495
							<br>
496
							Hint: use 3DES for best compatibility or if you have a hardware
497
							crypto accelerator card. Blowfish is usually the fastest in
498
							software encryption.
499
						</td>
500
					</tr>
501
					<tr>
502
						<td width="22%" valign="top" class="vncellreq">Hash algorithms</td>
503
						<td width="78%" class="vtable">
504
						<?php foreach ($p2_halgos as $algo => $algoname): ?>
505
							<input type="checkbox" name="halgos[]" value="<?=$algo;?>" <?php if (in_array($algo, $pconfig['halgos'])) echo "checked"; ?>>
506
							<?=htmlspecialchars($algoname);?>
507
							<br>
508
						<?php endforeach; ?>
509
						</td>
510
					</tr>
511
					<tr>
512
						<td width="22%" valign="top" class="vncellreq">PFS key group</td>
513
						<td width="78%" class="vtable">
514
						<?php if (!isset($pconfig['mobile']) || !isset($a_client['pfs_group'])): ?>
515
							<select name="pfsgroup" class="formselect">
516
							<?php foreach ($p2_pfskeygroups as $keygroup => $keygroupname): ?>
517
								<option value="<?=$keygroup;?>" <?php if ($keygroup == $pconfig['pfsgroup']) echo "selected"; ?>>
518
									<?=htmlspecialchars($keygroupname);?>
519
								</option>
520
							<?php endforeach; ?>
521
							</select>
522
							<br>
523
							<span class="vexpl">
524
								<em>
525
									1 = 768 bit, 2 = 1024 bit, 5 = 1536 bit
526
								</em>
527
							</span>
528
							
529
							<?php else: ?>
530
531
							<select class="formselect" disabled>
532
								<option selected><?=$p2_pfskeygroups[$a_client['pfs_group']];?></option>
533
							</select>
534
							<input name="pfsgroup" type="hidden" value="<?=$pconfig['pfsgroup'];?>">
535
							<br>
536
							<span class="vexpl"><em>Set globally in mobile client options</em></span>
537
						<?php endif; ?>
538
						</td>
539
					</tr>
540
					<tr>
541
						<td width="22%" valign="top" class="vncell">Lifetime</td>
542
						<td width="78%" class="vtable">
543
							<input name="lifetime" type="text" class="formfld unknown" id="lifetime" size="20" value="<?=$pconfig['lifetime'];?>">
544
							seconds
545
						</td>
546
					</tr>
547 87e07f52 mgrooms
					<tr>
548
						<td colspan="2" class="list" height="12"></td>
549
					</tr>
550
					<tr>
551
						<td colspan="2" valign="top" class="listtopic">Advanced Options</td>
552
					</tr>
553
					<tr>
554
						<td width="22%" valign="top" class="vncell">Automatically ping host</td>
555
						<td width="78%" class="vtable">
556
							<input name="pinghost" type="text" class="formfld unknown" id="pinghost" size="20" value="<?=$pconfig['pinghost'];?>">
557
							IP address
558
						</td>
559
					</tr>
560 5a3b0d3b mgrooms
					<tr>
561
						<td width="22%" valign="top">&nbsp;</td>
562
						<td width="78%">
563
						<?php if (isset($p2index) && $a_phase2[$p2index]): ?>
564
							<input name="p2index" type="hidden" value="<?=$p2index;?>">
565
						<?php endif; ?>
566
						<?php if ($pconfig['mobile']): ?>
567
							<input name="mobile" type="hidden" value="true">
568
							<input name="remoteid_type" type="hidden" value="mobile">
569
						<?php endif; ?>
570
							<input name="Submit" type="submit" class="formbtn" value="Save">
571
							<input name="ikeid" type="hidden" value="<?=$pconfig['ikeid'];?>">
572
						</td>
573
					</tr>
574
				</table>
575
			</div>
576
		</td>
577
	</tr>
578
</table>
579 a93e56c5 Matthew Grooms
</form>
580
<script lannguage="JavaScript">
581
<!--
582 4b96b367 mgrooms
change_mode('<?=$pconfig['mode']?>');
583
change_protocol('<?=$pconfig['proto']?>');
584 a93e56c5 Matthew Grooms
typesel_change_local(<?=$pconfig['localid_netbits']?>);
585
typesel_change_remote(<?=$pconfig['remoteid_netbits']?>);
586
//-->
587
</script>
588
<?php include("fend.inc"); ?>
589 3462a529 Matthew Grooms
</body>
590
</html>
591 a93e56c5 Matthew Grooms
592
<?php
593
594 3462a529 Matthew Grooms
/* local utility functions */
595
596 a93e56c5 Matthew Grooms
function pconfig_to_ealgos(& $pconfig) {
597
598
	global $p2_ealgos;
599
600
	$ealgos = array();
601
	foreach ($p2_ealgos as $algo_name => $algo_data) {
602
		if (in_array($algo_name,$pconfig['ealgos'])) {
603
			$ealg = array();
604
			$ealg['name'] = $algo_name;
605
			if (is_array($algo_data['keysel']))
606
				$ealg['keylen'] = $_POST["keylen_".$algo_name];
607
			$ealgos[] = $ealg;
608
		}
609
	}
610
611
	return $ealgos;
612
}
613
614
function ealgos_to_pconfig(& $ealgos,& $pconfig) {
615
616
	$pconfig['ealgos'] = array();
617
	foreach ($ealgos as $algo_data) {
618
		$pconfig['ealgos'][] = $algo_data['name'];
619
		if (isset($algo_data['keylen']))
620
			$pconfig["keylen_".$algo_data['name']] = $algo_data['keylen'];
621
	}
622
623
	return $ealgos;
624
}
625
626
function pconfig_to_idinfo($prefix,& $pconfig) {
627
628
	$type = $pconfig[$prefix."id_type"];
629
	$address = $pconfig[$prefix."id_address"];
630
	$netbits = $pconfig[$prefix."id_netbits"];
631
632
	switch( $type )
633
	{
634
		case "address":
635
			return array('type' => $type, 'address' => $address);
636
		case "network":
637
			return array('type' => $type, 'address' => $address, 'netbits' => $netbits);
638
		default:
639
			return array('type' => $type );
640
	}
641
}
642
643
function idinfo_to_pconfig($prefix,& $idinfo,& $pconfig) {
644
645
	switch( $idinfo['type'] )
646
	{
647
		case "address":
648
			$pconfig[$prefix."id_type"] = $idinfo['type'];
649
			$pconfig[$prefix."id_address"] = $idinfo['address'];
650
			break;
651
		case "network":
652
			$pconfig[$prefix."id_type"] = $idinfo['type'];
653
			$pconfig[$prefix."id_address"] = $idinfo['address'];
654
			$pconfig[$prefix."id_netbits"] = $idinfo['netbits'];
655
			break;
656
		default:
657
			$pconfig[$prefix."id_type"] = $idinfo['type'];
658
			break;
659
	}
660
}
661
662
?>