From 236d796455c44b0ca40ca6582ae1fbb614f8bf21 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Tue, 03 Jan 2012 06:08:04 -0500
Subject: [PATCH] Fixed: FS#1858 - Old SSH-RSA Public Key not deleted from authorized_keys when deleted or changed
---
server/lib/classes/monitor_tools.inc.php | 200 ++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 170 insertions(+), 30 deletions(-)
diff --git a/server/lib/classes/monitor_tools.inc.php b/server/lib/classes/monitor_tools.inc.php
index f5258e3..f120bcb 100644
--- a/server/lib/classes/monitor_tools.inc.php
+++ b/server/lib/classes/monitor_tools.inc.php
@@ -151,7 +151,7 @@
//** Email Quota
public function monitorEmailQuota() {
- global $conf;
+ global $conf, $app;
//* Initialize data array
$data = array();
@@ -164,8 +164,31 @@
//* The state of the email_quota.
$state = 'ok';
+
+ $mailboxes = $app->db->queryAllRecords("SELECT email FROM mail_user WHERE server_id = $server_id");
+ if(is_array($mailboxes)) {
+ foreach($mailboxes as $mb) {
+ $email = $mb['email'];
+ $email_parts = explode('@',$mb['email']);
+ $filename = '/var/vmail/'.$email_parts[1].'/'.$email_parts[0].'/.quotausage';
+ if(file_exists($filename)) {
+ $quotafile = file($filename);
+ $data[$email]['used'] = trim($quotafile['1']);
+ unset($quotafile);
+ } else {
+ exec('du -s '.escapeshellcmd('/var/vmail/'.$email_parts[1].'/'.$email_parts[0]),$out);
+ $parts = explode(' ',$out[0]);
+ $data[$email]['used'] = intval($parts[0])*1024;
+ unset($out);
+ unset($parts);
+ }
+ }
+ }
+
+ unset($mailboxes);
//* Dovecot quota check Courier in progress lathama@gmail.com
+ /*
if($dir = opendir("/var/vmail")){
while (($quotafiles = readdir($dir)) !== false){
if(preg_match('/.\_quota$/', $quotafiles)){
@@ -177,6 +200,7 @@
}
closedir($dir);
}
+ */
$res['server_id'] = $server_id;
$res['type'] = $type;
$res['data'] = $data;
@@ -407,6 +431,15 @@
* calculate the state
*/
$usePercent = floatval($data[$i]['percent']);
+
+ //* get the free memsize
+ if(substr($data[$i]['available'],-1) == 'G') {
+ $freesize = floatval($data[$i]['available'])*1024;
+ } elseif(substr($data[$i]['available'],-1) == 'T') {
+ $freesize = floatval($data[$i]['available'])*1024*1024;
+ } else {
+ $freesize = floatval($data[$i]['available']);
+ }
//* We don't want to check some filesystem which have no sensible filling levels
switch ($data[$i]['type']) {
@@ -418,13 +451,13 @@
case 'udev':
break;
default:
- if ($usePercent > 75)
+ if ($usePercent > 75 && $freesize < 2000)
$state = $this->_setState($state, 'info');
- if ($usePercent > 80)
+ if ($usePercent > 80 && $freesize < 1000)
$state = $this->_setState($state, 'warning');
- if ($usePercent > 90)
+ if ($usePercent > 90 && $freesize < 500)
$state = $this->_setState($state, 'critical');
- if ($usePercent > 95)
+ if ($usePercent > 95 && $freesize < 100)
$state = $this->_setState($state, 'error');
break;
}
@@ -993,37 +1026,94 @@
* Then calc the state.
*/
$state = 'ok';
- foreach ($data['output'] as $item) {
- /*
- * The output contains information for every RAID and every HDD.
- * We only need the state of the RAID
- */
- if (strpos($item, 'raidlevel:') !== false) {
+ if(is_array($data['output'])) {
+ foreach ($data['output'] as $item) {
/*
- * We found a raid, process the state of it
- */
- if (strpos($item, ' ONLINE ') !== false) {
- $this->_setState($state, 'ok');
- } elseif (strpos($item, ' OPTIMAL ') !== false) {
- $this->_setState($state, 'ok');
- } elseif (strpos($item, ' INITIAL ') !== false) {
- $this->_setState($state, 'info');
- } elseif (strpos($item, ' INACTIVE ') !== false) {
- $this->_setState($state, 'critical');
- } elseif (strpos($item, ' RESYNC ') !== false) {
- $this->_setState($state, 'info');
- } elseif (strpos($item, ' DEGRADED ') !== false) {
- $this->_setState($state, 'critical');
- } else {
- /* we don't know the state. so we set the state to critical, that the
- * admin is warned, that something is wrong
- */
- $this->_setState($state, 'critical');
+ * The output contains information for every RAID and every HDD.
+ * We only need the state of the RAID
+ */
+ if (strpos($item, 'raidlevel:') !== false) {
+ /*
+ * We found a raid, process the state of it
+ */
+ if (strpos($item, ' ONLINE ') !== false) {
+ $this->_setState($state, 'ok');
+ } elseif (strpos($item, ' OPTIMAL ') !== false) {
+ $this->_setState($state, 'ok');
+ } elseif (strpos($item, ' INITIAL ') !== false) {
+ $this->_setState($state, 'info');
+ } elseif (strpos($item, ' INACTIVE ') !== false) {
+ $this->_setState($state, 'critical');
+ } elseif (strpos($item, ' RESYNC ') !== false) {
+ $this->_setState($state, 'info');
+ } elseif (strpos($item, ' DEGRADED ') !== false) {
+ $this->_setState($state, 'critical');
+ } else {
+ /* we don't know the state. so we set the state to critical, that the
+ * admin is warned, that something is wrong
+ */
+ $this->_setState($state, 'critical');
+ }
}
}
}
}
}
+
+ /*
+ * 3ware Controller
+ */
+ system('which tw_cli', $retval);
+ if($retval === 0) {
+
+ $data['output'] = shell_exec('tw_cli info c0');
+
+ $state = 'ok';
+ foreach ($data['output'] as $item) {
+ if (strpos($item, 'RAID') !== false) {
+ if (strpos($item, ' VERIFYING ') !== false) {
+ $this->_setState($state, 'info');
+ }
+ else if (strpos($item, ' MIGRATE-PAUSED ') !== false) {
+ $this->_setState($state, 'info');
+ }
+ else if (strpos($item, ' MIGRATING ') !== false) {
+ $this->_setState($state, 'ok');
+ }
+ else if (strpos($item, ' INITIALIZING ') !== false) {
+ $this->_setState($state, 'info');
+ }
+ else if (strpos($item, ' INIT-PAUSED ') !== false) {
+ $this->_setState($state, 'info');
+ }
+ else if (strpos($item, ' REBUILDING ') !== false) {
+ $this->_setState($state, 'info');
+ }
+ else if (strpos($item, ' REBUILD-PAUSED ') !== false) {
+ $this->_setState($state, 'warning');
+ }
+ else if (strpos($item, ' RECOVERY ') !== false) {
+ $this->_setState($state, 'warning');
+ }
+ else if (strpos($item, ' DEGRADED ') !== false) {
+ $this->_setState($state, 'critical');
+ }
+ else if (strpos($item, ' UNKNOWN ') !== false) {
+ $this->_setState($state, 'critical');
+ }
+ else if (strpos($item, ' OK ') !== false) {
+ $this->_setState($state, 'ok');
+ }
+ else if (strpos($item, ' OPTIMAL ') !== false) {
+ $this->_setState($state, 'ok');
+ }
+ else {
+ $this->_setState($state, 'critical');
+ }
+ }
+ }
+ }
+
/*
* Return the Result
@@ -1125,6 +1215,56 @@
return $res;
}
+ public function monitorIPTables() {
+ global $conf;
+
+ /* the id of the server as int */
+ $server_id = intval($conf['server_id']);
+
+ /** The type of the data */
+ $type = 'iptables_rules';
+
+ /* This monitoring is only available if fail2ban is installed */
+ system('which iptables', $retval); // Debian, Ubuntu, Fedora
+ if ($retval === 0) {
+ /* Get the data of the log */
+ $data['output'] = '<h2>iptables -S (ipv4)</h2>'.shell_exec('iptables -S');
+
+ /*
+ * At this moment, there is no state (maybe later)
+ */
+ $state = 'no_state';
+ } else {
+ $state = 'no_state';
+ $data = '';
+ }
+
+
+ /* This monitoring is only available if fail2ban is installed */
+ system('which ip6tables', $retval); // Debian, Ubuntu, Fedora
+ if ($retval === 0) {
+ /* Get the data of the log */
+ $data['output'] .= '<br><h2>ip6tables -S (ipv6)</h2>'.shell_exec('ip6tables -S');
+
+ /*
+ * At this moment, there is no state (maybe later)
+ */
+ $state = 'no_state';
+ } else {
+ $state = 'no_state';
+ $data = '';
+ }
+
+ /*
+ * Return the Result
+ */
+ $res['server_id'] = $server_id;
+ $res['type'] = $type;
+ $res['data'] = $data;
+ $res['state'] = $state;
+ return $res;
+ }
+
public function monitorSysLog() {
global $app;
global $conf;
--
Gitblit v1.9.1