Project

General

Profile

Download (7.05 KB) Statistics
| Branch: | Tag: | Revision:
1
<?php
2
/****h* pfSense/config
3
 * NAME
4
 *   config.inc - Functions to manipulate config.xml
5
 * DESCRIPTION
6
 *   This include contains various config.xml specific functions.
7
 * HISTORY
8
 * $Id$
9
 ******
10

    
11
	config.inc
12
	Copyright (C) 2004-2010 Scott Ullrich
13
	All rights reserved.
14

    
15
	originally part of m0n0wall (http://m0n0.ch/wall)
16
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
17
	All rights reserved.
18

    
19
	Redistribution and use in source and binary forms, with or without
20
	modification, are permitted provided that the following conditions are met:
21

    
22
	1. Redistributions of source code must retain the above copyright notice,
23
	   this list of conditions and the following disclaimer.
24

    
25
	2. Redistributions in binary form must reproduce the above copyright
26
	   notice, this list of conditions and the following disclaimer in the
27
	   documentation and/or other materials provided with the distribution.
28

    
29
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
30
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
31
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
32
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
33
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
34
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
35
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
36
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
37
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38
	POSSIBILITY OF SUCH DAMAGE.
39

    
40

    
41
	pfSense_BUILDER_BINARIES:	/sbin/mount	/sbin/umount	/sbin/halt	/sbin/fsck
42
	pfSense_MODULE:	config
43
*/
44

    
45
if (!function_exists('platform_booting'))
46
	require_once('globals.inc');
47

    
48
/* do not load this file twice. */
49
//if (in_array("/etc/inc/config.inc", get_included_files()))
50
//	return;
51

    
52
// Set the memory limit to 128M on i386.  When someone has something like 500+ tunnels
53
// the parser needs quite a bit of ram.   Do not remove this line unless you
54
// know what you are doing.  If in doubt, check with dev@ _/FIRST/_!
55
if(!$ARCH)
56
	$ARCH = php_uname("m");
57

    
58
// Set memory limit to 256M on amd64.
59
if($ARCH == "amd64")
60
	ini_set("memory_limit","256M");
61
else
62
	ini_set("memory_limit","128M");
63

    
64
/* include globals from notices.inc /utility/XML parser files */
65
require_once("notices.inc");
66
require_once("util.inc");
67
require_once("IPv6.inc");
68
require_once('config.lib.inc');
69
if(file_exists("/cf/conf/use_xmlreader"))
70
	require_once("xmlreader.inc");
71
else
72
	require_once("xmlparse.inc");
73
require_once("crypt.inc");
74

    
75
/* read platform */
76
if (file_exists("{$g['etc_path']}/platform")) {
77
	$g['platform'] = chop(file_get_contents("{$g['etc_path']}/platform"));
78
} else {
79
	$g['platform'] = "unknown";
80
}
81

    
82
/* if /debugging exists, lets set $debugging
83
   so we can output more information */
