Project

General

Profile

Download (69.7 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/*
3
	Copyright (C) 2004-2009 Scott Ullrich <sullrich@gmail.com>
4
	All rights reserved.
5

    
6
	originally part of m0n0wall (http://m0n0.ch/wall)
7
	Copyright (C) 2003-2004 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
/*
33
	pfSense_BUILDER_BINARIES:	/usr/bin/find	/bin/cd	/usr/local/bin/rrdtool	/usr/bin/nice
34
	pfSense_MODULE:	config
35
*/
36

    
37
if(!function_exists("dump_rrd_to_xml")) 
38
	require("rrd.inc");
39

    
40
/* Upgrade functions must be named:
41
*    upgrade_XXX_to_YYY
42
	* where XXX == previous version, zero padded, and YYY == next version, zero padded
43
	*/
44
function upgrade_010_to_011() {
45
	global $config;
46
	$opti = 1;
47
	$ifmap = array('lan' => 'lan', 'wan' => 'wan', 'pptp' => 'pptp');
48

    
49
	/* convert DMZ to optional, if necessary */
50
	if (isset($config['interfaces']['dmz'])) {
51

    
52
		$dmzcfg = &$config['interfaces']['dmz'];
53

    
54
		if ($dmzcfg['if']) {
55
			$config['interfaces']['opt' . $opti] = array();
56
			$optcfg = &$config['interfaces']['opt' . $opti];
57

    
58
			$optcfg['enable'] = $dmzcfg['enable'];
59
			$optcfg['descr'] = "DMZ";
60
			$optcfg['if'] = $dmzcfg['if'];
61
			$optcfg['ipaddr'] = $dmzcfg['ipaddr'];
62
			$optcfg['subnet'] = $dmzcfg['subnet'];
63

    
64
			$ifmap['dmz'] = "opt" . $opti;
65
			$opti++;
66
		}
67

    
68
		unset($config['interfaces']['dmz']);
69
	}
70

    
71
	/* convert WLAN1/2 to optional, if necessary */
72
	for ($i = 1; isset($config['interfaces']['wlan' . $i]); $i++) {
73

    
74
		if (!$config['interfaces']['wlan' . $i]['if']) {
75
			unset($config['interfaces']['wlan' . $i]);
76
			continue;
77
		}
78

    
79
		$wlancfg = &$config['interfaces']['wlan' . $i];
80
		$config['interfaces']['opt' . $opti] = array();
81
		$optcfg = &$config['interfaces']['opt' . $opti];
82

    
83
		$optcfg['enable'] = $wlancfg['enable'];
84
		$optcfg['descr'] = "WLAN" . $i;
85
		$optcfg['if'] = $wlancfg['if'];
86
		$optcfg['ipaddr'] = $wlancfg['ipaddr'];
87
		$optcfg['subnet'] = $wlancfg['subnet'];
88
		$optcfg['bridge'] = $wlancfg['bridge'];
89

    
90
		$optcfg['wireless'] = array();
91
		$optcfg['wireless']['mode'] = $wlancfg['mode'];
92
		$optcfg['wireless']['ssid'] = $wlancfg['ssid'];
93
		$optcfg['wireless']['channel'] = $wlancfg['channel'];
94
		$optcfg['wireless']['wep'] = $wlancfg['wep'];
95

    
96
		$ifmap['wlan' . $i] = "opt" . $opti;
97

    
98
		unset($config['interfaces']['wlan' . $i]);
99
		$opti++;
100
	}
101

    
102
	/* convert filter rules */
103
	$n = count($config['filter']['rule']);
104
	for ($i = 0; $i < $n; $i++) {
105

    
106
		$fr = &$config['filter']['rule'][$i];
107

    
108
		/* remap interface */
109
		if (array_key_exists($fr['interface'], $ifmap))
110
			$fr['interface'] = $ifmap[$fr['interface']];
111
		else {
112
			/* remove the rule */
113
			echo "\nWarning: filter rule removed " .
114
				"(interface '{$fr['interface']}' does not exist anymore).";
115
			unset($config['filter']['rule'][$i]);
116
			continue;
117
		}
118

    
119
		/* remap source network */
120
		if (isset($fr['source']['network'])) {
121
			if (array_key_exists($fr['source']['network'], $ifmap))
122
				$fr['source']['network'] = $ifmap[$fr['source']['network']];
123
			else {
124
				/* remove the rule */
125
				echo "\nWarning: filter rule removed " .
126
					"(source network '{$fr['source']['network']}' does not exist anymore).";
127
				unset($config['filter']['rule'][$i]);
128
				continue;
129
			}
130
		}
131

    
132
		/* remap destination network */
133
		if (isset($fr['destination']['network'])) {
134
			if (array_key_exists($fr['destination']['network'], $ifmap))
135
				$fr['destination']['network'] = $ifmap[$fr['destination']['network']];
136
			else {
137
				/* remove the rule */
138
				echo "\nWarning: filter rule removed " .
139
					"(destination network '{$fr['destination']['network']}' does not exist anymore).";
140
				unset($config['filter']['rule'][$i]);
141
				continue;
142
			}
143
		}
144
	}
145

    
146
	/* convert shaper rules */
147
	$n = count($config['pfqueueing']['rule']);
148
	if (is_array($config['pfqueueing']['rule']))
149
	for ($i = 0; $i < $n; $i++) {
150

    
151
		$fr = &$config['pfqueueing']['rule'][$i];
152

    
153
		/* remap interface */
154
		if (array_key_exists($fr['interface'], $ifmap))
155
			$fr['interface'] = $ifmap[$fr['interface']];
156
		else {
157
			/* remove the rule */
158
			echo "\nWarning: traffic shaper rule removed " .
159
				"(interface '{$fr['interface']}' does not exist anymore).";
160
			unset($config['pfqueueing']['rule'][$i]);
161
			continue;
162
		}
163

    
164
		/* remap source network */
165
		if (isset($fr['source']['network'])) {
166
			if (array_key_exists($fr['source']['network'], $ifmap))
167
				$fr['source']['network'] = $ifmap[$fr['source']['network']];
168
			else {
169
				/* remove the rule */
170
				echo "\nWarning: traffic shaper rule removed " .
171
					"(source network '{$fr['source']['network']}' does not exist anymore).";
172
				unset($config['pfqueueing']['rule'][$i]);
173
				continue;
174
			}
175
		}
176

    
177
		/* remap destination network */
178
		if (isset($fr['destination']['network'])) {
179
			if (array_key_exists($fr['destination']['network'], $ifmap))
180
				$fr['destination']['network'] = $ifmap[$fr['destination']['network']];
181
			else {
182
				/* remove the rule */
183
				echo "\nWarning: traffic shaper rule removed " .
184
					"(destination network '{$fr['destination']['network']}' does not exist anymore).";
185
				unset($config['pfqueueing']['rule'][$i]);
186
				continue;
187
			}
188
		}
189
	}
190
}
191

    
192

    
193
function upgrade_011_to_012() {
194
	global $config;
195
	/* move LAN DHCP server config */
196
	$tmp = $config['dhcpd'];
197
	$config['dhcpd'] = array();
198
	$config['dhcpd']['lan'] = $tmp;
199

    
200
	/* encrypt password */
201
	$config['system']['password'] = crypt($config['system']['password']);
202
}
203

    
204

    
205
function upgrade_012_to_013() {
206
	global $config;
207
	/* convert advanced outbound NAT config */
208
	for ($i = 0; isset($config['nat']['advancedoutbound']['rule'][$i]); $i++) {
209
		$curent = &$config['nat']['advancedoutbound']['rule'][$i];
210
		$src = $curent['source'];
211
		$curent['source'] = array();
212
		$curent['source']['network'] = $src;
213
		$curent['destination'] = array();
214
		$curent['destination']['any'] = true;
215
	}
216

    
217
	/* add an explicit type="pass" to all filter rules to make things consistent */
218
	for ($i = 0; isset($config['filter']['rule'][$i]); $i++) {
219
		$config['filter']['rule'][$i]['type'] = "pass";
220
	}
221
}
222

    
223

    
224
function upgrade_013_to_014() {
225
	global $config;
226
	/* convert shaper rules (make pipes) */
227
	if (is_array($config['pfqueueing']['rule'])) {
228
		$config['pfqueueing']['pipe'] = array();
229

    
230
		for ($i = 0; isset($config['pfqueueing']['rule'][$i]); $i++) {
231
			$curent = &$config['pfqueueing']['rule'][$i];
232

    
233
			/* make new pipe and associate with this rule */
234
			$newpipe = array();
235
			$newpipe['descr'] = $curent['descr'];
236
			$newpipe['bandwidth'] = $curent['bandwidth'];
237
			$newpipe['delay'] = $curent['delay'];
238
			$newpipe['mask'] = $curent['mask'];
239
			$config['pfqueueing']['pipe'][$i] = $newpipe;
240

    
241
			$curent['targetpipe'] = $i;
242

    
243
			unset($curent['bandwidth']);
244
			unset($curent['delay']);
245
			unset($curent['mask']);
246
		}
247
	}
248
}
249

    
250

    
251
function upgrade_014_to_015() {
252
	global $config;
253
	/* Default route moved */
254
	if (isset($config['interfaces']['wan']['gateway']))
255
		if ($config['interfaces']['wan']['gateway'] <> "")
256
		$config['interfaces']['wan']['gateway'] = $config['interfaces']['wan']['gateway'];
257
	unset($config['interfaces']['wan']['gateway']);
258

    
259
	/* Queues are no longer interface specific */
260
	if (isset($config['interfaces']['lan']['schedulertype']))
261
		unset($config['interfaces']['lan']['schedulertype']);
262
	if (isset($config['interfaces']['wan']['schedulertype']))
263
		unset($config['interfaces']['wan']['schedulertype']);
264

    
265
	for ($i = 1; isset($config['interfaces']['opt' . $i]); $i++) {
266
		if(isset($config['interfaces']['opt' . $i]['schedulertype']))
267
			unset($config['interfaces']['opt' . $i]['schedulertype']);
268
	}
269
}
270

    
271

    
272
function upgrade_015_to_016() {
273
	global $config;
274
	/* Alternate firmware URL moved */
275
	if (isset($config['system']['firmwareurl']) && isset($config['system']['firmwarename'])) { // Only convert if *both* are defined.
276
		$config['system']['alt_firmware_url'] = array();
277
		$config['system']['alt_firmware_url']['enabled'] = "";
278
		$config['system']['alt_firmware_url']['firmware_base_url'] = $config['system']['firmwareurl'];
279
		$config['system']['alt_firmware_url']['firmware_filename'] = $config['system']['firmwarename'];
280
		unset($config['system']['firmwareurl'], $config['system']['firmwarename']);
281
	} else {
282
		unset($config['system']['firmwareurl'], $config['system']['firmwarename']);
283
	}
284
}
285

    
286

    
287
function upgrade_016_to_017() {
288
	global $config;
289
	/* wipe previous shaper configuration */
290
	unset($config['shaper']['queue']);
291
	unset($config['shaper']['rule']);
292
	unset($config['interfaces']['wan']['bandwidth']);
293
	unset($config['interfaces']['wan']['bandwidthtype']);
294
	unset($config['interfaces']['lan']['bandwidth']);
295
	unset($config['interfaces']['lan']['bandwidthtype']);
296
	$config['shaper']['enable'] = FALSE;
297
}
298

    
299

    
300
function upgrade_017_to_018() {
301
	global $config;
302
	if(isset($config['proxyarp']) && is_array($config['proxyarp']['proxyarpnet'])) {
303
		$proxyarp = &$config['proxyarp']['proxyarpnet'];
304
		foreach($proxyarp as $arpent){
305
			$vip = array();
306
			$vip['mode'] = "proxyarp";
307
			$vip['interface'] = $arpent['interface'];
308
			$vip['descr'] = $arpent['descr'];
309
			if (isset($arpent['range'])) {
310
				$vip['range'] = $arpent['range'];
311
				$vip['type'] = "range";
312
			} else {
313
				$subnet = explode('/', $arpent['network']);
314
				$vip['subnet'] = $subnet[0];
315
				if (isset($subnet[1])) {
316
					$vip['subnet_bits'] = $subnet[1];
317
					$vip['type'] = "network";
318
				} else {
319
					$vip['subnet_bits'] = "32";
320
					$vip['type'] = "single";
321
				}
322
			}
323
			$config['virtualip']['vip'][] = $vip;
324
		}
325
		unset($config['proxyarp']);
326
	}
327
	if(isset($config['installedpackages']) && isset($config['installedpackages']['carp']) && is_array($config['installedpackages']['carp']['config'])) {
328
		$carp = &$config['installedpackages']['carp']['config'];
329
		foreach($carp as $carpent){
330
			$vip = array();
331
			$vip['mode'] = "carp";
332
			$vip['interface'] = "AUTO";
333
			$vip['descr'] = "CARP vhid {$carpent['vhid']}";
334
			$vip['type'] = "single";
335
			$vip['vhid'] = $carpent['vhid'];
336
			$vip['advskew'] = $carpent['advskew'];
337
			$vip['password'] = $carpent['password'];
338
			$vip['subnet'] = $carpent['ipaddress'];
339
			$vip['subnet_bits'] = $carpent['netmask'];
340
			$config['virtualip']['vip'][] = $vip;
341
		}
342
		unset($config['installedpackages']['carp']);
343
	}
344
	/* Server NAT is no longer needed */
345
	unset($config['nat']['servernat']);
346

    
347
	/* enable SSH */
348
	if ($config['version'] == "1.8") {
349
		$config['system']['sshenabled'] = true;
350
	}
351
}
352

    
353

    
354
function upgrade_018_to_019() {
355
	global $config;
356
	$config['theme']="metallic";
357
}
358

    
359

    
360
function upgrade_019_to_020() {
361
	global $config;
362
	if(is_array($config['ipsec']['tunnel'])) {
363
		reset($config['ipsec']['tunnel']);
364
		while (list($index, $tunnel) = each($config['ipsec']['tunnel'])) {
365
			/* Sanity check on required variables */
366
			/* This fixes bogus <tunnel> entries - remnant of bug #393 */
367
			if (!isset($tunnel['local-subnet']) && !isset($tunnel['remote-subnet'])) {
368
				unset($config['ipsec']['tunnel'][$tunnel]);
369
			}
370
		}
371
	}
372
}
373

    
374
function upgrade_020_to_021() {
375
	global $config;
376
	/* shaper scheduler moved */
377
	if(isset($config['system']['schedulertype'])) {
378
		$config['shaper']['schedulertype'] = $config['system']['schedulertype'];
379
		unset($config['system']['schedulertype']);
380
	}
381
}
382

    
383

    
384
function upgrade_021_to_022() {
385
	global $config;
386
	/* move gateway to wan interface */
387
	$config['interfaces']['wan']['gateway'] = $config['system']['gateway'];
388
}
389

    
390
function upgrade_022_to_023() {
391
	global $config;
392
	if(isset($config['shaper'])) {
393
		/* wipe previous shaper configuration */
394
		unset($config['shaper']);
395
	}
396
}
397

    
398

    
399
function upgrade_023_to_024() {
400
	global $config;
401
}
402

    
403

    
404
function upgrade_024_to_025() {
405
	global $config;
406
	$config['interfaces']['wan']['use_rrd_gateway'] = $config['system']['use_rrd_gateway'];
407
	unset($config['system']['use_rrd_gateway']);
408
}
409

    
410

    
411
function upgrade_025_to_026() {
412
	global $config;
413
	$cron_item = array();
414
	$cron_item['minute'] = "0";
415
	$cron_item['hour'] = "*";
416
	$cron_item['mday'] = "*";
417
	$cron_item['month'] = "*";
418
	$cron_item['wday'] = "*";
419
	$cron_item['who'] = "root";
420
	$cron_item['command'] = "/usr/bin/nice -n20 newsyslog";
421

    
422
	$config['cron']['item'][] = $cron_item;
423

    
424
	$cron_item = array();
425
	$cron_item['minute'] = "1,31";
426
	$cron_item['hour'] = "0-5";
427
	$cron_item['mday'] = "*";
428
	$cron_item['month'] = "*";
429
	$cron_item['wday'] = "*";
430
	$cron_item['who'] = "root";
431
	$cron_item['command'] = "/usr/bin/nice -n20 adjkerntz -a";
432

    
433
	$config['cron']['item'][] = $cron_item;
434

    
435
	$cron_item = array();
436
	$cron_item['minute'] = "1";
437
	$cron_item['hour'] = "*";
438
	$cron_item['mday'] = "1";
439
	$cron_item['month'] = "*";
440
	$cron_item['wday'] = "*";
441
	$cron_item['who'] = "root";
442
	$cron_item['command'] = "/usr/bin/nice -n20 /etc/rc.update_bogons.sh";
443

    
444
	$config['cron']['item'][] = $cron_item;
445

    
446
	$cron_item = array();
447
	$cron_item['minute'] = "*/60";
448
	$cron_item['hour'] = "*";
449
	$cron_item['mday'] = "*";
450
	$cron_item['month'] = "*";
451
	$cron_item['wday'] = "*";
452
	$cron_item['who'] = "root";
453
	$cron_item['command'] = "/usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 sshlockout";
454

    
455
	$config['cron']['item'][] = $cron_item;
456

    
457
	$cron_item = array();
458
	$cron_item['minute'] = "1";
459
	$cron_item['hour'] = "1";
460
	$cron_item['mday'] = "*";
461
	$cron_item['month'] = "*";
462
	$cron_item['wday'] = "*";
463
	$cron_item['who'] = "root";
464
	$cron_item['command'] = "/usr/bin/nice -n20 /etc/rc.dyndns.update";
465

    
466
	$config['cron']['item'][] = $cron_item;
467

    
468
	$cron_item = array();
469
	$cron_item['minute'] = "*/60";
470
	$cron_item['hour'] = "*";
471
	$cron_item['mday'] = "*";
472
	$cron_item['month'] = "*";
473
	$cron_item['wday'] = "*";
474
	$cron_item['who'] = "root";
475
	$cron_item['command'] = "/usr/bin/nice -n20 /usr/local/sbin/expiretable -v -t 3600 virusprot";
476

    
477
	$config['cron']['item'][] = $cron_item;
478

    
479
	$cron_item = array();
480
	$cron_item['minute'] = "*/60";
481
	$cron_item['hour'] = "*";
482
	$cron_item['mday'] = "*";
483
	$cron_item['month'] = "*";
484
	$cron_item['wday'] = "*";
485
	$cron_item['who'] = "root";
486
	$cron_item['command'] = "/usr/bin/nice -n20 /usr/local/sbin/expiretable -t 1800 snort2c";
487

    
488
	$config['cron']['item'][] = $cron_item;
489
}
490

    
491

    
492
function upgrade_026_to_027() {
493
	global $config;
494
}
495

    
496

    
497
function upgrade_027_to_028() {
498
	global $config;
499
}
500

    
501

    
502
function upgrade_028_to_029() {
503
	global $config;
504
	$rule_item = array();
505
	$a_filter = &$config['filter']['rule'];
506
	$rule_item['interface'] = "enc0";
507
	$rule_item['type'] = "pass";
508
	$rule_item['source']['any'] = true;
509
	$rule_item['destination']['any'] = true;
510
	$rule_item['descr'] = "Permit IPsec traffic.";
511
	$rule_item['statetype'] = "keep state";
512
	$a_filter[] = $rule_item;
513
}
514

    
515

    
516
function upgrade_029_to_030() {
517
	global $config;
518
	/* enable the rrd config setting by default */
519
	$config['rrd']['enable'] = true;
520
}
521

    
522

    
523
function upgrade_030_to_031() {
524
	global $config;
525
	/* Insert upgrade code here */
526
}
527

    
528

    
529
function upgrade_031_to_032() {
530
	global $config;
531
	/* Insert upgrade code here */
532
}
533

    
534

    
535
function upgrade_032_to_033() {
536
	global $config;
537
	/* Insert upgrade code here */
538
}
539

    
540

    
541
function upgrade_033_to_034() {
542
	global $config;
543
	/* Insert upgrade code here */
544
}
545

    
546

    
547
function upgrade_034_to_035() {
548
	global $config;
549
	/* Insert upgrade code here */
550
}
551

    
552

    
553
function upgrade_035_to_036() {
554
	global $config;
555
	/* Insert upgrade code here */
556
}
557

    
558

    
559
function upgrade_036_to_037() {
560
	global $config;
561
	/* Insert upgrade code here */
562
}
563

    
564

    
565
function upgrade_037_to_038() {
566
	global $config;
567
	/* Insert upgrade code here */
568
}
569

    
570

    
571
function upgrade_038_to_039() {
572
	global $config;
573
	/* Insert upgrade code here */
574
}
575

    
576

    
577
function upgrade_039_to_040() {
578
	global $config;
579
	$config['system']['webgui']['auth_method'] = "session";
580
	$config['system']['webgui']['backing_method'] = "htpasswd";
581

    
582
	if (isset ($config['system']['username'])) {
583
		$config['system']['group'] = array();
584
		$config['system']['group'][0]['name'] = "admins";
585
		$config['system']['group'][0]['description'] = "System Administrators";
586
		$config['system']['group'][0]['scope'] = "system";
587
		$config['system']['group'][0]['pages'] = "ANY";
588
		$config['system']['group'][0]['home'] = "index.php";
589
		$config['system']['group'][0]['gid'] = "110";
590

    
591
		$config['system']['user'] = array();
592
		$config['system']['user'][0]['name'] = "{$config['system']['username']}";
593
		$config['system']['user'][0]['descr'] = "System Administrator";
594
		$config['system']['user'][0]['scope'] = "system";
595
		$config['system']['user'][0]['groupname'] = "admins";
596
		$config['system']['user'][0]['password'] = "{$config['system']['password']}";
597
		$config['system']['user'][0]['uid'] = "0";
598
		/* Ensure that we follow what this new "admin" username should be in the session. */
599
		$_SESSION["Username"] = "{$config['system']['username']}";
600

    
601
		$config['system']['user'][0]['priv'] = array();
602
		$config['system']['user'][0]['priv'][0]['id'] = "lockwc";
603
		$config['system']['user'][0]['priv'][0]['name'] = "Lock webConfigurator";
604
		$config['system']['user'][0]['priv'][0]['descr'] = "Indicates whether this user will lock access to the webConfigurator for other users.";
605
		$config['system']['user'][0]['priv'][1]['id'] = "lock-ipages";
606
		$config['system']['user'][0]['priv'][1]['name'] = "Lock individual pages";
607
		$config['system']['user'][0]['priv'][1]['descr'] = "Indicates whether this user will lock individual HTML pages after having accessed a particular page (the lock will be freed if the user leaves or saves the page form).";
608
		$config['system']['user'][0]['priv'][2]['id'] = "hasshell";
609
		$config['system']['user'][0]['priv'][2]['name'] = "Has shell access";
610
		$config['system']['user'][0]['priv'][2]['descr'] = "Indicates whether this user is able to login for example via SSH.";
611
		$config['system']['user'][0]['priv'][3]['id'] = "copyfiles";
612
		$config['system']['user'][0]['priv'][3]['name'] = "Is allowed to copy files";
613
		$config['system']['user'][0]['priv'][3]['descr'] = "Indicates whether this user is allowed to copy files onto the {$g['product_name']} appliance via SCP/SFTP. If you are going to use this privilege, you must install scponly on the appliance (Hint: pkg_add -r scponly).";
614
		$config['system']['user'][0]['priv'][4]['id'] = "isroot";
615
		$config['system']['user'][0]['priv'][4]['name'] = "Is root user";
616
		$config['system']['user'][0]['priv'][4]['descr'] = "This user is associated with the UNIX root user (you should associate this privilege only with one single user).";
617

    
618
		$config['system']['nextuid'] = "111";
619
		$config['system']['nextgid'] = "111";
620

    
621
		/* wipe previous auth configuration */
622
		unset ($config['system']['username']);
623
		unset ($config['system']['password']);
624
	}
625
}
626

    
627
function upgrade_040_to_041() {
628
	global $config;
629
	if(!$config['sysctl']) {
630
		$config['sysctl']['item'] = array();
631

    
632
		$config['sysctl']['item'][0]['tunable'] = "net.inet.tcp.blackhole";
633
		$config['sysctl']['item'][0]['descr'] =    "Drop packets to closed TCP ports without returning a RST";
634
		$config['sysctl']['item'][0]['value'] =   "default";
635

    
636
		$config['sysctl']['item'][1]['tunable'] = "net.inet.udp.blackhole";
637
		$config['sysctl']['item'][1]['descr'] =    "Do not send ICMP port unreachable messages for closed UDP ports";
638
		$config['sysctl']['item'][1]['value'] =   "default";
639

    
640
		$config['sysctl']['item'][2]['tunable'] = "net.inet.ip.random_id";
641
		$config['sysctl']['item'][2]['descr'] =    "Randomize the ID field in IP packets (default is 0: sequential IP IDs)";
642
		$config['sysctl']['item'][2]['value'] =   "default";
643

    
644
		$config['sysctl']['item'][3]['tunable'] = "net.inet.tcp.drop_synfin";
645
		$config['sysctl']['item'][3]['descr'] =    "Drop SYN-FIN packets (breaks RFC1379, but nobody uses it anyway)";
646
		$config['sysctl']['item'][3]['value'] =   "default";
647

    
648
		$config['sysctl']['item'][4]['tunable'] = "net.inet.ip.redirect";
649
		$config['sysctl']['item'][4]['descr'] =    "Sending of IPv4 ICMP redirects";
650
		$config['sysctl']['item'][4]['value'] =   "default";
651

    
652
		$config['sysctl']['item'][5]['tunable'] = "net.inet6.ip6.redirect";
653
		$config['sysctl']['item'][5]['descr'] =    "Sending of IPv6 ICMP redirects";
654
		$config['sysctl']['item'][5]['value'] =   "default";
655

    
656
		$config['sysctl']['item'][6]['tunable'] = "net.inet.tcp.syncookies";
657
		$config['sysctl']['item'][6]['descr'] =    "Generate SYN cookies for outbound SYN-ACK packets";
658
		$config['sysctl']['item'][6]['value'] =   "default";
659

    
660
		$config['sysctl']['item'][7]['tunable'] = "net.inet.tcp.recvspace";
661
		$config['sysctl']['item'][7]['descr'] =    "Maximum incoming TCP datagram size";
662
		$config['sysctl']['item'][7]['value'] =   "default";
663

    
664
		$config['sysctl']['item'][8]['tunable'] = "net.inet.tcp.sendspace";
665
		$config['sysctl']['item'][8]['descr'] =    "Maximum outgoing TCP datagram size";
666
		$config['sysctl']['item'][8]['value'] =   "default";
667

    
668
		$config['sysctl']['item'][9]['tunable'] = "net.inet.ip.fastforwarding";
669
		$config['sysctl']['item'][9]['descr'] =    "Fastforwarding (see http://lists.freebsd.org/pipermail/freebsd-net/2004-January/002534.html)";
670
		$config['sysctl']['item'][9]['value'] =   "default";
671

    
672
		$config['sysctl']['item'][10]['tunable'] = "net.inet.tcp.delayed_ack";
673
		$config['sysctl']['item'][10]['descr'] =    "Do not delay ACK to try and piggyback it onto a data packet";
674
		$config['sysctl']['item'][10]['value'] =   "default";
675

    
676
		$config['sysctl']['item'][11]['tunable'] = "net.inet.udp.maxdgram";
677
		$config['sysctl']['item'][11]['descr'] =    "Maximum outgoing UDP datagram size";
678
		$config['sysctl']['item'][11]['value'] =   "default";
679

    
680
		$config['sysctl']['item'][12]['tunable'] = "net.link.bridge.pfil_onlyip";
681
		$config['sysctl']['item'][12]['descr'] =    "Handling of non-IP packets which are not passed to pfil (see if_bridge(4))";
682
		$config['sysctl']['item'][12]['value'] =   "default";
683

    
684
		$config['sysctl']['item'][13]['tunable'] = "net.link.tap.user_open";
685
		$config['sysctl']['item'][13]['descr'] =    "Allow unprivileged access to tap(4) device nodes";
686
		$config['sysctl']['item'][13]['value'] =   "default";
687

    
688
		$config['sysctl']['item'][14]['tunable'] = "kern.rndtest.verbose";
689
		$config['sysctl']['item'][14]['descr'] =    "Verbosity of the rndtest driver (0: do not display results on console)";
690
		$config['sysctl']['item'][14]['value'] =   "default";
691

    
692
		$config['sysctl']['item'][15]['tunable'] = "kern.randompid";
693
		$config['sysctl']['item'][15]['descr'] =    "Randomize PID's (see src/sys/kern/kern_fork.c: sysctl_kern_randompid())";
694
		$config['sysctl']['item'][15]['value'] =   "default";
695

    
696
		$config['sysctl']['item'][16]['tunable'] = "net.inet.tcp.inflight.enable";
697
		$config['sysctl']['item'][16]['descr'] =    "The system will attempt to calculate the bandwidth delay product for each connection and limit the amount of data queued to the network to just the amount required to maintain optimum throughput. ";
698
		$config['sysctl']['item'][16]['value'] =   "default";
699

    
700
		$config['sysctl']['item'][17]['tunable'] = "net.inet.icmp.icmplim";
701
		$config['sysctl']['item'][17]['descr'] =    "Set ICMP Limits";
702
		$config['sysctl']['item'][17]['value'] =   "default";
703

    
704
		$config['sysctl']['item'][18]['tunable'] = "net.inet.tcp.tso";
705
		$config['sysctl']['item'][18]['descr'] =    "TCP Offload engine";
706
		$config['sysctl']['item'][18]['value'] =   "default";
707
		
708
		$config['sysctl']['item'][19]['tunable'] = "net.inet.ip.portrange.first";
709
		$config['sysctl']['item'][19]['descr'] =    "Set the ephemeral port range starting port";
710
		$config['sysctl']['item'][19]['value'] =   "default";
711

    
712
		$config['sysctl']['item'][20]['tunable'] = "hw.syscons.kbd_reboot";
713
		$config['sysctl']['item'][20]['descr'] =    "Enables ctrl+alt+delete";
714
		$config['sysctl']['item'][20]['value'] =   "default";
715

    
716
		$config['sysctl']['item'][21]['tunable'] = "kern.ipc.maxsockbuf";
717
		$config['sysctl']['item'][21]['descr'] =    "Maximum socket buffer size";
718
		$config['sysctl']['item'][21]['value'] =   "default";
719

    
720
	}
721
}
722

    
723

    
724
function upgrade_041_to_042() {
725
	global $config;
726
	if (isset($config['shaper']))
727
		unset($config['shaper']);
728
	if (isset($config['ezshaper']))
729
		unset($config['ezshaper']);
730
}
731

    
732

    
733
function upgrade_042_to_043() {
734
	global $config;
735
	/* migrate old interface gateway to the new gateways config */
736
	$iflist = get_configured_interface_list(false, true);
737
	$gateways = array();
738
	$i = 0;
739
	foreach($iflist as $ifname => $interface) {
740
		if(! interface_has_gateway($ifname)) {
741
			continue;
742
		}
743
		$config['gateways']['gateway_item'][$i] = array();
744
		if(is_ipaddr($config['interfaces'][$ifname]['gateway'])) {
745
			$config['gateways']['gateway_item'][$i]['gateway'] = $config['interfaces'][$ifname]['gateway'];
746
			$config['gateways']['gateway_item'][$i]['descr'] = "Interface $ifname Static Gateway";			
747
		} else {
748
			$config['gateways']['gateway_item'][$i]['gateway'] = "dynamic";
749
			$config['gateways']['gateway_item'][$i]['descr'] = "Interface $ifname Dynamic Gateway";			
750
		}
751
		$config['gateways']['gateway_item'][$i]['interface'] = $ifname;
752
		$config['gateways']['gateway_item'][$i]['name'] = "GW_" . strtoupper($ifname);
753
		/* add default gateway bit for wan on upgrade */
754
		if($ifname == "wan") {
755
			 $config['gateways']['gateway_item'][$i]['defaultgw'] = true;
756
		}
757
		if(is_ipaddr($config['interfaces'][$ifname]['use_rrd_gateway'])) {
758
			$config['gateways']['gateway_item'][$i]['monitor'] = $config['interfaces'][$ifname]['use_rrd_gateway'];
759
			unset($config['interfaces'][$ifname]['use_rrd_gateway']);
760
		}
761
		$config['interfaces'][$ifname]['gateway'] = $config['gateways']['gateway_item'][$i]['name'];
762

    
763
		/* Update all filter rules which might reference this gateway */
764
		$j = 0;
765
		foreach($config['filter']['rule'] as $rule) {
766
			if(is_ipaddr($rule['gateway'])) {
767
				if ($rule['gateway'] == $config['gateways']['gateway_item'][$i]['gateway'])
768
					$config['filter']['rule'][$j]['gateway'] = $config['gateways']['gateway_item'][$i]['name'];
769
				else if ($rule['gateway'] == $ifname)
770
					$config['filter']['rule'][$j]['gateway'] = $config['gateways']['gateway_item'][$i]['name'];
771
			}
772
			$j++;
773
		}
774

    
775
		/* rename old Quality RRD files in the process */
776
		$rrddbpath = "/var/db/rrd";
777
		$gwname = "GW_" . strtoupper($ifname);
778
		if(is_readable("{$rrddbpath}/{$ifname}-quality.rrd")) {
779
			rename("{$rrddbpath}/{$ifname}-quality.rrd", "{$rrddbpath}/{$gwname}-quality.rrd");
780
		}
781
		$i++;
782
	}
783
}
784

    
785

    
786
function upgrade_043_to_044() {
787
	global $config;
788

    
789
	/* migrate static routes to the new gateways config */
790
	$gateways = return_gateways_array(true);
791
	$i = 0;
792
	if (is_array($config['staticroutes']['route'])) {
793
		foreach ($config['staticroutes']['route'] as $idx => $sroute) {
794
			$found = false;
795
			foreach ($gateways as $gwname => $gw) {
796
				if ($gw['gateway'] == $sroute['gateway']) {
797
					$config['staticroutes']['route'][$idx]['gateway'] = $gwname;
798
					$found = true;
799
					break;
800
				}
801
			}
802
			if ($found == false) {
803
				$gateway = array();
804
				$gateway['name'] = "SROUTE{$i}";	
805
				$gateway['gateway'] = $sroute['gateway'];
806
				$gateway['interface'] = $sroute['interface'];
807
				$gateway['descr'] = "Upgraded static route for {$sroute['network']}";
808
				if (!is_array($config['gateways']['gateway_item']))
809
					$config['gateways']['gateway_item'] = array();
810
				$config['gateways']['gateway_item'][] = $gateway;
811
				$config['staticroutes']['route'][$idx]['gateway'] = $gateway['name'];
812
				$i++;
813
			}
814
		}
815
	}
816
}
817

    
818

    
819
function upgrade_044_to_045() {
820
	global $config;
821
	$iflist = get_configured_interface_list(false, true);
822
	if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) {
823
		foreach ($config['vlans']['vlan'] as $id => $vlan) {
824
			$config['vlans']['vlan'][$id]['vlanif'] = "{$vlan['if']}_vlan{$vlan['tag']}";
825
			/* Make sure to update the interfaces section with the right name */
826
			foreach($iflist as $ifname) {
827
				if($config['interfaces'][$ifname]['if'] == "vlan{$id}") {
828
					$config['interfaces'][$ifname]['if'] = $vlan['vlanif'];
829
				}
830
			}
831
			
832
		}
833
	}
834
}
835

    
836

    
837
function upgrade_045_to_046() {
838
	global $config;
839
	/* Upgrade load balancer from slb to relayd */
840
	if (is_array($config['load_balancer']['virtual_server']) && count($config['load_balancer']['virtual_server'])) {
841
		$vs_a = &$config['load_balancer']['virtual_server'];
842
		$pool_a = &$config['load_balancer']['lbpool'];
843
		$pools = array();
844
		/* Index pools by name */
845
		if(is_array($pool_a)) {
846
			for ($i = 0; isset($pool_a[$i]); $i++) {
847
				if($pool_a[$i]['type'] == "server") {
848
					$pools[$pool_a[$i]['name']] = $pool_a[$i];
849
				}
850
			}
851
		}
852
		/* Convert sitedown entries to pools and re-attach */
853
		for ($i = 0; isset($vs_a[$i]); $i++) {
854
			if (isset($vs_a[$i]['sitedown'])) {
855
				$pool = array();
856
				$pool['type'] = 'server';
857
				$pool['behaviour'] = 'balance';
858
				$pool['name'] = "{$vs_a[$i]['name']}-sitedown";
859
				$pool['descr'] = "Sitedown pool for VS: {$vs_a[$i]['name']}";
860
				$pool['port'] = $pools[$vs_a[$i]['pool']]['port'];
861
				$pool['servers'] = array();
862
				$pool['servers'][] = $vs_a[$i]['sitedown'];
863
				$pool['monitor'] = $pools[$vs_a[$i]['pool']]['monitor'];
864
				$pool_a[] = $pool;
865
				$vs_a[$i]['sitedown'] = $pool['name'];
866
			}
867
		}
868
	}
869
	if(count($config['load_balancer']) == 0) {
870
		unset($config['load_balancer']);
871
	}
872
}
873

    
874

    
875
function upgrade_046_to_047() {
876
	global $config;
877
	/* Upgrade IPsec from tunnel to phase1/phase2 */
878

    
879
	if(is_array($config['ipsec']['tunnel'])) {
880

    
881
		$a_phase1 = array();
882
		$a_phase2 = array();
883
		$ikeid = 0;
884

    
885
		foreach ($config['ipsec']['tunnel'] as $tunnel) {
886

    
887
			unset($ph1ent);
888
			unset($ph2ent);
889

    
890
			/*
891
				*  attempt to locate an enabled phase1
892
				*  entry that matches the peer gateway
893
				*/
894

    
895
			if (!isset($tunnel['disabled'])) {
896

    
897
				$remote_gateway = $tunnel['remote-gateway'];
898

    
899
				foreach ($a_phase1 as $ph1tmp) {
900
					if ($ph1tmp['remote-gateway'] == $remote_gateway) {
901
						$ph1ent = $ph1tmp;
902
						break;
903
					}
904
				}
905
			}
906

    
907
			/* none found, create a new one */
908

    
909
			if (!isset( $ph1ent )) {
910

    
911
				/* build new phase1 entry */
912

    
913
				$ph1ent = array();
914

    
915
				$ph1ent['ikeid'] = ++$ikeid;
916

    
917
				if (isset($tunnel['disabled']))
918
					$ph1ent['disabled'] = $tunnel['disabled'];
919

    
920
				$ph1ent['interface'] = $tunnel['interface'];
921
				$ph1ent['remote-gateway'] = $tunnel['remote-gateway'];
922
				$ph1ent['descr'] = $tunnel['descr'];
923

    
924
				$ph1ent['mode'] = $tunnel['p1']['mode'];
925

    
926
				if (isset($tunnel['p1']['myident']['myaddress']))
927
					$ph1ent['myid_type'] = "myaddress";
928
				if (isset($tunnel['p1']['myident']['address'])) {
929
					$ph1ent['myid_type'] = "address";
930
					$ph1ent['myid_data'] = $tunnel['p1']['myident']['address'];
931
				}
932
				if (isset($tunnel['p1']['myident']['fqdn'])) {
933
					$ph1ent['myid_type'] = "fqdn";
934
					$ph1ent['myid_data'] = $tunnel['p1']['myident']['fqdn'];
935
				}
936
				if (isset($tunnel['p1']['myident']['ufqdn'])) {
937
					$ph1ent['myid_type'] = "user_fqdn";
938
					$ph1ent['myid_data'] = $tunnel['p1']['myident']['ufqdn'];
939
				}
940
				if (isset($tunnel['p1']['myident']['asn1dn'])) {
941
					$ph1ent['myid_type'] = "asn1dn";
942
					$ph1ent['myid_data'] = $tunnel['p1']['myident']['asn1dn'];
943
				}
944
				if (isset($tunnel['p1']['myident']['dyn_dns'])) {
945
					$ph1ent['myid_type'] = "dyn_dns";
946
					$ph1ent['myid_data'] = $tunnel['p1']['myident']['dyn_dns'];
947
				}
948

    
949
				$ph1ent['peerid_type'] = "peeraddress";
950

    
951
				switch ($tunnel['p1']['encryption-algorithm']) {
952
					case "des":
953
					$ph1alg = array( 'name' => 'des' );
954
					break;
955
					case "3des":
956
					$ph1alg = array( 'name' => '3des' );
957
					break;
958
					case "blowfish":
959
					$ph1alg = array( 'name' => 'blowfish', 'keylen' => '128'  );
960
					break;
961
					case "cast128":
962
					$ph1alg = array( 'name' => 'cast128' );
963
					break;
964
					case "rijndael":
965
					$ph1alg = array( 'name' => 'aes', 'keylen' => '128' );
966
					break;
967
					case "rijndael 256":
968
					$ph1alg = array( 'name' => 'aes', 'keylen' => '256' );
969
					break;
970
				}
971

    
972
				$ph1ent['encryption-algorithm'] = $ph1alg;
973
				$ph1ent['hash-algorithm'] = $tunnel['p1']['hash-algorithm'];
974
				$ph1ent['dhgroup'] = $tunnel['p1']['dhgroup'];
975
				$ph1ent['lifetime'] = $tunnel['p1']['lifetime'];
976
				$ph1ent['authentication_method'] = $tunnel['p1']['authentication_method'];
977

    
978
				if (isset($tunnel['p1']['pre-shared-key']))
979
					$ph1ent['pre-shared-key'] = $tunnel['p1']['pre-shared-key'];
980
				if (isset($tunnel['p1']['cert']))
981
					$ph1ent['cert'] = $tunnel['p1']['cert'];
982
				if (isset($tunnel['p1']['peercert']))
983
					$ph1ent['peercert'] = $tunnel['p1']['peercert'];
984
				if (isset($tunnel['p1']['private-key']))
985
					$ph1ent['private-key'] = $tunnel['p1']['private-key'];
986

    
987
				$ph1ent['nat_traversal'] = "on";
988
				$ph1ent['dpd_enable'] = 1;
989
				$ph1ent['dpd_delay'] = 10;
990
				$ph1ent['dpd_maxfail'] = 5;
991

    
992
				$a_phase1[] = $ph1ent;
993
			}
994

    
995
			/* build new phase2 entry */
996

    
997
			$ph2ent = array();
998

    
999
			$ph2ent['ikeid'] = $ph1ent['ikeid'];
1000

    
1001
			if (isset($tunnel['disabled']))
1002
				$ph1ent['disabled'] = $tunnel['disabled'];
1003

    
1004
			$ph2ent['descr'] = "phase2 for ".$tunnel['descr'];
1005

    
1006
			$type = "lan";
1007
			if ($tunnel['local-subnet']['network'])
1008
				$type = $tunnel['local-subnet']['network'];
1009
			if ($tunnel['local-subnet']['address']) {
1010
				list($address,$netbits) = explode("/",$tunnel['local-subnet']['address']);
1011
				if (is_null($netbits))
1012
					$type = "address";
1013
				else
1014
					$type = "network";
1015
			}
1016

    
1017
			switch ($type) {
1018
				case "address":
1019
				$ph2ent['localid'] = array('type' => $type,'address' => $address);
1020
				break;
1021
				case "network":
1022
				$ph2ent['localid'] = array('type' => $type,'address' => $address,'netbits' => $netbits);
1023
				break;
1024
				default:
1025
				$ph2ent['localid'] = array('type' => $type);
1026
				break;
1027
			}
1028

    
1029
			list($address,$netbits) = explode("/",$tunnel['remote-subnet']);
1030
			$ph2ent['remoteid'] = array('type' => 'network','address' => $address,'netbits' => $netbits);
1031

    
1032
			$ph2ent['protocol'] = $tunnel['p2']['protocol'];
1033

    
1034
			$aes_count = 0;
1035
			foreach( $tunnel['p2']['encryption-algorithm-option'] as $tunalg ) {
1036
				$aes_found = false;
1037
				switch ($tunalg) {
1038
					case "des":
1039
					$ph2alg = array( 'name' => 'des' );
1040
					break;
1041
					case "3des":
1042
					$ph2alg = array( 'name' => '3des' );
1043
					break;
1044
					case "blowfish":
1045
					$ph2alg = array( 'name' => 'blowfish', 'keylen' => 'auto'  );
1046
					break;
1047
					case "cast128":
1048
					$ph2alg = array( 'name' => 'cast128' );
1049
					break;
1050
					case "rijndael":
1051
					case "rijndael 256":
1052
					$ph2alg = array( 'name' => 'aes', 'keylen' => 'auto' );
1053
					$aes_found = true;
1054
					$aes_count++;
1055
					break;
1056
				}
1057

    
1058
				if( !$aes_found || ($aes_count < 2))
1059
					$ph2ent['encryption-algorithm-option'][] = $ph2alg;
1060
			}
1061

    
1062
			$ph2ent['hash-algorithm-option'] = $tunnel['p2']['hash-algorithm-option'];
1063
			$ph2ent['pfsgroup'] = $tunnel['p2']['pfsgroup'];
1064
			$ph2ent['lifetime'] = $tunnel['p2']['lifetime'];
1065

    
1066
			if (isset($tunnel['pinghost']['pinghost']))
1067
				$ph2ent['pinghost'] = $tunnel['pinghost'];
1068

    
1069
			$a_phase2[] = $ph2ent;
1070
		}
1071

    
1072
		unset($config['ipsec']['tunnel']);
1073
		$config['ipsec']['phase1'] = $a_phase1;
1074
		$config['ipsec']['phase2'] = $a_phase2;
1075
	}
1076
}
1077

    
1078

    
1079
function upgrade_047_to_048() {
1080
	global $config;
1081
	if (!empty($config['dyndns'])) {
1082
		$config['dyndnses'] = array();
1083
		$config['dyndnses']['dyndns'] = array();
1084
		if(isset($config['dyndns'][0]['host'])) {
1085
			$tempdyn = array();
1086
			$tempdyn['enable'] = isset($config['dyndns'][0]['enable']);
1087
			$tempdyn['type'] = $config['dyndns'][0]['type'];
1088
			$tempdyn['wildcard'] = isset($config['dyndns'][0]['wildcard']);
1089
			$tempdyn['username'] = $config['dyndns'][0]['username'];
1090
			$tempdyn['password'] = $config['dyndns'][0]['password'];
1091
			$tempdyn['host'] = $config['dyndns'][0]['host'];
1092
			$tempdyn['mx'] = $config['dyndns'][0]['mx'];		
1093
			$tempdyn['interface'] = "wan";
1094
			$tempdyn['descr'] = "Upgraded Dyndns {$tempdyn['type']}";
1095
			$config['dyndnses']['dyndns'][] = $tempdyn;
1096
		}
1097
		unset($config['dyndns']);
1098
	}		
1099
	if (!empty($config['dnsupdate'])) {
1100
		$pconfig = $config['dnsupdate'][0];
1101
		if (!$pconfig['ttl'])
1102
			$pconfig['ttl'] = 60;
1103
		if (!$pconfig['keytype'])
1104
			$pconfig['keytype'] = "zone";
1105
		$pconfig['interface'] = "wan";
1106
		$config['dnsupdates']['dnsupdate'][] = $pconfig;
1107
		unset($config['dnsupdate']);
1108
	}
1109

    
1110
	if (is_array($config['pppoe'])) {
1111
		$pconfig = array();
1112
		$pconfig['username'] = $config['pppoe']['username'];
1113
		$pconfig['password'] = $config['pppoe']['password'];
1114
		$pconfig['provider'] = $config['pppoe']['provider'];
1115
		$pconfig['ondemand'] = isset($config['pppoe']['ondemand']);
1116
		$pconfig['timeout'] = $config['pppoe']['timeout'];
1117
		unset($config['pppoe']);
1118
		$config['interfaces']['wan']['pppoe_username'] = $pconfig['username'];
1119
		$config['interfaces']['wan']['pppoe_password'] = $pconfig['password'];
1120
		$config['interfaces']['wan']['provider'] = $pconfig['provider'];
1121
		$config['interfaces']['wan']['ondemand'] = isset($pconfig['ondemand']);
1122
		$config['interfaces']['wan']['timeout'] = $pconfig['timeout'];
1123
	}
1124
	if (is_array($config['pptp'])) {
1125
		$pconfig = array();
1126
		$pconfig['username'] = $config['pptp']['username'];
1127
		$pconfig['password'] = $config['pptp']['password'];
1128
		$pconfig['provider'] = $config['pptp']['provider'];
1129
		$pconfig['ondemand'] = isset($config['pptp']['ondemand']);
1130
		$pconfig['timeout'] = $config['pptp']['timeout'];
1131
		unset($config['pptp']);
1132
		$config['interfaces']['wan']['pptp_username'] = $pconfig['username'];
1133
		$config['interfaces']['wan']['pptp_password'] = $pconfig['password'];
1134
		$config['interfaces']['wan']['provider'] = $pconfig['provider'];
1135
		$config['interfaces']['wan']['ondemand'] = isset($pconfig['ondemand'] );
1136
		$config['interfaces']['wan']['timeout'] = $pconfig['timeout'];
1137
	}
1138
}
1139

    
1140

    
1141
function upgrade_048_to_049() {
1142
	global $config;
1143
	/* setup new all users group */
1144
	$all = array();
1145
	$all['name'] = "all";
1146
	$all['description'] = "All Users";
1147
	$all['scope'] = "system";
1148
	$all['gid'] = 1998;
1149
	$all['member'] = array();
1150

    
1151
	if (!is_array($config['system']['group']))
1152
		$config['system']['group'] = array();
1153

    
1154
	/* work around broken uid assignments */
1155
	$config['system']['nextuid'] = 2000;
1156
	foreach ($config['system']['user'] as & $user) {
1157
		if (isset($user['uid']) && !$user['uid'])
1158
			continue;
1159
		$user['uid'] = $config['system']['nextuid']++;
1160
	}
1161

    
1162
	/* work around broken gid assignments */
1163
	$config['system']['nextgid'] = 2000;
1164
	foreach ($config['system']['group'] as & $group) {
1165
		if ($group['name'] == $g['admin_group'])
1166
			$group['gid'] = 1999;
1167
		else
1168
			$group['gid'] = $config['system']['nextgid']++;
1169
	}
1170

    
1171
	/* build group membership information */
1172
	foreach ($config['system']['group'] as & $group) {
1173
		$group['member'] = array();
1174
		foreach ($config['system']['user'] as & $user) {
1175
			$groupnames = explode(",", $user['groupname']);
1176
			if (in_array($group['name'],$groupnames))
1177
				$group['member'][] = $user['uid'];
1178
		}
1179
	}
1180

    
1181
	/* reset user group information */
1182
	foreach ($config['system']['user'] as & $user) {
1183
		unset($user['groupname']);
1184
		$all['member'][] = $user['uid'];
1185
	}
1186

    
1187
	/* reset group scope information */
1188
	foreach ($config['system']['group'] as & $group)
1189
		if ($group['name'] != $g['admin_group'])
1190
		$group['scope'] = "user";
1191

    
1192
	/* insert new all group */
1193
	$groups = Array();
1194
	$groups[] = $all;
1195
	$groups = array_merge($config['system']['group'],$groups);
1196
	$config['system']['group'] = $groups;
1197
}
1198

    
1199

    
1200
function upgrade_049_to_050() {
1201
	global $config;
1202
	/* update user privileges */
1203
	foreach ($config['system']['user'] as & $user) {
1204
		$privs = array();
1205
		if (!is_array($user['priv'])) {
1206
			unset($user['priv']);
1207
			continue;
1208
		}
1209
		foreach ($user['priv'] as $priv) {
1210
			switch($priv['id']) {
1211
				case "hasshell":
1212
				$privs[] = "user-shell-access";
1213
				break;
1214
				case "copyfiles":
1215
				$privs[] = "user-copy-files";
1216
				break;
1217
			}
1218
		}
1219
		$user['priv'] = $privs;
1220
	}
1221

    
1222
	/* update group privileges */
1223
	foreach ($config['system']['group'] as & $group) {
1224
		$privs = array();
1225
		if (!is_array($group['pages'])) {
1226
			unset($group['pages']);
1227
			continue;
1228
		}
1229
		foreach ($group['pages'] as $page) {
1230
			$priv = map_page_privname($page);
1231
			if ($priv)
1232
				$privs[] = $priv;
1233
		}
1234
		unset($group['pages']);
1235
		$group['priv'] = $privs;
1236
	}
1237

    
1238
	/* sync all local account information */
1239
	local_sync_accounts();
1240
}
1241

    
1242

    
1243
function upgrade_050_to_051() {
1244
	global $config;
1245
	$pconfig = array();
1246
	$pconfig['descr'] = "Set to 0 to disable filtering on the incoming and outgoing member interfaces.";
1247
	$pconfig['tunable'] = "net.link.bridge.pfil_member";
1248
	$pconfig['value'] = "1";
1249
	$config['sysctl']['item'][] = $pconfig;
1250
	$pconfig = array();
1251
	$pconfig['descr'] = "Set to 1 to enable filtering on the bridge interface";
1252
	$pconfig['tunable'] = "net.link.bridge.pfil_bridge";
1253
	$pconfig['value'] = "0";
1254
	$config['sysctl']['item'][] = $pconfig;
1255

    
1256
	unset($config['bridge']);
1257

    
1258
	$convert_bridges = false;
1259
	foreach($config['interfaces'] as $intf) {
1260
		if (isset($intf['bridge']) && $intf['bridge'] <> "") {
1261
			$config['bridges'] = array();
1262
			$config['bridges']['bridged'] = array();
1263
			$convert_bridges = true;
1264
			break;
1265
		}
1266
	}
1267
	if ($convert_bridges == true) {
1268
		$i = 0;
1269
		foreach ($config['interfaces'] as $ifr => &$intf) {
1270
			if (isset($intf['bridge']) && $intf['bridge'] <> "") {
1271
				$nbridge = array();
1272
				$nbridge['members'] = "{$ifr},{$intf['bridge']}";
1273
				$nbridge['descr'] = "Converted bridged {$ifr}";
1274
				$nbridge['bridgeif'] = "bridge{$i}";
1275
				$config['bridges']['bridged'][] = $nbridge;
1276
				unset($intf['bridge']);
1277
				$i++;
1278
			}
1279
		}
1280
	}
1281
}
1282

    
1283

    
1284
function upgrade_051_to_052() {
1285
	global $config;
1286
	$config['openvpn'] = array();
1287
	if (!is_array($config['ca']))
1288
		$config['ca'] = array();
1289
	if (!is_array($config['cert']))
1290
		$config['cert'] = array();
1291

    
1292
	$vpnid = 1;
1293

    
1294
	/* openvpn server configurations */
1295
	if (is_array($config['installedpackages']['openvpnserver'])) {
1296
		$config['openvpn']['openvpn-server'] = array();
1297

    
1298
		$index = 1;
1299
		foreach($config['installedpackages']['openvpnserver']['config'] as $server) {
1300

    
1301
			if (!is_array($server))
1302
				continue;
1303

    
1304
			if ($server['auth_method'] == "pki") {
1305

    
1306
				/* create ca entry */
1307
				$ca = array();
1308
				$ca['refid'] = uniqid();
1309
				$ca['descr'] = "OpenVPN Server CA #{$index}";
1310
				$ca['crt'] = $server['ca_cert'];
1311
				$config['ca'][] = $ca;
1312

    
1313
				/* create ca reference */
1314
				unset($server['ca_cert']);
1315
				$server['caref'] = $ca['refid'];
1316

    
1317
				/* create a crl entry if needed */
1318
				if (!empty($server['crl'])) {
1319
					$crl = array();
1320
					$crl['refid'] = uniqid();
1321
					$crl['descr'] = "Imported OpenVPN CRL #{$index}";
1322
					$crl['caref'] = $ca['refid'];
1323
					$crl['text'] = $server['crl'];
1324
					if(!is_array($config['crl']))
1325
						$config['crl'] = array();
1326
					$config['crl'][] = $crl;
1327
					$server['crlref'] = $crl['refid'];
1328
				}
1329
				unset($server['crl']);
1330

    
1331
				/* create cert entry */
1332
				$cert = array();
1333
				$cert['refid'] = uniqid();
1334
				$cert['descr'] = "OpenVPN Server Certificate #{$index}";
1335
				$cert['crt'] = $server['server_cert'];
1336
				$cert['prv'] = $server['server_key'];
1337
				$config['cert'][] = $cert;
1338

    
1339
				/* create cert reference */
1340
				unset($server['server_cert']);
1341
				unset($server['server_key']);
1342
				$server['certref'] = $cert['refid'];
1343

    
1344
				$index++;
1345
			}
1346

    
1347
			/* determine operational mode */
1348
			if ($server['auth_method'] == 'pki') {
1349
				if($server['nopool']) {
1350
					$server['mode'] = "p2p_tls";
1351
				} else {
1352
					$server['mode'] = "server_tls";
1353
				}
1354
			} else {
1355
				$server['mode'] = "p2p_shared_key";
1356
			}
1357
			unset($server['auth_method']);
1358

    
1359
			/* modify configuration values */
1360
			$server['dh_length'] = 1024;
1361
			unset($server['dh_params']);
1362
			if (!$server['interface'])
1363
				$server['interface'] = 'wan';
1364
			$server['tunnel_network'] = $server['addresspool'];
1365
			unset($server['addresspool']);
1366
			if (isset($server['use_lzo'])) {
1367
				$server['compression'] = "on";
1368
				unset($server['use_lzo']);
1369
			}
1370
			if ($server['nopool'])
1371
				$server['pool_enable'] = false;
1372
			else
1373
				$server['pool_enable'] = "yes";
1374
			unset($server['nopool']);
1375
			$server['dns_domain'] = $server['dhcp_domainname'];
1376
			unset($server['dhcp_domainname']);
1377
			$server['dns_server1'] = $server['dhcp_dns'];
1378
			unset($server['dhcp_dns']);
1379
			$server['ntp_server1'] = $server['dhcp_ntp'];
1380
			unset($server['dhcp_ntp']);
1381
			if ($server['dhcp_nbtdisable'])
1382
				$server['netbios_enable'] = false;
1383
			else
1384
				$server['netbios_enable'] = "yes";
1385
			unset($server['dhcp_nbtdisable']);
1386
			$server['netbios_ntype'] = $server['dhcp_nbttype'];
1387
			unset($server['dhcp_nbttype']);
1388
			$server['netbios_scope'] = $server['dhcp_nbtscope'];
1389
			unset($server['dhcp_nbtscope']);
1390
			$server['nbdd_server1'] = $server['dhcp_nbdd'];
1391
			unset($server['dhcp_nbdd']);
1392
			$server['wins_server1'] = $server['dhcp_wins'];
1393
			unset($server['dhcp_wins']);
1394

    
1395
			if (!empty($server['disable']))
1396
				$server['disable'] = true;
1397
			else
1398
				unset($server['disable']);
1399

    
1400
			/* allocate vpnid */
1401
			$server['vpnid'] = $vpnid++;
1402

    
1403
			if (!empty($server['custom_options'])) {
1404
				$cstmopts = array();
1405
				$tmpcstmopts = explode(";", $server['custom_options']);
1406
				$assigned = false;
1407
				$tmpstr = "";
1408
				foreach ($tmpcstmopts as $tmpcstmopt) {
1409
					$tmpstr = str_replace(" ", "", $tmpcstmopt);
1410
					if (substr($tmpstr,0 ,6) == "devtun") {
1411
						$assigned = true;
1412
						continue;
1413
					} else if (substr($tmpstr, 0, 5) == "local") {
1414
						$localip = substr($tmpstr, 6);
1415
						$server['ipaddr'] = str_replace("\n", "", $localip);
1416
					} else
1417
						$cstmopts[] = $tmpcstmopt;
1418
				}
1419
				$server['custom_options'] = implode(";", $cstmopts);
1420
				if ($assigned == true) {
1421
					$realif = substr($tmpstr, 3);
1422
					foreach ($config['interfaces'] as $iface => $cfgif) {
1423
						if ($cfgif['if'] == $realif) {
1424
							$config['interfaces'][$iface]['if'] = "ovpns{$server['vpnid']}";
1425
							break;
1426
						}
1427
					}
1428
				}
1429
			}
1430

    
1431
			$config['openvpn']['openvpn-server'][] = $server;
1432
		}
1433
		unset($config['installedpackages']['openvpnserver']);
1434
	}
1435

    
1436
	/* openvpn client configurations */
1437
	if (is_array($config['installedpackages']['openvpnclient'])) {
1438
		$config['openvpn']['openvpn-client'] = array();
1439

    
1440
		$index = 1;
1441
		foreach($config['installedpackages']['openvpnclient']['config'] as $client) {
1442

    
1443
			if (!is_array($client))
1444
				continue;
1445

    
1446
			if ($client['auth_method'] == "pki") {
1447

    
1448
				/* create ca entry */
1449
				$ca = array();
1450
				$ca['refid'] = uniqid();
1451
				$ca['descr'] = "OpenVPN Client CA #{$index}";
1452
				$ca['crt'] = $client['ca_cert'];
1453
				$ca['crl'] = $client['crl'];
1454
				$config['ca'][] = $ca;
1455

    
1456
				/* create ca reference */
1457
				unset($client['ca_cert']);
1458
				unset($client['crl']);
1459
				$client['caref'] = $ca['refid'];
1460

    
1461
				/* create cert entry */
1462
				$cert = array();
1463
				$cert['refid'] = uniqid();
1464
				$cert['descr'] = "OpenVPN Client Certificate #{$index}";
1465
				$cert['crt'] = $client['client_cert'];
1466
				$cert['prv'] = $client['client_key'];
1467
				$config['cert'][] = $cert;
1468

    
1469
				/* create cert reference */
1470
				unset($client['client_cert']);
1471
				unset($client['client_key']);
1472
				$client['certref'] = $cert['refid'];
1473

    
1474
				$index++;
1475
			}
1476

    
1477
			/* determine operational mode */
1478
			if ($client['auth_method'] == 'pki')
1479
				$client['mode'] = "p2p_tls";
1480
			else
1481
				$client['mode'] = "p2p_shared_key";
1482
			unset($client['auth_method']);
1483

    
1484
			/* modify configuration values */
1485
			if (!$client['interface'])
1486
				$client['interface'] = 'wan';
1487
			$client['tunnel_network'] = $client['interface_ip'];
1488
			unset($client['interface_ip']);
1489
			$client['server_addr'] = $client['serveraddr'];
1490
			unset($client['serveraddr']);
1491
			$client['server_port'] = $client['serverport'];
1492
			unset($client['serverport']);
1493
			$client['proxy_addr'] = $client['poxy_hostname'];
1494
			unset($client['proxy_addr']);
1495
			if (isset($client['use_lzo'])) {
1496
				$client['compression'] = "on";
1497
				unset($client['use_lzo']);
1498
			}
1499
			$client['resolve_retry'] = $client['infiniteresolvretry'];
1500
			unset($client['infiniteresolvretry']);
1501

    
1502
			/* allocate vpnid */
1503
			$client['vpnid'] = $vpnid++;
1504

    
1505
			if (!empty($client['custom_options'])) {
1506
				$cstmopts = array();
1507
				$tmpcstmopts = explode(";", $client['custom_options']);
1508
				$assigned = false;
1509
				$tmpstr = "";
1510
				foreach ($tmpcstmopts as $tmpcstmopt) {
1511
					$tmpstr = str_replace(" ", "", $tmpcstmopt);
1512
					if (substr($tmpstr,0 ,6) == "devtun") {
1513
						$assigned = true;
1514
						continue;
1515
					} else if (substr($tmpstr, 0, 5) == "local") {
1516
                                                $localip = substr($tmpstr, 6);
1517
                                                $client['ipaddr'] = str_replace("\n", "", $localip);
1518
					} else
1519
						$cstmopts[] = $tmpcstmopt;
1520
				}
1521
				$client['custom_options'] = implode(";", $cstmopts);
1522
				if ($assigned == true) {
1523
					$realif = substr($tmpstr, 3);
1524
					foreach ($config['interfaces'] as $iface => $cfgif) {
1525
						if ($cfgif['if'] == $realif) {
1526
							$config['interfaces'][$iface]['if'] = "ovpnc{$client['vpnid']}";
1527
							break;
1528
						}
1529
					}
1530
				}
1531
			}
1532

    
1533
			if (!empty($client['disable']))
1534
				$client['disable'] = true;
1535
			else
1536
				unset($client['disable']);
1537

    
1538
			$config['openvpn']['openvpn-client'][] = $client;
1539
		}
1540

    
1541
		unset($config['installedpackages']['openvpnclient']);
1542
	}
1543

    
1544
	/* openvpn client specific configurations */
1545
	if (is_array($config['installedpackages']['openvpncsc'])) {
1546
		$config['openvpn']['openvpn-csc'] = array();
1547

    
1548
		foreach($config['installedpackages']['openvpncsc']['config'] as $csc) {
1549

    
1550
			if (!is_array($csc))
1551
				continue;
1552

    
1553
			/* modify configuration values */
1554
			$csc['common_name'] = $csc['commonname'];
1555
			unset($csc['commonname']);
1556
			$csc['tunnel_network'] = $csc['ifconfig_push'];
1557
			unset($csc['ifconfig_push']);
1558
			$csc['dns_domain'] = $csc['dhcp_domainname'];
1559
			unset($csc['dhcp_domainname']);
1560
			$csc['dns_server1'] = $csc['dhcp_dns'];
1561
			unset($csc['dhcp_dns']);
1562
			$csc['ntp_server1'] = $csc['dhcp_ntp'];
1563
			unset($csc['dhcp_ntp']);
1564
			if ($csc['dhcp_nbtdisable'])
1565
				$csc['netbios_enable'] = false;
1566
			else
1567
				$csc['netbios_enable'] = "yes";
1568
			unset($csc['dhcp_nbtdisable']);
1569
			$csc['netbios_ntype'] = $csc['dhcp_nbttype'];
1570
			unset($csc['dhcp_nbttype']);
1571
			$csc['netbios_scope'] = $csc['dhcp_nbtscope'];
1572
			unset($csc['dhcp_nbtscope']);
1573
			$csc['nbdd_server1'] = $csc['dhcp_nbdd'];
1574
			unset($csc['dhcp_nbdd']);
1575
			$csc['wins_server1'] = $csc['dhcp_wins'];
1576
			unset($csc['dhcp_wins']);
1577

    
1578
			if (!empty($csc['disable']))
1579
				$csc['disable'] = true;
1580
			else
1581
				unset($csc['disable']);
1582

    
1583
			$config['openvpn']['openvpn-csc'][] = $csc;
1584
		}
1585

    
1586
		unset($config['installedpackages']['openvpncsc']);
1587
	}
1588

    
1589
	if (count($config['openvpn']['openvpn-server']) > 0 ||
1590
		count($config['openvpn']['openvpn-client']) > 0) {
1591
		$ovpnrule = array();
1592
                $ovpnrule['type'] = "pass";
1593
                $ovpnrule['interface'] = "openvpn";
1594
                $ovpnrule['statetype'] = "keep state";
1595
                $ovpnrule['source'] = array();
1596
                $ovpnrule['destination'] = array();
1597
                $ovpnrule['source']['any'] = true;
1598
                $ovpnrule['destination']['any'] = true;
1599
                $ovpnrule['descr'] = "Auto added OpenVPN rule from config upgrade.";
1600
		$config['filter']['rule'][] = $ovpnrule;
1601
	}
1602

    
1603
	/*
1604
		* FIXME: hack to keep things working with no installedpackages
1605
		* or carp array in the configuration data.
1606
		*/
1607
	if (!is_array($config['installedpackages']))
1608
		$config['installedpackages'] = array();
1609
	if (!is_array($config['installedpackages']['carp']))
1610
		$config['installedpackages']['carp'] = array();
1611

    
1612
}
1613

    
1614

    
1615
function upgrade_052_to_053() {
1616
	global $config;
1617
	if (!is_array($config['ca']))
1618
		$config['ca'] = array();
1619
	if (!is_array($config['cert']))
1620
		$config['cert'] = array();
1621

    
1622
	/* migrate advanced admin page webui ssl to certifcate mngr */
1623
	if ($config['system']['webgui']['certificate'] &&
1624
	$config['system']['webgui']['private-key']) {
1625

    
1626
		/* create cert entry */
1627
		$cert = array();
1628
		$cert['refid'] = uniqid();
1629
		$cert['descr'] = "webConfigurator SSL Certificate";
1630
		$cert['crt'] = $config['system']['webgui']['certificate'];
1631
		$cert['prv'] = $config['system']['webgui']['private-key'];
1632
		$config['cert'][] = $cert;
1633

    
1634
		/* create cert reference */
1635
		unset($config['system']['webgui']['certificate']);
1636
		unset($config['system']['webgui']['private-key']);
1637
		$config['system']['webgui']['ssl-certref'] = $cert['refid'];
1638
	}
1639

    
1640
	/* migrate advanced admin page ssh keys to user manager */
1641
	if ($config['system']['ssh']['authorizedkeys']) {
1642
		$admin_user =& getUserEntryByUID(0);
1643
		$admin_user['authorizedkeys'] = $config['system']['ssh']['authorizedkeys'];
1644
		unset($config['system']['ssh']['authorizedkeys']);
1645
	}
1646
}
1647

    
1648

    
1649
function upgrade_053_to_054() {
1650
	global $config;
1651
	if(is_array($config['load_balancer']['lbpool'])) {
1652
		$lbpool_arr = $config['load_balancer']['lbpool'];
1653
		$lbpool_srv_arr = array();
1654
		$gateway_group_arr = array();
1655
		$gateways = return_gateways_array();
1656
		if (! is_array($config['gateways']['gateway_item']))
1657
			$config['gateways']['gateway_item'] = array();
1658

    
1659
		$a_gateways =& $config['gateways']['gateway_item'];
1660
		foreach($lbpool_arr as $lbpool) {
1661
			if($lbpool['type'] == "gateway") {
1662
				$gateway_group['name'] = $lbpool['name'];
1663
				$gateway_group['descr'] = $lbpool['descr'];
1664
				$gateway_group['trigger'] = "down";
1665
				$gateway_group['item'] = array();
1666
				$i = 0;
1667
				foreach($lbpool['servers'] as $member) {
1668
					$split = split("\|", $member);
1669
					$interface = $split[0];
1670
					$monitor = $split[1];
1671
					/* on static upgraded configuration we automatically prepend GW_ */
1672
					$static_name = "GW_" . strtoupper($interface);
1673
					if(is_ipaddr($monitor))
1674
						foreach ($a_gateways as & $gw)
1675
							if ($gw['name'] == $static_name)
1676
								$gw['monitor'] = $monitor;
1677

    
1678
					/* on failover increment tier. Else always assign 1 */
1679
					if($lbpool['behaviour'] == "failover") {
1680
						$i++;
1681
					} else {
1682
						$i = 1;
1683
					}
1684
					$gateway_group['item'][] = "$interface|$i";
1685
				}
1686
				$gateway_group_arr[] = $gateway_group;
1687
			} else {
1688
				$lbpool_srv_arr[] = $lbpool;
1689
			}
1690
		}
1691
		$config['load_balancer']['lbpool'] = $lbpool_srv_arr;
1692
		$config['gateways']['gateway_group'] = $gateway_group_arr;
1693
	}
1694
	// Unset lbpool if we no longer have any server pools
1695
	if (count($lbpool_srv_arr) == 0) {
1696
		if(empty($config['load_balancer'])) {
1697
			unset($config['load_balancer']);
1698
		} else {
1699
			unset($config['load_balancer']['lbpool']);
1700
		}
1701
	} else {
1702
		$config['load_balancer']['lbpool'] = $lbpool_srv_arr;
1703
	}
1704
	// Only set the gateway group array if we converted any
1705
	if (count($gateway_group_arr) != 0) {
1706
		$config['gateways']['gateway_group'] = $gateway_group_arr;
1707
	}
1708
}
1709

    
1710

    
1711
function upgrade_054_to_055() {
1712
	global $config;
1713
	global $g;
1714

    
1715
	/* RRD files changed for quality, traffic and packets graphs */
1716
	//ini_set("max_execution_time", "1800");
1717
	/* convert traffic RRD file */
1718
	global $parsedcfg, $listtags;
1719
	$listtags = array("ds", "v", "rra", "row");
1720

    
1721
	$rrddbpath = "/var/db/rrd/";
1722
	$rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool";
1723

    
1724
	$rrdinterval = 60;
1725
	$valid = $rrdinterval * 2;
1726

    
1727
	/* Asume GigE for now */
1728
	$downstream = 125000000;
1729
	$upstream = 125000000;
1730

    
1731
	/* build a list of quality databases */
1732
	/* roundtrip has become delay */
1733
	function divide_delay($delayval) {
1734
		$delayval = floatval($delayval);
1735
		$delayval = ($delayval / 1000);
1736
		$delayval = " ". sprintf("%1.10e", $delayval) ." ";
1737
		return $delayval;
1738
	}
1739
	/* the roundtrip times need to be divided by 1000 to get seconds, really */
1740
	$databases = array();
1741
	if (!file_exists($rrddbpath))
1742
		@mkdir($rrddbpath);
1743
	chdir($rrddbpath);
1744
	$databases = glob("*-quality.rrd");
1745
	rsort($databases);
1746
	foreach($databases as $database) {
1747
		$xmldump = "{$database}.old.xml";
1748
		$xmldumpnew = "{$database}.new.xml";
1749

    
1750
		if ($g['booting'])
1751
			echo "Migrate RRD database {$database} to new format \n";
1752
		mwexec("$rrdtool tune {$rrddbpath}{$database} -r roundtrip:delay 2>&1");
1753

    
1754
		dump_rrd_to_xml("{$rrddbpath}/{$database}", "{$g['tmp_path']}/{$xmldump}");
1755
		$rrdoldxml = file_get_contents("{$g['tmp_path']}/{$xmldump}");
1756
		$rrdold = xml2array($rrdoldxml, 1, "tag");
1757
		$rrdold = $rrdold['rrd'];
1758

    
1759
		$i = 0;
1760
		foreach($rrdold['rra'] as $rra) {
1761
			$l = 0;
1762
			foreach($rra['database']['row'] as $row) {
1763
				$vnew = divide_delay($row['v'][1]);
1764
				$rrdold['rra'][$i]['database']['row'][$l]['v'][1] = $vnew;
1765
				$l++;
1766
			}
1767
			$i++;
1768
		}
1769

    
1770
		$rrdxml = dump_xml_config_raw($rrdold, "rrd");
1771
		file_put_contents("{$g['tmp_path']}/{$xmldumpnew}", $rrdxml);
1772
		mwexec("$rrdtool restore -f {$g['tmp_path']}/{$xmldumpnew} {$rrddbpath}/{$database} 2>&1");
1773

    
1774
	}
1775
	/* let apinger recreate required files */
1776
	setup_gateways_monitor();
1777

    
1778
	/* build a list of traffic and packets databases */
1779
	$databases = array();
1780
	exec("cd $rrddbpath;/usr/bin/find *-traffic.rrd *-packets.rrd", $databases);
1781
	rsort($databases);
1782
	foreach($databases as $database) {
1783
		$databasetmp = "{$database}.tmp";
1784
		$xmldump = "{$database}.old.xml";
1785
		$xmldumptmp = "{$database}.tmp.xml";
1786
		$xmldumpnew = "{$database}.new.xml";
1787

    
1788
		if ($g['booting'])
1789
			echo "Migrate RRD database {$database} to new format \n";
1790
		/* rename DS source */
1791
		mwexec("$rrdtool tune {$rrddbpath}/{$database} -r in:inpass 2>&1");
1792
		mwexec("$rrdtool tune {$rrddbpath}/{$database} -r out:outpass 2>71");
1793

    
1794
		/* dump contents to xml and move database out of the way */
1795
		dump_rrd_to_xml("{$rrddbpath}/{$database}", "{$g['tmp_path']}/{$xmldump}");
1796

    
1797
		/* create new rrd database file */
1798
		$rrdcreate = "$rrdtool create {$g['tmp_path']}/{$databasetmp} --step $rrdinterval ";
1799
		$rrdcreate .= "DS:inpass:COUNTER:$valid:0:$downstream ";
1800
		$rrdcreate .= "DS:outpass:COUNTER:$valid:0:$upstream ";
1801
		$rrdcreate .= "DS:inblock:COUNTER:$valid:0:$downstream ";
1802
		$rrdcreate .= "DS:outblock:COUNTER:$valid:0:$upstream ";
1803
		$rrdcreate .= "RRA:AVERAGE:0.5:1:1000 ";
1804
		$rrdcreate .= "RRA:AVERAGE:0.5:5:1000 ";
1805
		$rrdcreate .= "RRA:AVERAGE:0.5:60:1000 ";
1806
		$rrdcreate .= "RRA:AVERAGE:0.5:720:3000 ";
1807

    
1808
		create_new_rrd("$rrdcreate");
1809
		/* create temporary xml from new RRD */
1810
		dump_rrd_to_xml("{$g['tmp_path']}/{$databasetmp}", "{$g['tmp_path']}/{$xmldumptmp}");
1811

    
1812
		$rrdoldxml = file_get_contents("{$g['tmp_path']}/{$xmldump}");
1813
		$rrdold = xml2array($rrdoldxml, 1, "tag");
1814
		$rrdold = $rrdold['rrd'];
1815

    
1816
		$rrdnewxml = file_get_contents("{$g['tmp_path']}/{$xmldumptmp}");
1817
		$rrdnew = xml2array($rrdnewxml, 1, "tag");
1818
		$rrdnew = $rrdnew['rrd'];
1819

    
1820
		/* remove any MAX RRA's. Not needed for traffic. */
1821
		$i = 0;
1822
		foreach ($rrdold['rra'] as $rra) {
1823
			if(trim($rra['cf']) == "MAX") {
1824
				unset($rrdold['rra'][$i]);
1825
			}
1826
			$i++;
1827
		}
1828

    
1829
		$rrdxmlarray = migrate_rrd_format($rrdold, $rrdnew);
1830
		$rrdxml = dump_xml_config_raw($rrdxmlarray, "rrd");
1831
		file_put_contents("{$g['tmp_path']}/{$xmldumpnew}", $rrdxml);
1832
		mwexec("$rrdtool restore -f {$g['tmp_path']}/{$xmldumpnew} {$rrddbpath}/{$database} 2>&1");
1833

    
1834
	}
1835
	enable_rrd_graphing();
1836
	if ($g['booting'])
1837
		echo "Updating configuration...";
1838
}
1839

    
1840

    
1841
function upgrade_055_to_056() {
1842
	global $config;
1843

    
1844
	if (!is_array($config['ca']))
1845
		$config['ca'] = array();
1846
	if (!is_array($config['cert']))
1847
		$config['cert'] = array();
1848

    
1849
	/* migrate ipsec ca's to cert manager */
1850
	if (is_array($config['ipsec']['cacert'])) {
1851
		foreach($config['ipsec']['cacert'] as & $cacert) {
1852
			$ca = array();
1853
			$ca['refid'] = uniqid();
1854
			if (is_array($cacert['cert']))
1855
				$ca['crt'] = $cacert['cert'][0];
1856
			else
1857
				$ca['crt'] = $cacert['cert'];
1858
			$ca['descr'] = $cacert['ident'];
1859
			$config['ca'][] = $ca;
1860
		}
1861
		unset($config['ipsec']['cacert']);
1862
	}
1863

    
1864
	/* migrate phase1 certificates to cert manager */
1865
	if (is_array($config['ipsec']['phase1'])) {
1866
		foreach($config['ipsec']['phase1'] as & $ph1ent) {
1867
			$cert = array();
1868
			$cert['refid'] = uniqid();
1869
			$cert['descr'] = "IPsec Peer {$ph1ent['remote-gateway']} Certificate";
1870
			if (is_array($ph1ent['cert']))
1871
				$cert['crt'] = $ph1ent['cert'][0];
1872
			else
1873
				$cert['crt'] = $ph1ent['cert'];
1874
			$cert['prv'] = $ph1ent['private-key'];
1875
			$config['cert'][] = $cert;
1876
			$ph1ent['certref'] = $cert['refid'];
1877
			if ($ph1ent['cert'])
1878
				unset($ph1ent['cert']);
1879
			if ($ph1ent['private-key'])
1880
				unset($ph1ent['private-key']);
1881
			if ($ph1ent['peercert'])
1882
				unset($ph1ent['peercert']);
1883
		}
1884
	}
1885
}
1886

    
1887

    
1888
function upgrade_056_to_057() {
1889
	global $config;
1890
	if (!is_array($config['system']['user']))
1891
		$config['system']['user'] = array();
1892
	/* migrate captivate portal to user manager */
1893
	if (is_array($config['captiveportal']['user'])) {
1894
		foreach($config['captiveportal']['user'] as $user) {
1895
			// avoid user conflicts
1896
			$found = false;
1897
			foreach ($config['system']['user'] as $userent) {
1898
				if ($userent['name'] == $user['name']) {
1899
					$found = true;
1900
					break;
1901
				}
1902
			}
1903
			if ($found)
1904
				continue;
1905
			$user['scope'] = "user";
1906
			if (isset($user['expirationdate'])) {
1907
				$user['expires'] = $user['expirationdate'];
1908
				unset($user['expirationdate']);
1909
			}
1910
			if (isset($user['password'])) {
1911
				$user['md5-hash'] = $user['password'];
1912
				unset($user['password']);
1913
			}
1914
			$user['uid'] = $config['system']['nextuid']++;
1915
			$config['system']['user'][] = $user;
1916
		}
1917
		unset($config['captiveportal']['user']);
1918
	}
1919
}
1920

    
1921
function upgrade_057_to_058() {
1922
	global $config;
1923
	/* set all phase2 entries to tunnel mode */
1924
	if (is_array($config['ipsec']['phase2']))
1925
		foreach($config['ipsec']['phase2'] as & $ph2ent)
1926
			$ph2ent['mode'] = 'tunnel';
1927
}
1928

    
1929
function upgrade_058_to_059() {
1930
	global $config;
1931

    
1932
	if (is_array($config['schedules']['schedule'])) {
1933
		foreach ($config['schedules']['schedule'] as & $schedl)
1934
			$schedl['schedlabel'] = uniqid();
1935
	}
1936
}
1937

    
1938
function upgrade_059_to_060() {
1939
	global $config;
1940
	require_once("/etc/inc/certs.inc");
1941
	if (is_array($config['ca'])) {
1942
		/* Locate issuer for all CAs */
1943
		foreach ($config['ca'] as & $ca) {
1944
			$subject = cert_get_subject($ca['crt']);
1945
			$issuer = cert_get_issuer($ca['crt']);
1946
			if($issuer <> $subject) {
1947
				$issuer_crt =& lookup_ca_by_subject($issuer);
1948
				if($issuer_crt)
1949
					$ca['caref'] = $issuer_crt['refid'];
1950
			}
1951
		}
1952
		
1953
		/* Locate issuer for all certificates */
1954
		if (is_array($config['cert'])) {
1955
			foreach ($config['cert'] as & $cert) {
1956
				$subject = cert_get_subject($cert['crt']);
1957
				$issuer = cert_get_issuer($cert['crt']);
1958
				if($issuer <> $subject) {
1959
					$issuer_crt =& lookup_ca_by_subject($issuer);
1960
					if($issuer_crt)
1961
						$cert['caref'] = $issuer_crt['refid'];
1962
				}
1963
			}
1964
		}
1965
	}
1966
}
1967

    
1968
function upgrade_060_to_061() {
1969
	global $config;
1970

    
1971
	if (is_array($config['interfaces']['wan']))
1972
		$config['interfaces']['wan']['enable'] = true;
1973
	if (is_array($config['interfaces']['lan']))
1974
		$config['interfaces']['lan']['enable'] = true;
1975
}
1976

    
1977
function upgrade_061_to_062() {
1978
	global $config;
1979

    
1980
	/* Convert NAT port forwarding rules */
1981
	if (is_array($config['nat']['rule'])) {
1982
		$a_nat = &$config['nat']['rule'];
1983

    
1984
		foreach ($a_nat as &$natent) {
1985
			$natent['disabled'] = false;
1986
			$natent['nordr']    = false;
1987

    
1988
			$natent['source'] = array(
1989
				"not"     => false,
1990
				"any"     => true,
1991
				"port"    => ""
1992
			);
1993

    
1994
			$natent['destination'] = array(
1995
				"not"     => false,
1996
				"address" => $natent['external-address'],
1997
				"port"    => $natent['external-port']
1998
			);
1999

    
2000
			if (empty($natent['destination']['address'])) {
2001
				unset($natent['destination']['address']);
2002
				$natent['destination']['network'] = $natent['interface'] . 'ip';
2003
			} else if ($natent['destination']['address'] == 'any') {
2004
				unset($natent['destination']['address']);
2005
				$natent['destination']['any'] = true;
2006
			}
2007

    
2008
			unset($natent['external-address']);
2009
			unset($natent['external-port']);
2010
		}
2011

    
2012
		unset($natent);
2013
	}
2014
}
2015

    
2016
function upgrade_062_to_063() {
2017
	/* Upgrade legacy Themes to the new pfsense_ng */
2018
	global $config;
2019

    
2020
	switch($config['theme']) {
2021
		case "nervecenter":
2022
			$config['theme'] = "pfsense_ng";
2023
			break;
2024
	}
2025
	
2026
}
2027

    
2028
function upgrade_063_to_064() {
2029
	global $config;
2030
	$j=0;
2031
	$ifcfg = &$config['interfaces'];
2032
	
2033
	if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) {	
2034
		foreach ($config['ppps']['ppp'] as $pppid => $ppp) {
2035
			$config['ppps']['ppp'][$pppid]['if'] = "ppp".$j;
2036
			$config['ppps']['ppp'][$pppid]['ptpid'] = $j;
2037
			$j++;
2038
			if (isset($ppp['port'])){
2039
				$config['ppps']['ppp'][$pppid]['ports'] = $ppp['port'];
2040
				unset($config['ppps']['ppp'][$pppid]['port']);
2041
			}
2042
			if (!isset($ppp['type'])){
2043
				$config['ppps']['ppp'][$pppid]['type'] = "ppp";
2044
			}
2045
			if (isset($ppp['defaultgw']))
2046
				unset($config['ppps']['ppp'][$pppid]['defaultgw']);
2047
		}
2048
	}
