Projet

Général

Profil

Télécharger (7,33 ko) Statistiques
| Branche: | Tag: | Révision:

univnautes / etc / inc / config.inc @ c69d32f6

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/sysctl	/sbin/umount	/sbin/halt	/sbin/fsck
42
	pfSense_MODULE:	config
43
*/
44

    
45
if($g['booting']) echo ".";
46

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

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

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

    
63
/* include globals from notices.inc /utility/XML parser files */
64
require_once("notices.inc");
65
if($g['booting']) echo ".";
66
require_once("util.inc");
67
if($g['booting']) echo ".";
68
require_once("IPv6.inc");
69
if($g['booting']) echo ".";
70
require_once('config.lib.inc');
71
if($g['booting']) echo ".";
72
if(file_exists("/cf/conf/use_xmlreader"))
73
	require_once("xmlreader.inc");
74
else
75
	require_once("xmlparse.inc");
76
if($g['booting']) echo ".";
77
require_once("crypt.inc");
78

    
79
/* read platform */
80
if($g['booting']) echo ".";
81
if (file_exists("{$g['etc_path']}/platform")) {
82
	$g['platform'] = chop(file_get_contents("{$g['etc_path']}/platform"));
83
} else {
84
	$g['platform'] = "unknown";
85
}
86

    
87
/* if /debugging exists, lets set $debugging
88
   so we can output more information */
89
if(file_exists("/debugging")) {
90
	$debugging = true;
91
	$g['debug'] = true;
92
}
93

    
94
if($g['booting']) echo ".";
95
if($g['booting'] && file_exists("/cf/conf/config.xml")) {
96
	$config_contents = file_get_contents("/cf/conf/config.xml");
97
	if(stristr($config_contents, "<m0n0wall>") == true) {
98
		if($g['booting']) echo ".";
99
		/* user has just upgraded to m0n0wall, replace root xml tags */
100
		log_error(gettext("Upgrading m0n0wall configuration to pfSense... "));
101
		$config_contents = str_replace("m0n0wall","pfsense", $config_contents);
102
		if (!config_validate("{$g['conf_path']}/config.xml"))
103
			log_error(gettext("ERROR!  Could not convert m0n0wall -> pfsense in config.xml"));
104
		conf_mount_rw();
105
		$fd = fopen("/cf/conf/config.xml", "w");
106
		fwrite($fd, $config_contents);
107
		fclose($fd);
108
		conf_mount_ro();
109
	}
110
}
111

    
112
/* if our config file exists bail out, we're already set. */
113
else if ($g['booting'] and !file_exists($g['cf_conf_path'] . "/config.xml")  ) {
114
	if($g['booting']) echo ".";
115
	/* find the device where config.xml resides and write out an fstab */
116
	unset($cfgdevice);
117
	if($g['booting']) echo ".";
118
	/* check if there's already an fstab (NFS booting?) */
119
	if (!file_exists("{$g['etc_path']}/fstab")) {
120
		if($g['booting']) echo ".";
121
		if (strstr($g['platform'], "cdrom")) {
122
			/* config is on floppy disk for CD-ROM version */
123
			$cfgdevice = $cfgpartition = "fd0";
124
			$_gb = exec('/sbin/dmesg -a', $dmesg);
125
			if(preg_match("/da0/", $dmesg) == true) {
126
				$cfgdevice = $cfgpartition = "da0" ;
127
				if (mwexec("/sbin/mount -r /dev/{$cfgdevice} /cf")) {
128
					/* could not mount, fallback to floppy */
129
					$cfgdevice = $cfgpartition = "fd0";
130
				}
131
			}
132
			$cfgfstype = "msdosfs";
133
			echo gettext("CDROM build") . "\n";
134
			echo "   " . gettext("CFG:") . " {$cfgpartition}\n";
135
			echo "   " . gettext("CFG:") . " {$cfgpartition}\n";
136
			echo "  " . gettext("TYPE:") . " {$cfgfstype}\n";
137
		} else {
138
			if($g['booting']) echo ".";
139
			/* probe kernel known disks until we find one with config.xml */
140
			$disks = explode(" ", trim(preg_replace("/kern.disks: /", "", exec("/sbin/sysctl kern.disks"))));
141
			foreach ($disks as $mountdisk) {
142
				/* skip mfs mounted filesystems */
143
				if (strstr($mountdisk, "md"))
144
					continue;
145
				if (mwexec("/sbin/mount -r /dev/{$mountdisk}a {$g['cf_path']}") == 0) {
146
					if (file_exists("{$g['cf_conf_path']}/config.xml")) {
147
						/* found it */
148
						$cfgdevice = $mountdisk;
149
						$cfgpartition = $cfgdevice . "a";
150
						$cfgfstype = "ufs";
151
						printf(gettext("Found configuration on %s.%s"), $cfgdevice, "\n");
152
					}
153

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

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

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

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

    
189
		/* write device name to a file for rc.firmware */
190
		$fd = fopen("{$g['varetc_path']}/cfdevice", "w");
191
		fwrite($fd, $cfgdevice . "\n");
192
		fclose($fd);
193

    
194
		/* write out an fstab */
195
		$fd = fopen("{$g['etc_path']}/fstab", "w");
196

    
197
		$fstab = "/dev/{$cfgpartition} {$g['cf_path']} {$cfgfstype} ro,noatime 1 1\n";
198
		$fstab .= "proc /proc procfs rw 0 0\n";
199

    
200
		fwrite($fd, $fstab);
201
		fclose($fd);
202
	}
203
	if($g['booting']) echo ".";
204
	/* mount all filesystems */
205
	mwexec("/sbin/mount -a");
206
}
207

    
208
if($g['booting']) echo ".";
209
$config = parse_config();
210

    
211
/* set timezone */
212
$timezone = $config['system']['timezone'];
213
if (!$timezone)
214
	$timezone = "Etc/UTC";
215
date_default_timezone_set("$timezone");
216

    
217
if($config_parsed == true) {
218
	/* process packager manager custom rules */
219
	if(is_dir("/usr/local/pkg/parse_config")) {
220
		run_plugins("/usr/local/pkg/parse_config/");
221
	}
222
}
223

    
224
?>
(12-12/68)