Project

General

Profile

Download (20.6 KB) Statistics
| Branch: | Tag: | Revision:
1
<?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
##|+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
require("functions.inc");
40
require("guiconfig.inc");
41
require_once("ipsec.inc");
42
require_once("vpn.inc");
43

    
44
if (!is_array($config['ipsec']['client']))
45
	$config['ipsec']['client'] = array();
46

    
47
$a_client = &$config['ipsec']['client'];
48

    
49
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
	$pconfig['mode'] = $a_phase2[$p2index]['mode'];
66
	$pconfig['descr'] = $a_phase2[$p2index]['descr'];
67
	$old_ph2ent = $a_phase2[$p2index];
68

    
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
	$pconfig['pinghost'] = $a_phase2[$p2index]['pinghost'];
78

    
79
	if (isset($a_phase2[$p2index]['mobile']))
80
		$pconfig['mobile'] = true;
81
}
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

    
95
    /* mobile client */
96
    if($_GET['mobile'])
97
        $pconfig['mobile']=true;
98
}
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
	$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

    
119
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
120

    
121
	if($pconfig['mode'] == "tunnel")
122
	{
123
		switch ($pconfig['localid_type']) {
124
			case "network":
125
				if (($pconfig['localid_netbits'] != 0 && !$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

    
133
		switch ($pconfig['remoteid_type']) {
134
			case "network":
135
				if (($pconfig['remoteid_netbits'] != 0 && !$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
	}
143

    
144
/* TODO : Validate enabled phase2's are not duplicates */
145

    
146
	$ealgos = pconfig_to_ealgos($pconfig);
147

    
148
	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

    
157
		$ph2ent['ikeid'] = $pconfig['ikeid'];
158
		$ph2ent['mode'] = $pconfig['mode'];
159
		$ph2ent['disabled'] = $pconfig['disabled'] ? true : false;
160

    
161
		if($ph2ent['mode'] == "tunnel") {
162
			$ph2ent['localid'] = pconfig_to_idinfo("local",$pconfig);
163
			$ph2ent['remoteid'] = pconfig_to_idinfo("remote",$pconfig);
164
		}
165

    
166
		$ph2ent['protocol'] = $pconfig['proto'];
167
		$ph2ent['encryption-algorithm-option'] = $ealgos;
168
		$ph2ent['hash-algorithm-option'] = $pconfig['halgos'];
169
		$ph2ent['pfsgroup'] = $pconfig['pfsgroup'];
170
		$ph2ent['lifetime'] = $pconfig['lifetime'];
171
		$ph2ent['pinghost'] = $pconfig['pinghost'];
172
		$ph2ent['descr'] = $pconfig['descr'];
173

    
174
		if (isset($pconfig['mobile']))
175
			$ph2ent['mobile'] = true;
176

    
177
		if (isset($p2index) && $a_phase2[$p2index])
178
			$a_phase2[$p2index] = $ph2ent;
179
		else
180
			$a_phase2[] = $ph2ent;
181

    
182

    
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
		write_config();
191
		mark_subsystem_dirty('ipsec');
192

    
193
		header("Location: vpn_ipsec.php");
194
		exit;
195
	}
196
}
197

    
198
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
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

    
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
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

    
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
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

    
284
<?php endif; ?>
285

    
286
function change_protocol() {
287
	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
//-->
296
</script>
297

    
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
				$tab_array[2] = array("Logs", false, "diag_logs_ipsec.php");
313
				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
						<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
						<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
					<tr id="opt_remoteid">
384
						<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
											
406
											echo "<option value=\"{$i}\"";
407
											if ($i == $pconfig['remoteid_netbits']) echo " selected";
408
											echo ">{$i}</option>\n";
409
											} ?>
410
										</select>
411
									</td>
412
								</tr>
413
							</table>
414
						</td>
415
					</tr>
416
					
417
					<?php endif; ?>
418
					
419
					<tr>
420
						<td width="22%" valign="top" class="vncell">Description</td>
421
						<td width="78%" class="vtable">
422
							<input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>">
423
							<br>
424
							<span class="vexpl">
425
								You may enter a description here
426
								for your reference (not parsed).
427
							</span>
428
						</td>
429
					</tr>
430
					<tr>
431
						<td colspan="2" class="list" height="12"></td>
432
					</tr>
433
					<tr>
434
						<td colspan="2" valign="top" class="listtopic">
435
							Phase 2 proposal (SA/Key Exchange)
436
						</td>
437
					</tr>
438
					<tr>
439
						<td width="22%" valign="top" class="vncellreq">Protocol</td>
440
						<td width="78%" class="vtable">
441
							<select name="proto" class="formselect" onChange="change_protocol()">
442
							<?php foreach ($p2_protos as $proto => $protoname): ?>
443
								<option value="<?=$proto;?>" <?php if ($proto == $pconfig['proto']) echo "selected"; ?>>
444
									<?=htmlspecialchars($protoname);?>
445
								</option>
446
							<?php endforeach; ?>
447
							</select>
448
							<br>
449
							<span class="vexpl">
450
								ESP is encryption, AH is authentication only
451
							</span>
452
						</td>
453
					</tr>
454
					<tr id="opt_enc">
455
						<td width="22%" valign="top" class="vncellreq">Encryption algorithms</td>
456
						<td width="78%" class="vtable">
457
							<table border="0" cellspacing="0" cellpadding="0">
458
							<?php
459
								foreach ($p2_ealgos as $algo => $algodata):
460
									$checked = '';
461
									if (in_array($algo,$pconfig['ealgos']))
462
										$checked = " checked";
463
								?>
464
								<tr>
465
									<td>
466
										<input type="checkbox" name="ealgos[]" value="<?=$algo;?>"<?=$checked?>>
467
									</td>
468
									<td>
469
										<?=htmlspecialchars($algodata['name']);?>
470
									</td>
471
									<td>
472
										<?php if(is_array($algodata['keysel'])): ?>
473
										&nbsp;&nbsp;
474
										<select name="keylen_<?=$algo;?>" class="formselect">
475
											<option value="auto">auto</option>
476
											<?php
477
												$key_hi = $algodata['keysel']['hi'];
478
												$key_lo = $algodata['keysel']['lo'];
479
												$key_step = $algodata['keysel']['step'];
480
												for ($keylen = $key_hi; $keylen >= $key_lo; $keylen -= $key_step):
481
													$selected = '';
482
				//									if ($checked && in_array("keylen_".$algo,$pconfig))
483
													if ($keylen == $pconfig["keylen_".$algo])
484
														$selected = " selected";
485
											?>
486
											<option value="<?=$keylen;?>"<?=$selected;?>><?=$keylen;?> bits</option>
487
											<?php endfor; ?>
488
										</select>
489
										<?php endif; ?>
490
									</td>
491
								</tr>
492
								
493
								<?php endforeach; ?>
494
								
495
							</table>
496
							<br>
497
							Hint: use 3DES for best compatibility or if you have a hardware
498
							crypto accelerator card. Blowfish is usually the fastest in
499
							software encryption.
500
						</td>
501
					</tr>
502
					<tr>
503
						<td width="22%" valign="top" class="vncellreq">Hash algorithms</td>
504
						<td width="78%" class="vtable">
505
						<?php foreach ($p2_halgos as $algo => $algoname): ?>
506
							<input type="checkbox" name="halgos[]" value="<?=$algo;?>" <?php if (in_array($algo, $pconfig['halgos'])) echo "checked"; ?>>
507
							<?=htmlspecialchars($algoname);?>
508
							<br>
509
						<?php endforeach; ?>
510
						</td>
511
					</tr>
512
					<tr>
513
						<td width="22%" valign="top" class="vncellreq">PFS key group</td>
514
						<td width="78%" class="vtable">
515
						<?php if (!isset($pconfig['mobile']) || !isset($a_client['pfs_group'])): ?>
516
							<select name="pfsgroup" class="formselect">
517
							<?php foreach ($p2_pfskeygroups as $keygroup => $keygroupname): ?>
518
								<option value="<?=$keygroup;?>" <?php if ($keygroup == $pconfig['pfsgroup']) echo "selected"; ?>>
519
									<?=htmlspecialchars($keygroupname);?>
520
								</option>
521
							<?php endforeach; ?>
522
							</select>
523
							<br>
524
							<span class="vexpl">
525
								<em>
526
									1 = 768 bit, 2 = 1024 bit, 5 = 1536 bit
527
								</em>
528
							</span>
529
							
530
							<?php else: ?>
531

    
532
							<select class="formselect" disabled>
533
								<option selected><?=$p2_pfskeygroups[$a_client['pfs_group']];?></option>
534
							</select>
535
							<input name="pfsgroup" type="hidden" value="<?=$pconfig['pfsgroup'];?>">
536
							<br>
537
							<span class="vexpl"><em>Set globally in mobile client options</em></span>
538
						<?php endif; ?>
539
						</td>
540
					</tr>
541
					<tr>
542
						<td width="22%" valign="top" class="vncell">Lifetime</td>
543
						<td width="78%" class="vtable">
544
							<input name="lifetime" type="text" class="formfld unknown" id="lifetime" size="20" value="<?=$pconfig['lifetime'];?>">
545
							seconds
546
						</td>
547
					</tr>
548
					<tr>
549
						<td colspan="2" class="list" height="12"></td>
550
					</tr>
551
					<tr>
552
						<td colspan="2" valign="top" class="listtopic">Advanced Options</td>
553
					</tr>
554
					<tr>
555
						<td width="22%" valign="top" class="vncell">Automatically ping host</td>
556
						<td width="78%" class="vtable">
557
							<input name="pinghost" type="text" class="formfld unknown" id="pinghost" size="20" value="<?=$pconfig['pinghost'];?>">
558
							IP address
559
						</td>
560
					</tr>
561
					<tr>
562
						<td width="22%" valign="top">&nbsp;</td>
563
						<td width="78%">
564
						<?php if (isset($p2index) && $a_phase2[$p2index]): ?>
565
							<input name="p2index" type="hidden" value="<?=$p2index;?>">
566
						<?php endif; ?>
567
						<?php if ($pconfig['mobile']): ?>
568
							<input name="mobile" type="hidden" value="true">
569
							<input name="remoteid_type" type="hidden" value="mobile">
570
						<?php endif; ?>
571
							<input name="Submit" type="submit" class="formbtn" value="Save">
572
							<input name="ikeid" type="hidden" value="<?=$pconfig['ikeid'];?>">
573
						</td>
574
					</tr>
575
				</table>
576
			</div>
577
		</td>
578
	</tr>
579
</table>
580
</form>
581
<script lannguage="JavaScript">
582
<!--
583
change_mode('<?=$pconfig['mode']?>');
584
change_protocol('<?=$pconfig['proto']?>');
585
typesel_change_local(<?=$pconfig['localid_netbits']?>);
586
typesel_change_remote(<?=$pconfig['remoteid_netbits']?>);
587
//-->
588
</script>
589
<?php include("fend.inc"); ?>
590
</body>
591
</html>
592

    
593
<?php
594

    
595
/* local utility functions */
596

    
597
function pconfig_to_ealgos(& $pconfig) {
598

    
599
	global $p2_ealgos;
600

    
601
	$ealgos = array();
602
	foreach ($p2_ealgos as $algo_name => $algo_data) {
603
		if (in_array($algo_name,$pconfig['ealgos'])) {
604
			$ealg = array();
605
			$ealg['name'] = $algo_name;
606
			if (is_array($algo_data['keysel']))
607
				$ealg['keylen'] = $_POST["keylen_".$algo_name];
608
			$ealgos[] = $ealg;
609
		}
610
	}
611

    
612
	return $ealgos;
613
}
614

    
615
function ealgos_to_pconfig(& $ealgos,& $pconfig) {
616

    
617
	$pconfig['ealgos'] = array();
618
	foreach ($ealgos as $algo_data) {
619
		$pconfig['ealgos'][] = $algo_data['name'];
620
		if (isset($algo_data['keylen']))
621
			$pconfig["keylen_".$algo_data['name']] = $algo_data['keylen'];
622
	}
623

    
624
	return $ealgos;
625
}
626

    
627
function pconfig_to_idinfo($prefix,& $pconfig) {
628

    
629
	$type = $pconfig[$prefix."id_type"];
630
	$address = $pconfig[$prefix."id_address"];
631
	$netbits = $pconfig[$prefix."id_netbits"];
632

    
633
	switch( $type )
634
	{
635
		case "address":
636
			return array('type' => $type, 'address' => $address);
637
		case "network":
638
			return array('type' => $type, 'address' => $address, 'netbits' => $netbits);
639
		default:
640
			return array('type' => $type );
641
	}
642
}
643

    
644
function idinfo_to_pconfig($prefix,& $idinfo,& $pconfig) {
645

    
646
	switch( $idinfo['type'] )
647
	{
648
		case "address":
649
			$pconfig[$prefix."id_type"] = $idinfo['type'];
650
			$pconfig[$prefix."id_address"] = $idinfo['address'];
651
			break;
652
		case "network":
653
			$pconfig[$prefix."id_type"] = $idinfo['type'];
654
			$pconfig[$prefix."id_address"] = $idinfo['address'];
655
			$pconfig[$prefix."id_netbits"] = $idinfo['netbits'];
656
			break;
657
		default:
658
			$pconfig[$prefix."id_type"] = $idinfo['type'];
659
			break;
660
	}
661
}
662

    
663
?>
664

    
(201-201/215)