2049
	
2050
	if (!is_array($config['ppps']['ppp']))
2051
		$config['ppps']['ppp'] = array();
2052
	$a_ppps = &$config['ppps']['ppp'];
2053

    
2054
	foreach ($ifcfg as $ifname => $ifinfo) {
2055
		$ppp = array();
2056
		// For pppoe conversion
2057
		if ($ifinfo['ipaddr'] == "pppoe" || $ifinfo['ipaddr'] == "pptp"){
2058
			if (isset($ifinfo['ptpid']))
2059
				continue;
2060
			$ppp['ptpid'] =  $j;
2061
			$ppp['type'] = $ifinfo['ipaddr'];
2062
			$ppp['if'] = $ifinfo['ipaddr'].$j;
2063
			$ppp['ports'] = $ifinfo['if'];
2064
			if ($ifinfo['ipaddr'] == "pppoe"){
2065
				$ppp['username'] = $ifinfo['pppoe_username'];
2066
				$ppp['password'] = base64_encode($ifinfo['pppoe_password']);
2067
			}
2068
			if ($ifinfo['ipaddr'] == "pptp"){
2069
				$ppp['username'] = $ifinfo['pptp_username'];
2070
				$ppp['password'] = base64_encode($ifinfo['pptp_password']);
2071
			}
2072
			
2073
			if (isset($ifinfo['provider']))
2074
				$ppp['provider'] = $ifinfo['provider'];
2075
			if (isset($ifinfo['ondemand']))
2076
				$ppp['ondemand'] = true;
2077
			if (isset($ifinfo['timeout']))
2078
				$ppp['idletimeout'] = $ifinfo['timeout'];
2079
			if (isset($ifinfo['pppoe']['pppoe-reset-type'])){
2080
				$ppp['pppoe-reset-type'] = $ifinfo['pppoe']['pppoe-reset-type'];
2081
				if (is_array($config['cron']['item'])) {
2082
					for ($i = 0; $i < count($config['cron']['item']); $i++) {
2083
						$item = $config['cron']['item'][$i];
2084
						if (strpos($item['command'], "/conf/pppoe{$ifname}restart") !== false)
2085
							$config['cron']['item'][$i]['command'] = "/var/etc/pppoe_restart_" . $ppp['if'];
2086
					}
2087
				}
2088
			}
2089
			if (isset($ifinfo['local']))
2090
				$ppp['localip'] = $ifinfo['local'];
2091
			if (isset($ifinfo['subnet']))
2092
				$ppp['subnet'] = $ifinfo['subnet'];
2093
			if (isset($ifinfo['remote']))
2094
				$ppp['gateway'] = $ifinfo['remote'];
2095

    
2096
			$ifcfg[$ifname]['if'] = $ifinfo['ipaddr'].$j;
2097
			$j++;
2098
			
2099
			unset($ifcfg[$ifname]['pppoe_username']);
2100
			unset($ifcfg[$ifname]['pppoe_password']);
2101
			unset($ifcfg[$ifname]['provider']);
2102
			unset($ifcfg[$ifname]['ondemand']);
2103
			unset($ifcfg[$ifname]['timeout']);
2104
			unset($ifcfg[$ifname]['pppoe_reset']);
2105
			unset($ifcfg[$ifname]['pppoe_preset']);
2106
			unset($ifcfg[$ifname]['pppoe']);
2107
			unset($ifcfg[$ifname]['pptp_username']);
2108
			unset($ifcfg[$ifname]['pptp_password']);
2109
			unset($ifcfg[$ifname]['local']);
2110
			unset($ifcfg[$ifname]['subnet']);
2111
			unset($ifcfg[$ifname]['remote']);
2112
			
2113
			$a_ppps[] = $ppp;
2114
			
2115
		}
2116
	}
