Projet

Général

Profil

Télécharger (8,24 ko) Statistiques
| Branche: | Tag: | Révision:

univnautes / usr / local / www / status.php @ 5f875147

1
<?php
2
/* $Id$ */
3
/* 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
 * (modified for pfSense by Scott Ullrich geekgod@pfsense.com)
8
 */
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
	pfSense_BUILDER_BINARIES:	/usr/bin/vmstat	/usr/bin/netstat	/sbin/dmesg	/sbin/mount	/sbin/setkey	/usr/local/sbin/pftop	
33
	pfSense_BUILDER_BINARIES:	/sbin/pfctl	/sbin/sysctl	/usr/bin/top	/usr/bin/netstat	/sbin/pfctl	/sbin/ifconfig
34
	pfSense_MODULE:	support
35
*/
36

    
37
##|+PRIV
38
##|*IDENT=page-hidden-detailedstatus
39
##|*NAME=Hidden: Detailed Status page
40
##|*DESCR=Allow access to the 'Hidden: Detailed Status' page.
41
##|*MATCH=status.php*
42
##|-PRIV
43

    
44
/* Execute a command, with a title, and generate an HTML table
45
 * showing the results.
46
 */
47

    
48
/* include all configuration functions */
49
require_once("guiconfig.inc");
50
require_once("functions.inc");
51

    
52
function doCmdT($title, $command) {
53
	$rubbish = array('|', '-', '/', '.', ' ');  /* fixes the <a> tag to be W3C compliant */
54
	echo "\n<a name=\"" . str_replace($rubbish,'',$title) . "\" id=\"" . str_replace($rubbish,'',$title) . "\"></a>\n";
55
	echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"" . $title . "\">\n";
56
	echo "\t<tr><td class=\"listtopic\">" . $title . "</td></tr>\n";
57
	echo "\t<tr>\n\t\t<td class=\"listlr\">\n\t\t\t<pre>";		/* no newline after pre */
58

    
59
	if ($command == "dumpconfigxml") {
60
		$fd = @fopen("/conf/config.xml", "r");
61
		if ($fd) {
62
			while (!feof($fd)) {
63
				$line = fgets($fd);
64
				/* remove sensitive contents */
65
				$line = preg_replace("/<password>.*?<\\/password>/", "<password>xxxxx</password>", $line);
66
				$line = preg_replace("/<pre-shared-key>.*?<\\/pre-shared-key>/", "<pre-shared-key>xxxxx</pre-shared-key>", $line);
67
				$line = preg_replace("/<rocommunity>.*?<\\/rocommunity>/", "<rocommunity>xxxxx</rocommunity>", $line);
68
				$line = str_replace("\t", "    ", $line);
69
				echo htmlspecialchars($line,ENT_NOQUOTES);
70
			}
71
		}
72
		fclose($fd);
73
	} else {
74
		$execOutput = "";
75
		$execStatus = "";
76
		exec ($command . " 2>&1", $execOutput, $execStatus);
77
		for ($i = 0; isset($execOutput[$i]); $i++) {
78
			if ($i > 0) {
79
				echo "\n";
80
			}
81
			echo htmlspecialchars($execOutput[$i],ENT_NOQUOTES);
82
		}
83
	}
84
    echo "\n\t\t\t</pre>\n\t\t</td>\n\t</tr>\n";
85
    echo "</table>\n";
86
}
87

    
88
/* Execute a command, giving it a title which is the same as the command. */
89
function doCmd($command) {
90
	doCmdT($command,$command);
91
}
92

    
93
/* Define a command, with a title, to be executed later. */
94
function defCmdT($title, $command) {
95
	global $commands;
96
	$title = htmlspecialchars($title,ENT_NOQUOTES);
97
	$commands[] = array($title, $command);
98
}
99

    
100
/* Define a command, with a title which is the same as the command,
101
 * to be executed later.
102
 */
