Project

General

Profile

Download (13.5 KB) Statistics
| Branch: | Tag: | Revision:
1 5b237745 Scott Ullrich
#!/usr/local/bin/php
2 04ad7c7c Scott Ullrich
<?php
3 62d01225 Bill Marquette
/* $Id$ */
4 5b237745 Scott Ullrich
/*
5
	system.php
6
	part of m0n0wall (http://m0n0.ch/wall)
7 04ad7c7c Scott Ullrich
8 5b237745 Scott Ullrich
	Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>.
9
	All rights reserved.
10 04ad7c7c Scott Ullrich
11 5b237745 Scott Ullrich
	Redistribution and use in source and binary forms, with or without
12
	modification, are permitted provided that the following conditions are met:
13 04ad7c7c Scott Ullrich
14 5b237745 Scott Ullrich
	1. Redistributions of source code must retain the above copyright notice,
15
	   this list of conditions and the following disclaimer.
16 04ad7c7c Scott Ullrich
17 5b237745 Scott Ullrich
	2. Redistributions in binary form must reproduce the above copyright
18
	   notice, this list of conditions and the following disclaimer in the
19
	   documentation and/or other materials provided with the distribution.
20 04ad7c7c Scott Ullrich
21 5b237745 Scott Ullrich
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
22
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
23
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
25
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
	POSSIBILITY OF SUCH DAMAGE.
31
*/
32
33
require("guiconfig.inc");
34
35
$pconfig['hostname'] = $config['system']['hostname'];
36
$pconfig['domain'] = $config['system']['domain'];
37
list($pconfig['dns1'],$pconfig['dns2']) = $config['system']['dnsserver'];
38 0d8a219e Scott Ullrich
39 5b237745 Scott Ullrich
$pconfig['dnsallowoverride'] = isset($config['system']['dnsallowoverride']);
40
$pconfig['username'] = $config['system']['username'];
41
if (!$pconfig['username'])
42
	$pconfig['username'] = "admin";
43
$pconfig['webguiproto'] = $config['system']['webgui']['protocol'];
44
if (!$pconfig['webguiproto'])
45
	$pconfig['webguiproto'] = "http";
46
$pconfig['webguiport'] = $config['system']['webgui']['port'];
47
$pconfig['timezone'] = $config['system']['timezone'];
48
$pconfig['timeupdateinterval'] = $config['system']['time-update-interval'];
49
$pconfig['timeservers'] = $config['system']['timeservers'];
50
51
if (!isset($pconfig['timeupdateinterval']))
52
	$pconfig['timeupdateinterval'] = 300;
53
if (!$pconfig['timezone'])
54
	$pconfig['timezone'] = "Etc/UTC";
55
if (!$pconfig['timeservers'])
56
	$pconfig['timeservers'] = "pool.ntp.org";