2117
}
2118

    
2119
function upgrade_064_to_065() {
2120
	/* Disable TSO and LRO in upgraded configs */
2121
	global $config;
2122
	$config['system']['disablesegmentationoffloading'] = true;
2123
	$config['system']['disablelargereceiveoffloading'] = true;
2124
}
2125

    
2126
function upgrade_065_to_066() {
2127
	global $config;
2128

    
2129
	$dhcrelaycfg =& $config['dhcrelay'];
2130

    
2131
        if (is_array($dhcrelaycfg)) {
2132
        	$dhcrelayifs = array();
2133
		$foundifs = false;
2134
        	/* DHCPRelay enabled on any interfaces? */
2135
                foreach ($dhcrelaycfg as $dhcrelayif => $dhcrelayifconf) {
2136
                        if (isset($dhcrelayifconf['enable'])) {
2137
				$dhcrelayifs[] = $dhcrelayif;
2138
				unset($dhcrelaycfg['dhcrelayif']);
2139
				$foundifs = true;
2140
			}
2141
                }
2142
		if ($foundifs == true)
2143
			$dhcrelaycfg['interface'] = implode(",", $dhcrelayifs);
2144
        }
2145
}
2146

    
2147
function upgrade_066_to_067() {
2148
	global $config;
2149
	if (isset($config['system']['ca'])) {
2150
		$config['ca'] = $config['system']['ca'];
2151
	}
2152
	if (isset($config['system']['cert'])) {
2153
		$config['cert'] = $config['system']['cert'];
2154
	}
2155
}
2156

    
2157
function upgrade_067_to_068() {
2158
	global $config;
2159

    
2160
	if (!empty($config['pppoe'])) {
2161
		$config['pppoes'] = array();
2162
		$config['pppoes']['pppoe'] = array();
2163
		$config['pppoes']['pppoe'][] = $config['pppoe'][0];
2164

    
2165
		if (is_array($config['pppoe']['user'])) {
2166
			$username = array(); 
2167
			foreach ($config['pppoe']['user'] as $user) {
2168
				$usr = $user['name'] . ":" . base64_encode($user['password']);
2169
				if ($user['ip'])
2170
					$usr .= ":{$user['ip']}";
2171
				$username[] = $usr;
2172
			}
2173
			$config['pppoes']['pppoe'][0]['username'] = implode(" ", $username);
2174
		}
2175
		unset($config['pppoe']);
2176
	}
2177
}
2178

    
2179
function upgrade_068_to_069() {
2180
	global $config;
2181
	if (!is_array($config['system']['user']))
2182
		return;
2183
	foreach ($config['system']['user'] as & $user) {
2184
		if (!is_array($user['cert']))
2185
			continue;
2186
		$rids = array();
2187
		foreach ($user['cert'] as $id => $cert) {
2188
			if (!isset($cert['descr']))
2189
				continue;
2190
			$tcert = $cert;
2191
			// Make sure each cert gets a refid
2192
			if (!isset($tcert['refid']))
2193
				$tcert['refid'] = uniqid();
2194
			// Keep the cert references for this user
2195
			$rids[] = $tcert['refid'];
2196
			$config['cert'][] = $tcert;
2197
		}
2198
		// Replace user certs with cert references instead.
2199
		if (count($rids) > 0)
2200
			$user['cert'] = $rids;
2201
	}
2202
}
2203

    
2204
function upgrade_069_to_070() {
2205
	global $config;
2206

    
2207
	/* Convert NAT 1:1 rules */
2208
	if (is_array($config['nat']['onetoone'])) {
2209
		$a_nat = &$config['nat']['onetoone'];
2210

    
2211
		foreach ($a_nat as &$natent) {
2212
			if ($natent['subnet'] == 32)
2213
				$natent['source'] = array("address" => $natent['internal']);
2214
			else
2215
				$natent['source'] = array("address" => $natent['internal'] . "/" . $natent['subnet']);
2216

    
2217
			$natent['destination'] = array("any" => true);
2218

    
2219
			unset($natent['internal']);
2220
			unset($natent['subnet']);
2221
		}
2222

    
2223
		unset($natent);
2224
	}
2225
}
2226

    
2227
function upgrade_070_to_071() {
2228
	global $config;
2229

    
2230
	if (is_array($config['cron']['item'])) {
2231
		foreach($config['cron']['item'] as $idx => $cronitem) {
2232
			if(stristr($cronitem['command'], "checkreload.sh")) {
2233
				unset($config['cron']['item'][$idx]);
2234
				break;
2235
			}
2236
		}
2237
	}
2238
}
2239

    
2240
function rename_field(& $section, $oldname, $newname) {
2241
	if (is_array($section)) {
2242
		foreach($section as & $item) {
2243
			if (!empty($item[$oldname]))
2244
				$item[$newname] = $item[$oldname];
2245
			if (isset($item[$oldname]))
2246
				unset($item[$oldname]);
2247
		}
2248
	}
2249
}
2250

    
2251
function upgrade_071_to_072() {
2252
	global $config;
2253
	if (is_array($config['sysctl']) && is_array($config['sysctl']['item']))
2254
		rename_field($config['sysctl']['item'], 'desc', 'descr');
2255
}
2256

    
2257
function upgrade_072_to_073() {
2258
	global $config;
2259
	if (!is_array($config['load_balancer']))
2260
		return;
2261
	if (is_array($config['load_balancer']['monitor_type']))
2262
		rename_field($config['load_balancer']['monitor_type'], 'desc', 'descr');
2263
	if (is_array($config['load_balancer']['lbpool']))
2264
		rename_field($config['load_balancer']['lbpool'], 'desc', 'descr');
2265
	if (is_array($config['load_balancer']['lbaction']))
2266
		rename_field($config['load_balancer']['lbaction'], 'desc', 'descr');
2267
	if (is_array($config['load_balancer']['lbprotocol']))
2268
		rename_field($config['load_balancer']['lbprotocol'], 'desc', 'descr');
2269
	if (is_array($config['load_balancer']['virtual_server']))
2270
		rename_field($config['load_balancer']['virtual_server'], 'desc', 'descr');
2271
}
2272

    
2273
function upgrade_073_to_074() {
2274
	global $config;
2275
	rename_field($config['system']['user'], 'fullname', 'descr');
2276
}
2277

    
2278
function upgrade_074_to_075() {
2279
	global $config;
2280
	if (is_array($config['ca']))
2281
		rename_field($config['ca'], 'name', 'descr');
2282
	if (is_array($config['cert']))
2283
		rename_field($config['cert'], 'name', 'descr');
2284
	if (is_array($config['crl']))
2285
		rename_field($config['crl'], 'name', 'descr');
2286
}
2287

    
2288
?>
(48-48/61)