103
function defCmd($command) {
104
	defCmdT($command,$command);
105
}
106

    
107
/* List all of the commands as an index. */
108
function listCmds() {
109
	global $commands;
110
	$rubbish = array('|', '-', '/', '.', ' ');  /* fixes the <a> tag to be W3C compliant */
111
	echo "\n<p>" . gettext("This status page includes the following information") . ":\n";
112
	echo "<ul>\n";
113
	for ($i = 0; isset($commands[$i]); $i++ ) {
114
		echo "\t<li><strong><a href=\"#" . str_replace($rubbish,'',$commands[$i][0]) . "\">" . $commands[$i][0] . "</a></strong></li>\n";
115
	}
116
	echo "</ul>\n";
117
}
118

    
119
/* Execute all of the commands which were defined by a call to defCmd. */
120
function execCmds() {
121
	global $commands;
122
	for ($i = 0; isset($commands[$i]); $i++ ) {
123
		doCmdT($commands[$i][0], $commands[$i][1]);
124
	}
125
}
126

    
127
global $g, $config;
128

    
129
/* Set up all of the commands we want to execute. */
130
defCmdT("System uptime","uptime");
131
defCmdT("Interfaces","/sbin/ifconfig -a");
132

    
133
defCmdT("PF Info","/sbin/pfctl -s info");
134

    
135
defCmdT("Routing tables","netstat -nr");
136

    
137
defCmdT("top | head -n5", "/usr/bin/top | /usr/bin/head -n5");
138

    
139
defCmdT("sysctl hw.physmem","/sbin/sysctl hw.physmem");
140

    
141
if (isset($config['captiveportal']) && is_array($config['captiveportal'])) {
142
	foreach ($config['captiveportal'] as $cpZone => $cpdata) {
143
		if (isset($cpdata['enable']))
144
			defCmdT("ipfw -x {$cpdata['zoneid']} show", "/sbin/ipfw -x {$cpdata['zoneid']} show");
145
	}
146
}
147

    
148
defCmdT("pfctl -sn", "/sbin/pfctl -sn");
149
defCmdT("pfctl -sr", "/sbin/pfctl -sr");
150
defCmdT("pfctl -ss", "/sbin/pfctl -ss");
151
defCmdT("pfctl -si", "/sbin/pfctl -si");
152
defCmdT("pfctl -sa", "/sbin/pfctl -sa");
153
defCmdT("pfctl -s rules -vv","/sbin/pfctl -s rules -vv");
154
defCmdT("pfctl -s queue -v","/sbin/pfctl -s queue -v");
155
defCmdT("pfctl -s nat -v","/sbin/pfctl -s nat -v");
156

    
157
defCmdT("PF OSFP","/sbin/pfctl -s osfp");
158

    
159

    
160
defCmdT("netstat -s -ppfsync","netstat -s -ppfsync");
161

    
162
defCmdT("pfctl -vsq","/sbin/pfctl -vsq");
163

    
164
defCmdT("pfctl -vs Tables","/sbin/pfctl -vs Tables");
165

    
166
defCmdT("Load Balancer","/sbin/pfctl -a slb -s nat");
167

    
168
defCmdT("pftop -w 150 -a -b","/usr/local/sbin/pftop -a -b");
169
defCmdT("pftop -w 150 -a -b -v long","/usr/local/sbin/pftop -w 150 -a -b -v long");
170
defCmdT("pftop -w 150 -a -b -v queue","/usr/local/sbin/pftop -w 150 -a -b -v queue");
171
defCmdT("pftop -w 150 -a -b -v rules","/usr/local/sbin/pftop -w 150 -a -b -v rules");
172
defCmdT("pftop -w 150 -a -b -v size","/usr/local/sbin/pftop -w 150 -a -b -v size");
173
defCmdT("pftop -w 150 -a -b -v speed","/usr/local/sbin/pftop -w 150 -a -b -v speed");
174

    
175
defCmdT("resolv.conf","cat /etc/resolv.conf");
176

    
177
defCmdT("Processes","ps xauww");
178
defCmdT("dhcpd.conf","cat /var/dhcpd/etc/dhcpd.conf");
179

    
180
defCmdT("df","/bin/df");
181

    
182
defCmdT("ipsec.conf","cat /var/etc/ipsec/ipsec.conf");
183
defCmdT("SPD","/sbin/setkey -DP");
184
defCmdT("SAD","/sbin/setkey -D");
185

    
186
if(isset($config['system']['usefifolog']))  {
187
	defCmdT("last 200 system log entries","/usr/sbin/fifolog_reader /var/log/system.log 2>&1 | tail -n 200");
188
	defCmdT("last 50 filter log entries","/usr/sbin/fifolog_reader /var/log/filter.log 2>&1 | tail -n 50");
189
} else {
190
	defCmdT("last 200 system log entries","/usr/local/sbin/clog /var/log/system.log 2>&1 | tail -n 200");
191
	defCmdT("last 50 filter log entries","/usr/local/sbin/clog /var/log/filter.log 2>&1 | tail -n 50");
192
}
193
	
194
defCmd("ls /conf");
195
defCmd("ls /var/run");
196

    
197
defCmd("/sbin/mount");
198

    
199
defCmdT("cat {$g['tmp_path']}/rules.debug","cat {$g['tmp_path']}/rules.debug");
200

    
201
defCmdT("VMStat", "vmstat -afimsz");
202

    
203
defCmdT("config.xml","dumpconfigxml");
204

    
205
defCmdT("DMESG","/sbin/dmesg -a");
206

    
207
defCmdT("netstat -mb","netstat -mb");
208
defCmdT("vmstat -z","vmstat -z");
209

    
210
exec("/bin/date", $dateOutput, $dateStatus);
211
$currentDate = $dateOutput[0];
212

    
213
$pgtitle = array("{$g['product_name']}","status");
214
include("head.inc");
215

    
216
?>
217
<style type="text/css">
218
/*<![CDATA[*/
219
pre {
220
	margin: 0px;
221
	font-family: courier new, courier;
222
	font-weight: normal;
223
	font-size: 9pt;
224
}
225
/*]]>*/
226
</style>
227

    
228
<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
229
<?php include("fbegin.inc"); ?>
230
<strong><?=$currentDate;?></strong>
231
<p><span class="red"><strong><?=gettext("Note: make sure to remove any sensitive information " .
232
"(passwords, maybe also IP addresses) before posting " .
233
"information from this page in public places (like mailing lists)"); ?>!</strong></span><br />
234
<?=gettext("Passwords in config.xml have been automatically removed"); ?>.
235

    
236
<div id="cmdspace" style="width:700px">
237
<?php listCmds(); ?>
238

    
239
<?php execCmds(); ?>
240
</div>
241

    
242
<?php include("fend.inc"); ?>
243
</body>
244
</html>
(178-178/255)