Project

General

Profile

Download (11.4 KB) Statistics
| Branch: | Tag: | Revision:
1 5b237745 Scott Ullrich
<?php
2 b46bfcf5 Bill Marquette
/* $Id$ */
3 5b237745 Scott Ullrich
/* Run various commands and collect their output into HTML tables.
4
 * Jim McBeath <jimmc@macrovision.com> Nov 2003
5
 *
6
 * (modified for m0n0wall by Manuel Kasper <mk@neon1.net>)
7 878f7270 Scott Ullrich
 * (modified for pfSense by Scott Ullrich geekgod@pfsense.com)
8 29aef6c4 Jim Thompson
 *
9 5b237745 Scott Ullrich
 */
10 6b07c15a Matthew Grooms
/*
11 45b4ffc6 Phil Davis
	Copyright (C) 2013-2015 Electric Sheep Fencing, LP
12 29aef6c4 Jim Thompson
	All rights reserved.
13
14 2151894c Colin Fleming
	Redistribution and use in source and binary forms, with or without
15
	modification, are permitted provided that the following conditions are met:
16
17
	1.	Redistributions of source code must retain the above copyright notice,
18
		this list of conditions and the following disclaimer.
19
20
	2.	Redistributions in binary form must reproduce the above copyright
21
		notice, this list of conditions and the following disclaimer in the
22
		documentation and/or other materials provided with the distribution.
23
24
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
25
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
26
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
28
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
	POSSIBILITY OF SUCH DAMAGE.
34 6b07c15a Matthew Grooms
*/
35 1d333258 Scott Ullrich
/*
36 45b4ffc6 Phil Davis
	pfSense_BUILDER_BINARIES:	/usr/bin/vmstat	/usr/bin/netstat	/sbin/dmesg	/sbin/mount	/sbin/setkey	/usr/local/sbin/pftop
37 1d333258 Scott Ullrich
	pfSense_BUILDER_BINARIES:	/sbin/pfctl	/sbin/sysctl	/usr/bin/top	/usr/bin/netstat	/sbin/pfctl	/sbin/ifconfig
38
	pfSense_MODULE:	support
39
*/
40 6b07c15a Matthew Grooms
41
##|+PRIV
42
##|*IDENT=page-hidden-detailedstatus
43
##|*NAME=Hidden: Detailed Status page
44
##|*DESCR=Allow access to the 'Hidden: Detailed Status' page.
45
##|*MATCH=status.php*
46
##|-PRIV
47 5b237745 Scott Ullrich
48
/* Execute a command, with a title, and generate an HTML table
49
 * showing the results.
50
 */