84
if(file_exists("/debugging")) {
85
	$debugging = true;
86
	$g['debug'] = true;
87
}
88

    
89
if(platform_booting(true)) {
90
	echo ".";
91
	if(file_exists("/cf/conf/config.xml")) {
92
		$config_contents = file_get_contents("/cf/conf/config.xml");
93
		if(stristr($config_contents, "<m0n0wall>") == true) {
94
			echo ".";
95
			/* user has just upgraded to m0n0wall, replace root xml tags */
96
			log_error(gettext("Upgrading m0n0wall configuration to pfSense... "));
97
			$config_contents = str_replace("m0n0wall","pfsense", $config_contents);
98
			if (!config_validate("{$g['conf_path']}/config.xml"))
99
				log_error(gettext("ERROR!  Could not convert m0n0wall -> pfsense in config.xml"));
100
			conf_mount_rw();
101
			file_put_contents("/cf/conf/config.xml", $config_contents);
102
			conf_mount_ro();
103
		}
104
		unset($config_contents);
105
	}
106
	/* if our config file exists bail out, we're already set. */
107
	else if (!file_exists($g['cf_conf_path'] . "/config.xml")  ) {
108
		echo ".";
109
		/* find the device where config.xml resides and write out an fstab */
110
		unset($cfgdevice);
111
		echo ".";
112
		/* check if there's already an fstab (NFS booting?) */
113
		if (!file_exists("{$g['etc_path']}/fstab")) {
114
			echo ".";
115
			if (strstr($g['platform'], "cdrom")) {
116
				/* config is on floppy disk for CD-ROM version */
117
				$cfgdevice = $cfgpartition = "fd0";
118
				$_gb = exec('/sbin/dmesg -a', $dmesg);
119
				if(preg_match("/da0/", $dmesg) == true) {
120
					$cfgdevice = $cfgpartition = "da0" ;
121
					if (mwexec("/sbin/mount -r /dev/{$cfgdevice} /cf")) {
122
						/* could not mount, fallback to floppy */
123
						$cfgdevice = $cfgpartition = "fd0";
124
					}
125
				}
126
				unset($dmesg);
127
				$cfgfstype = "msdosfs";
128
				echo gettext("CDROM build") . "\n";
129
				echo "   " . gettext("CFG:") . " {$cfgpartition}\n";
130
				echo "   " . gettext("CFG:") . " {$cfgpartition}\n";
131
				echo "  " . gettext("TYPE:") . " {$cfgfstype}\n";
132
			} else {
133
				echo ".";
134
				/* probe kernel known disks until we find one with config.xml */
135
				$disks = explode(" ", get_single_sysctl("kern.disks"));
136
				foreach ($disks as $mountdisk) {
137
					/* skip mfs mounted filesystems */
138
					if (strstr($mountdisk, "md"))
139
						continue;
140
					if (mwexec("/sbin/mount -r /dev/{$mountdisk}a {$g['cf_path']}") == 0) {
141
						if (file_exists("{$g['cf_conf_path']}/config.xml")) {
142
							/* found it */
143
							$cfgdevice = $mountdisk;
144
							$cfgpartition = $cfgdevice . "a";
145
							$cfgfstype = "ufs";
146
							printf(gettext("Found configuration on %s.%s"), $cfgdevice, "\n");
147
						}
148

    
149
						mwexec("/sbin/umount -f {$g['cf_path']}");
150

    
151
						if ($cfgdevice)
152
							break;
153
					}
154
					if (mwexec("/sbin/mount -r /dev/{$mountdisk}d {$g['cf_path']}") == 0) {
155
						if(platform_booting()) echo ".";
156
						if (file_exists("{$g['cf_conf_path']}/config.xml")) {
157
							/* found it */
158
							$cfgdevice = $mountdisk;
159
							$cfgpartition = $cfgdevice . "d";
160
							$cfgfstype = "ufs";
161
							printf(gettext("Found configuration on %s.%s"), $cfgdevice, "\n");
162
						}
163

    
164
						mwexec("/sbin/umount -f {$g['cf_path']}");
165

    
166
						if ($cfgdevice)
167
							break;
168
					}
169
				}
170
			}
171
			echo ".";
172
			if (!$cfgdevice) {
173
				$last_backup = discover_last_backup();
174
				if($last_backup) {
175
					log_error(gettext("No config.xml found, attempting last known config restore."));
176
					file_notice("config.xml", gettext("No config.xml found, attempting last known config restore."), "pfSenseConfigurator", "");
177
					restore_backup("/cf/conf/backup/{$last_backup}");
178
				} else {
179
					log_error(gettext("No config.xml or config backups found, resetting to factory defaults."));
180
					restore_backup('/conf.default/config.xml');
181
				}
182
			}
183

    
184
			/* write device name to a file for rc.firmware */
185
			file_put_contents("{$g['varetc_path']}/cfdevice", $cfgdevice . "\n");
186

    
187
			/* write out an fstab */
188

    
189
			$fstab = "/dev/{$cfgpartition} {$g['cf_path']} {$cfgfstype} ro,noatime 1 1\n";
190
			$fstab .= "proc /proc procfs rw 0 0\n";
191
			file_put_contents("{$g['etc_path']}/fstab", $fstab);
192
		}
193
		echo ".";
194
		/* mount all filesystems */
195
		mwexec("/sbin/mount -a");
196
	}
197
	echo ".";
198
}
199

    
200
$config = parse_config();
201

    
202
/* set timezone */
203
$timezone = $config['system']['timezone'];
204
if (!$timezone)
205
	$timezone = "Etc/UTC";
206
date_default_timezone_set("$timezone");
207

    
208
if($config_parsed == true) {
209
	/* process packager manager custom rules */
210
	if(is_dir("/usr/local/pkg/parse_config")) {
211
		run_plugins("/usr/local/pkg/parse_config/");
212
	}
213
}
214

    
215
?>
(11-11/68)