57 04ad7c7c Scott Ullrich
58 417c6042 Bill Marquette
$changedesc = "System: ";
59 62d01225 Bill Marquette
$changecount = 0;
60 417c6042 Bill Marquette
61 5b237745 Scott Ullrich
function is_timezone($elt) {
62
	return !preg_match("/\/$/", $elt);
63
}
64
65
exec('/usr/bin/tar -tzf /usr/share/zoneinfo.tgz', $timezonelist);
66
$timezonelist = array_filter($timezonelist, 'is_timezone');
67
sort($timezonelist);
68
69
if ($_POST) {
70
71 c668c964 Scott Ullrich
	$changecount++;
72
73 5b237745 Scott Ullrich
	unset($input_errors);
74
	$pconfig = $_POST;
75
76
	/* input validation */
77
	$reqdfields = split(" ", "hostname domain username");
78
	$reqdfieldsn = split(",", "Hostname,Domain,Username");
79 04ad7c7c Scott Ullrich
80 5b237745 Scott Ullrich
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
81 04ad7c7c Scott Ullrich
82 5b237745 Scott Ullrich
	if ($_POST['hostname'] && !is_hostname($_POST['hostname'])) {
83
		$input_errors[] = "The hostname may only contain the characters a-z, 0-9 and '-'.";
84
	}
85
	if ($_POST['domain'] && !is_domain($_POST['domain'])) {
86
		$input_errors[] = "The domain may only contain the characters a-z, 0-9, '-' and '.'.";
87
	}
88
	if (($_POST['dns1'] && !is_ipaddr($_POST['dns1'])) || ($_POST['dns2'] && !is_ipaddr($_POST['dns2']))) {
89
		$input_errors[] = "A valid IP address must be specified for the primary/secondary DNS server.";
90
	}
91
	if ($_POST['username'] && !preg_match("/^[a-zA-Z0-9]*$/", $_POST['username'])) {
92
		$input_errors[] = "The username may only contain the characters a-z, A-Z and 0-9.";
93
	}
94 04ad7c7c Scott Ullrich
	if ($_POST['webguiport'] && (!is_numericint($_POST['webguiport']) ||
95 5b237745 Scott Ullrich
			($_POST['webguiport'] < 1) || ($_POST['webguiport'] > 65535))) {
96
		$input_errors[] = "A valid TCP/IP port must be specified for the webGUI port.";
97
	}
98
	if (($_POST['password']) && ($_POST['password'] != $_POST['password2'])) {
99
		$input_errors[] = "The passwords do not match.";
100
	}
101 04ad7c7c Scott Ullrich
102 5b237745 Scott Ullrich
	$t = (int)$_POST['timeupdateinterval'];
103
	if (($t < 0) || (($t > 0) && ($t < 6)) || ($t > 1440)) {
104
		$input_errors[] = "The time update interval must be either 0 (disabled) or between 6 and 1440.";
105
	}
106
	foreach (explode(' ', $_POST['timeservers']) as $ts) {
107
		if (!is_domain($ts)) {
108
			$input_errors[] = "A NTP Time Server name may only contain the characters a-z, 0-9, '-' and '.'.";
109
		}
110
	}
111
112
	if (!$input_errors) {
113 9eab73da Bill Marquette
		update_if_changed("hostname", $config['system']['hostname'], strtolower($_POST['hostname']));
114
		update_if_changed("domain", $config['system']['domain'], strtolower($_POST['domain']));
115
		update_if_changed("username", $config['system']['username'], $_POST['username']);
116 79f8694f Bill Marquette
117 a6b0fbf7 Bill Marquette
		if (update_if_changed("webgui protocol", $config['system']['webgui']['protocol'], $_POST['webguiproto']))
118
			$restart_webgui = true;
119
		if (update_if_changed("webgui port", $config['system']['webgui']['port'], $_POST['webguiport']))
120 37d160c2 Bill Marquette
			$restart_webgui = true;
121
122 9eab73da Bill Marquette
		update_if_changed("timezone", $config['system']['timezone'], $_POST['timezone']);
123
		update_if_changed("NTP servers", $config['system']['timeservers'], strtolower($_POST['timeservers']));
124
		update_if_changed("NTP update interval", $config['system']['time-update-interval'], $_POST['timeupdateinterval']);
125 04ad7c7c Scott Ullrich
126 4fbf63aa Bill Marquette
		/* XXX - billm: these still need updating after figuring out how to check if they actually changed */
127 5b237745 Scott Ullrich
		unset($config['system']['dnsserver']);
128
		if ($_POST['dns1'])
129
			$config['system']['dnsserver'][] = $_POST['dns1'];
130
		if ($_POST['dns2'])
131
			$config['system']['dnsserver'][] = $_POST['dns2'];
132 04ad7c7c Scott Ullrich
133 07bd3f83 Scott Ullrich
		$olddnsallowoverride = $config['system']['dnsallowoverride'];
134 0d8a219e Scott Ullrich
		
135
		unset($config['system']['dnsallowoverride']);
136 5b237745 Scott Ullrich
		$config['system']['dnsallowoverride'] = $_POST['dnsallowoverride'] ? true : false;
137 2715fc52 Scott Ullrich
                if ($_POST['password']) {
138
                        $config['system']['password'] = crypt($_POST['password']);
139 62d489e7 Scott Ullrich
			update_changedesc("password changed via webConfigurator");
140 2715fc52 Scott Ullrich
			sync_webgui_passwords();			
141
                }
142 04ad7c7c Scott Ullrich
143 62d01225 Bill Marquette
		if ($changecount > 0)
144
			write_config($changedesc);
145 04ad7c7c Scott Ullrich
146 6485deb5 Bill Marquette
		if ($restart_webgui) {
147
			global $_SERVER;
148 a6b0fbf7 Bill Marquette
			list($host) = explode(":", $_SERVER['HTTP_HOST']);
149
			if ($config['system']['webgui']['port']) {
150
				$url="{$config['system']['webgui']['protocol']}://{$host}:{$config['system']['webgui']['port']}/system.php";
151 6485deb5 Bill Marquette
			} else {
152 a6b0fbf7 Bill Marquette
				$url = "{$config['system']['webgui']['protocol']}://{$host}/system.php";
153 6485deb5 Bill Marquette
			}
154
		}
155
156 5b237745 Scott Ullrich
		$retval = 0;
157 3cfdba5f Scott Ullrich
		config_lock();
158
		$retval = system_hostname_configure();
159
		$retval |= system_hosts_generate();
160
		$retval |= system_resolvconf_generate();
161
		$retval |= system_password_configure();
162
		$retval |= services_dnsmasq_configure();
163
		$retval |= system_timezone_configure();
164
		$retval |= system_ntp_configure();
165
166
		if ($olddnsallowoverride != $config['system']['dnsallowoverride'])
167
			$retval |= interfaces_wan_configure();
168
169
		config_unlock();
170 04ad7c7c Scott Ullrich
171 5b237745 Scott Ullrich
		$savemsg = get_std_save_message($retval);
172 6485deb5 Bill Marquette
		if ($restart_webgui)
173 fadc0360 Scott Ullrich
			$savemsg .= "<br />One moment...redirecting to {$url} in 10 seconds.";
174 5b237745 Scott Ullrich
	}
175
}
176 4df96eff Scott Ullrich
177
$pgtitle = "System: General Setup";
178
include("head.inc");
179
180 5b237745 Scott Ullrich
?>
181 4df96eff Scott Ullrich
182 5b237745 Scott Ullrich
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
183
<?php include("fbegin.inc"); ?>
184 74f446e8 Bill Marquette
<p class="pgtitle"><?=$pgtitle?></p>
185 5b237745 Scott Ullrich
<?php if ($input_errors) print_input_errors($input_errors); ?>
186
<?php if ($savemsg) print_info_box($savemsg); ?>
187
<form action="system.php" method="post">
188
              <table width="100%" border="0" cellpadding="6" cellspacing="0">
