Project

General

Profile

Download (71.1 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]['priv'] = "page-all";
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
		$gwmap = array();
794
		foreach ($config['staticroutes']['route'] as $idx => $sroute) {
795
			$found = false;
796
			foreach ($gateways as $gwname => $gw) {
797
				if ($gw['gateway'] == $sroute['gateway']) {
798
					$config['staticroutes']['route'][$idx]['gateway'] = $gwname;
799
					$found = true;
800
					break;
801
				}
802
			}
803
			if($gwmap[$sroute['gateway']]) {
804
				/* We already added a gateway name for this IP */
805
				$config['staticroutes']['route'][$idx]['gateway'] = "{$gwmap[$sroute['gateway']]}";
806
				$found = true;
807
			}			
808
			if ($found == false) {
809
				$gateway = array();
810
				$gateway['name'] = "SROUTE{$i}";
811
				$gwmap[$sroute['gateway']] = $gateway['name'];
812
				$gateway['gateway'] = $sroute['gateway'];
813
				$gateway['interface'] = $sroute['interface'];
814
				$gateway['descr'] = "Upgraded static route for {$sroute['network']}";
815
				if (!is_array($config['gateways']['gateway_item']))
816
					$config['gateways']['gateway_item'] = array();
817
				$config['gateways']['gateway_item'][] = $gateway;
818
				$config['staticroutes']['route'][$idx]['gateway'] = $gateway['name'];
819
				$i++;
820
			}
821
		}
822
	}