51 1d169baa Bill Marquette
52
/* include all configuration functions */
53 f977ac60 Bill Marquette
require_once("guiconfig.inc");
54 1d169baa Bill Marquette
require_once("functions.inc");
55 6f62e89f jim-p
$output_path = "/tmp/status_output/";
56
$output_file = "/tmp/status_output.tgz";
57
58
if (is_dir($output_path)) {
59
	unlink_if_exists("{$output_path}/*");
60
	@rmdir($output_path);
61
}
62
unlink_if_exists($output_file);
63
mkdir($output_path);
64 1d169baa Bill Marquette
65 5b237745 Scott Ullrich
function doCmdT($title, $command) {
66 6f62e89f jim-p
	global $output_path, $output_file;
67
	/* Fixup output directory */
68
69 2151894c Colin Fleming
	$rubbish = array('|', '-', '/', '.', ' ');  /* fixes the <a> tag to be W3C compliant */
70 6c07db48 Phil Davis
	echo "\n<a name=\"" . str_replace($rubbish, '', $title) . "\" id=\"" . str_replace($rubbish, '', $title) . "\"></a>\n";
71 2151894c Colin Fleming
	echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"" . $title . "\">\n";
72
	echo "\t<tr><td class=\"listtopic\">" . $title . "</td></tr>\n";
73
	echo "\t<tr>\n\t\t<td class=\"listlr\">\n\t\t\t<pre>";		/* no newline after pre */
74 f997992b Scott Ullrich
75 5b237745 Scott Ullrich
	if ($command == "dumpconfigxml") {
76 6f62e89f jim-p
		$ofd = @fopen("{$output_path}/config-sanitized.xml", "w");
77 5b237745 Scott Ullrich
		$fd = @fopen("/conf/config.xml", "r");
78
		if ($fd) {
79
			while (!feof($fd)) {
80
				$line = fgets($fd);
81 70069758 Bill Marquette
				/* remove sensitive contents */
82 5b237745 Scott Ullrich
				$line = preg_replace("/<password>.*?<\\/password>/", "<password>xxxxx</password>", $line);
83
				$line = preg_replace("/<pre-shared-key>.*?<\\/pre-shared-key>/", "<pre-shared-key>xxxxx</pre-shared-key>", $line);
84 70069758 Bill Marquette
				$line = preg_replace("/<rocommunity>.*?<\\/rocommunity>/", "<rocommunity>xxxxx</rocommunity>", $line);
85 8a2229e3 jim-p
				$line = preg_replace("/<prv>.*?<\\/prv>/", "<prv>xxxxx</prv>", $line);
86 fd192dbc jim-p
				$line = preg_replace("/<shared_key>.*?<\\/shared_key>/", "<shared_key>xxxxx</shared_key>", $line);
87
				$line = preg_replace("/<tls>.*?<\\/tls>/", "<tls>xxxxx</tls>", $line);
88 8a2229e3 jim-p
				$line = preg_replace("/<ipsecpsk>.*?<\\/ipsecpsk>/", "<ipsecpsk>xxxxx</ipsecpsk>", $line);
89
				$line = preg_replace("/<md5-hash>.*?<\\/md5-hash>/", "<md5-hash>xxxxx</md5-hash>", $line);
90
				$line = preg_replace("/<md5password>.*?<\\/md5password>/", "<md5password>xxxxx</md5password>", $line);
91
				$line = preg_replace("/<nt-hash>.*?<\\/nt-hash>/", "<nt-hash>xxxxx</nt-hash>", $line);
92
				$line = preg_replace("/<radius_secret>.*?<\\/radius_secret>/", "<radius_secret>xxxxx</radius_secret>", $line);
93
				$line = preg_replace("/<ldap_bindpw>.*?<\\/ldap_bindpw>/", "<ldap_bindpw>xxxxx</ldap_bindpw>", $line);
94
				$line = preg_replace("/<passwordagain>.*?<\\/passwordagain>/", "<passwordagain>xxxxx</passwordagain>", $line);
95
				$line = preg_replace("/<crypto_password>.*?<\\/crypto_password>/", "<crypto_password>xxxxx</crypto_password>", $line);
96
				$line = preg_replace("/<crypto_password2>.*?<\\/crypto_password2>/", "<crypto_password2>xxxxx</crypto_password2>", $line);
97 5b237745 Scott Ullrich
				$line = str_replace("\t", "    ", $line);
98 6c07db48 Phil Davis
				echo htmlspecialchars($line, ENT_NOQUOTES);
99 6f62e89f jim-p
				fwrite($ofd, $line);
100 5b237745 Scott Ullrich
			}
101
		}
102
		fclose($fd);
103 6f62e89f jim-p
		fclose($ofd);
104 5b237745 Scott Ullrich
	} else {
105 6f62e89f jim-p
		$ofd = @fopen("{$output_path}/{$title}.txt", "w");
106 767a716e Scott Ullrich
		$execOutput = "";
107
		$execStatus = "";
108 5b237745 Scott Ullrich
		exec ($command . " 2>&1", $execOutput, $execStatus);
109
		for ($i = 0; isset($execOutput[$i]); $i++) {
110
			if ($i > 0) {
111
				echo "\n";
112
			}
113 6c07db48 Phil Davis
			echo htmlspecialchars($execOutput[$i], ENT_NOQUOTES);
114 6f62e89f jim-p
			fwrite($ofd, $execOutput[$i] . "\n");
115 5b237745 Scott Ullrich
		}
116 6f62e89f jim-p
		fclose($ofd);
117 5b237745 Scott Ullrich
	}
118 6f62e89f jim-p
    echo "\n\t\t\t</pre>\n\t\t</td>\n\t</tr>\n";
119
    echo "</table>\n";
120 5b237745 Scott Ullrich
}
121
122
/* Define a command, with a title, to be executed later. */
123
function defCmdT($title, $command) {
124 2151894c Colin Fleming
	global $commands;
125 6c07db48 Phil Davis
	$title = htmlspecialchars($title, ENT_NOQUOTES);
126 2151894c Colin Fleming
	$commands[] = array($title, $command);
127 5b237745 Scott Ullrich
}
128
129
/* List all of the commands as an index. */
130
function listCmds() {
131 2151894c Colin Fleming
	global $commands;
132
	$rubbish = array('|', '-', '/', '.', ' ');  /* fixes the <a> tag to be W3C compliant */
133
	echo "\n<p>" . gettext("This status page includes the following information") . ":\n";
134
	echo "<ul>\n";
135 6c07db48 Phil Davis
	for ($i = 0; isset($commands[$i]); $i++) {
136
		echo "\t<li><strong><a href=\"#" . str_replace($rubbish, '', $commands[$i][0]) . "\">" . $commands[$i][0] . "</a></strong></li>\n";
137 2151894c Colin Fleming
	}
138
	echo "</ul>\n";
139 5b237745 Scott Ullrich
}
140
141
/* Execute all of the commands which were defined by a call to defCmd. */
142
function execCmds() {
143 2151894c Colin Fleming
	global $commands;
144 6c07db48 Phil Davis
	for ($i = 0; isset($commands[$i]); $i++) {
145 2151894c Colin Fleming
		doCmdT($commands[$i][0], $commands[$i][1]);
146
	}
147 5b237745 Scott Ullrich
}
148
149 58f2f42a Renato Botelho
global $g, $config;
150 1d169baa Bill Marquette
151 5b237745 Scott Ullrich
/* Set up all of the commands we want to execute. */
152 37502a4a Scott Ullrich
153 6f62e89f jim-p
/* System stats/info */
154 6c07db48 Phil Davis
defCmdT("System uptime", "/usr/bin/uptime");
155
defCmdT("Interfaces", "/sbin/ifconfig -a");
156 775b46fa jim-p
defCmdT("Interface Statistics","/usr/bin/netstat -ni");
157 6f62e89f jim-p
defCmdT("Top Process Info", "/usr/bin/top | /usr/bin/head -n5");
158 6c07db48 Phil Davis
defCmdT("Processes", "/bin/ps xauww");
159 6f62e89f jim-p
defCmdT("Mounted Filesystems", "/sbin/mount");
160 6c07db48 Phil Davis
defCmdT("Free Disk Space", "/bin/df -hi");
161
defCmdT("Routing tables", "/usr/bin/netstat -nWr");
162
defCmdT("Mbuf Usage", "/usr/bin/netstat -mb");
163 6f62e89f jim-p
defCmdT("VMStat", "/usr/bin/vmstat -afimsz");
164
165
/* Firewall rules and info */
166 6c07db48 Phil Davis
defCmdT("Generated Ruleset", "/bin/cat {$g['tmp_path']}/rules.debug");
167
defCmdT("Generated Ruleset Limiters", "/bin/cat {$g['tmp_path']}/rules.limiter");
168
defCmdT("Generated Ruleset Limits", "/bin/cat {$g['tmp_path']}/rules.limits");
169 6f62e89f jim-p
defCmdT("pf NAT Rules", "/sbin/pfctl -vvsn");
170
defCmdT("pf Firewall Rules", "/sbin/pfctl -vvsr");
171 6c07db48 Phil Davis
defCmdT("pf Tables", "/sbin/pfctl -vs Tables");
172 6f62e89f jim-p
defCmdT("pf State Table Contents", "/sbin/pfctl -ss");
173
defCmdT("pf Info", "/sbin/pfctl -si");
174
defCmdT("pf Show All", "/sbin/pfctl -sa");
175 6c07db48 Phil Davis
defCmdT("pf Queues", "/sbin/pfctl -s queue -v");
176
defCmdT("pf OSFP", "/sbin/pfctl -s osfp");
177
defCmdT("pfsync stats", "/usr/bin/netstat -s -ppfsync");
178
defCmdT("pftop Default", "/usr/local/sbin/pftop -a -b");
179
defCmdT("pftop Long", "/usr/local/sbin/pftop -w 150 -a -b -v long");
180
defCmdT("pftop Queue", "/usr/local/sbin/pftop -w 150 -a -b -v queue");
181
defCmdT("pftop Rules", "/usr/local/sbin/pftop -w 150 -a -b -v rules");
182
defCmdT("pftop Size", "/usr/local/sbin/pftop -w 150 -a -b -v size");
183
defCmdT("pftop Speed", "/usr/local/sbin/pftop -w 150 -a -b -v speed");
184 baec2b00 Ermal
if (isset($config['captiveportal']) && is_array($config['captiveportal'])) {
185
	foreach ($config['captiveportal'] as $cpZone => $cpdata) {
186 45b4ffc6 Phil Davis
		if (isset($cpdata['enable'])) {
187 6f62e89f jim-p
			defCmdT("IPFW rules for {$cpdata['zoneid']}", "/sbin/ipfw -x " . escapeshellarg($cpdata['zoneid']) . " show");
188 45b4ffc6 Phil Davis
		}
189 baec2b00 Ermal
	}
190
}
191 58f2f42a Renato Botelho
192 6f62e89f jim-p
/* Configuration Files */
193
defCmdT("Contents of /var/run", "/bin/ls /var/run");
194
defCmdT("Contents of /conf", "/bin/ls /conf");
195 6c07db48 Phil Davis
defCmdT("config.xml", "dumpconfigxml");
196
defCmdT("resolv.conf", "/bin/cat /etc/resolv.conf");
197
defCmdT("DHCP Configuration", "/bin/cat /var/dhcpd/etc/dhcpd.conf");
198
defCmdT("DHCPv6 Configuration", "/bin/cat /var/dhcpd/etc/dhcpdv6.conf");
199
defCmdT("strongSwan config", "/bin/cat /var/etc/ipsec/strongswan.conf");
200
defCmdT("IPsec config", "/bin/cat /var/etc/ipsec/ipsec.conf");
201
defCmdT("SPD", "/sbin/setkey -DP");
202
defCmdT("SAD", "/sbin/setkey -D");
203 6f62e89f jim-p
if (file_exists("/cf/conf/upgrade_log.txt")) {
204
	defCmdT("Upgrade Log", "/bin/cat /cf/conf/upgrade_log.txt");
205
}
206
if (file_exists("/boot/loader.conf")) {
207
	defCmdT("Loader Configuration", "/bin/cat /boot/loader.conf");
208
}
209
if (file_exists("/boot/loader.conf.local")) {
210
	defCmdT("Loader Configuration (Local)", "/bin/cat /boot/loader.conf.local");
211
}
212
if (file_exists("/var/run/apinger.status")) {
213
	defCmdT("Gateway Status", "/bin/cat /var/run/apinger.status");
214
}
215
if (file_exists("/var/etc/apinger.conf")) {
216
	defCmdT("Gateway Monitoring Config", "/bin/cat /var/etc/apinger.conf");
217
}
218
if (file_exists("/var/etc/filterdns.conf")) {
219
	defCmdT("Filter DNS Daemon Config", "/bin/cat /var/etc/filterdns.conf");
220
}
221 6c07db48 Phil Davis
if (isset($config['system']['usefifolog'])) {
222
	defCmdT("last 200 system log entries", "/usr/sbin/fifolog_reader /var/log/system.log 2>&1 | tail -n 200");
223
	defCmdT("last 50 filter log entries", "/usr/sbin/fifolog_reader /var/log/filter.log 2>&1 | tail -n 50");
224 568f30c2 Scott Ullrich
} else {
225 6c07db48 Phil Davis
	defCmdT("last 200 system log entries", "/usr/local/sbin/clog /var/log/system.log 2>&1 | tail -n 200");
226
	defCmdT("last 50 filter log entries", "/usr/local/sbin/clog /var/log/filter.log 2>&1 | tail -n 50");
227 568f30c2 Scott Ullrich
}
228 6f62e89f jim-p
if (file_exists("/tmp/PHP_errors.log")) {
229
	defCmdT("PHP Error Log", "/bin/cat /tmp/PHP_errors.log");
230
}
231 6c07db48 Phil Davis
defCmdT("System Message Buffer", "/sbin/dmesg -a");
232
defCmdT("System Message Buffer (Boot)", "/bin/cat /var/log/dmesg.boot");
233
defCmdT("sysctl values", "/sbin/sysctl -a");
234 9cd0b618 Scott Ullrich
235 5b237745 Scott Ullrich
exec("/bin/date", $dateOutput, $dateStatus);
236
$currentDate = $dateOutput[0];
237
238 6c07db48 Phil Davis
$pgtitle = array("{$g['product_name']}", "status");
239 4df96eff Scott Ullrich
include("head.inc");
240
241 5b237745 Scott Ullrich
?>
242
<style type="text/css">
243 2151894c Colin Fleming
/*<![CDATA[*/
244 5b237745 Scott Ullrich
pre {
245 2151894c Colin Fleming
	margin: 0px;
246
	font-family: courier new, courier;
247
	font-weight: normal;
248
	font-size: 9pt;
249 5b237745 Scott Ullrich
}
250 2151894c Colin Fleming
/*]]>*/
251 5b237745 Scott Ullrich
</style>
252
253
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
254 7173af6e Scott Ullrich
<?php include("fbegin.inc"); ?>
255 5b237745 Scott Ullrich
<strong><?=$currentDate;?></strong>
256 0dd3b04f Carlos Eduardo Ramos
<p><span class="red"><strong><?=gettext("Note: make sure to remove any sensitive information " .
257
"(passwords, maybe also IP addresses) before posting " .
258 2151894c Colin Fleming
"information from this page in public places (like mailing lists)"); ?>!</strong></span><br />
259 6f62e89f jim-p
<?=gettext("Passwords in config.xml have been automatically removed"); ?>.<br /><br />
260 abad402c jim-p
<?=gettext("When the page has finished loading, the output will be stored in {$output_file}. It may be downloaded via scp or "); ?>
261
<a href="/exec.php?dlPath=<?= $output_file ?>"><?=gettext("Diagnostics > Command Prompt")?></a>
262 5b237745 Scott Ullrich
263 0774ed52 Scott Ullrich
<div id="cmdspace" style="width:700px">
264 5b237745 Scott Ullrich
<?php listCmds(); ?>
265
266
<?php execCmds(); ?>
267 0774ed52 Scott Ullrich
</div>
268 6f62e89f jim-p
<br />
269
<?=gettext("Saving output to archive...");?>
270
<?php
271
if (is_dir($output_path)) {
272 6c07db48 Phil Davis
	mwexec("/usr/bin/tar czpf " . escapeshellarg($output_file) . " -C " . escapeshellarg(dirname($output_path)) . " " . escapeshellarg(basename($output_path)));
273 6f62e89f jim-p
	unlink_if_exists("{$output_path}/*");
274
	@rmdir($output_path);
275
}
276
?>
277
<?=gettext("Done.");?>
278 5b237745 Scott Ullrich
279 7173af6e Scott Ullrich
<?php include("fend.inc"); ?>
280 5b237745 Scott Ullrich
</body>
281
</html>