189 04ad7c7c Scott Ullrich
                <tr>
190 5b237745 Scott Ullrich
                  <td width="22%" valign="top" class="vncellreq">Hostname</td>
191 04ad7c7c Scott Ullrich
                  <td width="78%" class="vtable"> <input name="hostname" type="text" class="formfld" id="hostname" size="40" value="<?=htmlspecialchars($pconfig['hostname']);?>">
192
                    <br> <span class="vexpl">name of the firewall host, without
193 5b237745 Scott Ullrich
                    domain part<br>
194
                    e.g. <em>firewall</em></span></td>
195
                </tr>
196 04ad7c7c Scott Ullrich
                <tr>
197 5b237745 Scott Ullrich
                  <td width="22%" valign="top" class="vncellreq">Domain</td>
198 04ad7c7c Scott Ullrich
                  <td width="78%" class="vtable"> <input name="domain" type="text" class="formfld" id="domain" size="40" value="<?=htmlspecialchars($pconfig['domain']);?>">
199 5b237745 Scott Ullrich
                    <br> <span class="vexpl">e.g. <em>mycorp.com</em> </span></td>
200
                </tr>
201 04ad7c7c Scott Ullrich
                <tr>
202 5b237745 Scott Ullrich
                  <td width="22%" valign="top" class="vncell">DNS servers</td>