823
}
824

    
825

    
826
function upgrade_044_to_045() {
827
	global $config;
828
	$iflist = get_configured_interface_list(false, true);
829
	if (is_array($config['vlans']['vlan']) && count($config['vlans']['vlan'])) {
830
		$i = 0;
831
		foreach ($config['vlans']['vlan'] as $id => $vlan) {
832
			/* Make sure to update the interfaces section with the right name */
833
			$vlan_name = "{$vlan['if']}_vlan{$vlan['tag']}";
834
			foreach($iflist as $ifname) {
835
				if($config['interfaces'][$ifname]['if'] == "vlan{$i}") {
836
					$config['interfaces'][$ifname]['if'] = $vlan_name;
837
					continue;
838
				}
839
			}
840
			$config['vlans']['vlan'][$i]['vlanif'] = "{$vlan_name}";
841
			$i++;			
842
		}
843
	}
844
}
845

    
846

    
847
function upgrade_045_to_046() {
848
	global $config;
849
	/* Upgrade load balancer from slb to relayd */
850
	if (is_array($config['load_balancer']['virtual_server']) && count($config['load_balancer']['virtual_server'])) {
851
		$vs_a = &$config['load_balancer']['virtual_server'];
852
		$pool_a = &$config['load_balancer']['lbpool'];
853
		$pools = array();
854
		/* Index pools by name */
855
		if(is_array($pool_a)) {
856
			for ($i = 0; isset($pool_a[$i]); $i++) {
857
				if($pool_a[$i]['type'] == "server") {
858
					$pools[$pool_a[$i]['name']] = $pool_a[$i];
859
				}
860
			}
861
		}
862
		/* Convert sitedown entries to pools and re-attach */
863
		for ($i = 0; isset($vs_a[$i]); $i++) {
864
			if (isset($vs_a[$i]['sitedown'])) {
865
				$pool = array();
866
				$pool['type'] = 'server';
867
				$pool['behaviour'] = 'balance';
868
				$pool['name'] = "{$vs_a[$i]['name']}-sitedown";
869
				$pool['descr'] = "Sitedown pool for VS: {$vs_a[$i]['name']}";
870
				$pool['port'] = $pools[$vs_a[$i]['pool']]['port'];
871
				$pool['servers'] = array();
872
				$pool['servers'][] = $vs_a[$i]['sitedown'];
873
				$pool['monitor'] = $pools[$vs_a[$i]['pool']]['monitor'];
874
				$pool_a[] = $pool;
875
				$vs_a[$i]['sitedown'] = $pool['name'];
876
			}
877
		}
878
	}
879
	if(count($config['load_balancer']) == 0) {
880
		unset($config['load_balancer']);
881
	}
882
	mwexec('/usr/sbin/pw groupadd -n _relayd -g 913');
883
	mwexec('/usr/sbin/pw useradd -n _relayd -c "Relay Daemon" -d /var/empty -s /usr/sbin/nologin -u 913 -g 913');
884
}
885

    
886

    
887
function upgrade_046_to_047() {
888
	global $config;
889
	/* Upgrade IPsec from tunnel to phase1/phase2 */
890

    
891
	if(is_array($config['ipsec']['tunnel'])) {
892

    
893
		$a_phase1 = array();
894
		$a_phase2 = array();
895
		$ikeid = 0;
896

    
897
		foreach ($config['ipsec']['tunnel'] as $tunnel) {
898

    
899
			unset($ph1ent);
900
			unset($ph2ent);
901

    
902
			/*
903
				*  attempt to locate an enabled phase1
904
				*  entry that matches the peer gateway
905
				*/
906

    
907
			if (!isset($tunnel['disabled'])) {
908

    
909
				$remote_gateway = $tunnel['remote-gateway'];
910

    
911
				foreach ($a_phase1 as $ph1tmp) {
912
					if ($ph1tmp['remote-gateway'] == $remote_gateway) {
913
						$ph1ent = $ph1tmp;
914
						break;
915
					}
916
				}
917
			}
918

    
919
			/* none found, create a new one */
920

    
921
			if (!isset( $ph1ent )) {
922

    
923
				/* build new phase1 entry */
924

    
925
				$ph1ent = array();
926

    
927
				$ph1ent['ikeid'] = ++$ikeid;
928

    
929
				if (isset($tunnel['disabled']))
930
					$ph1ent['disabled'] = $tunnel['disabled'];
931

    
932
				/* convert to the new vip[$vhid] name */
933
				if(preg_match("/^carp/", $tunnel['interface'])) {
934
					$carpid = str_replace("carp", "", $tunnel['interface']);
935
					$tunnel['interface'] = "vip" . $config['virtualip']['vip'][$carpid]['vhid'];
936
				}
937
				$ph1ent['interface'] = $tunnel['interface'];
938
				$ph1ent['remote-gateway'] = $tunnel['remote-gateway'];
939
				$ph1ent['descr'] = $tunnel['descr'];
940

    
941
				$ph1ent['mode'] = $tunnel['p1']['mode'];
942

    
943
				if (isset($tunnel['p1']['myident']['myaddress']))
944
					$ph1ent['myid_type'] = "myaddress";
945
				if (isset($tunnel['p1']['myident']['address'])) {
946
					$ph1ent['myid_type'] = "address";
947
					$ph1ent['myid_data'] = $tunnel['p1']['myident']['address'];
948
				}
949
				if (isset($tunnel['p1']['myident']['fqdn'])) {
950
					$ph1ent['myid_type'] = "fqdn";
951
					$ph1ent['myid_data'] = $tunnel['p1']['myident']['fqdn'];
952
				}
953
				if (isset($tunnel['p1']['myident']['ufqdn'])) {
954
					$ph1ent['myid_type'] = "user_fqdn";
955
					$ph1ent['myid_data'] = $tunnel['p1']['myident']['ufqdn'];
956
				}
957
				if (isset($tunnel['p1']['myident']['asn1dn'])) {
958
					$ph1ent['myid_type'] = "asn1dn";
959
					$ph1ent['myid_data'] = $tunnel['p1']['myident']['asn1dn'];
960
				}
961
				if (isset($tunnel['p1']['myident']['dyn_dns'])) {
962
					$ph1ent['myid_type'] = "dyn_dns";
963
					$ph1ent['myid_data'] = $tunnel['p1']['myident']['dyn_dns'];
964
				}
965

    
966
				$ph1ent['peerid_type'] = "peeraddress";
967

    
968
				switch ($tunnel['p1']['encryption-algorithm']) {
969
					case "des":
970
					$ph1alg = array( 'name' => 'des' );
971
					break;
972
					case "3des":
973
					$ph1alg = array( 'name' => '3des' );
974
					break;
975
					case "blowfish":
976
					$ph1alg = array( 'name' => 'blowfish', 'keylen' => '128'  );
977
					break;
978
					case "cast128":
979
					$ph1alg = array( 'name' => 'cast128' );
980
					break;
981
					case "rijndael":
982
					$ph1alg = array( 'name' => 'aes', 'keylen' => '128' );
983
					break;
984
					case "rijndael 256":
985
					$ph1alg = array( 'name' => 'aes', 'keylen' => '256' );
986
					break;
987
				}
988

    
989
				$ph1ent['encryption-algorithm'] = $ph1alg;
990
				$ph1ent['hash-algorithm'] = $tunnel['p1']['hash-algorithm'];
991
				$ph1ent['dhgroup'] = $tunnel['p1']['dhgroup'];
992
				$ph1ent['lifetime'] = $tunnel['p1']['lifetime'];
993
				$ph1ent['authentication_method'] = $tunnel['p1']['authentication_method'];
994

    
995
				if (isset($tunnel['p1']['pre-shared-key']))
996
					$ph1ent['pre-shared-key'] = $tunnel['p1']['pre-shared-key'];
997
				if (isset($tunnel['p1']['cert']))
998
					$ph1ent['cert'] = $tunnel['p1']['cert'];
999
				if (isset($tunnel['p1']['peercert']))
1000
					$ph1ent['peercert'] = $tunnel['p1']['peercert'];
1001
				if (isset($tunnel['p1']['private-key']))
1002
					$ph1ent['private-key'] = $tunnel['p1']['private-key'];
1003

    
1004
				$ph1ent['nat_traversal'] = "on";
1005
				$ph1ent['dpd_enable'] = 1;
1006
				$ph1ent['dpd_delay'] = 10;
1007
				$ph1ent['dpd_maxfail'] = 5;
1008

    
1009
				$a_phase1[] = $ph1ent;
1010
			}
1011

    
1012
			/* build new phase2 entry */
1013

    
1014
			$ph2ent = array();
1015

    
1016
			$ph2ent['ikeid'] = $ph1ent['ikeid'];
1017

    
1018
			if (isset($tunnel['disabled']))
1019
				$ph1ent['disabled'] = $tunnel['disabled'];
1020

    
1021
			$ph2ent['descr'] = "phase2 for ".$tunnel['descr'];
1022

    
1023
			$type = "lan";
1024
			if ($tunnel['local-subnet']['network'])
1025
				$type = $tunnel['local-subnet']['network'];
1026
			if ($tunnel['local-subnet']['address']) {
1027
				list($address,$netbits) = explode("/",$tunnel['local-subnet']['address']);
1028
				if (is_null($netbits))
1029
					$type = "address";
1030
				else
1031
					$type = "network";
1032
			}
1033

    
1034
			switch ($type) {
1035
				case "address":
1036
				$ph2ent['localid'] = array('type' => $type,'address' => $address);
1037
				break;
1038
				case "network":
1039
				$ph2ent['localid'] = array('type' => $type,'address' => $address,'netbits' => $netbits);
1040
				break;
1041
				default:
1042
				$ph2ent['localid'] = array('type' => $type);
1043
				break;
1044
			}
1045

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

    
1049
			$ph2ent['protocol'] = $tunnel['p2']['protocol'];
1050

    
1051
			$aes_count = 0;
1052
			foreach( $tunnel['p2']['encryption-algorithm-option'] as $tunalg ) {
1053
				$aes_found = false;
1054
				switch ($tunalg) {
1055
					case "des":
1056
					$ph2alg = array( 'name' => 'des' );
1057
					break;
1058
					case "3des":
1059
					$ph2alg = array( 'name' => '3des' );
1060
					break;
1061
					case "blowfish":
1062
					$ph2alg = array( 'name' => 'blowfish', 'keylen' => 'auto'  );
1063
					break;
1064
					case "cast128":
1065
					$ph2alg = array( 'name' => 'cast128' );
1066
					break;
1067
					case "rijndael":
1068
					case "rijndael 256":
1069
					$ph2alg = array( 'name' => 'aes', 'keylen' => 'auto' );
1070
					$aes_found = true;
1071
					$aes_count++;
1072
					break;
1073
				}
1074

    
1075
				if( !$aes_found || ($aes_count < 2))
1076
					$ph2ent['encryption-algorithm-option'][] = $ph2alg;
1077
			}
1078

    
1079
			$ph2ent['hash-algorithm-option'] = $tunnel['p2']['hash-algorithm-option'];
1080
			$ph2ent['pfsgroup'] = $tunnel['p2']['pfsgroup'];
1081
			$ph2ent['lifetime'] = $tunnel['p2']['lifetime'];
1082

    
1083
			if (isset($tunnel['pinghost']['pinghost']))
1084
				$ph2ent['pinghost'] = $tunnel['pinghost'];
1085

    
1086
			$a_phase2[] = $ph2ent;
1087
		}
1088

    
1089
		unset($config['ipsec']['tunnel']);
1090
		$config['ipsec']['phase1'] = $a_phase1;
1091
		$config['ipsec']['phase2'] = $a_phase2;
1092
	}
1093
}
1094

    
1095

    
1096
function upgrade_047_to_048() {
1097
	global $config;
1098
	if (!empty($config['dyndns'])) {
1099
		$config['dyndnses'] = array();
1100
		$config['dyndnses']['dyndns'] = array();
1101
		if(isset($config['dyndns'][0]['host'])) {
1102
			$tempdyn = array();
1103
			$tempdyn['enable'] = isset($config['dyndns'][0]['enable']);
1104
			$tempdyn['type'] = $config['dyndns'][0]['type'];
1105
			$tempdyn['wildcard'] = isset($config['dyndns'][0]['wildcard']);
1106
			$tempdyn['username'] = $config['dyndns'][0]['username'];
1107
			$tempdyn['password'] = $config['dyndns'][0]['password'];
1108
			$tempdyn['host'] = $config['dyndns'][0]['host'];
1109
			$tempdyn['mx'] = $config['dyndns'][0]['mx'];		
1110
			$tempdyn['interface'] = "wan";
1111
			$tempdyn['descr'] = "Upgraded Dyndns {$tempdyn['type']}";
1112
			$config['dyndnses']['dyndns'][] = $tempdyn;
1113
		}
1114
		unset($config['dyndns']);
1115
	}		
1116
	if (!empty($config['dnsupdate'])) {
1117
		$pconfig = $config['dnsupdate'][0];
1118
		if (!$pconfig['ttl'])
1119
			$pconfig['ttl'] = 60;
1120
		if (!$pconfig['keytype'])
1121
			$pconfig['keytype'] = "zone";
1122
		$pconfig['interface'] = "wan";
1123
		$config['dnsupdates']['dnsupdate'][] = $pconfig;
1124
		unset($config['dnsupdate']);
1125
	}
1126

    
1127
	if (is_array($config['pppoe'])) {
1128
		$pconfig = array();
1129
		$pconfig['username'] = $config['pppoe']['username'];
1130
		$pconfig['password'] = $config['pppoe']['password'];
1131
		$pconfig['provider'] = $config['pppoe']['provider'];
1132
		$pconfig['ondemand'] = isset($config['pppoe']['ondemand']);
1133
		$pconfig['timeout'] = $config['pppoe']['timeout'];
1134
		unset($config['pppoe']);
1135
		$config['interfaces']['wan']['pppoe_username'] = $pconfig['username'];
1136
		$config['interfaces']['wan']['pppoe_password'] = $pconfig['password'];
1137
		$config['interfaces']['wan']['provider'] = $pconfig['provider'];
1138
		$config['interfaces']['wan']['ondemand'] = isset($pconfig['ondemand']);
1139
		$config['interfaces']['wan']['timeout'] = $pconfig['timeout'];
1140
	}
1141
	if (is_array($config['pptp'])) {
1142
		$pconfig = array();
1143
		$pconfig['username'] = $config['pptp']['username'];
1144
		$pconfig['password'] = $config['pptp']['password'];
1145
		$pconfig['provider'] = $config['pptp']['provider'];
1146
		$pconfig['ondemand'] = isset($config['pptp']['ondemand']);
1147
		$pconfig['timeout'] = $config['pptp']['timeout'];
1148
		unset($config['pptp']);
1149
		$config['interfaces']['wan']['pptp_username'] = $pconfig['username'];
1150
		$config['interfaces']['wan']['pptp_password'] = $pconfig['password'];
1151
		$config['interfaces']['wan']['provider'] = $pconfig['provider'];
1152
		$config['interfaces']['wan']['ondemand'] = isset($pconfig['ondemand'] );
1153
		$config['interfaces']['wan']['timeout'] = $pconfig['timeout'];
1154
	}
1155
}
1156

    
1157

    
1158
function upgrade_048_to_049() {
1159
	global $config;
1160
	/* setup new all users group */
1161
	$all = array();
1162
	$all['name'] = "all";
1163
	$all['description'] = "All Users";
1164
	$all['scope'] = "system";
1165
	$all['gid'] = 1998;
1166
	$all['member'] = array();
1167

    
1168
	if (!is_array($config['system']['group']))
1169
		$config['system']['group'] = array();
1170

    
1171
	/* work around broken uid assignments */
1172
	$config['system']['nextuid'] = 2000;
1173
	foreach ($config['system']['user'] as & $user) {
1174
		if (isset($user['uid']) && !$user['uid'])
1175
			continue;
1176
		$user['uid'] = $config['system']['nextuid']++;
1177
	}
1178

    
1179
	/* work around broken gid assignments */
1180
	$config['system']['nextgid'] = 2000;
1181
	foreach ($config['system']['group'] as & $group) {
1182
		if ($group['name'] == $g['admin_group'])
1183
			$group['gid'] = 1999;
1184
		else
1185
			$group['gid'] = $config['system']['nextgid']++;
1186
	}
1187

    
1188
	/* build group membership information */
1189
	foreach ($config['system']['group'] as & $group) {
1190
		$group['member'] = array();
1191
		foreach ($config['system']['user'] as & $user) {
1192
			$groupnames = explode(",", $user['groupname']);
1193
			if (in_array($group['name'],$groupnames))
1194
				$group['member'][] = $user['uid'];
1195
		}
1196
	}
1197

    
1198
	/* reset user group information */
1199
	foreach ($config['system']['user'] as & $user) {
1200
		unset($user['groupname']);
1201
		$all['member'][] = $user['uid'];
1202
	}
1203

    
1204
	/* reset group scope information */
1205
	foreach ($config['system']['group'] as & $group)
1206
		if ($group['name'] != $g['admin_group'])
1207
		$group['scope'] = "user";
1208

    
1209
	/* insert new all group */
1210
	$groups = Array();
1211
	$groups[] = $all;
1212
	$groups = array_merge($config['system']['group'],$groups);
1213
	$config['system']['group'] = $groups;
1214
}
1215

    
1216

    
1217
function upgrade_049_to_050() {
1218
	global $config;
1219
	/* update user privileges */
1220
	foreach ($config['system']['user'] as & $user) {
1221
		$privs = array();
1222
		if (!is_array($user['priv'])) {
1223
			unset($user['priv']);
1224
			continue;
1225
		}
1226
		foreach ($user['priv'] as $priv) {
1227
			switch($priv['id']) {
1228
				case "hasshell":
1229
				$privs[] = "user-shell-access";
1230
				break;
1231
				case "copyfiles":
1232
				$privs[] = "user-copy-files";
1233
				break;
1234
			}
1235
		}
1236
		$user['priv'] = $privs;
1237
	}
1238

    
1239
	/* update group privileges */
1240
	foreach ($config['system']['group'] as & $group) {
1241
		$privs = array();
1242
		if (!is_array($group['pages'])) {
1243
			unset($group['pages']);
1244
			continue;
1245
		}
1246
		foreach ($group['pages'] as $page) {
1247
			$priv = map_page_privname($page);
1248
			if ($priv)
1249
				$privs[] = $priv;
1250
		}
1251
		unset($group['pages']);
1252
		$group['priv'] = $privs;
1253
	}
1254

    
1255
	/* sync all local account information */
1256
	local_sync_accounts();
1257
}
1258

    
1259

    
1260
function upgrade_050_to_051() {
1261
	global $config;
1262
	$pconfig = array();
1263
	$pconfig['descr'] = "Set to 0 to disable filtering on the incoming and outgoing member interfaces.";
1264
	$pconfig['tunable'] = "net.link.bridge.pfil_member";
1265
	$pconfig['value'] = "1";
1266
	$config['sysctl']['item'][] = $pconfig;
1267
	$pconfig = array();
1268
	$pconfig['descr'] = "Set to 1 to enable filtering on the bridge interface";
1269
	$pconfig['tunable'] = "net.link.bridge.pfil_bridge";
1270
	$pconfig['value'] = "0";
1271
	$config['sysctl']['item'][] = $pconfig;
1272

    
1273
	unset($config['bridge']);
1274

    
1275
	$convert_bridges = false;
1276
	foreach($config['interfaces'] as $intf) {
1277
		if (isset($intf['bridge']) && $intf['bridge'] <> "") {
1278
			$config['bridges'] = array();
1279
			$config['bridges']['bridged'] = array();
1280
			$convert_bridges = true;
1281
			break;
1282
		}
1283
	}
1284
	if ($convert_bridges == true) {
1285
		$i = 0;
1286
		foreach ($config['interfaces'] as $ifr => &$intf) {
1287
			if (isset($intf['bridge']) && $intf['bridge'] <> "") {
1288
				$nbridge = array();
1289
				$nbridge['members'] = "{$ifr},{$intf['bridge']}";
1290
				$nbridge['descr'] = "Converted bridged {$ifr}";
1291
				$nbridge['bridgeif'] = "bridge{$i}";
1292
				$config['bridges']['bridged'][] = $nbridge;
1293
				unset($intf['bridge']);
1294
				$i++;
1295
			}
1296
		}
1297
	}
1298
}
1299

    
1300

    
1301
function upgrade_051_to_052() {
1302
	global $config;
1303
	$config['openvpn'] = array();
1304
	if (!is_array($config['ca']))
1305
		$config['ca'] = array();
1306
	if (!is_array($config['cert']))
1307
		$config['cert'] = array();
1308

    
1309
	$vpnid = 1;
1310

    
1311
	/* openvpn server configurations */
1312
	if (is_array($config['installedpackages']['openvpnserver'])) {
1313
		$config['openvpn']['openvpn-server'] = array();
1314

    
1315
		$index = 1;
1316
		foreach($config['installedpackages']['openvpnserver']['config'] as $server) {
1317

    
1318
			if (!is_array($server))
1319
				continue;
1320

    
1321
			if ($server['auth_method'] == "pki") {
1322

    
1323
				/* create ca entry */
1324
				$ca = array();
1325
				$ca['refid'] = uniqid();
1326
				$ca['descr'] = "OpenVPN Server CA #{$index}";
1327
				$ca['crt'] = $server['ca_cert'];
1328
				$config['ca'][] = $ca;
1329

    
1330
				/* create ca reference */
1331
				unset($server['ca_cert']);
1332
				$server['caref'] = $ca['refid'];
1333

    
1334
				/* create a crl entry if needed */
1335
				if (!empty($server['crl'])) {
1336
					$crl = array();
1337
					$crl['refid'] = uniqid();
1338
					$crl['descr'] = "Imported OpenVPN CRL #{$index}";
1339
					$crl['caref'] = $ca['refid'];
1340
					$crl['text'] = $server['crl'];
1341
					if(!is_array($config['crl']))
1342
						$config['crl'] = array();
1343
					$config['crl'][] = $crl;
1344
					$server['crlref'] = $crl['refid'];
1345
				}
1346
				unset($server['crl']);
1347

    
1348
				/* create cert entry */
1349
				$cert = array();
1350
				$cert['refid'] = uniqid();
1351
				$cert['descr'] = "OpenVPN Server Certificate #{$index}";
1352
				$cert['crt'] = $server['server_cert'];
1353
				$cert['prv'] = $server['server_key'];
1354
				$config['cert'][] = $cert;
1355

    
1356
				/* create cert reference */
1357
				unset($server['server_cert']);
1358
				unset($server['server_key']);
1359
				$server['certref'] = $cert['refid'];
1360

    
1361
				$index++;
1362
			}
1363

    
1364
			/* determine operational mode */
1365
			if ($server['auth_method'] == 'pki') {
1366
				if($server['nopool']) {
1367
					$server['mode'] = "p2p_tls";
1368
				} else {
1369
					$server['mode'] = "server_tls";
1370
				}
1371
			} else {
1372
				$server['mode'] = "p2p_shared_key";
1373
			}
1374
			unset($server['auth_method']);
1375

    
1376
			/* modify configuration values */
1377
			$server['dh_length'] = 1024;
1378
			unset($server['dh_params']);
1379
			if (!$server['interface'])
1380
				$server['interface'] = 'wan';
1381
			$server['tunnel_network'] = $server['addresspool'];
1382
			unset($server['addresspool']);
1383
			if (isset($server['use_lzo'])) {
1384
				$server['compression'] = "on";
1385
				unset($server['use_lzo']);
1386
			}
1387
			if ($server['nopool'])
1388
				$server['pool_enable'] = false;
1389
			else
1390
				$server['pool_enable'] = "yes";
1391
			unset($server['nopool']);
1392
			$server['dns_domain'] = $server['dhcp_domainname'];
1393
			unset($server['dhcp_domainname']);
1394
			$server['dns_server1'] = $server['dhcp_dns'];
1395
			unset($server['dhcp_dns']);
1396
			$server['ntp_server1'] = $server['dhcp_ntp'];
1397
			unset($server['dhcp_ntp']);
1398
			if ($server['dhcp_nbtdisable'])
1399
				$server['netbios_enable'] = false;
1400
			else
1401
				$server['netbios_enable'] = "yes";
1402
			unset($server['dhcp_nbtdisable']);
1403
			$server['netbios_ntype'] = $server['dhcp_nbttype'];
1404
			unset($server['dhcp_nbttype']);
1405
			$server['netbios_scope'] = $server['dhcp_nbtscope'];
1406
			unset($server['dhcp_nbtscope']);
1407
			$server['nbdd_server1'] = $server['dhcp_nbdd'];
1408
			unset($server['dhcp_nbdd']);
1409
			$server['wins_server1'] = $server['dhcp_wins'];
1410
			unset($server['dhcp_wins']);
1411

    
1412
			if (!empty($server['disable']))
1413
				$server['disable'] = true;
1414
			else
1415
				unset($server['disable']);
1416

    
1417
			/* allocate vpnid */
1418
			$server['vpnid'] = $vpnid++;
1419

    
1420
			if (!empty($server['custom_options'])) {
1421
				$cstmopts = array();
1422
				$tmpcstmopts = explode(";", $server['custom_options']);
1423
				$assigned = false;
1424
				$tmpstr = "";
1425
				foreach ($tmpcstmopts as $tmpcstmopt) {
1426
					$tmpstr = str_replace(" ", "", $tmpcstmopt);
1427
					if (substr($tmpstr,0 ,6) == "devtun") {
1428
						$assigned = true;
1429
						continue;
1430
					} else if (substr($tmpstr, 0, 5) == "local") {
1431
						$localip = substr($tmpstr, 6);
1432
						$server['ipaddr'] = str_replace("\n", "", $localip);
1433
					} else
1434
						$cstmopts[] = $tmpcstmopt;
1435
				}
1436
				$server['custom_options'] = implode(";", $cstmopts);
1437
				if ($assigned == true) {
1438
					$realif = substr($tmpstr, 3);
1439
					foreach ($config['interfaces'] as $iface => $cfgif) {
1440
						if ($cfgif['if'] == $realif) {
1441
							$config['interfaces'][$iface]['if'] = "ovpns{$server['vpnid']}";
1442
							break;
1443
						}
1444
					}
1445
				}
1446
			}
1447

    
1448
			$config['openvpn']['openvpn-server'][] = $server;
1449
		}
1450
		unset($config['installedpackages']['openvpnserver']);
1451
	}
1452

    
1453
	/* openvpn client configurations */
1454
	if (is_array($config['installedpackages']['openvpnclient'])) {
1455
		$config['openvpn']['openvpn-client'] = array();
1456

    
1457
		$index = 1;
1458
		foreach($config['installedpackages']['openvpnclient']['config'] as $client) {
1459

    
1460
			if (!is_array($client))
1461
				continue;
1462

    
1463
			if ($client['auth_method'] == "pki") {
1464

    
1465
				/* create ca entry */
1466
				$ca = array();
1467
				$ca['refid'] = uniqid();
1468
				$ca['descr'] = "OpenVPN Client CA #{$index}";
1469
				$ca['crt'] = $client['ca_cert'];
1470
				$ca['crl'] = $client['crl'];
1471
				$config['ca'][] = $ca;
1472

    
1473
				/* create ca reference */
1474
				unset($client['ca_cert']);
1475
				unset($client['crl']);
1476
				$client['caref'] = $ca['refid'];
1477

    
1478
				/* create cert entry */
1479
				$cert = array();
1480
				$cert['refid'] = uniqid();
1481
				$cert['descr'] = "OpenVPN Client Certificate #{$index}";
1482
				$cert['crt'] = $client['client_cert'];
1483
				$cert['prv'] = $client['client_key'];
1484
				$config['cert'][] = $cert;
1485

    
1486
				/* create cert reference */
1487
				unset($client['client_cert']);
1488
				unset($client['client_key']);
1489
				$client['certref'] = $cert['refid'];
1490

    
1491
				$index++;
1492
			}
1493

    
1494
			/* determine operational mode */
1495
			if ($client['auth_method'] == 'pki')
1496
				$client['mode'] = "p2p_tls";
1497
			else
1498
				$client['mode'] = "p2p_shared_key";
1499
			unset($client['auth_method']);
1500

    
1501
			/* modify configuration values */
1502
			if (!$client['interface'])
1503
				$client['interface'] = 'wan';
1504
			$client['tunnel_network'] = $client['interface_ip'];
1505
			unset($client['interface_ip']);
1506
			$client['server_addr'] = $client['serveraddr'];
1507
			unset($client['serveraddr']);
1508
			$client['server_port'] = $client['serverport'];
1509
			unset($client['serverport']);
1510
			$client['proxy_addr'] = $client['poxy_hostname'];
1511
			unset($client['proxy_addr']);
1512
			if (isset($client['use_lzo'])) {
1513
				$client['compression'] = "on";
1514
				unset($client['use_lzo']);
1515
			}
1516
			$client['resolve_retry'] = $client['infiniteresolvretry'];
1517
			unset($client['infiniteresolvretry']);
1518

    
1519
			/* allocate vpnid */
1520
			$client['vpnid'] = $vpnid++;
1521

    
1522
			if (!empty($client['custom_options'])) {
1523
				$cstmopts = array();
1524
				$tmpcstmopts = explode(";", $client['custom_options']);
1525
				$assigned = false;
1526
				$tmpstr = "";
1527
				foreach ($tmpcstmopts as $tmpcstmopt) {
1528
					$tmpstr = str_replace(" ", "", $tmpcstmopt);
1529
					if (substr($tmpstr,0 ,6) == "devtun") {
1530
						$assigned = true;
1531
						continue;
1532
					} else if (substr($tmpstr, 0, 5) == "local") {
1533
                                                $localip = substr($tmpstr, 6);
1534
                                                $client['ipaddr'] = str_replace("\n", "", $localip);
1535
					} else
1536
						$cstmopts[] = $tmpcstmopt;
1537
				}
1538
				$client['custom_options'] = implode(";", $cstmopts);
1539
				if ($assigned == true) {
1540
					$realif = substr($tmpstr, 3);
1541
					foreach ($config['interfaces'] as $iface => $cfgif) {
1542
						if ($cfgif['if'] == $realif) {
1543
							$config['interfaces'][$iface]['if'] = "ovpnc{$client['vpnid']}";
1544
							break;
1545
						}
1546
					}
1547
				}
1548
			}
1549

    
1550
			if (!empty($client['disable']))
1551
				$client['disable'] = true;
1552
			else
1553
				unset($client['disable']);
1554

    
1555
			$config['openvpn']['openvpn-client'][] = $client;
1556
		}
1557

    
1558
		unset($config['installedpackages']['openvpnclient']);
1559
	}
1560

    
1561
	/* openvpn client specific configurations */
1562
	if (is_array($config['installedpackages']['openvpncsc'])) {
1563
		$config['openvpn']['openvpn-csc'] = array();
1564

    
1565
		foreach($config['installedpackages']['openvpncsc']['config'] as $csc) {
1566

    
1567
			if (!is_array($csc))
1568
				continue;
1569

    
1570
			/* modify configuration values */
1571
			$csc['common_name'] = $csc['commonname'];
1572
			unset($csc['commonname']);
1573
			$csc['tunnel_network'] = $csc['ifconfig_push'];
1574
			unset($csc['ifconfig_push']);
1575
			$csc['dns_domain'] = $csc['dhcp_domainname'];
1576
			unset($csc['dhcp_domainname']);
1577
			$csc['dns_server1'] = $csc['dhcp_dns'];
1578
			unset($csc['dhcp_dns']);
1579
			$csc['ntp_server1'] = $csc['dhcp_ntp'];
1580
			unset($csc['dhcp_ntp']);
1581
			if ($csc['dhcp_nbtdisable'])
1582
				$csc['netbios_enable'] = false;
1583
			else
1584
				$csc['netbios_enable'] = "yes";
1585
			unset($csc['dhcp_nbtdisable']);
1586
			$csc['netbios_ntype'] = $csc['dhcp_nbttype'];
1587
			unset($csc['dhcp_nbttype']);
1588
			$csc['netbios_scope'] = $csc['dhcp_nbtscope'];
1589
			unset($csc['dhcp_nbtscope']);
1590
			$csc['nbdd_server1'] = $csc['dhcp_nbdd'];
1591
			unset($csc['dhcp_nbdd']);
1592
			$csc['wins_server1'] = $csc['dhcp_wins'];
1593
			unset($csc['dhcp_wins']);
1594

    
1595
			if (!empty($csc['disable']))
1596
				$csc['disable'] = true;
1597
			else
1598
				unset($csc['disable']);
1599

    
1600
			$config['openvpn']['openvpn-csc'][] = $csc;
1601
		}
1602

    
1603
		unset($config['installedpackages']['openvpncsc']);
1604
	}
1605

    
1606
	if (count($config['openvpn']['openvpn-server']) > 0 ||
1607
		count($config['openvpn']['openvpn-client']) > 0) {
1608
		$ovpnrule = array();
1609
                $ovpnrule['type'] = "pass";
1610
                $ovpnrule['interface'] = "openvpn";
1611
                $ovpnrule['statetype'] = "keep state";
1612
                $ovpnrule['source'] = array();
1613
                $ovpnrule['destination'] = array();
1614
                $ovpnrule['source']['any'] = true;
1615
                $ovpnrule['destination']['any'] = true;
1616
                $ovpnrule['descr'] = "Auto added OpenVPN rule from config upgrade.";
1617
		$config['filter']['rule'][] = $ovpnrule;
1618
	}
1619

    
1620
	/*
1621
		* FIXME: hack to keep things working with no installedpackages
1622
		* or carp array in the configuration data.
1623
		*/
1624
	if (!is_array($config['installedpackages']))
1625
		$config['installedpackages'] = array();
1626
	if (!is_array($config['installedpackages']['carp']))
1627
		$config['installedpackages']['carp'] = array();
1628

    
1629
}
1630

    
1631

    
1632
function upgrade_052_to_053() {
1633
	global $config;
1634
	if (!is_array($config['ca']))
1635
		$config['ca'] = array();
1636
	if (!is_array($config['cert']))
1637
		$config['cert'] = array();
1638

    
1639
	/* migrate advanced admin page webui ssl to certifcate mngr */
1640
	if ($config['system']['webgui']['certificate'] &&
1641
	$config['system']['webgui']['private-key']) {
1642

    
1643
		/* create cert entry */
1644
		$cert = array();
1645
		$cert['refid'] = uniqid();
1646
		$cert['descr'] = "webConfigurator SSL Certificate";
1647
		$cert['crt'] = $config['system']['webgui']['certificate'];
1648
		$cert['prv'] = $config['system']['webgui']['private-key'];
1649
		$config['cert'][] = $cert;
1650

    
1651
		/* create cert reference */
1652
		unset($config['system']['webgui']['certificate']);
1653
		unset($config['system']['webgui']['private-key']);
1654
		$config['system']['webgui']['ssl-certref'] = $cert['refid'];
1655
	}
1656

    
1657
	/* migrate advanced admin page ssh keys to user manager */
1658
	if ($config['system']['ssh']['authorizedkeys']) {
1659
		$admin_user =& getUserEntryByUID(0);
1660
		$admin_user['authorizedkeys'] = $config['system']['ssh']['authorizedkeys'];
1661
		unset($config['system']['ssh']['authorizedkeys']);
1662
	}
1663
}
1664

    
1665

    
1666
function upgrade_053_to_054() {
1667
	global $config;
1668
	if(is_array($config['load_balancer']['lbpool'])) {
1669
		$lbpool_arr = $config['load_balancer']['lbpool'];
1670
		$lbpool_srv_arr = array();
1671
		$gateway_group_arr = array();
1672
		$gateways = return_gateways_array();
1673
		if (! is_array($config['gateways']['gateway_item']))
1674
			$config['gateways']['gateway_item'] = array();
1675

    
1676
		$a_gateways =& $config['gateways']['gateway_item'];
1677
		foreach($lbpool_arr as $lbpool) {
1678
			if($lbpool['type'] == "gateway") {
1679
				$gateway_group['name'] = $lbpool['name'];
1680
				$gateway_group['descr'] = $lbpool['descr'];
1681
				$gateway_group['trigger'] = "down";
1682
				$gateway_group['item'] = array();
1683
				$i = 0;
1684
				foreach($lbpool['servers'] as $member) {
1685
					$split = split("\|", $member);
1686
					$interface = $split[0];
1687
					$monitor = $split[1];
1688
					/* on static upgraded configuration we automatically prepend GW_ */
1689
					$static_name = "GW_" . strtoupper($interface);
1690
					if(is_ipaddr($monitor))
1691
						foreach ($a_gateways as & $gw)
1692
							if ($gw['name'] == $static_name)
1693
								$gw['monitor'] = $monitor;
1694

    
1695
					/* on failover increment tier. Else always assign 1 */
1696
					if($lbpool['behaviour'] == "failover") {
1697
						$i++;
1698
					} else {
1699
						$i = 1;
1700
					}
1701
					$gateway_group['item'][] = "$static_name|$i";
1702
				}
1703
				$gateway_group_arr[] = $gateway_group;
1704
			} else {
1705
				$lbpool_srv_arr[] = $lbpool;
1706
			}
1707
		}
1708
		$config['load_balancer']['lbpool'] = $lbpool_srv_arr;
1709
		$config['gateways']['gateway_group'] = $gateway_group_arr;
1710
	}
1711
	// Unset lbpool if we no longer have any server pools
1712
	if (count($lbpool_srv_arr) == 0) {
1713
		if(empty($config['load_balancer'])) {
1714
			unset($config['load_balancer']);
1715
		} else {
1716
			unset($config['load_balancer']['lbpool']);
1717
		}
1718
	} else {
1719
		$config['load_balancer']['lbpool'] = $lbpool_srv_arr;
1720
	}
1721
	// Only set the gateway group array if we converted any
1722
	if (count($gateway_group_arr) != 0) {
1723
		$config['gateways']['gateway_group'] = $gateway_group_arr;
1724
	}
1725
}
1726

    
1727

    
1728
function upgrade_054_to_055() {
1729
	global $config;
1730
	global $g;
1731

    
1732
	/* RRD files changed for quality, traffic and packets graphs */
1733
	//ini_set("max_execution_time", "1800");
1734
	/* convert traffic RRD file */
1735
	global $parsedcfg, $listtags;
1736
	$listtags = array("ds", "v", "rra", "row");
1737

    
1738
	$rrddbpath = "/var/db/rrd/";
1739
	$rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool";
1740

    
1741
	$rrdinterval = 60;
1742
	$valid = $rrdinterval * 2;
1743

    
1744
	/* Asume GigE for now */
1745
	$downstream = 125000000;
1746
	$upstream = 125000000;
1747

    
1748
	/* build a list of quality databases */
1749
	/* roundtrip has become delay */
1750
	function divide_delay($delayval) {
1751
		$delayval = floatval($delayval);
1752
		$delayval = ($delayval / 1000);
1753
		$delayval = " ". sprintf("%1.10e", $delayval) ." ";
1754
		return $delayval;
1755
	}
1756
	/* the roundtrip times need to be divided by 1000 to get seconds, really */
1757
	$databases = array();
1758
	if (!file_exists($rrddbpath))
1759
		@mkdir($rrddbpath);
1760
	chdir($rrddbpath);
1761
	$databases = glob("*-quality.rrd");
1762
	rsort($databases);
1763
	foreach($databases as $database) {
1764
		$xmldump = "{$database}.old.xml";
1765
		$xmldumpnew = "{$database}.new.xml";
1766

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

    
1771
		dump_rrd_to_xml("{$rrddbpath}/{$database}", "{$g['tmp_path']}/{$xmldump}");
1772
		$rrdoldxml = file_get_contents("{$g['tmp_path']}/{$xmldump}");
1773
		$rrdold = xml2array($rrdoldxml, 1, "tag");
1774
		$rrdold = $rrdold['rrd'];
1775

    
1776
		$i = 0;
1777
		foreach($rrdold['rra'] as $rra) {
1778
			$l = 0;
1779
			foreach($rra['database']['row'] as $row) {
1780
				$vnew = divide_delay($row['v'][1]);
1781
				$rrdold['rra'][$i]['database']['row'][$l]['v'][1] = $vnew;
1782
				$l++;
1783
			}
1784
			$i++;
1785
		}
1786

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

    
1791
	}
1792
	/* let apinger recreate required files */
1793
	setup_gateways_monitor();
1794

    
1795
	/* build a list of traffic and packets databases */
1796
	$databases = array();
1797
	exec("cd $rrddbpath;/usr/bin/find *-traffic.rrd *-packets.rrd", $databases);
1798
	rsort($databases);
1799
	foreach($databases as $database) {
1800
		$databasetmp = "{$database}.tmp";
1801
		$xmldump = "{$database}.old.xml";
1802
		$xmldumptmp = "{$database}.tmp.xml";
1803
		$xmldumpnew = "{$database}.new.xml";
1804

    
1805
		if ($g['booting'])
1806
			echo "Migrate RRD database {$database} to new format \n";
1807
		/* rename DS source */
1808
		mwexec("$rrdtool tune {$rrddbpath}/{$database} -r in:inpass 2>&1");
1809
		mwexec("$rrdtool tune {$rrddbpath}/{$database} -r out:outpass 2>71");
1810

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

    
1814
		/* create new rrd database file */
1815
		$rrdcreate = "$rrdtool create {$g['tmp_path']}/{$databasetmp} --step $rrdinterval ";
1816
		$rrdcreate .= "DS:inpass:COUNTER:$valid:0:$downstream ";
1817
		$rrdcreate .= "DS:outpass:COUNTER:$valid:0:$upstream ";
1818
		$rrdcreate .= "DS:inblock:COUNTER:$valid:0:$downstream ";
1819
		$rrdcreate .= "DS:outblock:COUNTER:$valid:0:$upstream ";
1820
		$rrdcreate .= "RRA:AVERAGE:0.5:1:1000 ";
1821
		$rrdcreate .= "RRA:AVERAGE:0.5:5:1000 ";
1822
		$rrdcreate .= "RRA:AVERAGE:0.5:60:1000 ";
1823
		$rrdcreate .= "RRA:AVERAGE:0.5:720:3000 ";
1824

    
1825
		create_new_rrd("$rrdcreate");
1826
		/* create temporary xml from new RRD */
1827
		dump_rrd_to_xml("{$g['tmp_path']}/{$databasetmp}", "{$g['tmp_path']}/{$xmldumptmp}");
1828

    
1829
		$rrdoldxml = file_get_contents("{$g['tmp_path']}/{$xmldump}");
1830
		$rrdold = xml2array($rrdoldxml, 1, "tag");
1831
		$rrdold = $rrdold['rrd'];
1832

    
1833
		$rrdnewxml = file_get_contents("{$g['tmp_path']}/{$xmldumptmp}");
1834
		$rrdnew = xml2array($rrdnewxml, 1, "tag");
1835
		$rrdnew = $rrdnew['rrd'];
1836

    
1837
		/* remove any MAX RRA's. Not needed for traffic. */
1838
		$i = 0;
1839
		foreach ($rrdold['rra'] as $rra) {
1840
			if(trim($rra['cf']) == "MAX") {
1841
				unset($rrdold['rra'][$i]);
1842
			}
1843
			$i++;
1844
		}
1845

    
1846
		$rrdxmlarray = migrate_rrd_format($rrdold, $rrdnew);
1847
		$rrdxml = dump_xml_config_raw($rrdxmlarray, "rrd");
1848
		file_put_contents("{$g['tmp_path']}/{$xmldumpnew}", $rrdxml);
1849
		mwexec("$rrdtool restore -f {$g['tmp_path']}/{$xmldumpnew} {$rrddbpath}/{$database} 2>&1");
1850

    
1851
	}
1852
	enable_rrd_graphing();
1853
	if ($g['booting'])
1854
		echo "Updating configuration...";
1855
}
1856

    
1857

    
1858
function upgrade_055_to_056() {
1859
	global $config;
1860

    
1861
	if (!is_array($config['ca']))
1862
		$config['ca'] = array();
1863
	if (!is_array($config['cert']))
1864
		$config['cert'] = array();
1865

    
1866
	/* migrate ipsec ca's to cert manager */
1867
	if (is_array($config['ipsec']['cacert'])) {
1868
		foreach($config['ipsec']['cacert'] as & $cacert) {
1869
			$ca = array();
1870
			$ca['refid'] = uniqid();
1871
			if (is_array($cacert['cert']))
1872
				$ca['crt'] = $cacert['cert'][0];
1873
			else
1874
				$ca['crt'] = $cacert['cert'];
1875
			$ca['descr'] = $cacert['ident'];
1876
			$config['ca'][] = $ca;
1877
		}
1878
		unset($config['ipsec']['cacert']);
1879
	}
1880

    
1881
	/* migrate phase1 certificates to cert manager */
1882
	if (is_array($config['ipsec']['phase1'])) {
1883
		foreach($config['ipsec']['phase1'] as & $ph1ent) {
1884
			$cert = array();
1885
			$cert['refid'] = uniqid();
1886
			$cert['descr'] = "IPsec Peer {$ph1ent['remote-gateway']} Certificate";
1887
			if (is_array($ph1ent['cert']))
1888
				$cert['crt'] = $ph1ent['cert'][0];
1889
			else
1890
				$cert['crt'] = $ph1ent['cert'];
1891
			$cert['prv'] = $ph1ent['private-key'];
1892
			$config['cert'][] = $cert;
1893
			$ph1ent['certref'] = $cert['refid'];
1894
			if ($ph1ent['cert'])
1895
				unset($ph1ent['cert']);
1896
			if ($ph1ent['private-key'])
1897
				unset($ph1ent['private-key']);
1898
			if ($ph1ent['peercert'])
1899
				unset($ph1ent['peercert']);
1900
		}
1901
	}
1902
}
1903

    
1904

    
1905
function upgrade_056_to_057() {
1906
	global $config;
1907
	if (!is_array($config['system']['user']))
1908
		$config['system']['user'] = array();
1909
	/* migrate captivate portal to user manager */
1910
	if (is_array($config['captiveportal']['user'])) {
1911
		foreach($config['captiveportal']['user'] as $user) {
1912
			// avoid user conflicts
1913
			$found = false;
1914
			foreach ($config['system']['user'] as $userent) {
1915
				if ($userent['name'] == $user['name']) {
1916
					$found = true;
1917
					break;
1918
				}
1919
			}
1920
			if ($found)
1921
				continue;
1922
			$user['scope'] = "user";
1923
			if (isset($user['expirationdate'])) {
1924
				$user['expires'] = $user['expirationdate'];
1925
				unset($user['expirationdate']);
1926
			}
1927
			if (isset($user['password'])) {
1928
				$user['md5-hash'] = $user['password'];
1929
				unset($user['password']);
1930
			}
1931
			$user['uid'] = $config['system']['nextuid']++;
1932
			$config['system']['user'][] = $user;
1933
		}
1934
		unset($config['captiveportal']['user']);
1935
	}
1936
}
1937

    
1938
function upgrade_057_to_058() {
1939
	global $config;
1940
	/* set all phase2 entries to tunnel mode */
1941
	if (is_array($config['ipsec']['phase2']))
1942
		foreach($config['ipsec']['phase2'] as & $ph2ent)
1943
			$ph2ent['mode'] = 'tunnel';
1944
}
1945

    
1946
function upgrade_058_to_059() {
1947
	global $config;
1948

    
1949
	if (is_array($config['schedules']['schedule'])) {
1950
		foreach ($config['schedules']['schedule'] as & $schedl)
1951
			$schedl['schedlabel'] = uniqid();
1952
	}
1953
}
1954

    
1955
function upgrade_059_to_060() {
1956
	global $config;
1957
	require_once("/etc/inc/certs.inc");
1958
	if (is_array($config['ca'])) {
1959
		/* Locate issuer for all CAs */
1960
		foreach ($config['ca'] as & $ca) {
1961
			$subject = cert_get_subject($ca['crt']);
1962
			$issuer = cert_get_issuer($ca['crt']);
1963
			if($issuer <> $subject) {
1964
				$issuer_crt =& lookup_ca_by_subject($issuer);
1965
				if($issuer_crt)
1966
					$ca['caref'] = $issuer_crt['refid'];
1967
			}
1968
		}
1969
		
1970
		/* Locate issuer for all certificates */
1971
		if (is_array($config['cert'])) {
1972
			foreach ($config['cert'] as & $cert) {
1973
				$subject = cert_get_subject($cert['crt']);
1974
				$issuer = cert_get_issuer($cert['crt']);
1975
				if($issuer <> $subject) {
1976
					$issuer_crt =& lookup_ca_by_subject($issuer);
1977
					if($issuer_crt)
1978
						$cert['caref'] = $issuer_crt['refid'];
1979
				}
1980
			}
1981
		}
1982
	}
1983
}
1984

    
1985
function upgrade_060_to_061() {
1986
	global $config;
1987

    
1988
	if (is_array($config['interfaces']['wan']))
1989
		$config['interfaces']['wan']['enable'] = true;
1990
	if (is_array($config['interfaces']['lan']))
1991
		$config['interfaces']['lan']['enable'] = true;
1992
}
1993

    
1994
function upgrade_061_to_062() {
1995
	global $config;
1996

    
1997
	/* Convert NAT port forwarding rules */
1998
	if (is_array($config['nat']['rule'])) {
1999
		$a_nat = &$config['nat']['rule'];
2000

    
2001
		foreach ($a_nat as &$natent) {
2002
			$natent['disabled'] = false;
2003
			$natent['nordr']    = false;
2004

    
2005
			$natent['source'] = array(
2006
				"not"     => false,
2007
				"any"     => true,
2008
				"port"    => ""
2009
			);
2010

    
2011
			$natent['destination'] = array(
2012
				"not"     => false,
2013
				"address" => $natent['external-address'],
2014
				"port"    => $natent['external-port']
2015
			);
2016

    
2017
			if (empty($natent['destination']['address'])) {
2018
				unset($natent['destination']['address']);
2019
				$natent['destination']['network'] = $natent['interface'] . 'ip';
2020
			} else if ($natent['destination']['address'] == 'any') {
2021
				unset($natent['destination']['address']);
2022
				$natent['destination']['any'] = true;
2023
			}
2024

    
2025
			unset($natent['external-address']);
2026
			unset($natent['external-port']);
2027
		}
2028

    
2029
		unset($natent);
2030
	}
2031
}
2032

    
2033
function upgrade_062_to_063() {
2034
	/* Upgrade legacy Themes to the new pfsense_ng */
2035
	global $config;
2036

    
2037
	switch($config['theme']) {
2038
		case "nervecenter":
2039
			$config['theme'] = "pfsense_ng";
2040
			break;
2041
	}
2042
	
2043
}
2044

    
2045
function upgrade_063_to_064() {
2046
	global $config;
2047
	$j=0;
2048
	$ifcfg = &$config['interfaces'];
2049
	
2050
	if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) {	
2051
		foreach ($config['ppps']['ppp'] as $pppid => $ppp) {
2052
			$config['ppps']['ppp'][$pppid]['if'] = "ppp".$j;
2053
			$config['ppps']['ppp'][$pppid]['ptpid'] = $j;
2054
			$j++;
2055
			if (isset($ppp['port'])){
2056
				$config['ppps']['ppp'][$pppid]['ports'] = $ppp['port'];
2057
				unset($config['ppps']['ppp'][$pppid]['port']);
2058
			}
2059
			if (!isset($ppp['type'])){
2060
				$config['ppps']['ppp'][$pppid]['type'] = "ppp";
2061
			}
2062
			if (isset($ppp['defaultgw']))
2063
				unset($config['ppps']['ppp'][$pppid]['defaultgw']);
2064
		}
2065
	}