203 04ad7c7c Scott Ullrich
                  <td width="78%" class="vtable"> <p>
204 5b237745 Scott Ullrich
                      <input name="dns1" type="text" class="formfld" id="dns1" size="20" value="<?=htmlspecialchars($pconfig['dns1']);?>">
205
                      <br>
206
                      <input name="dns2" type="text" class="formfld" id="dns22" size="20" value="<?=htmlspecialchars($pconfig['dns2']);?>">
207
                      <br>
208 04ad7c7c Scott Ullrich
                      <span class="vexpl">IP addresses; these are also used for
209 5b237745 Scott Ullrich
                      the DHCP service, DNS forwarder and for PPTP VPN clients<br>
210
                      <br>
211 07bd3f83 Scott Ullrich
                      <input name="dnsallowoverride" type="checkbox" id="dnsallowoverride" value="yes" <?php if ($pconfig['dnsallowoverride']) echo "checked"; ?>>
212 04ad7c7c Scott Ullrich
                      <strong>Allow DNS server list to be overridden by DHCP/PPP
213 5b237745 Scott Ullrich
                      on WAN</strong><br>
214 841dd38a Scott Ullrich
                      If this option is set, pfSense will use DNS servers assigned
215 04ad7c7c Scott Ullrich
                      by a DHCP/PPP server on WAN for its own purposes (including
216
                      the DNS forwarder). They will not be assigned to DHCP and
217 5b237745 Scott Ullrich
                      PPTP VPN clients, though.</span></p></td>
218
                </tr>
219 04ad7c7c Scott Ullrich
                <tr>
220 5b237745 Scott Ullrich
                  <td valign="top" class="vncell">Username</td>
221
                  <td class="vtable"> <input name="username" type="text" class="formfld" id="username" size="20" value="<?=$pconfig['username'];?>">
222
                    <br>
223 04ad7c7c Scott Ullrich
                     <span class="vexpl">If you want
224
                    to change the username for accessing the webGUI, enter it
225 5b237745 Scott Ullrich
                    here.</span></td>
226
                </tr>
227 04ad7c7c Scott Ullrich
                <tr>
228 5b237745 Scott Ullrich
                  <td width="22%" valign="top" class="vncell">Password</td>
229 04ad7c7c Scott Ullrich
                  <td width="78%" class="vtable"> <input name="password" type="password" class="formfld" id="password" size="20">
230
                    <br> <input name="password2" type="password" class="formfld" id="password2" size="20">
231
                    &nbsp;(confirmation) <br> <span class="vexpl">If you want
232
                    to change the password for accessing the webGUI, enter it
233 5b237745 Scott Ullrich
                    here twice.</span></td>
234
                </tr>
235 04ad7c7c Scott Ullrich
                <tr>
236 5b237745 Scott Ullrich
                  <td width="22%" valign="top" class="vncell">webGUI protocol</td>
237 2ecd3a0d Colin Smith
                  <td width="78%" class="vtable"> <input name="webguiproto" type="radio" value="http" <?php if ($pconfig['webguiproto'] == "http") echo "checked"; ?>>
238
                    HTTP &nbsp;&nbsp;&nbsp; <input type="radio" name="webguiproto" value="https" <?php if ($pconfig['webguiproto'] == "https") echo "checked"; ?>>
239 5b237745 Scott Ullrich
                    HTTPS</td>
240
                </tr>