2066
	
2067
	if (!is_array($config['ppps']['ppp']))
2068
		$config['ppps']['ppp'] = array();
2069
	$a_ppps = &$config['ppps']['ppp'];
2070

    
2071
	foreach ($ifcfg as $ifname => $ifinfo) {
2072
		$ppp = array();
2073
		// For pppoe conversion
2074
		if ($ifinfo['ipaddr'] == "pppoe" || $ifinfo['ipaddr'] == "pptp"){
2075
			if (isset($ifinfo['ptpid']))
2076
				continue;
2077
			$ppp['ptpid'] =  $j;
2078
			$ppp['type'] = $ifinfo['ipaddr'];
2079
			$ppp['if'] = $ifinfo['ipaddr'].$j;
2080
			$ppp['ports'] = $ifinfo['if'];
2081
			if ($ifinfo['ipaddr'] == "pppoe"){
2082
				$ppp['username'] = $ifinfo['pppoe_username'];
2083
				$ppp['password'] = base64_encode($ifinfo['pppoe_password']);
2084
			}
2085
			if ($ifinfo['ipaddr'] == "pptp"){
2086
				$ppp['username'] = $ifinfo['pptp_username'];
2087
				$ppp['password'] = base64_encode($ifinfo['pptp_password']);
2088
			}
2089
			
2090
			if (isset($ifinfo['provider']))
2091
				$ppp['provider'] = $ifinfo['provider'];
2092
			if (isset($ifinfo['ondemand']))
2093
				$ppp['ondemand'] = true;
2094
			if (isset($ifinfo['timeout']))
2095
				$ppp['idletimeout'] = $ifinfo['timeout'];
2096
			if (isset($ifinfo['pppoe']['pppoe-reset-type'])){
2097
				$ppp['pppoe-reset-type'] = $ifinfo['pppoe']['pppoe-reset-type'];
2098
				if (is_array($config['cron']['item'])) {
2099
					for ($i = 0; $i < count($config['cron']['item']); $i++) {
2100
						$item = $config['cron']['item'][$i];
2101
						if (strpos($item['command'], "/conf/pppoe{$ifname}restart") !== false)
2102
							$config['cron']['item'][$i]['command'] = "/var/etc/pppoe_restart_" . $ppp['if'];
2103
					}
2104
				}
2105
			}
2106
			if (isset($ifinfo['local']))
2107
				$ppp['localip'] = $ifinfo['local'];
2108
			if (isset($ifinfo['subnet']))
2109
				$ppp['subnet'] = $ifinfo['subnet'];
2110
			if (isset($ifinfo['remote']))
2111
				$ppp['gateway'] = $ifinfo['remote'];
2112

    
2113
			$ifcfg[$ifname]['if'] = $ifinfo['ipaddr'].$j;
2114
			$j++;
2115
			
2116
			unset($ifcfg[$ifname]['pppoe_username']);
2117
			unset($ifcfg[$ifname]['pppoe_password']);
2118
			unset($ifcfg[$ifname]['provider']);
2119
			unset($ifcfg[$ifname]['ondemand']);
2120
			unset($ifcfg[$ifname]['timeout']);
2121
			unset($ifcfg[$ifname]['pppoe_reset']);
2122
			unset($ifcfg[$ifname]['pppoe_preset']);
2123
			unset($ifcfg[$ifname]['pppoe']);
2124
			unset($ifcfg[$ifname]['pptp_username']);
2125
			unset($ifcfg[$ifname]['pptp_password']);
2126
			unset($ifcfg[$ifname]['local']);
2127
			unset($ifcfg[$ifname]['subnet']);
2128
			unset($ifcfg[$ifname]['remote']);
2129
			
2130
			$a_ppps[] = $ppp;
2131
			
2132
		}
2133
	}