241 04ad7c7c Scott Ullrich
                <tr>
242 5b237745 Scott Ullrich
                  <td valign="top" class="vncell">webGUI port</td>
243 a6b0fbf7 Bill Marquette
                  <td class="vtable"> <input name="webguiport" type="text" class="formfld" id="webguiport" "size="5" value="<?=htmlspecialchars($config['system']['webgui']['port']);?>">
244 5b237745 Scott Ullrich
                    <br>
245 04ad7c7c Scott Ullrich
                    <span class="vexpl">Enter a custom port number for the webGUI
246
                    above if you want to override the default (80 for HTTP, 443
247 63c2f169 Colin Smith
                    for HTTPS). Changes will take effect immediately after save.</span></td>
248 5b237745 Scott Ullrich
                </tr>
249 04ad7c7c Scott Ullrich
                <tr>
250 5b237745 Scott Ullrich
                  <td width="22%" valign="top" class="vncell">Time zone</td>
251
                  <td width="78%" class="vtable"> <select name="timezone" id="timezone">
252
                      <?php foreach ($timezonelist as $value): ?>
253 04ad7c7c Scott Ullrich
                      <option value="<?=htmlspecialchars($value);?>" <?php if ($value == $pconfig['timezone']) echo "selected"; ?>>
254 5b237745 Scott Ullrich
                      <?=htmlspecialchars($value);?>
255
                      </option>
256
                      <?php endforeach; ?>
257 04ad7c7c Scott Ullrich
                    </select> <br> <span class="vexpl">Select the location closest
258 5b237745 Scott Ullrich
                    to you</span></td>
259
                </tr>
260 04ad7c7c Scott Ullrich
                <tr>
261 5b237745 Scott Ullrich
                  <td width="22%" valign="top" class="vncell">Time update interval</td>
262 04ad7c7c Scott Ullrich
                  <td width="78%" class="vtable"> <input name="timeupdateinterval" type="text" class="formfld" id="timeupdateinterval" size="4" value="<?=htmlspecialchars($pconfig['timeupdateinterval']);?>">
263
                    <br> <span class="vexpl">Minutes between network time sync.;
264 5b237745 Scott Ullrich
                    300 recommended, or 0 to disable </span></td>
265
                </tr>
266 04ad7c7c Scott Ullrich
                <tr>
267 5b237745 Scott Ullrich
                  <td width="22%" valign="top" class="vncell">NTP time server</td>
268 04ad7c7c Scott Ullrich
                  <td width="78%" class="vtable"> <input name="timeservers" type="text" class="formfld" id="timeservers" size="40" value="<?=htmlspecialchars($pconfig['timeservers']);?>">
269
                    <br> <span class="vexpl">Use a space to separate multiple
270
                    hosts (only one required). Remember to set up at least one
271 5b237745 Scott Ullrich
                    DNS server if you enter a host name here!</span></td>
272
                </tr>
273 04ad7c7c Scott Ullrich
                <tr>
274 5b237745 Scott Ullrich
                  <td width="22%" valign="top">&nbsp;</td>
275 04ad7c7c Scott Ullrich
                  <td width="78%"> <input name="Submit" type="submit" class="formbtn" value="Save">
276 5b237745 Scott Ullrich
                  </td>
277
                </tr>
278
              </table>
279
</form>
280
<?php include("fend.inc"); ?>
281 cfa6fa1a Scott Ullrich
<?php
282
	// restart webgui if proto or port changed
283
	if ($restart_webgui) {
284
		echo "<meta http-equiv=\"refresh\" content=\"10;url={$url}\">";
285
	}
286 39b78c46 Scott Ullrich
	ob_flush();
287 6f30d56c Scott Ullrich
	flush();
288
        sleep(2);
289 2f3f316c Scott Ullrich
?>
290
</body>
291
</html>
292
<?php
293 6485deb5 Bill Marquette
if ($restart_webgui)
294
	system_webgui_start();