2134
}
2135

    
2136
function upgrade_064_to_065() {
2137
	/* Disable TSO and LRO in upgraded configs */
2138
	global $config;
2139
	$config['system']['disablesegmentationoffloading'] = true;
2140
	$config['system']['disablelargereceiveoffloading'] = true;
2141
}
2142

    
2143
function upgrade_065_to_066() {
2144
	global $config;
2145

    
2146
	$dhcrelaycfg =& $config['dhcrelay'];
2147

    
2148
        if (is_array($dhcrelaycfg)) {
2149
        	$dhcrelayifs = array();
2150
		$foundifs = false;
2151
        	/* DHCPRelay enabled on any interfaces? */
2152
                foreach ($dhcrelaycfg as $dhcrelayif => $dhcrelayifconf) {
2153
                        if (isset($dhcrelayifconf['enable'])) {
2154
				$dhcrelayifs[] = $dhcrelayif;
2155
				unset($dhcrelaycfg['dhcrelayif']);
2156
				$foundifs = true;
2157
			}
2158
                }
2159
		if ($foundifs == true)
2160
			$dhcrelaycfg['interface'] = implode(",", $dhcrelayifs);
2161
        }
2162
}
2163

    
2164
function upgrade_066_to_067() {
2165
	global $config;
2166
	if (isset($config['system']['ca'])) {
2167
		$config['ca'] = $config['system']['ca'];
2168
	}
2169
	if (isset($config['system']['cert'])) {
2170
		$config['cert'] = $config['system']['cert'];
2171
	}
2172
}
2173

    
2174
function upgrade_067_to_068() {
2175
	global $config;
2176

    
2177
	if (!empty($config['pppoe'])) {
2178
		$config['pppoes'] = array();
2179
		$config['pppoes']['pppoe'] = array();
2180
		$config['pppoes']['pppoe'][] = $config['pppoe'][0];
2181

    
2182
		if (is_array($config['pppoe']['user'])) {
2183
			$username = array(); 
2184
			foreach ($config['pppoe']['user'] as $user) {
2185
				$usr = $user['name'] . ":" . base64_encode($user['password']);
2186
				if ($user['ip'])
2187
					$usr .= ":{$user['ip']}";
2188
				$username[] = $usr;
2189
			}
2190
			$config['pppoes']['pppoe'][0]['username'] = implode(" ", $username);
2191
		}
2192
		unset($config['pppoe']);
2193
	}
2194
}
2195

    
2196
function upgrade_068_to_069() {
2197
	global $config;
2198
	if (!is_array($config['system']['user']))
2199
		return;
2200
	foreach ($config['system']['user'] as & $user) {
2201
		if (!is_array($user['cert']))
2202
			continue;
2203
		$rids = array();
2204
		foreach ($user['cert'] as $id => $cert) {
2205
			if (!isset($cert['descr']))
2206
				continue;
2207
			$tcert = $cert;
2208
			// Make sure each cert gets a refid
2209
			if (!isset($tcert['refid']))
2210
				$tcert['refid'] = uniqid();
2211
			// Keep the cert references for this user
2212
			$rids[] = $tcert['refid'];
2213
			$config['cert'][] = $tcert;
2214
		}
2215
		// Replace user certs with cert references instead.
2216
		if (count($rids) > 0)
2217
			$user['cert'] = $rids;
2218
	}
2219
}
2220

    
2221
function upgrade_069_to_070() {
2222
	global $config;
2223

    
2224
	/* Convert NAT 1:1 rules */
2225
	if (is_array($config['nat']['onetoone'])) {
2226
		foreach ($config['nat']['onetoone'] as $nidx => $natent) {
2227
			if ($natent['subnet'] == 32)
2228
				$config['nat']['onetoone'][$nidx]['source'] = array("address" => $natent['internal']);
2229
			else
2230
				$config['nat']['onetoone'][$nidx]['source'] = array("address" => $natent['internal'] . "/" . $natent['subnet']);
2231

    
2232
			$config['nat']['onetoone'][$nidx]['destination'] = array("any" => true);
2233

    
2234
			unset($config['nat']['onetoone'][$nidx]['internal']);
2235
			unset($config['nat']['onetoone'][$nidx]['subnet']);
2236
		}
2237

    
2238
		unset($natent);
2239
	}
2240
}
2241

    
2242
function upgrade_070_to_071() {
2243
	global $config;
2244

    
2245
	if (is_array($config['cron']['item'])) {
2246
		foreach($config['cron']['item'] as $idx => $cronitem) {
2247
			if(stristr($cronitem['command'], "checkreload.sh")) {
2248
				unset($config['cron']['item'][$idx]);
2249
				break;
2250
			}
2251
		}
2252
	}
2253
}
2254

    
2255
function rename_field(& $section, $oldname, $newname) {
2256
	if (is_array($section)) {
2257
		foreach($section as & $item) {
2258
			if (!empty($item[$oldname]))
2259
				$item[$newname] = $item[$oldname];
2260
			if (isset($item[$oldname]))
2261
				unset($item[$oldname]);
2262
		}
2263
	}
2264
}
2265

    
2266
function upgrade_071_to_072() {
2267
	global $config;
2268
	if (is_array($config['sysctl']) && is_array($config['sysctl']['item']))
2269
		rename_field($config['sysctl']['item'], 'desc', 'descr');
2270
}
2271

    
2272
function upgrade_072_to_073() {
2273
	global $config;
2274
	if (!is_array($config['load_balancer']))
2275
		return;
2276
	if (is_array($config['load_balancer']['monitor_type']))
2277
		rename_field($config['load_balancer']['monitor_type'], 'desc', 'descr');
2278
	if (is_array($config['load_balancer']['lbpool']))
2279
		rename_field($config['load_balancer']['lbpool'], 'desc', 'descr');
2280
	if (is_array($config['load_balancer']['lbaction']))
2281
		rename_field($config['load_balancer']['lbaction'], 'desc', 'descr');
2282
	if (is_array($config['load_balancer']['lbprotocol']))
2283
		rename_field($config['load_balancer']['lbprotocol'], 'desc', 'descr');
2284
	if (is_array($config['load_balancer']['virtual_server']))
2285
		rename_field($config['load_balancer']['virtual_server'], 'desc', 'descr');
2286
}
2287

    
2288
function upgrade_073_to_074() {
2289
	global $config;
2290
	rename_field($config['system']['user'], 'fullname', 'descr');
2291
}
2292

    
2293
function upgrade_074_to_075() {
2294
	global $config;
2295
	if (is_array($config['ca']))
2296
		rename_field($config['ca'], 'name', 'descr');
2297
	if (is_array($config['cert']))
2298
		rename_field($config['cert'], 'name', 'descr');
2299
	if (is_array($config['crl']))
2300
		rename_field($config['crl'], 'name', 'descr');
2301
}
2302

    
2303
function upgrade_075_to_076() {
2304
	global $config;
2305
	$cron_item = array();
2306
	$cron_item['minute'] = "30";
2307
	$cron_item['hour'] = "12";
2308
	$cron_item['mday'] = "*";
2309
	$cron_item['month'] = "*";
2310
	$cron_item['wday'] = "*";
2311
	$cron_item['who'] = "root";
2312
	$cron_item['command'] = "/usr/bin/nice -n20 /etc/rc.update_urltables";
2313
	$config['cron']['item'][] = $cron_item;
2314
}
2315

    
2316
function upgrade_076_to_077() {
2317
	global $config;
2318
	foreach($config['filter']['rule'] as & $rule) {
2319
		if (isset($rule['protocol']) && !empty($rule['protocol']))
2320
			$rule['protocol'] = strtolower($rule['protocol']);
2321
	}
2322
}
2323

    
2324
?>
(48-48/61)