diff --git a/COPYRIGHT b/COPYRIGHT
new file mode 100644
index 0000000000..cf4dcc2f13
--- /dev/null
+++ b/COPYRIGHT
@@ -0,0 +1,12 @@
+Project Observer Copyright (C) 2007 Adam Armstrong
+
+This program is free software; you can redistribute it and/or modify it under the terms of the
+GNU General Public License as published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with this program; if not, write to the
+Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
diff --git a/DejaVuSansCondensed.ttf b/DejaVuSansCondensed.ttf
new file mode 100644
index 0000000000..e58bd15bd5
Binary files /dev/null and b/DejaVuSansCondensed.ttf differ
diff --git a/DejaVuSansMono.ttf b/DejaVuSansMono.ttf
new file mode 100644
index 0000000000..bf798a860f
Binary files /dev/null and b/DejaVuSansMono.ttf differ
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000000..39e87326f5
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,26 @@
+Basic Installation Instructions
+-------------------------------
+
+Point apache to the html directory. Give apache read/write access to rrd and graphs (check symlinks in html/ work!)
+
+Create a database, give a user full privileges on it. Insert the mysql schema file into it.
+
+Edit your config.php
+
+Customise html/includes/topnav.inc to be useful for your organisation (put some handy links in it!)
+
+Put cron.sh into your crontab for every 5 mins and cron-hourly.sh into your crontab for every hour.
+
+add a host with 'host-add.php '
+
+Cisco network devices with cdp enabled should be detected automatically in waves each hour as it spiders outwards
+(run discover.php manually to speed it up!)
+
+Servers will need to be added manually.
+
+Replace the logo!
+
+Login to the web interface with the username 'admin' and the password 'observer'.
+
+*** Drop me an email to adama@memetic.org ***
+
diff --git a/LICENCE b/LICENCE
new file mode 100644
index 0000000000..8377aa61ab
--- /dev/null
+++ b/LICENCE
@@ -0,0 +1,11 @@
+Copyright © 2006-2007 by Adam Armstrong.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED "AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/README b/README
new file mode 100644
index 0000000000..6dc00e6685
--- /dev/null
+++ b/README
@@ -0,0 +1,67 @@
+Copyright (C) 2007 Adam Armstrong
+
+Released under the GNU Public License
+
+Introduction
+------------
+
+Project Observer is an auto-discovering network monitoring system. It's not designed to be a drop-in replacement for
+Nagios, Mon, JFFNMS or similar applications. It's designed to be an easily-navigable interface to the health of your
+network.
+
+***********************************************************
+Release 0.2.4
+Fixed some misnamed files
+Fixed some hardcoded binary locations
+Removed some messy AJAX
+Replaced the menu bar
+Added some new menu items
+Cleaned up presentation of some pages
+
+Release 0.2.3
+Fixed some broken graphing code
+Added host add/remove to web interface
+Added host/interface/service status to web interface
+Tidied up some code
+
+Release 0.2.2
+Replaced old layout with new 'Project Observer' layout
+Added recognition of SNOM SIP phones, data collection and some graphing
+Modified standard layout to remove Vostron-specific elements
+Added cpu graphing for ProCurve devices
+Added tabs for device page and AJAX loading of contents
+Detection of HP ProCurve devices
+Detection of m0n0wall devices by new snmp-id
+Can now disable the Transit, Peering and Customer sections
+Added some tabbing to Interface
+Added detection of Net/Open/DragonFlyBSD
+
+Release 0.2.1 - 19th January 2007
+Modification of graphing disply style
+Seperatation of device types
+Implementation of storage graphing
+
+Release 0.2.0 - 20th December 2006
+Cleanup of graphing code
+Seperation of customer-accessible interface
+Preliminary alerting system
+
+Release 0.1.2 - Late November 2006
+Graphing of additional server-related data
+
+Release 0.1.1 - November 2006
+Removal of large amounts of perl.
+
+Release 0.1.0 - October 2006
+Initial Release.
+Basic discovery in place. Graphing in place.
+
+Feature Waiting List
+--------------------
+
+* Verification of discovered devices and interfaces
+* Serial number tracking
+* Manual layer 1 linking
+* Service Monitoring
+* Alerting
+* Temperature Monitoring
diff --git a/alerts.php b/alerts.php
new file mode 100755
index 0000000000..748089c339
--- /dev/null
+++ b/alerts.php
@@ -0,0 +1,25 @@
+#!/usr/bin/php
+
diff --git a/cdp.php b/cdp.php
new file mode 100755
index 0000000000..73cd989657
--- /dev/null
+++ b/cdp.php
@@ -0,0 +1,25 @@
+#!/usr/bin/php
+getports();
+ $cdp = $snmp->explore_cdp($ports);
+
+ foreach (array_keys($cdp) as $key) {
+ $port = $ports[$key];
+ $link = $cdp[$key];
+ $loc_if[$key] = @mysql_result(mysql_query("SELECT `id` FROM `interfaces` WHERE host = '" . $device['id'] . "' AND `if` = '" . $port['desc'] . "'"), 0);
+ echo( $key . "||" . $hostname . "||" . $loc_if[$key] . "||" . $port['desc'] . "||" . $link['host'] . "||" . $link['port'] . "\n" );
+ }
+
+}
+
+?>
diff --git a/check-device.php b/check-device.php
new file mode 100755
index 0000000000..a6166314a4
--- /dev/null
+++ b/check-device.php
@@ -0,0 +1,150 @@
+#!/usr/bin/php
+
+
+include("config.php");
+include("includes/functions.php");
+
+$device_query = mysql_query("SELECT * FROM `devices` WHERE id = '$argv[1]'");
+while ($device = mysql_fetch_array($device_query)) {
+
+ $hostname = $device['hostname'];
+ $id = $device['id'];
+ $status = $device['status'];
+ unset($update);
+ unset($update_query);
+ unset($seperator);
+ unset($newversion);
+ unset($newuptime);
+ unset($newfeatures);
+ unset($newlocation);
+ unset($newhardware);
+ $pingable = isPingable($hostname);
+ $snmpable = FALSE;
+ if($pingable) {
+ $snmpable = isSNMPable($hostname);
+ }
+ echo("$snmpable");
+ if ($pingable !== FALSE && $snmpable !== FALSE ) {
+ $newstatus = '1';
+ $hardware = $device['hardware'];
+ $version = $device['version'];
+ $old_rebooted = $device['rebooted'];
+ $features = $device['features'];
+ $location = $device['location'];
+ $uptime = $device['uptime'];
+ $os = $device['os'];
+ if($os == "FreeBSD" || $os == "Linux" || $os == "Windows") { $uptimeoid = ".1.3.6.1.2.1.25.1.1.0"; } else { $uptimeoid = "1.3.6.1.2.1.1.3.0"; }
+ $snmp = "$uptimeoid sysLocation.0 .1.3.6.1.2.1.47.1.1.1.1.13.1 sysDescr.0";
+ $snmpdata = `snmpget -O qv -v2c -c $community $hostname $snmp | grep -v "Cisco Internetwork Operating System Software"`;
+ $snmpdata = preg_replace("/^.*IOS/","", $snmpdata);
+ $snmpdata = trim($snmpdata);
+ list($sysUptime, $sysLocation, $ciscomodel, $sysDescr) = explode("\n", $snmpdata);
+ $sysUptime = str_replace("(", "", $sysUptime);
+ $sysUptime = str_replace(")", "", $sysUptime);
+ list($days, $hours, $mins, $secs) = explode(":", $sysUptime);
+ list($secs, $microsecs) = explode(".", $secs);
+ $timeticks = mktime(0, $secs, $mins, $hours, $days, 0);
+ $hours = $hours + ($days * 24);
+ $mins = $mins + ($hours * 60);
+ $secs = $secs + ($mins * 60);
+ $newuptime = $secs;
+ if($os == "Windows") {
+ if(strstr($sysDescr, "x86")) { $newhardware = "x86 PC"; }
+ if(strstr($sysDescr, "Windows Version 5.2")) { $newversion = "2003 Server"; }
+ if(strstr($sysDescr, "Uniprocessor Free")) { $newfeatures = "Uniprocessor"; }
+ if(strstr($sysDescr, "Multiprocessor Free")) { $newfeatures = "Multiprocessor"; }
+ }
+ if($os == "FreeBSD") {
+ $sysDescr = str_replace(" 0 ", " ", $sysDescr);
+ list(,,$newversion) = explode (" ", $sysDescr);
+ $newhardware = "Generic";
+ list($newversion,$newfeatures) = explode("-", $newversion);
+ }
+ if($os == "Linux") {
+ list(,,$newversion) = explode (" ", $sysDescr);
+ if(strstr($sysDescr, "386")|| strstr($sysDescr, "486")||strstr($sysDescr, "586")||strstr($sysDescr, "686")) { $newhardware = "Generic x86"; }
+ list($newversion,$newfeatures,$newfeaturesb) = explode("-", $newversion);
+ }
+ if ($os == "IOS") {
+ $newversion = str_replace("Cisco IOS Software,", "", $sysDescr);
+ $newversion = str_replace("IOS (tm) ", "", $newversion);
+ $newversion = str_replace(",RELEASE SOFTWARE", "", $newversion);
+ $newversion = str_replace(",MAINTENANCE INTERIM SOFTWARE", "", $newversion);
+ $newversion = str_replace("Version ","", $newversion);
+ $newversion = str_replace("Cisco Internetwork Operating System Software", "", $newversion);
+ $newversion = trim($newversion);
+ list($newversion) = explode("\n", $newversion);
+ $newversion = preg_replace("/^[A-Za-z0-9\ \_]*\(([A-Za-z0-9\-\_]*)\), (.+), .*/", "\\1|\\2", $newversion);
+ $newversion = str_replace("-M|", "|", $newversion);
+ $newversion = str_replace("-", "|", $newversion);
+ echo("$newversion");
+ list($newhardware, $newfeatures, $newversion) = explode("|", $newversion);;
+ $newfeatures = fixIOSFeatures($newfeatures);
+ $newhardware = fixIOSHardware($newhardware);
+ if(!strstr($ciscomodel, " ")) {
+ echo("$ciscomodel");
+ $newhardware = str_replacE("\"", "", $ciscomodel);
+ }
+ }
+ $newlocation = str_replace("\"","", $sysLocation);
+
+ } else {
+ $newstatus = '0';
+ }
+
+ if ( $newlocation && $location != $newlocation ) {
+ $update = "`location` = '$newlocation'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) VALUES ('$id', NULL, NOW(), 'Changed location from $location to $newlocation')");
+ }
+ if ( $newversion && $version != $newversion ) {
+ $update .= $seperator . "`version` = '$newversion'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) VALUES ('$id', NULL, NOW(), 'Changed version from $version to $newversion')");
+ }
+ if ( $newfeatures && $newfeatures != $features ) {
+ $update .= $seperator . "`features` = '$newfeatures'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) VALUES ('$id', NULL, NOW(), 'Changed features from $features to $newfeatures')");
+ }
+
+ if ( $newhardware && $newhardware != $hardware ) {
+ $update .= $seperator . "`hardware` = '$newhardware'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) VALUES ('$id', NULL, NOW(), 'Changed hardware from $hardware to $newhardware')");
+ }
+
+ if ( $newuptime && $uptime != $newuptime ) {
+ $update .= $seperator . "`uptime` = '$newuptime'";
+ $seperator = ", ";
+ }
+ if ( $newuptime && $newuptime < $uptime ) {
+ $update .= $seperator . "`lastchange` = NOW()";
+ $seperator = ", ";
+ } elseif($status != $newstatus) {
+ $update .= $seperator . "`lastchange` = NOW()";
+ $seperator = ", ";
+ }
+ if( $status != $newstatus ) {
+ $update .= $seperator . "`status` = '$newstatus'";
+ $seperator = ", ";
+ if ($newstatus == '1') { $stat = "Up";
+ mysql_query("INSERT INTO alerts (importance, device_id, message) VALUES ('0', '$id', 'Device is up\n')");
+ } else {
+ $stat = "Down";
+ mysql_query("INSERT INTO alerts (importance, device_id, message) VALUES ('9', '$id', 'Device is down\n')");
+ }
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) VALUES ('$id', NULL, NOW(), 'Device status changed to $stat')");
+ }
+ if ($update) {
+ $update_query = "UPDATE `devices` SET ";
+ $update_query .= $update;
+ $update_query .= " WHERE `id` = '$id'";
+ echo("Updating : $hostname\n$update_query\n\n");
+ $update_result = mysql_query($update_query);
+ } else {
+ echo("Not Updating : $hostname \n\n");
+ }
+}
+
+?>
diff --git a/check-services.php b/check-services.php
new file mode 100755
index 0000000000..76dd735842
--- /dev/null
+++ b/check-services.php
@@ -0,0 +1,30 @@
+#!/usr/bin/php
+
diff --git a/checkers/check_bl b/checkers/check_bl
new file mode 100755
index 0000000000..f0632d27e1
--- /dev/null
+++ b/checkers/check_bl
@@ -0,0 +1,160 @@
+#!/usr/bin/perl -w
+#
+# check_bl plugin for nagios
+# $Revision: 1.0 $
+#
+# Nagios plugin designed to warn you if you mail servers appear in one of the
+# many anti-spam 'blacklists'
+#
+# By Sam Bashton, Bashton Ltd
+# bashton.com/content/nagios-plugins
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+use strict;
+use lib "/usr/lib/nagios/plugins";
+use utils qw($TIMEOUT %ERRORS &print_revision &support);
+use Net::DNS;
+use vars qw($PROGNAME);
+my ($verbose,$host),;
+my ($opt_V,$opt_h,$opt_B,$opt_H,$opt_c);
+$opt_V = $opt_h = $opt_B = $opt_H = $opt_c = '';
+my $state = 'UNKNOWN';
+sub print_help();
+sub print_usage();
+
+$PROGNAME = "check_bl";
+
+$ENV{'BASH_ENV'}='';
+$ENV{'ENV'}='';
+$ENV{'PATH'}='';
+$ENV{'LC_ALL'}='C';
+
+use Getopt::Long;
+Getopt::Long::Configure('bundling');
+GetOptions(
+ "V" => \$opt_V, "version" => \$opt_V,
+ "h" => \$opt_h, "help" => \$opt_h,
+ "H=s" => \$opt_H, "hostname=s" => \$opt_H,
+ "B=s" => \$opt_B, "blacklists=s" => \$opt_B,
+ "c=s" => \$opt_c, "critical=s" => \$opt_c
+);
+
+# -h means display verbose help screen
+if ($opt_h) { print_help(); exit $ERRORS{'OK'}; }
+
+# -V means display version number
+if ($opt_V) {
+ print_revision($PROGNAME,'$Revision: 1.0 $ ');
+ exit $ERRORS{'OK'};
+}
+
+# First check the hostname is OK..
+unless ($opt_H) { print_usage(); exit $ERRORS{'UNKNOWN'}; }
+
+if (! utils::is_hostname($opt_H)){
+ print "$opt_H is not a valid host name\n";
+ print_usage();
+ exit $ERRORS{"UNKNOWN"};
+}else{
+ if ($opt_H =~ /[a-zA-Z]/ )
+ # If the host contains letters we assume it's a hostname, not an IP
+ {
+ $host = lookup($opt_H);
+ }
+ else { $host = $opt_H }
+}
+
+
+# $opt_c is a count of the blacklists a mail server is in,
+# after which state will be CRITICAL rather than WARNING
+# By default any listing is CRITICAL
+my $critcount = 0;
+if ($opt_c) { $critcount = $opt_c };
+
+# $opt_B is a comma seperated list of blacklists
+$opt_B = shift unless ($opt_B);
+unless ($opt_B) { print_usage(); exit -1 }
+my @bls = split(/,/, $opt_B);
+
+
+# Just in case of problems, let's not hang Nagios
+$SIG{'ALRM'} = sub {
+ print ("ERROR: No response from BL server (alarm)\n");
+ exit $ERRORS{"UNKNOWN"};
+};
+alarm($TIMEOUT);
+
+my %listed; # Hash of blacklists we're listed in.
+foreach(@bls)
+{
+ if (blcheck($host,$_)) { $listed{$_} = 1 }
+}
+
+if (scalar(keys(%listed)) == 0) { $state = 'OK' }
+elsif (scalar(keys(%listed)) < $critcount) { $state = 'WARNING' }
+else { $state = 'CRITICAL' }
+
+if (%listed)
+{
+ print "Listed at";
+ foreach (keys(%listed)) { print " $_" }
+ print "\n";
+}
+else { print "Not black-listed\n" }
+
+exit $ERRORS{$state};
+
+
+######## Subroutines ==========================
+
+
+sub print_help() {
+ print_revision($PROGNAME,'$Revision: 1.0 $ ');
+ print "\n";
+ support();
+}
+
+sub print_usage () {
+ print "Usage: \n";
+ print " $PROGNAME -H host -B [blacklist1],[blacklist2] [-c critnum]\n";
+ print " $PROGNAME [-h | --help]\n";
+ print " $PROGNAME [-V | --version]\n";
+}
+
+sub blcheck
+{
+ my ($ip, $bl) = @_;
+ my $lookupip = $ip;
+ $lookupip =~
+ s/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/$4.$3.$2.$1.$bl/;
+ if (lookup($lookupip)) { return 1 }
+ else { return 0 }
+}
+
+sub lookup
+{
+ my $tolookup = shift;
+ my $res = Net::DNS::Resolver->new;
+ my $query = $res->search($tolookup);
+ if ($query)
+ {
+ foreach my $rr ($query->answer)
+ {
+ next unless $rr->type eq "A"; # We're not interested in TXT records
+ return $rr->address;
+ }
+ }
+}
diff --git a/checkers/check_breeze b/checkers/check_breeze
new file mode 100755
index 0000000000..990e981636
--- /dev/null
+++ b/checkers/check_breeze
@@ -0,0 +1,87 @@
+#! /usr/bin/perl -wT
+
+
+use strict;
+use Getopt::Long;
+use vars qw($opt_V $opt_h $opt_w $opt_c $opt_H $opt_C $PROGNAME);
+use lib "/usr/lib/nagios/plugins" ;
+use utils qw(%ERRORS &print_revision &support &usage);
+
+$PROGNAME = "check_breeze";
+
+sub print_help ();
+sub print_usage ();
+
+$ENV{'PATH'}='';
+$ENV{'BASH_ENV'}='';
+$ENV{'ENV'}='';
+
+Getopt::Long::Configure('bundling');
+GetOptions
+ ("V" => \$opt_V, "version" => \$opt_V,
+ "h" => \$opt_h, "help" => \$opt_h,
+ "w=s" => \$opt_w, "warning=s" => \$opt_w,
+ "c=s" => \$opt_c, "critical=s" => \$opt_c,
+ "H=s" => \$opt_H, "hostname=s" => \$opt_H,
+ "C=s" => \$opt_C, "community=s" => \$opt_C);
+
+if ($opt_V) {
+ print_revision($PROGNAME,'$Revision: 1.5 $');
+ exit $ERRORS{'OK'};
+}
+
+if ($opt_h) {print_help(); exit $ERRORS{'OK'};}
+
+($opt_H) || usage("Host name/address not specified\n");
+my $host = $1 if ($opt_H =~ /([-.A-Za-z0-9]+)/);
+($host) || usage("Invalid host: $opt_H\n");
+
+($opt_w) || usage("Warning threshold not specified\n");
+my $warning = $1 if ($opt_w =~ /([0-9]{1,2}|100)+/);
+($warning) || usage("Invalid warning threshold: $opt_w\n");
+
+($opt_c) || usage("Critical threshold not specified\n");
+my $critical = $1 if ($opt_c =~ /([0-9]{1,2}|100)/);
+($critical) || usage("Invalid critical threshold: $opt_c\n");
+
+($opt_C) || ($opt_C = "public") ;
+
+my $sig=0;
+$sig = `/usr/bin/snmpget $host $opt_C .1.3.6.1.4.1.710.3.2.3.1.3.0`;
+my @test=split(/ /,$sig);
+$sig=$test[2];
+$sig=int($sig);
+if ($sig>100){$sig=100}
+
+print "Signal Strength at: $sig%\n";
+
+exit $ERRORS{'CRITICAL'} if ($sig<$critical);
+exit $ERRORS{'WARNING'} if ($sig<$warning);
+exit $ERRORS{'OK'};
+
+
+sub print_usage () {
+ print "Usage: $PROGNAME -H [-C community] -w -c \n";
+}
+
+sub print_help () {
+ print_revision($PROGNAME,'$Revision: 1.5 $');
+ print "Copyright (c) 2000 Jeffrey Blank/Karl DeBisschop
+
+This plugin reports the signal strength of a Breezecom wireless equipment
+
+";
+ print_usage();
+ print "
+-H, --hostname=HOST
+ Name or IP address of host to check
+-C, --community=community
+ SNMPv1 community (default public)
+-w, --warning=INTEGER
+ Percentage strength below which a WARNING status will result
+-c, --critical=INTEGER
+ Percentage strength below which a CRITICAL status will result
+
+";
+ support();
+}
diff --git a/checkers/check_by_ssh b/checkers/check_by_ssh
new file mode 100755
index 0000000000..9d3d1e5b18
Binary files /dev/null and b/checkers/check_by_ssh differ
diff --git a/checkers/check_dhcp b/checkers/check_dhcp
new file mode 100755
index 0000000000..9a4e4a3ef1
Binary files /dev/null and b/checkers/check_dhcp differ
diff --git a/checkers/check_dig b/checkers/check_dig
new file mode 100755
index 0000000000..cd9af25c86
Binary files /dev/null and b/checkers/check_dig differ
diff --git a/checkers/check_disk b/checkers/check_disk
new file mode 100755
index 0000000000..26f20d852d
Binary files /dev/null and b/checkers/check_disk differ
diff --git a/checkers/check_disk_smb b/checkers/check_disk_smb
new file mode 100755
index 0000000000..80b3e2d930
--- /dev/null
+++ b/checkers/check_disk_smb
@@ -0,0 +1,296 @@
+#! /usr/bin/perl -w
+#
+#
+# check_disk.pl [warn] [critical] [port]
+#
+# Nagios host script to get the disk usage from a SMB share
+#
+# Changes and Modifications
+# =========================
+# 7-Aug-1999 - Michael Anthon
+# Created from check_disk.pl script provided with netsaint_statd (basically
+# cause I was too lazy (or is that smart?) to write it from scratch)
+# 8-Aug-1999 - Michael Anthon
+# Modified [warn] and [critical] parameters to accept format of nnn[M|G] to
+# allow setting of limits in MBytes or GBytes. Percentage settings for large
+# drives is a pain in the butt
+# 2-May-2002 - SGhosh fix for embedded perl
+#
+# $Id: check_disk_smb.pl,v 1.12 2005/04/17 22:22:41 seanius Exp $
+#
+
+require 5.004;
+use POSIX;
+use strict;
+use Getopt::Long;
+use vars qw($opt_P $opt_V $opt_h $opt_H $opt_s $opt_W $opt_u $opt_p $opt_w $opt_c $opt_a $verbose);
+use vars qw($PROGNAME);
+use lib "/usr/lib/nagios/plugins" ;
+use utils qw($TIMEOUT %ERRORS &print_revision &support &usage);
+
+sub print_help ();
+sub print_usage ();
+
+$PROGNAME = "check_disk_smb";
+
+$ENV{'PATH'}='';
+$ENV{'BASH_ENV'}='';
+$ENV{'ENV'}='';
+
+Getopt::Long::Configure('bundling');
+GetOptions
+ ("v" => \$verbose, "verbose" => \$verbose,
+ "P=s" => \$opt_P, "port=s" => \$opt_P,
+ "V" => \$opt_V, "version" => \$opt_V,
+ "h" => \$opt_h, "help" => \$opt_h,
+ "w=s" => \$opt_w, "warning=s" => \$opt_w,
+ "c=s" => \$opt_c, "critical=s" => \$opt_c,
+ "p=s" => \$opt_p, "password=s" => \$opt_p,
+ "u=s" => \$opt_u, "username=s" => \$opt_u,
+ "s=s" => \$opt_s, "share=s" => \$opt_s,
+ "W=s" => \$opt_W, "workgroup=s" => \$opt_W,
+ "H=s" => \$opt_H, "hostname=s" => \$opt_H,
+ "a=s" => \$opt_a, "address=s" => \$opt_a);
+
+if ($opt_V) {
+ print_revision($PROGNAME,'$Revision: 1.12 $'); #'
+ exit $ERRORS{'OK'};
+}
+
+if ($opt_h) {print_help(); exit $ERRORS{'OK'};}
+
+my $smbclient= "$utils::PATH_TO_SMBCLIENT " ;
+my $smbclientoptions= $opt_P ? "-p $opt_P " : "";
+
+
+# Options checking
+
+($opt_H) || ($opt_H = shift) || usage("Host name not specified\n");
+my $host = $1 if ($opt_H =~ /^([-_.A-Za-z0-9 ]+\$?)$/);
+($host) || usage("Invalid host: $opt_H\n");
+
+($opt_s) || ($opt_s = shift) || usage("Share volume not specified\n");
+my $share = $1 if ($opt_s =~ /^([-_.A-Za-z0-9]+\$?)$/);
+($share) || usage("Invalid share: $opt_s\n");
+
+($opt_u) || ($opt_u = shift) || ($opt_u = "guest");
+my $user = $1 if ($opt_u =~ /^([-_.A-Za-z0-9\\]+)$/);
+($user) || usage("Invalid user: $opt_u\n");
+
+($opt_p) || ($opt_p = shift) || ($opt_p = "");
+my $pass = $1 if ($opt_p =~ /(.*)/);
+
+($opt_w) || ($opt_w = shift) || ($opt_w = 85);
+my $warn = $1 if ($opt_w =~ /^([0-9]{1,2}\%?|100\%?|[0-9]+[kMG])$/);
+($warn) || usage("Invalid warning threshold: $opt_w\n");
+
+($opt_c) || ($opt_c = shift) || ($opt_c = 95);
+my $crit = $1 if ($opt_c =~ /^([0-9]{1,2}\%?|100\%?|[0-9]+[kMG])$/);
+($crit) || usage("Invalid critical threshold: $opt_c\n");
+
+# split the type from the unit value
+#Check $warn and $crit for type (%/M/G) and set up for tests
+#P = Percent, K = KBytes
+my $warn_type;
+my $crit_type;
+
+if ($opt_w =~ /^([0-9]+)\%?$/) {
+ $warn = "$1";
+ $warn_type = "P";
+} elsif ($opt_w =~ /^([0-9]+)k$/) {
+ $warn_type = "K";
+ $warn = $1;
+} elsif ($opt_w =~ /^([0-9]+)M$/) {
+ $warn_type = "K";
+ $warn = $1 * 1024;
+} elsif ($opt_w =~ /^([0-9]+)G$/) {
+ $warn_type = "K";
+ $warn = $1 * 1048576;
+}
+if ($opt_c =~ /^([0-9]+)\%?$/) {
+ $crit = "$1";
+ $crit_type = "P";
+} elsif ($opt_c =~ /^([0-9]+)k$/) {
+ $crit_type = "K";
+ $crit = $1;
+} elsif ($opt_c =~ /^([0-9]+)M$/) {
+ $crit_type = "K";
+ $crit = $1 * 1024;
+} elsif ($opt_c =~ /^([0-9]+)G$/) {
+ $crit_type = "K";
+ $crit = $1 * 1048576;
+}
+
+# check if both warning and critical are percentage or size
+unless( ( $warn_type eq "P" && $crit_type eq "P" ) || ( $warn_type ne "P" && $crit_type ne "P" ) ){
+ $opt_w =~ s/\%/\%\%/g;
+ $opt_c =~ s/\%/\%\%/g;
+ usage("Both warning and critical should be same type- warning: $opt_w critical: $opt_c \n");
+}
+
+# verify warning is less than critical
+if ( $warn_type eq "K") {
+ unless ( $warn > $crit) {
+ usage("Disk size: warning ($opt_w) should be greater than critical ($opt_c) \n");
+ }
+}else{
+ unless ( $warn < $crit) {
+ $opt_w =~ s/\%/\%\%/g;
+ $opt_c =~ s/\%/\%\%/g;
+ usage("Percentage: warning ($opt_w) should be less than critical ($opt_c) \n");
+ }
+}
+
+my $workgroup = $1 if (defined($opt_W) && $opt_W =~ /(.*)/);
+
+my $address = $1 if (defined($opt_a) && $opt_a =~ /(.*)/);
+
+# end of options checking
+
+
+my $state = "OK";
+my $answer = undef;
+my $res = undef;
+my @lines = undef;
+
+# Just in case of problems, let's not hang Nagios
+$SIG{'ALRM'} = sub {
+ print "No Answer from Client\n";
+ exit $ERRORS{"UNKNOWN"};
+};
+alarm($TIMEOUT);
+
+# Execute an "ls" on the share using smbclient program
+# get the results into $res
+if (defined($workgroup)) {
+ if (defined($address)) {
+ print "$smbclient " . "\/\/$host\/$share" ." $pass -W $workgroup -U $user $smbclientoptions -I $address -c ls\n" if ($verbose);
+ $res = qx/$smbclient "\/\/$host\/$share" $pass -W $workgroup -U $user $smbclientoptions -I $address -c ls/;
+ } else {
+ print "$smbclient " . "\/\/$host\/$share" ." $pass -W $workgroup -U $user $smbclientoptions -c ls\n" if ($verbose);
+ $res = qx/$smbclient "\/\/$host\/$share" $pass -W $workgroup -U $user $smbclientoptions -c ls/;
+ }
+} else {
+ if (defined($address)) {
+ print "$smbclient " . "\/\/$host\/$share" ." $pass -U $user $smbclientoptions -I $address -c ls\n" if ($verbose);
+ $res = qx/$smbclient "\/\/$host\/$share" $pass -U $user $smbclientoptions -I $address -c ls/;
+ } else {
+ print "$smbclient " . "\/\/$host\/$share" ." $pass -U $user $smbclientoptions -c ls\n" if ($verbose);
+ $res = qx/$smbclient "\/\/$host\/$share" $pass -U $user $smbclientoptions -c ls/;
+ }
+}
+#Turn off alarm
+alarm(0);
+
+#Split $res into an array of lines
+@lines = split /\n/, $res;
+
+#Get the last line into $_
+$_ = $lines[$#lines];
+#print "$_\n";
+
+#Process the last line to get free space.
+#If line does not match required regexp, return an UNKNOWN error
+if (/\s*(\d*) blocks of size (\d*)\. (\d*) blocks available/) {
+
+ my ($avail) = ($3*$2)/1024;
+ my ($avail_bytes) = $avail;
+ my ($capper) = int(($3/$1)*100);
+ my ($mountpt) = "\\\\$host\\$share";
+
+
+ if (int($avail / 1024) > 0) {
+ $avail = int($avail / 1024);
+ if (int($avail /1024) > 0) {
+ $avail = (int(($avail / 1024)*100))/100;
+ $avail = $avail ."G";
+ } else {
+ $avail = $avail ."M";
+ }
+ } else {
+ $avail = $avail ."K";
+ }
+
+#print ":$warn:$warn_type:\n";
+#print ":$crit:$crit_type:\n";
+#print ":$avail:$avail_bytes:$capper:$mountpt:\n";
+
+ if ((($warn_type eq "P") && (100 - $capper) < $warn) || (($warn_type eq "K") && ($avail_bytes > $warn))) {
+ $answer = "Disk ok - $avail ($capper%) free on $mountpt\n";
+ } elsif ((($crit_type eq "P") && (100 - $capper) < $crit) || (($crit_type eq "K") && ($avail_bytes > $crit))) {
+ $state = "WARNING";
+ $answer = "WARNING: Only $avail ($capper%) free on $mountpt\n";
+ } else {
+ $state = "CRITICAL";
+ $answer = "CRITICAL: Only $avail ($capper%) free on $mountpt\n";
+ }
+} else {
+ $answer = "Result from smbclient not suitable\n";
+ $state = "UNKNOWN";
+ foreach (@lines) {
+ if (/(Access denied|NT_STATUS_LOGON_FAILURE)/) {
+ $answer = "Access Denied\n";
+ $state = "CRITICAL";
+ last;
+ }
+ if (/(Unknown host \w*|Connection.*failed)/) {
+ $answer = "$1\n";
+ $state = "CRITICAL";
+ last;
+ }
+ if (/(You specified an invalid share name|NT_STATUS_BAD_NETWORK_NAME)/) {
+ $answer = "Invalid share name \\\\$host\\$share\n";
+ $state = "CRITICAL";
+ last;
+ }
+ }
+}
+
+
+print $answer;
+print "$state\n" if ($verbose);
+exit $ERRORS{$state};
+
+sub print_usage () {
+ print "Usage: $PROGNAME -H -s -u -p
+ -w -c [-W ] [-P ] [-a ]\n";
+}
+
+sub print_help () {
+ print_revision($PROGNAME,'$Revision: 1.12 $');
+ print "Copyright (c) 2000 Michael Anthon/Karl DeBisschop
+
+Perl Check SMB Disk plugin for Nagios
+
+";
+ print_usage();
+ print "
+-H, --hostname=HOST
+ NetBIOS name of the server
+-s, --share=STRING
+ Share name to be tested
+-W, --workgroup=STRING
+ Workgroup or Domain used (Defaults to \"WORKGROUP\")
+-a, --address=IP
+ IP-address of HOST (only necessary if HOST is in another network)
+-u, --user=STRING
+ Username to log in to server. (Defaults to \"guest\")
+-p, --password=STRING
+ Password to log in to server. (Defaults to an empty password)
+-w, --warning=INTEGER or INTEGER[kMG]
+ Percent of used space at which a warning will be generated (Default: 85%)
+
+-c, --critical=INTEGER or INTEGER[kMG]
+ Percent of used space at which a critical will be generated (Defaults: 95%)
+-P, --port=INTEGER
+ Port to be used to connect to. Some Windows boxes use 139, others 445 (Defaults to smbclient default)
+
+ If thresholds are followed by either a k, M, or G then check to see if that
+ much disk space is available (kilobytes, Megabytes, Gigabytes)
+
+ Warning percentage should be less than critical
+ Warning (remaining) disk space should be greater than critical.
+
+";
+ support();
+}
diff --git a/checkers/check_dns b/checkers/check_dns
new file mode 100755
index 0000000000..02e164e79f
Binary files /dev/null and b/checkers/check_dns differ
diff --git a/checkers/check_dummy b/checkers/check_dummy
new file mode 100755
index 0000000000..e1d1319712
Binary files /dev/null and b/checkers/check_dummy differ
diff --git a/checkers/check_file_age b/checkers/check_file_age
new file mode 100755
index 0000000000..a1ed17cebb
--- /dev/null
+++ b/checkers/check_file_age
@@ -0,0 +1,113 @@
+#! /usr/bin/perl -w
+# $Id: check_file_age.pl,v 1.2 2003/10/21 15:56:35 tonvoon Exp $
+
+# check_file_age.pl Copyright (C) 2003 Steven Grimm
+#
+# Checks a file's size and modification time to make sure it's not empty
+# and that it's sufficiently recent.
+#
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty
+# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# you should have received a copy of the GNU General Public License
+# along with this program (or with Nagios); if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA
+
+use strict;
+use English;
+use Getopt::Long;
+use File::stat;
+use vars qw($PROGNAME);
+use lib "/usr/lib/nagios/plugins";
+use utils qw (%ERRORS &print_revision &support);
+
+sub print_help ();
+sub print_usage ();
+
+my ($opt_c, $opt_f, $opt_w, $opt_C, $opt_W, $opt_h, $opt_V);
+my ($result, $message, $age, $size, $st);
+
+$PROGNAME="check_file_age";
+
+$opt_w = 240;
+$opt_c = 600;
+$opt_W = 0;
+$opt_C = 0;
+$opt_f = "";
+
+Getopt::Long::Configure('bundling');
+GetOptions(
+ "V" => \$opt_V, "version" => \$opt_V,
+ "h" => \$opt_h, "help" => \$opt_h,
+ "f=s" => \$opt_f, "file" => \$opt_f,
+ "w=f" => \$opt_w, "warning-age=f" => \$opt_w,
+ "W=f" => \$opt_W, "warning-size=f" => \$opt_W,
+ "c=f" => \$opt_c, "critical-age=f" => \$opt_c,
+ "C=f" => \$opt_C, "critical-size=f" => \$opt_C);
+
+if ($opt_V) {
+ print_revision($PROGNAME, '$Id: check_file_age.pl,v 1.2 2003/10/21 15:56:35 tonvoon Exp $');
+ exit $ERRORS{'OK'};
+}
+
+if ($opt_h) {
+ print_help();
+ exit $ERRORS{'OK'};
+}
+
+$opt_f = shift unless ($opt_f);
+
+if (! $opt_f) {
+ print "No file specified\n";
+ exit $ERRORS{'UNKNOWN'};
+}
+
+# Examine the file.
+unless (-f $opt_f) {
+ print "$opt_f: File not found\n";
+ exit $ERRORS{'UNKNOWN'};
+}
+
+$st = File::stat::stat($opt_f);
+$age = time - $st->mtime;
+$size = $st->size;
+
+
+$result = 'OK';
+
+if (($opt_c and $age > $opt_c) or ($opt_C and $size < $opt_C)) {
+ $result = 'CRITICAL';
+}
+elsif (($opt_w and $age > $opt_w) or ($opt_W and $size < $opt_W)) {
+ $result = 'WARNING';
+}
+
+print "$result - $opt_f is $age seconds old and $size bytes\n";
+exit $ERRORS{$result};
+
+sub print_usage () {
+ print "Usage:\n";
+ print " $PROGNAME [-w ] [-c ] [-W ] [-C ] -f \n";
+ print " $PROGNAME [-h | --help]\n";
+ print " $PROGNAME [-V | --version]\n";
+}
+
+sub print_help () {
+ print_revision($PROGNAME, '$Id: check_file_age.pl,v 1.2 2003/10/21 15:56:35 tonvoon Exp $');
+ print "Copyright (c) 2003 Steven Grimm\n\n";
+ print_usage();
+ print "\n";
+ print " File must be no more than this many seconds old\n";
+ print " File must be at least this many bytes long\n";
+ print "\n";
+ support();
+}
diff --git a/checkers/check_flexlm b/checkers/check_flexlm
new file mode 100755
index 0000000000..f77478a37d
--- /dev/null
+++ b/checkers/check_flexlm
@@ -0,0 +1,245 @@
+#! /usr/bin/perl -w
+#
+# usage:
+# check_flexlm.pl license_file
+#
+# Check available flexlm license managers.
+# Use lmstat to check the status of the license server
+# described by the license file given as argument.
+# Check and interpret the output of lmstat
+# and create returncodes and output.
+#
+# Contrary to the nagios concept, this script takes
+# a file, not a hostname as an argument and returns
+# the status of hosts and services described in that
+# file. Use these hosts.cfg entries as an example
+#
+#host[anchor]=any host will do;some.address.com;;check-host-alive;3;120;24x7;1;1;1;
+#service[anchor]=yodel;24x7;3;5;5;unix-admin;60;24x7;1;1;1;;check_flexlm!/opt/lic/licfiles/yodel_lic
+#service[anchor]=yeehaw;24x7;3;5;5;unix-admin;60;24x7;1;1;1;;check_flexlm!/opt/lic/licfiles/yeehaw_lic
+#command[check_flexlm]=/some/path/libexec/check_flexlm.pl $ARG1$
+#
+# Notes:
+# - you need the lmstat utility which comes with flexlm.
+# - set the correct path in the variable $lmstat.
+#
+# initial version: 9-10-99 Ernst-Dieter Martin edmt@infineon.com
+#
+# License: GPL
+# $Id: check_flexlm.pl,v 1.6 2003/02/04 06:16:16 sghosh Exp $
+#
+# lmstat output patches from Steve Rigler/Cliff Rice 13-Apr-2002
+# srigler@marathonoil.com,cerice@marathonoil.com
+
+
+
+use strict;
+use Getopt::Long;
+use vars qw($opt_V $opt_h $opt_F $opt_t $verbose $PROGNAME);
+use lib "/usr/lib/nagios/plugins";
+use utils qw(%ERRORS &print_revision &support &usage);
+
+$PROGNAME="check_flexlm";
+
+sub print_help ();
+sub print_usage ();
+
+$ENV{'PATH'}='';
+$ENV{'BASH_ENV'}='';
+$ENV{'ENV'}='';
+
+Getopt::Long::Configure('bundling');
+GetOptions
+ ("V" => \$opt_V, "version" => \$opt_V,
+ "h" => \$opt_h, "help" => \$opt_h,
+ "v" => \$verbose, "verbose" => \$verbose,
+ "F=s" => \$opt_F, "filename=s" => \$opt_F,
+ "t=i" => \$opt_t, "timeout=i" => \$opt_t);
+
+if ($opt_V) {
+ print_revision($PROGNAME,'$Revision: 1.6 $');
+ exit $ERRORS{'OK'};
+}
+
+unless (defined $opt_t) {
+ $opt_t = $utils::TIMEOUT ; # default timeout
+}
+
+
+if ($opt_h) {print_help(); exit $ERRORS{'OK'};}
+
+unless (defined $opt_F) {
+ print "Missing license.dat file\n";
+ print_usage();
+ exit $ERRORS{'UNKNOWN'};
+}
+# Just in case of problems, let's not hang Nagios
+$SIG{'ALRM'} = sub {
+ print "Timeout: No Answer from Client\n";
+ exit $ERRORS{'UNKNOWN'};
+};
+alarm($opt_t);
+
+my $lmstat = $utils::PATH_TO_LMSTAT ;
+unless (-x $lmstat ) {
+ print "Cannot find \"lmstat\"\n";
+ exit $ERRORS{'UNKNOWN'};
+}
+
+($opt_F) || ($opt_F = shift) || usage("License file not specified\n");
+my $licfile = $1 if ($opt_F =~ /^(.*)$/);
+($licfile) || usage("Invalid filename: $opt_F\n");
+
+print "$licfile\n" if $verbose;
+
+if ( ! open(CMD,"$lmstat -c $licfile |") ) {
+ print "ERROR: Could not open \"$lmstat -c $licfile\" ($!)\n";
+ exit exit $ERRORS{'UNKNOWN'};
+}
+
+my $serverup = 0;
+my @upsrv;
+my @downsrv; # list of servers up and down
+
+#my ($ls1,$ls2,$ls3,$lf1,$lf2,$lf3,$servers);
+
+# key off of the term "license server" and
+# grab the status. Keep going until "Vendor" is found
+#
+
+#
+# Collect list of license servers by their status
+# Vendor daemon status is ignored for the moment.
+
+while ( ) {
+ next if (/^lmstat/); # ignore 1st line - copyright
+ next if (/^Flexible/); # ignore 2nd line - timestamp
+ (/^Vendor/) && last; # ignore Vendor daemon status
+ print $_ if $verbose;
+
+ if ($_ =~ /license server /) { # matched 1 (of possibly 3) license server
+ s/^\s*//; #some servers start at col 1, other have whitespace
+ # strip staring whitespace if any
+ if ( $_ =~ /UP/) {
+ $_ =~ /^(.*):/ ;
+ push(@upsrv, $1);
+ print "up:$1:\n" if $verbose;
+ } else {
+ $_ =~ /^(.*):/;
+ push(@downsrv, $1);
+ print "down:$1:\n" if $verbose;
+ }
+
+ }
+
+
+# if ( /^License server status: [0-9]*@([-0-9a-zA-Z_]*),[0-9]*@([-0-9a-zA-Z_]*),[0-9]*@([-0-9a-zA-Z_]*)/ ) {
+# $ls1 = $1;
+# $ls2 = $2;
+# $ls3 = $3;
+# $lf1 = $lf2 = $lf3 = 0;
+# $servers = 3;
+# } elsif ( /^License server status: [0-9]*@([-0-9a-zA-Z_]*)/ ) {
+# $ls1 = $1;
+# $ls2 = $ls3 = "";
+# $lf1 = $lf2 = $lf3 = 0;
+# $servers = 1;
+# } elsif ( / *$ls1: license server UP/ ) {
+# print "$ls1 UP, ";
+# $lf1 = 1
+# } elsif ( / *$ls2: license server UP/ ) {
+# print "$ls2 UP, ";
+# $lf2 = 1
+# } elsif ( / *$ls3: license server UP/ ) {
+# print "$ls3 UP, ";
+# $lf3 = 1
+# } elsif ( / *([^:]*: UP .*)/ ) {
+# print " license server for $1\n";
+# $serverup = 1;
+# }
+
+}
+
+#if ( $serverup == 0 ) {
+# print " license server not running\n";
+# exit 2;
+#}
+
+close CMD;
+
+if ($verbose) {
+ print "License Servers running: ".scalar(@upsrv) ."\n";
+ foreach my $upserver (@upsrv) {
+ print "$upserver\n";
+ }
+ print "License servers not running: ".scalar(@downsrv)."\n";
+ foreach my $downserver (@downsrv) {
+ print "$downserver\n";
+ }
+}
+
+#
+# print list of servers which are up.
+#
+if (scalar(@upsrv) > 0) {
+ print "License Servers running:";
+ foreach my $upserver (@upsrv) {
+ print "$upserver,";
+ }
+}
+#
+# Ditto for those which are down.
+#
+if (scalar(@downsrv) > 0) {
+ print "License servers NOT running:";
+ foreach my $downserver (@downsrv) {
+ print "$downserver,";
+ }
+}
+
+# perfdata
+print "\n|flexlm::up:".scalar(@upsrv).";down:".scalar(@downsrv)."\n";
+
+exit $ERRORS{'OK'} if ( scalar(@downsrv) == 0 );
+exit $ERRORS{'WARNING'} if ( (scalar(@upsrv) > 0) && (scalar(@downsrv) > 0));
+
+#exit $ERRORS{'OK'} if ( $servers == $lf1 + $lf2 + $lf3 );
+#exit $ERRORS{'WARNING'} if ( $servers == 3 && $lf1 + $lf2 + $lf3 == 2 );
+exit $ERRORS{'CRITICAL'};
+
+
+sub print_usage () {
+ print "Usage:
+ $PROGNAME -F [-v] [-t] [-V] [-h]
+ $PROGNAME --help
+ $PROGNAME --version
+";
+}
+
+sub print_help () {
+ print_revision($PROGNAME,'$Revision: 1.6 $');
+ print "Copyright (c) 2000 Ernst-Dieter Martin/Karl DeBisschop
+
+Check available flexlm license managers
+
+";
+ print_usage();
+ print "
+-F, --filename=FILE
+ Name of license file (usually \"license.dat\")
+-v, --verbose
+ Print some extra debugging information (not advised for normal operation)
+-t, --timeout
+ Plugin time out in seconds (default = $utils::TIMEOUT )
+-V, --version
+ Show version and license information
+-h, --help
+ Show this help screen
+
+Flexlm license managers usually run as a single server or three servers and a
+quorum is needed. The plugin return OK if 1 (single) or 3 (triple) servers
+are running, CRITICAL if 1(single) or 3 (triple) servers are down, and WARNING
+if 1 or 2 of 3 servers are running\n
+";
+ support();
+}
diff --git a/checkers/check_fping b/checkers/check_fping
new file mode 100755
index 0000000000..27f4bf8179
Binary files /dev/null and b/checkers/check_fping differ
diff --git a/checkers/check_ftp b/checkers/check_ftp
new file mode 120000
index 0000000000..e838da97eb
--- /dev/null
+++ b/checkers/check_ftp
@@ -0,0 +1 @@
+check_tcp
\ No newline at end of file
diff --git a/checkers/check_game b/checkers/check_game
new file mode 100755
index 0000000000..f1b47bb4e5
Binary files /dev/null and b/checkers/check_game differ
diff --git a/checkers/check_hpjd b/checkers/check_hpjd
new file mode 100755
index 0000000000..e59a7c1f8d
Binary files /dev/null and b/checkers/check_hpjd differ
diff --git a/checkers/check_http b/checkers/check_http
new file mode 100755
index 0000000000..a0520d4e60
Binary files /dev/null and b/checkers/check_http differ
diff --git a/checkers/check_icmp b/checkers/check_icmp
new file mode 100755
index 0000000000..aba7da4579
Binary files /dev/null and b/checkers/check_icmp differ
diff --git a/checkers/check_ifoperstatus b/checkers/check_ifoperstatus
new file mode 100755
index 0000000000..91c9b333c0
--- /dev/null
+++ b/checkers/check_ifoperstatus
@@ -0,0 +1,505 @@
+#! /usr/bin/perl -w
+#
+# check_ifoperstatus.pl - nagios plugin
+#
+# Copyright (C) 2000 Christoph Kron,
+# Modified 5/2002 to conform to updated Nagios Plugin Guidelines
+# Added support for named interfaces per Valdimir Ivaschenko (S. Ghosh)
+# Added SNMPv3 support (10/2003)
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+#
+# Report bugs to: nagiosplug-help@lists.sourceforge.net
+#
+# 11.01.2000 Version 1.0
+# $Id: check_ifoperstatus.pl,v 1.6 2004/12/07 03:13:14 mattkent Exp $
+#
+# Patches from Guy Van Den Bergh to warn on ifadminstatus down interfaces
+# instead of critical.
+#
+# Primary MIB reference - RFC 2863
+
+
+use POSIX;
+use strict;
+use lib "/usr/lib/nagios/plugins" ;
+use utils qw($TIMEOUT %ERRORS &print_revision &support);
+
+use Net::SNMP;
+use Getopt::Long;
+&Getopt::Long::config('bundling');
+
+my $PROGNAME = "check_ifoperstatus";
+sub print_help ();
+sub usage ();
+sub process_arguments ();
+
+my $timeout;
+my $status;
+my %ifOperStatus = ('1','up',
+ '2','down',
+ '3','testing',
+ '4','unknown',
+ '5','dormant',
+ '6','notPresent',
+ '7','lowerLayerDown'); # down due to the state of lower layer interface(s)
+
+my $state = "UNKNOWN";
+my $answer = "";
+my $snmpkey = 0;
+my $community = "public";
+my $maxmsgsize = 1472 ; # Net::SNMP default is 1472
+my ($seclevel, $authproto, $secname, $authpass, $privpass, $auth, $priv, $context);
+my $port = 161;
+my @snmpoids;
+my $sysUptime = '1.3.6.1.2.1.1.3.0';
+my $snmpIfDescr = '1.3.6.1.2.1.2.2.1.2';
+my $snmpIfAdminStatus = '1.3.6.1.2.1.2.2.1.7';
+my $snmpIfOperStatus = '1.3.6.1.2.1.2.2.1.8';
+my $snmpIfName = '1.3.6.1.2.1.31.1.1.1.1';
+my $snmpIfLastChange = '1.3.6.1.2.1.2.2.1.9';
+my $snmpIfAlias = '1.3.6.1.2.1.31.1.1.1.18';
+my $snmpLocIfDescr = '1.3.6.1.4.1.9.2.2.1.1.28';
+my $hostname;
+my $ifName;
+my $session;
+my $error;
+my $response;
+my $snmp_version = 1 ;
+my $ifXTable;
+my $opt_h ;
+my $opt_V ;
+my $ifdescr;
+my $key;
+my $lastc;
+my $dormantWarn;
+my $adminWarn;
+my $name;
+
+### Validate Arguments
+
+$status = process_arguments();
+
+
+# Just in case of problems, let's not hang Nagios
+$SIG{'ALRM'} = sub {
+ print ("ERROR: No snmp response from $hostname (alarm)\n");
+ exit $ERRORS{"UNKNOWN"};
+};
+
+alarm($timeout);
+
+
+## map ifdescr to ifindex - should look at being able to cache this value
+
+if (defined $ifdescr) {
+ # escape "/" in ifdescr - very common in the Cisco world
+ $ifdescr =~ s/\//\\\//g;
+
+ $status=fetch_ifdescr(); # if using on device with large number of interfaces
+ # recommend use of SNMP v2 (get-bulk)
+ if ($status==0) {
+ $state = "UNKNOWN";
+ printf "$state: could not retrive ifdescr snmpkey - $status-$snmpkey\n";
+ $session->close;
+ exit $ERRORS{$state};
+ }
+}
+
+
+## Main function
+
+$snmpIfAdminStatus = $snmpIfAdminStatus . "." . $snmpkey;
+$snmpIfOperStatus = $snmpIfOperStatus . "." . $snmpkey;
+$snmpIfDescr = $snmpIfDescr . "." . $snmpkey;
+$snmpIfName = $snmpIfName . "." . $snmpkey ;
+$snmpIfAlias = $snmpIfAlias . "." . $snmpkey ;
+
+push(@snmpoids,$snmpIfAdminStatus);
+push(@snmpoids,$snmpIfOperStatus);
+push(@snmpoids,$snmpIfDescr);
+push(@snmpoids,$snmpIfName) if (defined $ifXTable) ;
+push(@snmpoids,$snmpIfAlias) if (defined $ifXTable) ;
+
+ if (!defined($response = $session->get_request(@snmpoids))) {
+ $answer=$session->error;
+ $session->close;
+ $state = 'WARNING';
+ print ("$state: SNMP error: $answer\n");
+ exit $ERRORS{$state};
+ }
+
+ $answer = sprintf("host '%s', %s(%s) is %s\n",
+ $hostname,
+ $response->{$snmpIfDescr},
+ $snmpkey,
+ $ifOperStatus{$response->{$snmpIfOperStatus}}
+ );
+
+
+ ## Check to see if ifName match is requested and it matches - exit if no match
+ ## not the interface we want to monitor
+ if ( defined $name && not ($response->{$snmpIfName} eq $name) ) {
+ $state = 'UNKNOWN';
+ $answer = "Interface name ($name) doesn't match snmp value ($response->{$snmpIfName}) (index $snmpkey)";
+ print ("$state: $answer");
+ exit $ERRORS{$state};
+ }
+
+ ## define the interface name
+ if (defined $ifXTable) {
+ $name = $response->{$snmpIfName} ." - " .$response->{$snmpIfAlias} ;
+ }else{
+ $name = $response->{$snmpIfDescr} ;
+ }
+
+ ## if AdminStatus is down - some one made a consious effort to change config
+ ##
+ if ( not ($response->{$snmpIfAdminStatus} == 1) ) {
+ $answer = "Interface $name (index $snmpkey) is administratively down.";
+ if ( not defined $adminWarn or $adminWarn eq "w" ) {
+ $state = 'WARNING';
+ } elsif ( $adminWarn eq "i" ) {
+ $state = 'OK';
+ } elsif ( $adminWarn eq "c" ) {
+ $state = 'CRITICAL';
+ } else { # If wrong value for -a, say warning
+ $state = 'WARNING';
+ }
+ }
+ ## Check operational status
+ elsif ( $response->{$snmpIfOperStatus} == 2 ) {
+ $state = 'CRITICAL';
+ $answer = "Interface $name (index $snmpkey) is down.";
+ } elsif ( $response->{$snmpIfOperStatus} == 5 ) {
+ if (defined $dormantWarn ) {
+ if ($dormantWarn eq "w") {
+ $state = 'WARNING';
+ $answer = "Interface $name (index $snmpkey) is dormant.";
+ }elsif($dormantWarn eq "c") {
+ $state = 'CRITICAL';
+ $answer = "Interface $name (index $snmpkey) is dormant.";
+ }elsif($dormantWarn eq "i") {
+ $state = 'OK';
+ $answer = "Interface $name (index $snmpkey) is dormant.";
+ }
+ }else{
+ # dormant interface - but warning/critical/ignore not requested
+ $state = 'CRITICAL';
+ $answer = "Interface $name (index $snmpkey) is dormant.";
+ }
+ } elsif ( $response->{$snmpIfOperStatus} == 6 ) {
+ $state = 'CRITICAL';
+ $answer = "Interface $name (index $snmpkey) notPresent - possible hotswap in progress.";
+ } elsif ( $response->{$snmpIfOperStatus} == 7 ) {
+ $state = 'CRITICAL';
+ $answer = "Interface $name (index $snmpkey) down due to lower layer being down.";
+
+ } elsif ( $response->{$snmpIfOperStatus} == 3 || $response->{$snmpIfOperStatus} == 4 ) {
+ $state = 'CRITICAL';
+ $answer = "Interface $name (index $snmpkey) down (testing/unknown).";
+
+ } else {
+ $state = 'OK';
+ $answer = "Interface $name (index $snmpkey) is up.";
+ }
+
+
+
+print ("$state: $answer");
+exit $ERRORS{$state};
+
+
+### subroutines
+
+sub fetch_ifdescr {
+ if (!defined ($response = $session->get_table($snmpIfDescr))) {
+ $answer=$session->error;
+ $session->close;
+ $state = 'CRITICAL';
+ printf ("$state: SNMP error with snmp version $snmp_version ($answer)\n");
+ $session->close;
+ exit $ERRORS{$state};
+ }
+
+ foreach $key ( keys %{$response}) {
+ if ($response->{$key} =~ /^$ifdescr$/) {
+ $key =~ /.*\.(\d+)$/;
+ $snmpkey = $1;
+ #print "$ifdescr = $key / $snmpkey \n"; #debug
+ }
+ }
+ unless (defined $snmpkey) {
+ $session->close;
+ $state = 'CRITICAL';
+ printf "$state: Could not match $ifdescr on $hostname\n";
+ exit $ERRORS{$state};
+ }
+
+ return $snmpkey;
+}
+
+sub usage() {
+ printf "\nMissing arguments!\n";
+ printf "\n";
+ printf "usage: \n";
+ printf "check_ifoperstatus -k -H [-C ]\n";
+ printf "Copyright (C) 2000 Christoph Kron\n";
+ printf "check_ifoperstatus.pl comes with ABSOLUTELY NO WARRANTY\n";
+ printf "This programm is licensed under the terms of the ";
+ printf "GNU General Public License\n(check source code for details)\n";
+ printf "\n\n";
+ exit $ERRORS{"UNKNOWN"};
+}
+
+sub print_help() {
+ printf "check_ifoperstatus plugin for Nagios monitors operational \n";
+ printf "status of a particular network interface on the target host\n";
+ printf "\nUsage:\n";
+ printf " -H (--hostname) Hostname to query - (required)\n";
+ printf " -C (--community) SNMP read community (defaults to public,\n";
+ printf " used with SNMP v1 and v2c\n";
+ printf " -v (--snmp_version) 1 for SNMP v1 (default)\n";
+ printf " 2 for SNMP v2c\n";
+ printf " SNMP v2c will use get_bulk for less overhead\n";
+ printf " if monitoring with -d\n";
+ printf " -L (--seclevel) choice of \"noAuthNoPriv\", \"authNoPriv\", or \"authPriv\"\n";
+ printf " -U (--secname) username for SNMPv3 context\n";
+ printf " -c (--context) SNMPv3 context name (default is empty string)";
+ printf " -A (--authpass) authentication password (cleartext ascii or localized key\n";
+ printf " in hex with 0x prefix generated by using \"snmpkey\" utility\n";
+ printf " auth password and authEngineID\n";
+ printf " -a (--authproto) Authentication protocol ( MD5 or SHA1)\n";
+ printf " -X (--privpass) privacy password (cleartext ascii or localized key\n";
+ printf " in hex with 0x prefix generated by using \"snmpkey\" utility\n";
+ printf " privacy password and authEngineID\n";
+ printf " -k (--key) SNMP IfIndex value\n";
+ printf " -d (--descr) SNMP ifDescr value\n";
+ printf " -p (--port) SNMP port (default 161)\n";
+ printf " -I (--ifmib) Agent supports IFMIB ifXTable. Do not use if\n";
+ printf " you don't know what this is. \n";
+ printf " -n (--name) the value should match the returned ifName\n";
+ printf " (Implies the use of -I)\n";
+ printf " -w (--warn =i|w|c) ignore|warn|crit if the interface is dormant (default critical)\n";
+ printf " -D (--admin-down =i|w|c) same for administratively down interfaces (default warning)\n";
+ printf " -M (--maxmsgsize) Max message size - usefull only for v1 or v2c\n";
+ printf " -t (--timeout) seconds before the plugin times out (default=$TIMEOUT)\n";
+ printf " -V (--version) Plugin version\n";
+ printf " -h (--help) usage help \n\n";
+ printf " -k or -d must be specified\n\n";
+ printf "Note: either -k or -d must be specified and -d is much more network \n";
+ printf "intensive. Use it sparingly or not at all. -n is used to match against\n";
+ printf "a much more descriptive ifName value in the IfXTable to verify that the\n";
+ printf "snmpkey has not changed to some other network interface after a reboot.\n\n";
+ print_revision($PROGNAME, '$Revision: 1.6 $');
+
+}
+
+sub process_arguments() {
+ $status = GetOptions(
+ "V" => \$opt_V, "version" => \$opt_V,
+ "h" => \$opt_h, "help" => \$opt_h,
+ "v=i" => \$snmp_version, "snmp_version=i" => \$snmp_version,
+ "C=s" => \$community, "community=s" => \$community,
+ "L=s" => \$seclevel, "seclevel=s" => \$seclevel,
+ "a=s" => \$authproto, "authproto=s" => \$authproto,
+ "U=s" => \$secname, "secname=s" => \$secname,
+ "A=s" => \$authpass, "authpass=s" => \$authpass,
+ "X=s" => \$privpass, "privpass=s" => \$privpass,
+ "c=s" => \$context, "context=s" => \$context,
+ "k=i" => \$snmpkey, "key=i",\$snmpkey,
+ "d=s" => \$ifdescr, "descr=s" => \$ifdescr,
+ "l=s" => \$lastc, "lastchange=s" => \$lastc,
+ "p=i" => \$port, "port=i" =>\$port,
+ "H=s" => \$hostname, "hostname=s" => \$hostname,
+ "I" => \$ifXTable, "ifmib" => \$ifXTable,
+ "n=s" => \$ifName, "name=s" => \$ifName,
+ "w=s" => \$dormantWarn, "warn=s" => \$dormantWarn,
+ "D=s" => \$adminWarn, "admin-down=s" => \$adminWarn,
+ "M=i" => \$maxmsgsize, "maxmsgsize=i" => \$maxmsgsize,
+ "t=i" => \$timeout, "timeout=i" => \$timeout,
+ );
+
+
+
+ if ($status == 0){
+ print_help();
+ exit $ERRORS{'OK'};
+ }
+
+ if ($opt_V) {
+ print_revision($PROGNAME,'$Revision: 1.6 $ ');
+ exit $ERRORS{'OK'};
+ }
+
+ if ($opt_h) {
+ print_help();
+ exit $ERRORS{'OK'};
+ }
+
+ if (! utils::is_hostname($hostname)){
+ usage();
+ exit $ERRORS{"UNKNOWN"};
+ }
+
+
+ unless ($snmpkey > 0 || defined $ifdescr){
+ printf "Either a valid snmpkey key (-k) or a ifDescr (-d) must be provided)\n";
+ usage();
+ exit $ERRORS{"UNKNOWN"};
+ }
+
+
+ if (defined $name) {
+ $ifXTable=1;
+ }
+
+ if (defined $dormantWarn) {
+ unless ($dormantWarn =~ /^(w|c|i)$/ ) {
+ printf "Dormant alerts must be one of w|c|i \n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+ }
+
+ unless (defined $timeout) {
+ $timeout = $TIMEOUT;
+ }
+
+ if ($snmp_version =~ /3/ ) {
+ # Must define a security level even though default is noAuthNoPriv
+ # v3 requires a security username
+ if (defined $seclevel && defined $secname) {
+
+ # Must define a security level even though defualt is noAuthNoPriv
+ unless ($seclevel eq ('noAuthNoPriv' || 'authNoPriv' || 'authPriv' ) ) {
+ usage();
+ exit $ERRORS{"UNKNOWN"};
+ }
+
+ # Authentication wanted
+ if ($seclevel eq ('authNoPriv' || 'authPriv') ) {
+
+ unless ($authproto eq ('MD5' || 'SHA1') ) {
+ usage();
+ exit $ERRORS{"UNKNOWN"};
+ }
+
+ if ( !defined $authpass) {
+ usage();
+ exit $ERRORS{"UNKNOWN"};
+ }else{
+ if ($authpass =~ /^0x/ ) {
+ $auth = "-authkey => $authpass" ;
+ }else{
+ $auth = "-authpassword => $authpass";
+ }
+ }
+
+ }
+
+ # Privacy (DES encryption) wanted
+ if ($seclevel eq 'authPriv' ) {
+ if (! defined $privpass) {
+ usage();
+ exit $ERRORS{"UNKNOWN"};
+ }else{
+ if ($privpass =~ /^0x/){
+ $priv = "-privkey => $privpass";
+ }else{
+ $priv = "-privpassword => $privpass";
+ }
+ }
+ }
+
+ # Context name defined or default
+
+ unless ( defined $context) {
+ $context = "";
+ }
+
+
+
+ }else {
+ usage();
+ exit $ERRORS{'UNKNOWN'}; ;
+ }
+ } # end snmpv3
+
+
+ if ( $snmp_version =~ /[12]/ ) {
+ ($session, $error) = Net::SNMP->session(
+ -hostname => $hostname,
+ -community => $community,
+ -port => $port,
+ -version => $snmp_version,
+ -maxmsgsize => $maxmsgsize
+ );
+
+ if (!defined($session)) {
+ $state='UNKNOWN';
+ $answer=$error;
+ print ("$state: $answer");
+ exit $ERRORS{$state};
+ }
+
+ }elsif ( $snmp_version =~ /3/ ) {
+
+ if ($seclevel eq 'noAuthNoPriv') {
+ ($session, $error) = Net::SNMP->session(
+ -hostname => $hostname,
+ -port => $port,
+ -version => $snmp_version,
+ -username => $secname,
+ );
+
+ }elsif ( $seclevel eq 'authNoPriv' ) {
+ ($session, $error) = Net::SNMP->session(
+ -hostname => $hostname,
+ -port => $port,
+ -version => $snmp_version,
+ -username => $secname,
+ $auth,
+ -authprotocol => $authproto,
+ );
+ }elsif ($seclevel eq 'authPriv' ) {
+ ($session, $error) = Net::SNMP->session(
+ -hostname => $hostname,
+ -port => $port,
+ -version => $snmp_version,
+ -username => $secname,
+ $auth,
+ -authprotocol => $authproto,
+ $priv
+ );
+ }
+
+
+ if (!defined($session)) {
+ $state='UNKNOWN';
+ $answer=$error;
+ print ("$state: $answer");
+ exit $ERRORS{$state};
+ }
+
+ }else{
+ $state='UNKNOWN';
+ print ("$state: No support for SNMP v$snmp_version yet\n");
+ exit $ERRORS{$state};
+ }
+
+}
+## End validation
+
diff --git a/checkers/check_ifstatus b/checkers/check_ifstatus
new file mode 100755
index 0000000000..3f3d70234f
--- /dev/null
+++ b/checkers/check_ifstatus
@@ -0,0 +1,459 @@
+#! /usr/bin/perl -w
+#
+# check_ifstatus.pl - nagios plugin
+#
+#
+# Copyright (C) 2000 Christoph Kron
+# Modified 5/2002 to conform to updated Nagios Plugin Guidelines (S. Ghosh)
+# Added -x option (4/2003)
+# Added -u option (4/2003)
+# Added -M option (10/2003)
+# Added SNMPv3 support (10/2003)
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+#
+# Report bugs to: ck@zet.net, nagiosplug-help@lists.sf.net
+#
+# 11.01.2000 Version 1.0
+#
+# $Id: check_ifstatus.pl,v 1.9 2004/08/18 19:51:35 tonvoon Exp $
+
+use POSIX;
+use strict;
+use lib "/usr/lib/nagios/plugins" ;
+use utils qw($TIMEOUT %ERRORS &print_revision &support);
+
+use Net::SNMP;
+use Getopt::Long;
+Getopt::Long::Configure('bundling');
+
+my $PROGNAME = "check_ifstatus";
+
+sub print_help ();
+sub usage ();
+sub process_arguments ();
+
+
+my $status;
+my %ifOperStatus = ('1','up',
+ '2','down',
+ '3','testing',
+ '4','unknown',
+ '5','dormant',
+ '6','notPresent',
+ '7','lowerLayerDown'); # down due to the state of lower layer interface(s));
+
+my $timeout ;
+my $state = "UNKNOWN";
+my $answer = "";
+my $snmpkey=0;
+my $snmpoid=0;
+my $key=0;
+my $community = "public";
+my $maxmsgsize = 1472 ; # Net::SNMP default is 1472
+my ($seclevel, $authproto, $secname, $authpass, $privpass, $auth, $priv, $context);
+my $port = 161;
+my @snmpoids;
+my $snmpIfAdminStatus = '1.3.6.1.2.1.2.2.1.7';
+my $snmpIfDescr = '1.3.6.1.2.1.2.2.1.2';
+my $snmpIfOperStatus = '1.3.6.1.2.1.2.2.1.8';
+my $snmpIfName = '1.3.6.1.2.1.31.1.1.1.1';
+my $snmpIfAlias = '1.3.6.1.2.1.31.1.1.1.18';
+my $snmpLocIfDescr = '1.3.6.1.4.1.9.2.2.1.1.28';
+my $snmpIfType = '1.3.6.1.2.1.2.2.1.3';
+my $hostname;
+my $session;
+my $error;
+my $response;
+my %ifStatus;
+my $ifup =0 ;
+my $ifdown =0;
+my $ifdormant = 0;
+my $ifexclude = 0 ;
+my $ifunused = 0;
+my $ifmessage = "";
+my $snmp_version = 1;
+my $ifXTable;
+my $opt_h ;
+my $opt_V ;
+my $opt_u;
+my $opt_x ;
+my %excluded ;
+my @unused_ports ;
+
+
+
+
+
+# Just in case of problems, let's not hang Nagios
+$SIG{'ALRM'} = sub {
+ print ("ERROR: No snmp response from $hostname (alarm timeout)\n");
+ exit $ERRORS{"UNKNOWN"};
+};
+
+
+#Option checking
+$status = process_arguments();
+
+if ($status != 0)
+{
+ print_help() ;
+ exit $ERRORS{'OK'};
+}
+
+
+alarm($timeout);
+
+push(@snmpoids,$snmpIfOperStatus);
+push(@snmpoids,$snmpIfAdminStatus);
+push(@snmpoids,$snmpIfDescr);
+push(@snmpoids,$snmpIfType);
+push(@snmpoids,$snmpIfName) if ( defined $ifXTable);
+push(@snmpoids,$snmpIfAlias) if ( defined $ifXTable);
+
+
+
+
+foreach $snmpoid (@snmpoids) {
+
+ if (!defined($response = $session->get_table($snmpoid))) {
+ $answer=$session->error;
+ $session->close;
+ $state = 'CRITICAL';
+ if ( ( $snmpoid =~ $snmpIfName ) && defined $ifXTable ) {
+ print ("$state: Device does not support ifTable - try without -I option\n");
+ }else{
+ print ("$state: $answer for $snmpoid with snmp version $snmp_version\n");
+ }
+ exit $ERRORS{$state};
+ }
+
+ foreach $snmpkey (keys %{$response}) {
+ $snmpkey =~ /.*\.(\d+)$/;
+ $key = $1;
+ $ifStatus{$key}{$snmpoid} = $response->{$snmpkey};
+ }
+}
+
+
+$session->close;
+
+alarm(0);
+
+foreach $key (keys %ifStatus) {
+
+ # skip unused interfaces
+ if (!defined($ifStatus{$key}{'notInUse'})) {
+ # check only if interface is administratively up
+ if ($ifStatus{$key}{$snmpIfAdminStatus} == 1 ) {
+
+ # check only if interface type is not listed in %excluded
+ if (!defined $excluded{$ifStatus{$key}{$snmpIfType}} ) {
+ if ($ifStatus{$key}{$snmpIfOperStatus} == 1 ) { $ifup++ ;}
+ if ($ifStatus{$key}{$snmpIfOperStatus} == 2 ) {
+ $ifdown++ ;
+ if (defined $ifXTable) {
+ $ifmessage .= sprintf("%s: down -> %s ",
+ $ifStatus{$key}{$snmpIfName},
+ $ifStatus{$key}{$snmpIfAlias});
+ }else{
+ $ifmessage .= sprintf("%s: down ",
+ $ifStatus{$key}{$snmpIfDescr});
+ }
+ }
+ if ($ifStatus{$key}{$snmpIfOperStatus} == 5 ) { $ifdormant++ ;}
+ }else{
+ $ifexclude++;
+ }
+
+ }
+ }else{
+ $ifunused++;
+ }
+}
+
+ if ($ifdown > 0) {
+ $state = 'CRITICAL';
+ $answer = sprintf("host '%s', interfaces up: %d, down: %d, dormant: %d, excluded: %d, unused: %d ",
+ $hostname,
+ $ifup,
+ $ifdown,
+ $ifdormant,
+ $ifexclude,
+ $ifunused);
+ $answer = $answer . $ifmessage . "\n";
+ }
+ else {
+ $state = 'OK';
+ $answer = sprintf("host '%s', interfaces up: %d, down: %d, dormant: %d, excluded: %d, unused: %d",
+ $hostname,
+ $ifup,
+ $ifdown,
+ $ifdormant,
+ $ifexclude,
+ $ifunused);
+ }
+my $perfdata = sprintf("up=%d,down=%d,dormant=%d,excluded=%d,unused=%d",$ifup,$ifdown,$ifdormant,$ifexclude,$ifunused);
+print ("$state: $answer |$perfdata\n");
+exit $ERRORS{$state};
+
+
+sub usage (){
+ printf "\nMissing arguments!\n";
+ printf "\n";
+ printf "check_ifstatus -C -p -H \n";
+ printf "Copyright (C) 2000 Christoph Kron\n";
+ printf "Updates 5/2002 Subhendu Ghosh\n";
+ printf "\n\n";
+ support();
+ exit $ERRORS{"UNKNOWN"};
+}
+
+sub print_help (){
+ printf "check_ifstatus plugin for Nagios monitors operational \n";
+ printf "status of each network interface on the target host\n";
+ printf "\nUsage:\n";
+ printf " -H (--hostname) Hostname to query - (required)\n";
+ printf " -C (--community) SNMP read community (defaults to public,\n";
+ printf " used with SNMP v1 and v2c\n";
+ printf " -v (--snmp_version) 1 for SNMP v1 (default)\n";
+ printf " 2 for SNMP v2c\n";
+ printf " SNMP v2c will use get_bulk for less overhead\n";
+ printf " 3 for SNMPv3 (requires -U option)";
+ printf " -p (--port) SNMP port (default 161)\n";
+ printf " -I (--ifmib) Agent supports IFMIB ifXTable. For Cisco - this will provide\n";
+ printf " the descriptive name. Do not use if you don't know what this is. \n";
+ printf " -x (--exclude) A comma separated list of ifType values that should be excluded \n";
+ printf " from the report (default for an empty list is PPP(23).\n";
+ printf " -u (--unused_ports) A comma separated list of ifIndex values that should be excluded \n";
+ printf " from the report (default is an empty exclusion list).\n";
+ printf " See the IANAifType-MIB for a list of interface types.\n";
+ printf " -L (--seclevel) choice of \"noAuthNoPriv\", \"authNoPriv\", or \"authPriv\"\n";
+ printf " -U (--secname) username for SNMPv3 context\n";
+ printf " -c (--context) SNMPv3 context name (default is empty string)";
+ printf " -A (--authpass) authentication password (cleartext ascii or localized key\n";
+ printf " in hex with 0x prefix generated by using \"snmpkey\" utility\n";
+ printf " auth password and authEngineID\n";
+ printf " -a (--authproto) Authentication protocol ( MD5 or SHA1)\n";
+ printf " -X (--privpass) privacy password (cleartext ascii or localized key\n";
+ printf " in hex with 0x prefix generated by using \"snmpkey\" utility\n";
+ printf " privacy password and authEngineID\n";
+ printf " -M (--maxmsgsize) Max message size - usefull only for v1 or v2c\n";
+ printf " -t (--timeout) seconds before the plugin times out (default=$TIMEOUT)\n";
+ printf " -V (--version) Plugin version\n";
+ printf " -h (--help) usage help \n\n";
+ print_revision($PROGNAME, '$Revision: 1.9 $');
+
+}
+
+sub process_arguments() {
+ $status = GetOptions(
+ "V" => \$opt_V, "version" => \$opt_V,
+ "h" => \$opt_h, "help" => \$opt_h,
+ "v=i" => \$snmp_version, "snmp_version=i" => \$snmp_version,
+ "C=s" => \$community,"community=s" => \$community,
+ "L=s" => \$seclevel, "seclevel=s" => \$seclevel,
+ "a=s" => \$authproto, "authproto=s" => \$authproto,
+ "U=s" => \$secname, "secname=s" => \$secname,
+ "A=s" => \$authpass, "authpass=s" => \$authpass,
+ "X=s" => \$privpass, "privpass=s" => \$privpass,
+ "c=s" => \$context, "context=s" => \$context,
+ "p=i" =>\$port, "port=i" => \$port,
+ "H=s" => \$hostname, "hostname=s" => \$hostname,
+ "I" => \$ifXTable, "ifmib" => \$ifXTable,
+ "x:s" => \$opt_x, "exclude:s" => \$opt_x,
+ "u=s" => \$opt_u, "unused_ports=s" => \$opt_u,
+ "M=i" => \$maxmsgsize, "maxmsgsize=i" => \$maxmsgsize,
+ "t=i" => \$timeout, "timeout=i" => \$timeout,
+ );
+
+ if ($status == 0){
+ print_help() ;
+ exit $ERRORS{'OK'};
+ }
+ if ($opt_V) {
+ print_revision($PROGNAME,'$Revision: 1.9 $ ');
+ exit $ERRORS{'OK'};
+ }
+
+ if ($opt_h) {
+ print_help();
+ exit $ERRORS{'OK'};
+ }
+
+ unless (defined $timeout) {
+ $timeout = $TIMEOUT;
+ }
+
+ if ($snmp_version =~ /3/ ) {
+ # Must define a security level even though default is noAuthNoPriv
+ # v3 requires a security username
+ if (defined $seclevel && defined $secname) {
+
+ # Must define a security level even though defualt is noAuthNoPriv
+ unless ($seclevel eq ('noAuthNoPriv' || 'authNoPriv' || 'authPriv' ) ) {
+ usage();
+ exit $ERRORS{"UNKNOWN"};
+ }
+
+ # Authentication wanted
+ if ($seclevel eq ('authNoPriv' || 'authPriv') ) {
+
+ unless ($authproto eq ('MD5' || 'SHA1') ) {
+ usage();
+ exit $ERRORS{"UNKNOWN"};
+ }
+
+ if ( !defined $authpass) {
+ usage();
+ exit $ERRORS{"UNKNOWN"};
+ }else{
+ if ($authpass =~ /^0x/ ) {
+ $auth = "-authkey => $authpass" ;
+ }else{
+ $auth = "-authpassword => $authpass";
+ }
+ }
+
+ }
+
+ # Privacy (DES encryption) wanted
+ if ($seclevel eq 'authPriv' ) {
+ if (! defined $privpass) {
+ usage();
+ exit $ERRORS{"UNKNOWN"};
+ }else{
+ if ($privpass =~ /^0x/){
+ $priv = "-privkey => $privpass";
+ }else{
+ $priv = "-privpassword => $privpass";
+ }
+ }
+ }
+
+ # Context name defined or default
+
+ unless ( defined $context) {
+ $context = "";
+ }
+
+
+
+ }else {
+ usage();
+ exit $ERRORS{'UNKNOWN'}; ;
+ }
+ } # end snmpv3
+
+ # for snmp v1 & v2c we default to community = "public"
+
+ # Excluded interfaces types (ifType) (backup interfaces, dial-on demand interfaces, PPP interfaces
+ if (defined $opt_x) {
+ my @x = split(/,/, $opt_x);
+ if ( @x) {
+ foreach $key (@x){
+ $excluded{$key} = 1;
+ }
+ }else{
+ $excluded{23} = 1; # default PPP(23) if empty list - note (AIX seems to think PPP is 22 according to a post)
+ }
+ }
+
+ # Excluded interface ports (ifIndex) - management reasons
+ if ($opt_u) {
+ @unused_ports = split(/,/,$opt_u);
+ foreach $key (@unused_ports) {
+ $ifStatus{$key}{'notInUse'}++ ;
+ }
+ }
+
+ if (! utils::is_hostname($hostname)){
+ usage();
+ exit $ERRORS{"UNKNOWN"};
+ }
+
+ # create SNMP session handle based on options passed.
+
+ if ( ! $snmp_version ) {
+ $snmp_version =1 ;
+ }else{
+ if ( $snmp_version =~ /[12]/ ) {
+
+ ($session, $error) = Net::SNMP->session(
+ -hostname => $hostname,
+ -community => $community,
+ -port => $port,
+ -version => $snmp_version,
+ -maxmsgsize => $maxmsgsize
+ );
+
+ if (!defined($session)) {
+ $state='UNKNOWN';
+ $answer=$error;
+ print ("$state: $answer");
+ exit $ERRORS{$state};
+ }
+
+
+ }elsif ( $snmp_version =~ /3/ ) {
+
+ if ($seclevel eq 'noAuthNoPriv') {
+ ($session, $error) = Net::SNMP->session(
+ -hostname => $hostname,
+ -port => $port,
+ -version => $snmp_version,
+ -username => $secname,
+ );
+
+ }elsif ( $seclevel eq 'authNoPriv' ) {
+ ($session, $error) = Net::SNMP->session(
+ -hostname => $hostname,
+ -port => $port,
+ -version => $snmp_version,
+ -username => $secname,
+ -authprotocol => $authproto,
+ $auth
+ );
+ }elsif ($seclevel eq 'authPriv' ) {
+ ($session, $error) = Net::SNMP->session(
+ -hostname => $hostname,
+ -port => $port,
+ -version => $snmp_version,
+ -username => $secname,
+ -authprotocol => $authproto,
+ $auth,
+ $priv
+ );
+ }
+
+
+ if (!defined($session)) {
+ $state='UNKNOWN';
+ $answer=$error;
+ print ("$state: $answer");
+ exit $ERRORS{$state};
+ }
+
+ }else{
+ $state='UNKNOWN';
+ print ("$state: No support for SNMP v$snmp_version yet\n");
+ exit $ERRORS{$state};
+ }
+}
+
+return $ERRORS{"OK"};
+
+}
diff --git a/checkers/check_imap b/checkers/check_imap
new file mode 120000
index 0000000000..e838da97eb
--- /dev/null
+++ b/checkers/check_imap
@@ -0,0 +1 @@
+check_tcp
\ No newline at end of file
diff --git a/checkers/check_ircd b/checkers/check_ircd
new file mode 100755
index 0000000000..8900b8aeeb
--- /dev/null
+++ b/checkers/check_ircd
@@ -0,0 +1,250 @@
+#! /usr/bin/perl -wT
+
+# -----------------------------------------------------------------------------
+# File Name: check_ircd.pl
+#
+# Author: Richard Mayhew - South Africa
+#
+# Date: 1999/09/20
+#
+# $Id: check_ircd.pl,v 1.3 2002/05/07 05:35:49 sghosh Exp $
+#
+# Description: This script will check to see if an IRCD is running
+# about how many users it has
+#
+# Email: netsaint@splash.co.za
+#
+# -----------------------------------------------------------------------------
+# Copyright 1999 (c) Richard Mayhew
+#
+# Credits go to Ethan Galstad for coding Nagios
+#
+# If any changes are made to this script, please mail me a copy of the
+# changes :)
+#
+# Some code taken from Charlie Cook (check_disk.pl)
+#
+# License GPL
+#
+# -----------------------------------------------------------------------------
+# Date Author Reason
+# ---- ------ ------
+#
+# 1999/09/20 RM Creation
+#
+# 1999/09/20 TP Changed script to use strict, more secure by
+# specifying $ENV variables. The bind command is
+# still insecure through. Did most of my work
+# with perl -wT and 'use strict'
+#
+# test using check_ircd.pl (irc-2.mit.edu|irc.erols.com|irc.core.com)
+# 2002/05/02 SG Fixed for Embedded Perl
+#
+
+# ----------------------------------------------------------------[ Require ]--
+
+require 5.004;
+
+# -------------------------------------------------------------------[ Uses ]--
+
+use Socket;
+use strict;
+use Getopt::Long;
+use vars qw($opt_V $opt_h $opt_t $opt_p $opt_H $opt_w $opt_c $verbose);
+use vars qw($PROGNAME);
+use lib "/usr/lib/nagios/plugins";
+use utils qw($TIMEOUT %ERRORS &print_revision &support &usage);
+
+# ----------------------------------------------------[ Function Prototypes ]--
+
+sub print_help ();
+sub print_usage ();
+sub connection ($$$$);
+sub bindRemote ($$$);
+
+# -------------------------------------------------------------[ Enviroment ]--
+
+$ENV{PATH} = "";
+$ENV{ENV} = "";
+$ENV{BASH_ENV} = "";
+
+# -----------------------------------------------------------------[ Global ]--
+
+$PROGNAME = "check_ircd";
+my $NICK="ircd$$";
+my $USER_INFO="monitor localhost localhost : ";
+
+# -------------------------------------------------------------[ connection ]--
+sub connection ($$$$)
+{
+ my ($in_remotehost,$in_users,$in_warn,$in_crit) = @_;
+ my $state;
+ my $answer;
+
+ print "connection(debug): users = $in_users\n" if $verbose;
+ $in_users =~ s/\ //g;
+
+ if ($in_users >= 0) {
+
+ if ($in_users > $in_crit) {
+ $state = "CRITICAL";
+ $answer = "Critical Number Of Clients Connected : $in_users (Limit = $in_crit)\n";
+
+ } elsif ($in_users > $in_warn) {
+ $state = "WARNING";
+ $answer = "Warning Number Of Clients Connected : $in_users (Limit = $in_warn)\n";
+
+ } else {
+ $state = "OK";
+ $answer = "IRCD ok - Current Local Users: $in_users\n";
+ }
+
+ } else {
+ $state = "UNKNOWN";
+ $answer = "Server $in_remotehost has less than 0 users! Something is Really WRONG!\n";
+ }
+
+ print ClientSocket "quit\n";
+ print $answer;
+ exit $ERRORS{$state};
+}
+
+# ------------------------------------------------------------[ print_usage ]--
+
+sub print_usage () {
+ print "Usage: $PROGNAME -H [-w ] [-c ] [-p ]\n";
+}
+
+# -------------------------------------------------------------[ print_help ]--
+
+sub print_help ()
+{
+ print_revision($PROGNAME,'$Revision: 1.3 $ ');
+ print "Copyright (c) 2000 Richard Mayhew/Karl DeBisschop
+
+Perl Check IRCD plugin for Nagios
+
+";
+ print_usage();
+ print "
+-H, --hostname=HOST
+ Name or IP address of host to check
+-w, --warning=INTEGER
+ Number of connected users which generates a warning state (Default: 50)
+-c, --critical=INTEGER
+ Number of connected users which generates a critical state (Default: 100)
+-p, --port=INTEGER
+ Port that the ircd daemon is running on (Default: 6667)
+-v, --verbose
+ Print extra debugging information
+";
+}
+
+# -------------------------------------------------------------[ bindRemote ]--
+
+sub bindRemote ($$$)
+{
+ my ($in_remotehost, $in_remoteport, $in_hostname) = @_;
+ my $proto = getprotobyname('tcp');
+ my $sockaddr;
+ my $this;
+ my $that;
+ my ($name, $aliases,$type,$len,$thataddr) = gethostbyname($in_remotehost);
+# ($name,$aliases,$type,$len,$thisaddr) = gethostbyname($in_hostname);
+
+ if (!socket(ClientSocket,AF_INET, SOCK_STREAM, $proto)) {
+ print "IRCD UNKNOWN: Could not start socket ($!)\n";
+ exit $ERRORS{"UNKNOWN"};
+ }
+ $sockaddr = 'S n a4 x8';
+ $this = pack($sockaddr, AF_INET, 0, INADDR_ANY);
+ $that = pack($sockaddr, AF_INET, $in_remoteport, $thataddr);
+ if (!bind(ClientSocket, $this)) {
+ print "IRCD UNKNOWN: Could not bind socket ($!)\n";
+ exit $ERRORS{"UNKNOWN"};
+ }
+ if (!connect(ClientSocket, $that)) {
+ print "IRCD UNKNOWN: Could not connect socket ($!)\n";
+ exit $ERRORS{"UNKNOWN"};
+ }
+ select(ClientSocket); $| = 1; select(STDOUT);
+ return \*ClientSocket;
+}
+
+# ===================================================================[ MAIN ]==
+
+MAIN:
+{
+ my $hostname;
+
+ Getopt::Long::Configure('bundling');
+ GetOptions
+ ("V" => \$opt_V, "version" => \$opt_V,
+ "h" => \$opt_h, "help" => \$opt_h,
+ "v" => \$verbose,"verbose" => \$verbose,
+ "t=i" => \$opt_t, "timeout=i" => \$opt_t,
+ "w=i" => \$opt_w, "warning=i" => \$opt_w,
+ "c=i" => \$opt_c, "critical=i" => \$opt_c,
+ "p=i" => \$opt_p, "port=i" => \$opt_p,
+ "H=s" => \$opt_H, "hostname=s" => \$opt_H);
+
+ if ($opt_V) {
+ print_revision($PROGNAME,'$Revision: 1.3 $ ');
+ exit $ERRORS{'OK'};
+ }
+
+ if ($opt_h) {print_help(); exit $ERRORS{'OK'};}
+
+ ($opt_H) || ($opt_H = shift) || usage("Host name/address not specified\n");
+ my $remotehost = $1 if ($opt_H =~ /([-.A-Za-z0-9]+)/);
+ ($remotehost) || usage("Invalid host: $opt_H\n");
+
+ ($opt_w) || ($opt_w = shift) || ($opt_w = 50);
+ my $warn = $1 if ($opt_w =~ /^([0-9]+)$/);
+ ($warn) || usage("Invalid warning threshold: $opt_w\n");
+
+ ($opt_c) || ($opt_c = shift) || ($opt_c = 100);
+ my $crit = $1 if ($opt_c =~ /^([0-9]+)$/);
+ ($crit) || usage("Invalid critical threshold: $opt_c\n");
+
+ ($opt_p) || ($opt_p = shift) || ($opt_p = 6667);
+ my $remoteport = $1 if ($opt_p =~ /^([0-9]+)$/);
+ ($remoteport) || usage("Invalid port: $opt_p\n");
+
+ if ($opt_t && $opt_t =~ /^([0-9]+)$/) { $TIMEOUT = $1; }
+
+ # Just in case of problems, let's not hang Nagios
+ $SIG{'ALRM'} = sub {
+ print "Somthing is Taking a Long Time, Increase Your TIMEOUT (Currently Set At $TIMEOUT Seconds)\n";
+ exit $ERRORS{"UNKNOWN"};
+ };
+
+ alarm($TIMEOUT);
+
+ chomp($hostname = `/bin/hostname`);
+ $hostname = $1 if ($hostname =~ /([-.a-zA-Z0-9]+)/);
+ my ($name, $alias, $proto) = getprotobyname('tcp');
+ print "MAIN(debug): hostname = $hostname\n" if $verbose;
+
+ print "MAIN(debug): binding to remote host: $remotehost -> $remoteport -> $hostname\n" if $verbose;
+ my $ClientSocket = &bindRemote($remotehost,$remoteport,$hostname);
+
+ print ClientSocket "NICK $NICK\nUSER $USER_INFO\n";
+
+ while () {
+ print "MAIN(debug): default var = $_\n" if $verbose;
+
+ # DALnet,LagNet,UnderNet etc. Require this!
+ # Replies with a PONG when presented with a PING query.
+ # If a server doesn't require it, it will be ignored.
+
+ if (m/^PING (.*)/) {print ClientSocket "PONG $1\n";}
+
+ alarm(0);
+
+ # Look for pattern in IRCD Output to gather Client Connections total.
+ connection($remotehost,$1,$warn,$crit) if (m/:I have\s+(\d+)/);
+ }
+ print "IRCD UNKNOWN: Unknown error - maybe could not authenticate\n";
+ exit $ERRORS{"UNKNOWN"};
+}
diff --git a/checkers/check_jabber b/checkers/check_jabber
new file mode 120000
index 0000000000..e838da97eb
--- /dev/null
+++ b/checkers/check_jabber
@@ -0,0 +1 @@
+check_tcp
\ No newline at end of file
diff --git a/checkers/check_ldap b/checkers/check_ldap
new file mode 100755
index 0000000000..d7afad1d5b
Binary files /dev/null and b/checkers/check_ldap differ
diff --git a/checkers/check_ldaps b/checkers/check_ldaps
new file mode 100755
index 0000000000..d7afad1d5b
Binary files /dev/null and b/checkers/check_ldaps differ
diff --git a/checkers/check_load b/checkers/check_load
new file mode 100755
index 0000000000..4430d49cd5
Binary files /dev/null and b/checkers/check_load differ
diff --git a/checkers/check_log b/checkers/check_log
new file mode 100755
index 0000000000..8f55865af8
--- /dev/null
+++ b/checkers/check_log
@@ -0,0 +1,217 @@
+#! /bin/sh
+#
+# Log file pattern detector plugin for Nagios
+# Written by Ethan Galstad (nagios@nagios.org)
+# Last Modified: 07-31-1999
+#
+# Usage: ./check_log
+#
+# Description:
+#
+# This plugin will scan a log file (specified by the option)
+# for a specific pattern (specified by the option). Successive
+# calls to the plugin script will only report *new* pattern matches in the
+# log file, since an copy of the log file from the previous run is saved
+# to .
+#
+# Output:
+#
+# On the first run of the plugin, it will return an OK state with a message
+# of "Log check data initialized". On successive runs, it will return an OK
+# state if *no* pattern matches have been found in the *difference* between the
+# log file and the older copy of the log file. If the plugin detects any
+# pattern matches in the log diff, it will return a CRITICAL state and print
+# out a message is the following format: "(x) last_match", where "x" is the
+# total number of pattern matches found in the file and "last_match" is the
+# last entry in the log file which matches the pattern.
+#
+# Notes:
+#
+# If you use this plugin make sure to keep the following in mind:
+#
+# 1. The "max_attempts" value for the service should be 1, as this
+# will prevent Nagios from retrying the service check (the
+# next time the check is run it will not produce the same results).
+#
+# 2. The "notify_recovery" value for the service should be 0, so that
+# Nagios does not notify you of "recoveries" for the check. Since
+# pattern matches in the log file will only be reported once and not
+# the next time, there will always be "recoveries" for the service, even
+# though recoveries really don't apply to this type of check.
+#
+# 3. You *must* supply a different for each service that
+# you define to use this plugin script - even if the different services
+# check the same for pattern matches. This is necessary
+# because of the way the script operates.
+#
+# Examples:
+#
+# Check for login failures in the syslog...
+#
+# check_log /var/log/messages ./check_log.badlogins.old "LOGIN FAILURE"
+#
+# Check for port scan alerts generated by Psionic's PortSentry software...
+#
+# check_log /var/log/message ./check_log.portscan.old "attackalert"
+#
+
+# Paths to commands used in this script. These
+# may have to be modified to match your system setup.
+
+PATH=""
+
+ECHO="/bin/echo"
+GREP="/bin/grep"
+DIFF="/usr/bin/diff"
+TAIL="/usr/bin/tail"
+CAT="/bin/cat"
+RM="/bin/rm"
+
+PROGNAME=`/usr/bin/basename $0`
+PROGPATH=`echo $0 | /bin/sed -e 's,[\\/][^\\/][^\\/]*$,,'`
+REVISION=`echo '$Revision: 1.4 $' | /bin/sed -e 's/[^0-9.]//g'`
+
+. $PROGPATH/utils.sh
+
+print_usage() {
+ echo "Usage: $PROGNAME -F logfile -O oldlog -q query"
+ echo "Usage: $PROGNAME --help"
+ echo "Usage: $PROGNAME --version"
+}
+
+print_help() {
+ print_revision $PROGNAME $REVISION
+ echo ""
+ print_usage
+ echo ""
+ echo "Log file pattern detector plugin for Nagios"
+ echo ""
+ support
+}
+
+# Make sure the correct number of command line
+# arguments have been supplied
+
+if [ $# -lt 1 ]; then
+ print_usage
+ exit $STATE_UNKNOWN
+fi
+
+# Grab the command line arguments
+
+#logfile=$1
+#oldlog=$2
+#query=$3
+exitstatus=$STATE_WARNING #default
+while test -n "$1"; do
+ case "$1" in
+ --help)
+ print_help
+ exit $STATE_OK
+ ;;
+ -h)
+ print_help
+ exit $STATE_OK
+ ;;
+ --version)
+ print_revision $PROGNAME $VERSION
+ exit $STATE_OK
+ ;;
+ -V)
+ print_revision $PROGNAME $VERSION
+ exit $STATE_OK
+ ;;
+ --filename)
+ logfile=$2
+ shift
+ ;;
+ -F)
+ logfile=$2
+ shift
+ ;;
+ --oldlog)
+ oldlog=$2
+ shift
+ ;;
+ -O)
+ oldlog=$2
+ shift
+ ;;
+ --query)
+ query=$2
+ shift
+ ;;
+ -q)
+ query=$2
+ shift
+ ;;
+ -x)
+ exitstatus=$2
+ shift
+ ;;
+ --exitstatus)
+ exitstatus=$2
+ shift
+ ;;
+ *)
+ echo "Unknown argument: $1"
+ print_usage
+ exit $STATE_UNKNOWN
+ ;;
+ esac
+ shift
+done
+
+# If the source log file doesn't exist, exit
+
+if [ ! -e $logfile ]; then
+ $ECHO "Log check error: Log file $logfile does not exist!\n"
+ exit $STATE_UNKNOWN
+elif [ ! -r $logfile ] ; then
+ $ECHO "Log check error: Log file $logfile is not readable!\n"
+ exit $STATE_UNKNOWN
+fi
+
+# If the old log file doesn't exist, this must be the first time
+# we're running this test, so copy the original log file over to
+# the old diff file and exit
+
+if [ ! -e $oldlog ]; then
+ $CAT $logfile > $oldlog
+ $ECHO "Log check data initialized...\n"
+ exit $STATE_OK
+fi
+
+# The old log file exists, so compare it to the original log now
+
+# The temporary file that the script should use while
+# processing the log file.
+if [ -x /bin/mktemp ]; then
+ tempdiff=`/bin/mktemp /tmp/check_log.XXXXXXXXXX`
+else
+ tempdiff=`/bin/date '+%H%M%S'`
+ tempdiff="/tmp/check_log.${tempdiff}"
+ /bin/touch $tempdiff
+ chmod 600 $tempdiff
+fi
+
+$DIFF $logfile $oldlog > $tempdiff
+
+# Count the number of matching log entries we have
+count=`$GREP -c "$query" $tempdiff`
+
+# Get the last matching entry in the diff file
+lastentry=`$GREP "$query" $tempdiff | $TAIL --lines=1`
+
+$RM -f $tempdiff
+$CAT $logfile > $oldlog
+
+if [ "$count" = "0" ]; then # no matches, exit with no error
+ $ECHO "Log check ok - 0 pattern matches found\n"
+ exitstatus=$STATE_OK
+else # Print total matche count and the last entry we found
+ $ECHO "($count) $lastentry"
+ exitstatus=$STATE_CRITICAL
+fi
+
+exit $exitstatus
diff --git a/checkers/check_mailq b/checkers/check_mailq
new file mode 100755
index 0000000000..a455665d6a
--- /dev/null
+++ b/checkers/check_mailq
@@ -0,0 +1,610 @@
+#! /usr/bin/perl -w
+
+# check_mailq - check to see how many messages are in the smtp queue awating
+# transmittal.
+#
+# Initial version support sendmail's mailq command
+# Support for mutiple sendmail queues (Carlos Canau)
+# Support for qmail (Benjamin Schmid)
+
+# License Information:
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+# $Id: check_mailq.pl,v 1.6 2005/04/14 04:13:13 seanius Exp $
+#
+############################################################################
+
+use POSIX;
+use strict;
+use Getopt::Long;
+use vars qw($opt_V $opt_h $opt_v $verbose $PROGNAME $opt_w $opt_c $opt_t
+ $opt_M $mailq $status $state $msg $msg_q $msg_p $opt_W $opt_C $mailq @lines
+ %srcdomains %dstdomains);
+use lib "/usr/lib/nagios/plugins";
+use utils qw(%ERRORS &print_revision &support &usage );
+
+
+sub print_help ();
+sub print_usage ();
+sub process_arguments ();
+
+$ENV{'PATH'}='';
+$ENV{'BASH_ENV'}='';
+$ENV{'ENV'}='';
+$PROGNAME = "check_mailq";
+$mailq = 'sendmail'; # default
+$msg_q = 0 ;
+$msg_p = 0 ;
+$state = $ERRORS{'UNKNOWN'};
+
+Getopt::Long::Configure('bundling');
+$status = process_arguments();
+if ($status){
+ print "ERROR: processing arguments\n";
+ exit $ERRORS{"UNKNOWN"};
+}
+
+$SIG{'ALRM'} = sub {
+ print ("ERROR: timed out waiting for $utils::PATH_TO_MAILQ \n");
+ exit $ERRORS{"WARNING"};
+};
+alarm($opt_t);
+
+# switch based on MTA
+
+if ($mailq eq "sendmail") {
+
+ ## open mailq
+ if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) {
+ if (! open (MAILQ, "$utils::PATH_TO_MAILQ | " ) ) {
+ print "ERROR: could not open $utils::PATH_TO_MAILQ \n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+ }elsif( defined $utils::PATH_TO_MAILQ){
+ unless (-x $utils::PATH_TO_MAILQ) {
+ print "ERROR: $utils::PATH_TO_MAILQ is not executable by (uid $>:gid($)))\n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+ } else {
+ print "ERROR: \$utils::PATH_TO_MAILQ is not defined\n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+# single queue empty
+##/var/spool/mqueue is empty
+# single queue: 1
+## /var/spool/mqueue (1 request)
+##----Q-ID---- --Size-- -----Q-Time----- ------------Sender/Recipient------------
+##h32E30p01763 2782 Wed Apr 2 15:03
+## 8BITMIME
+##
+
+# multi queue empty
+##/var/spool/mqueue/q0/df is empty
+##/var/spool/mqueue/q1/df is empty
+##/var/spool/mqueue/q2/df is empty
+##/var/spool/mqueue/q3/df is empty
+##/var/spool/mqueue/q4/df is empty
+##/var/spool/mqueue/q5/df is empty
+##/var/spool/mqueue/q6/df is empty
+##/var/spool/mqueue/q7/df is empty
+##/var/spool/mqueue/q8/df is empty
+##/var/spool/mqueue/q9/df is empty
+##/var/spool/mqueue/qA/df is empty
+##/var/spool/mqueue/qB/df is empty
+##/var/spool/mqueue/qC/df is empty
+##/var/spool/mqueue/qD/df is empty
+##/var/spool/mqueue/qE/df is empty
+##/var/spool/mqueue/qF/df is empty
+## Total Requests: 0
+# multi queue: 1
+##/var/spool/mqueue/q0/df is empty
+##/var/spool/mqueue/q1/df is empty
+##/var/spool/mqueue/q2/df is empty
+## /var/spool/mqueue/q3/df (1 request)
+##----Q-ID---- --Size-- -----Q-Time----- ------------Sender/Recipient------------
+##h32De2f23534* 48 Wed Apr 2 14:40 nocol
+## nouserATEUnet.pt
+## canau
+##/var/spool/mqueue/q4/df is empty
+##/var/spool/mqueue/q5/df is empty
+##/var/spool/mqueue/q6/df is empty
+##/var/spool/mqueue/q7/df is empty
+##/var/spool/mqueue/q8/df is empty
+##/var/spool/mqueue/q9/df is empty
+##/var/spool/mqueue/qA/df is empty
+##/var/spool/mqueue/qB/df is empty
+##/var/spool/mqueue/qC/df is empty
+##/var/spool/mqueue/qD/df is empty
+##/var/spool/mqueue/qE/df is empty
+##/var/spool/mqueue/qF/df is empty
+## Total Requests: 1
+
+
+ while () {
+
+ # match email addr on queue listing
+ if ( (/<.*@.*\.(\w+\.\w+)>/) || (/<.*@(\w+\.\w+)>/) ) {
+ my $domain = $1;
+ if (/^\w+/) {
+ print "$utils::PATH_TO_MAILQ = srcdomain = $domain \n" if $verbose ;
+ $srcdomains{$domain} ++;
+ }
+ next;
+ }
+
+ #
+ # ...
+ # sendmail considers a message with more than one destiny, say N, to the same MX
+ # to have N messages in queue.
+ # we will only consider one in this code
+ if (( /\s\(reply:\sread\serror\sfrom\s.*\.(\w+\.\w+)\.$/ ) || ( /\s\(reply:\sread\serror\sfrom\s(\w+\.\w+)\.$/ ) ||
+ ( /\s\(timeout\swriting\smessage\sto\s.*\.(\w+\.\w+)\.:/ ) || ( /\s\(timeout\swriting\smessage\sto\s(\w+\.\w+)\.:/ ) ||
+ ( /\s\(host\smap:\slookup\s\(.*\.(\w+\.\w+)\):/ ) || ( /\s\(host\smap:\slookup\s\((\w+\.\w+)\):/ ) ||
+ ( /\s\(Deferred:\s.*\s.*\.(\w+\.\w+)\.\)/ ) || ( /\s\(Deferred:\s.*\s(\w+\.\w+)\.\)/ ) ) {
+
+ print "$utils::PATH_TO_MAILQ = dstdomain = $1 \n" if $verbose ;
+ $dstdomains{$1} ++;
+ }
+
+ if (/\s+\(I\/O\serror\)/) {
+ print "$utils::PATH_TO_MAILQ = dstdomain = UNKNOWN \n" if $verbose ;
+ $dstdomains{'UNKNOWN'} ++;
+ }
+
+ # Finally look at the overall queue length
+ #
+ if (/mqueue/) {
+ print "$utils::PATH_TO_MAILQ = $_ "if $verbose ;
+ if (/ \((\d+) request/) {
+ #
+ # single queue: first line
+ # multi queue: one for each queue. overwrite on multi queue below
+ $msg_q = $1 ;
+ }
+ } elsif (/^\s+Total\sRequests:\s(\d+)$/i) {
+ print "$utils::PATH_TO_MAILQ = $_ \n" if $verbose ;
+ #
+ # multi queue: last line
+ $msg_q = $1 ;
+ }
+
+ }
+
+
+ ## close mailq
+
+ close (MAILQ);
+ # declare an error if we also get a non-zero return code from mailq
+ # unless already set to critical
+ if ( $? ) {
+ $state = $state == $ERRORS{"CRITICAL"} ? $ERRORS{"CRITICAL"} : $ERRORS{"WARNING"} ;
+ print "STDERR $?: $!\n" if $verbose;
+ $msg = "$state: (stderr)\n";
+ }
+
+ ## shut off the alarm
+ alarm(0);
+
+
+
+ ## now check the queue length(s)
+
+ if ($msg_q == 0) {
+ $msg = "OK: mailq is empty";
+ $state = $ERRORS{'OK'};
+ } else {
+ print "msg_q = $msg_q warn=$opt_w crit=$opt_c\n" if $verbose;
+
+ # overall queue length
+ if ($msg_q < $opt_w) {
+ $msg = "OK: mailq ($msg_q) is below threshold ($opt_w/$opt_c)";
+ $state = $ERRORS{'OK'};
+ }elsif ($msg_q >= $opt_w && $msg_q < $opt_c) {
+ $msg = "WARNING: mailq is $msg_q (threshold w = $opt_w)";
+ $state = $ERRORS{'WARNING'};
+ }else {
+ $msg = "CRITICAL: mailq is $msg_q (threshold c = $opt_c)";
+ $state = $ERRORS{'CRITICAL'};
+ }
+
+ # check for domain specific queue lengths if requested
+ if (defined $opt_W) {
+
+ # Apply threshold to queue lengths FROM domain
+ my @srckeys = sort { $srcdomains{$b} <=> $srcdomains{$a} } keys %srcdomains;
+ my $srcmaxkey = $srckeys[0];
+ print "src max is $srcmaxkey with $srcdomains{$srcmaxkey} messages\n" if $verbose;
+
+ if ($srcdomains{$srcmaxkey} >= $opt_W && $srcdomains{$srcmaxkey} < $opt_C) {
+ if ($state == $ERRORS{'OK'}) {
+ $msg = "WARNING: $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W)";
+ $state = $ERRORS{'WARNING'};
+ } elsif (($state == $ERRORS{'WARNING'}) || ($state == $ERRORS{'CRITICAL'})){
+ $msg .= " -and- $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W)";
+ } else {
+ $msg = "WARNING: $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W)";
+ $state = $ERRORS{'WARNING'};
+ }
+ } elsif ($srcdomains{$srcmaxkey} >= $opt_C) {
+ if ($state == $ERRORS{'OK'}) {
+ $msg = "CRITICAL: $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold C = $opt_C)";
+ $state = $ERRORS{'CRITICAL'};
+ } elsif ($state == $ERRORS{'WARNING'}) {
+ $msg = "CRITICAL: $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold C = $opt_C) -and- " . $msg;
+ $msg =~ s/WARNING: //;
+ } elsif ($state == $ERRORS{'CRITICAL'}) {
+ $msg .= " -and- $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W)";
+ } else {
+ $msg = "CRITICAL: $srcdomains{$srcmaxkey} messages in queue FROM $srcmaxkey (threshold W = $opt_W)";
+ $state = $ERRORS{'CRITICAL'};
+ }
+ } else {
+ if ($srcdomains{$srcmaxkey} > 0) {
+ $msg .= " $srcdomains{$srcmaxkey} msgs. FROM $srcmaxkey is below threshold ($opt_W/$opt_C)";
+ }
+ }
+
+ # Apply threshold to queue lengths TO domain
+ my @dstkeys = sort { $dstdomains{$b} <=> $dstdomains{$a} } keys %dstdomains;
+ my $dstmaxkey = $dstkeys[0];
+ print "dst max is $dstmaxkey with $dstdomains{$dstmaxkey} messages\n" if $verbose;
+
+ if ($dstdomains{$dstmaxkey} >= $opt_W && $dstdomains{$dstmaxkey} < $opt_C) {
+ if ($state == $ERRORS{'OK'}) {
+ $msg = "WARNING: $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W)";
+ $state = $ERRORS{'WARNING'};
+ } elsif (($state == $ERRORS{'WARNING'}) || ($state == $ERRORS{'CRITICAL'})){
+ $msg .= " -and- $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W)";
+ } else {
+ $msg = "WARNING: $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W)";
+ $state = $ERRORS{'WARNING'};
+ }
+ } elsif ($dstdomains{$dstmaxkey} >= $opt_C) {
+ if ($state == $ERRORS{'OK'}) {
+ $msg = "CRITICAL: $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold C = $opt_C)";
+ $state = $ERRORS{'CRITICAL'};
+ } elsif ($state == $ERRORS{'WARNING'}) {
+ $msg = "CRITICAL: $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold C = $opt_C) -and- " . $msg;
+ $msg =~ s/WARNING: //;
+ } elsif ($state == $ERRORS{'CRITICAL'}) {
+ $msg .= " -and- $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W)";
+ } else {
+ $msg = "CRITICAL: $dstdomains{$dstmaxkey} messages in queue TO $dstmaxkey (threshold W = $opt_W)";
+ $state = $ERRORS{'CRITICAL'};
+ }
+ } else {
+ if ($dstdomains{$dstmaxkey} > 0) {
+ $msg .= " $dstdomains{$dstmaxkey} msgs. TO $dstmaxkey is below threshold ($opt_W/$opt_C)";
+ }
+ }
+
+ } # End of queue length thresholds
+
+ }
+
+} # end of ($mailq eq "sendmail")
+elsif ( $mailq eq "postfix" ) {
+
+ ## open mailq
+ if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) {
+ if (! open (MAILQ, "$utils::PATH_TO_MAILQ | " ) ) {
+ print "ERROR: could not open $utils::PATH_TO_MAILQ \n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+ }elsif( defined $utils::PATH_TO_MAILQ){
+ unless (-x $utils::PATH_TO_MAILQ) {
+ print "ERROR: $utils::PATH_TO_MAILQ is not executable by (uid $>:gid($)))\n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+ } else {
+ print "ERROR: \$utils::PATH_TO_MAILQ is not defined\n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+
+
+ @lines = reverse ;
+
+ # close qmail-qstat
+ close MAILQ;
+ # declare an error if we also get a non-zero return code from mailq
+ # unless already set to critical
+ if ( $? ) {
+ $state = $state == $ERRORS{"CRITICAL"} ? $ERRORS{"CRITICAL"} : $ERRORS{"WARNING"} ;
+ print "STDERR $?: $!\n" if $verbose;
+ $msg = "$state: (stderr)\n";
+ }
+
+ ## shut off the alarm
+ alarm(0);
+
+ # check queue length
+ if ($lines[0]=~/Kbytes in (\d+)/) {
+ $msg_q = $1 ;
+ }elsif ($lines[0]=~/Mail queue is empty/) {
+ $msg_q = 0;
+ }else{
+ print "Couldn't match $utils::PATH_TO_QMAIL_QSTAT output\n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+
+ # check messages not processed
+ #if ($lines[1]=~/^messages in queue but not yet preprocessed: (\d+)/) {
+ # my $msg_p = $1;
+ #}else{
+ # print "Couldn't match $utils::PATH_TO_QMAIL_QSTAT output\n";
+ # exit $ERRORS{'UNKNOWN'};
+ #}
+
+ # check queue length(s)
+ if ($msg_q == 0){
+ $msg = "OK: mailq reports queue is empty";
+ $state = $ERRORS{'OK'};
+ } else {
+ print "msg_q = $msg_q warn=$opt_w crit=$opt_c\n" if $verbose;
+
+ # overall queue length
+ if ($msg_q < $opt_w) {
+ $msg = "OK: mailq ($msg_q) is below threshold ($opt_w/$opt_c)";
+ $state = $ERRORS{'OK'};
+ }elsif ($msg_q >= $opt_w && $msg_q < $opt_c) {
+ $msg = "WARNING: mailq is $msg_q (threshold w = $opt_w)";
+ $state = $ERRORS{'WARNING'};
+ }else {
+ $msg = "CRITICAL: mailq is $msg_q (threshold c = $opt_c)";
+ $state = $ERRORS{'CRITICAL'};
+ }
+
+ # check messages not yet preprocessed (only compare is $opt_W and $opt_C
+ # are defined)
+
+ #if (defined $opt_W) {
+ # $msg .= "[Preprocessed = $msg_p]";
+ # if ($msg_p >= $opt_W && $msg_p < $opt_C ) {
+ # $state = $state == $ERRORS{"CRITICAL"} ? $ERRORS{"CRITICAL"} : $ERRORS{"WARNING"} ;
+ # }elsif ($msg_p >= $opt_C ) {
+ # $state = $ERRORS{"CRITICAL"} ;
+ # }
+ #}
+ }
+} # end of ($mailq eq "postfixl")
+elsif ( $mailq eq "qmail" ) {
+
+ # open qmail-qstat
+ if ( defined $utils::PATH_TO_QMAIL_QSTAT && -x $utils::PATH_TO_QMAIL_QSTAT ) {
+ if (! open (MAILQ, "$utils::PATH_TO_QMAIL_QSTAT | " ) ) {
+ print "ERROR: could not open $utils::PATH_TO_QMAIL_QSTAT \n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+ }elsif( defined $utils::PATH_TO_QMAIL_QSTAT){
+ unless (-x $utils::PATH_TO_QMAIL_QSTAT) {
+ print "ERROR: $utils::PATH_TO_QMAIL_QSTAT is not executable by (uid $>:gid($)))\n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+ } else {
+ print "ERROR: \$utils::PATH_TO_QMAIL_QSTAT is not defined\n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+
+ @lines = ;
+
+ # close qmail-qstat
+ close MAILQ;
+ # declare an error if we also get a non-zero return code from mailq
+ # unless already set to critical
+ if ( $? ) {
+ $state = $state == $ERRORS{"CRITICAL"} ? $ERRORS{"CRITICAL"} : $ERRORS{"WARNING"} ;
+ print "STDERR $?: $!\n" if $verbose;
+ $msg = "$state: (stderr)\n";
+ }
+
+ ## shut off the alarm
+ alarm(0);
+
+ # check queue length
+ if ($lines[0]=~/^messages in queue: (\d+)/) {
+ $msg_q = $1 ;
+ }else{
+ print "Couldn't match $utils::PATH_TO_QMAIL_QSTAT output\n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+
+ # check messages not processed
+ if ($lines[1]=~/^messages in queue but not yet preprocessed: (\d+)/) {
+ my $msg_p = $1;
+ }else{
+ print "Couldn't match $utils::PATH_TO_QMAIL_QSTAT output\n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+
+
+ # check queue length(s)
+ if ($msg_q == 0){
+ $msg = "OK: qmail-qstat reports queue is empty";
+ $state = $ERRORS{'OK'};
+ } else {
+ print "msg_q = $msg_q warn=$opt_w crit=$opt_c\n" if $verbose;
+
+ # overall queue length
+ if ($msg_q < $opt_w) {
+ $msg = "OK: mailq ($msg_q) is below threshold ($opt_w/$opt_c)";
+ $state = $ERRORS{'OK'};
+ }elsif ($msg_q >= $opt_w && $msg_q < $opt_c) {
+ $msg = "WARNING: mailq is $msg_q (threshold w = $opt_w)";
+ $state = $ERRORS{'WARNING'};
+ }else {
+ $msg = "CRITICAL: mailq is $msg_q (threshold c = $opt_c)";
+ $state = $ERRORS{'CRITICAL'};
+ }
+
+ # check messages not yet preprocessed (only compare is $opt_W and $opt_C
+ # are defined)
+
+ if (defined $opt_W) {
+ $msg .= "[Preprocessed = $msg_p]";
+ if ($msg_p >= $opt_W && $msg_p < $opt_C ) {
+ $state = $state == $ERRORS{"CRITICAL"} ? $ERRORS{"CRITICAL"} : $ERRORS{"WARNING"} ;
+ }elsif ($msg_p >= $opt_C ) {
+ $state = $ERRORS{"CRITICAL"} ;
+ }
+ }
+ }
+
+
+
+} # end of ($mailq eq "qmail")
+elsif ( $mailq eq "exim" ) {
+ ## open mailq
+ if ( defined $utils::PATH_TO_MAILQ && -x $utils::PATH_TO_MAILQ ) {
+ if (! open (MAILQ, "$utils::PATH_TO_MAILQ | " ) ) {
+ print "ERROR: could not open $utils::PATH_TO_MAILQ \n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+ }elsif( defined $utils::PATH_TO_MAILQ){
+ unless (-x $utils::PATH_TO_MAILQ) {
+ print "ERROR: $utils::PATH_TO_MAILQ is not executable by (uid $>:gid($)))\n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+ } else {
+ print "ERROR: \$utils::PATH_TO_MAILQ is not defined\n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+
+ while () {
+ #22m 1.7K 19aEEr-0007hx-Dy <> *** frozen ***
+ #root@exlixams.glups.fr
+
+ if (/\s[\w\d]{6}-[\w\d]{6}-[\w\d]{2}\s/) { # message id 19aEEr-0007hx-Dy
+ $msg_q++ ;
+ }
+ }
+ close(MAILQ) ;
+ if ($msg_q < $opt_w) {
+ $msg = "OK: mailq ($msg_q) is below threshold ($opt_w/$opt_c)";
+ $state = $ERRORS{'OK'};
+ }elsif ($msg_q >= $opt_w && $msg_q < $opt_c) {
+ $msg = "WARNING: mailq is $msg_q (threshold w = $opt_w)";
+ $state = $ERRORS{'WARNING'};
+ }else {
+ $msg = "CRITICAL: mailq is $msg_q (threshold c = $opt_c)";
+ $state = $ERRORS{'CRITICAL'};
+ }
+} # end of ($mailq eq "exim")
+
+# Perfdata support
+print "$msg|unsent=$msg_q;$opt_w;$opt_c;0\n";
+exit $state;
+
+
+#####################################
+#### subs
+
+
+sub process_arguments(){
+ GetOptions
+ ("V" => \$opt_V, "version" => \$opt_V,
+ "v" => \$opt_v, "verbose" => \$opt_v,
+ "h" => \$opt_h, "help" => \$opt_h,
+ "M:s" => \$opt_M, "mailserver:s" => \$opt_M, # mailserver (default sendmail)
+ "w=i" => \$opt_w, "warning=i" => \$opt_w, # warning if above this number
+ "c=i" => \$opt_c, "critical=i" => \$opt_c, # critical if above this number
+ "t=i" => \$opt_t, "timeout=i" => \$opt_t
+ );
+
+ if ($opt_V) {
+ print_revision($PROGNAME,'$Revision: 1.6 $ ');
+ exit $ERRORS{'OK'};
+ }
+
+ if ($opt_h) {
+ print_help();
+ exit $ERRORS{'OK'};
+ }
+
+ if (defined $opt_v ){
+ $verbose = $opt_v;
+ }
+
+ unless (defined $opt_t) {
+ $opt_t = $utils::TIMEOUT ; # default timeout
+ }
+
+ unless ( defined $opt_w && defined $opt_c ) {
+ print_usage();
+ exit $ERRORS{'UNKNOWN'};
+ }
+
+ if ( $opt_w >= $opt_c) {
+ print "Warning (-w) cannot be greater than Critical (-c)!\n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+
+ if (defined $opt_W && ! defined !$opt_C) {
+ print "Need -C if using -W\n";
+ exit $ERRORS{'UNKNOWN'};
+ }elsif(defined $opt_W && defined $opt_C) {
+ if ($opt_W >= $opt_C) {
+ print "Warning (-W) cannot be greater than Critical (-C)!\n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+ }
+
+ if (defined $opt_M) {
+ if ($opt_M =~ /^(sendmail|qmail|postfix|exim)$/) {
+ $mailq = $opt_M ;
+ }elsif( $opt_M eq ''){
+ $mailq = 'sendmail';
+ }else{
+ print "-M: $opt_M is not supported\n";
+ exit $ERRORS{'UNKNOWN'};
+ }
+ }else{
+ $mailq = 'sendmail' ;
+ }
+
+ return $ERRORS{'OK'};
+}
+
+sub print_usage () {
+ print "Usage: $PROGNAME -w -c [-W ] [-C ] [-M ] [-t ] [-v verbose]\n";
+}
+
+sub print_help () {
+ print_revision($PROGNAME,'$Revision: 1.6 $');
+ print "Copyright (c) 2002 Subhendu Ghosh/Carlos Canau/Benjamin Schmid\n";
+ print "\n";
+ print_usage();
+ print "\n";
+ print " Checks the number of messages in the mail queue (supports multiple sendmail queues, qmail)\n";
+ print " Feedback/patches to support non-sendmail mailqueue welcome\n\n";
+ print "-w (--warning) = Min. number of messages in queue to generate warning\n";
+ print "-c (--critical) = Min. number of messages in queu to generate critical alert ( w < c )\n";
+ print "-W (--Warning) = Min. number of messages for same domain in queue to generate warning\n";
+ print "-C (--Critical) = Min. number of messages for same domain in queue to generate critical alert ( W < C )\n";
+ print "-t (--timeout) = Plugin timeout in seconds (default = $utils::TIMEOUT)\n";
+ print "-M (--mailserver) = [ sendmail | qmail | postfix | exim ] (default = sendmail)\n";
+ print "-h (--help)\n";
+ print "-V (--version)\n";
+ print "-v (--verbose) = debugging output\n";
+ print "\n\n";
+ print "Note: -w and -c are required arguments. -W and -C are optional.\n";
+ print " -W and -C are applied to domains listed on the queues - both FROM and TO. (sendmail)\n";
+ print " -W and -C are applied message not yet preproccessed. (qmail)\n";
+ print " This plugin uses the system mailq command (sendmail) or qmail-stat (qmail)\n";
+ print " to look at the queues. Mailq can usually only be accessed by root or \n";
+ print " a TrustedUser. You will have to set appropriate permissions for the plugin to work.\n";
+ print "";
+ print "\n\n";
+ support();
+}
diff --git a/checkers/check_mrtg b/checkers/check_mrtg
new file mode 100755
index 0000000000..b5e0198b4d
Binary files /dev/null and b/checkers/check_mrtg differ
diff --git a/checkers/check_mrtgtraf b/checkers/check_mrtgtraf
new file mode 100755
index 0000000000..05670a29b9
Binary files /dev/null and b/checkers/check_mrtgtraf differ
diff --git a/checkers/check_mysql b/checkers/check_mysql
new file mode 100755
index 0000000000..7a15d43772
Binary files /dev/null and b/checkers/check_mysql differ
diff --git a/checkers/check_nagios b/checkers/check_nagios
new file mode 100755
index 0000000000..30b2d0cc28
Binary files /dev/null and b/checkers/check_nagios differ
diff --git a/checkers/check_nntp b/checkers/check_nntp
new file mode 120000
index 0000000000..e838da97eb
--- /dev/null
+++ b/checkers/check_nntp
@@ -0,0 +1 @@
+check_tcp
\ No newline at end of file
diff --git a/checkers/check_nntps b/checkers/check_nntps
new file mode 120000
index 0000000000..e838da97eb
--- /dev/null
+++ b/checkers/check_nntps
@@ -0,0 +1 @@
+check_tcp
\ No newline at end of file
diff --git a/checkers/check_nt b/checkers/check_nt
new file mode 100755
index 0000000000..907e3e19f1
Binary files /dev/null and b/checkers/check_nt differ
diff --git a/checkers/check_ntp b/checkers/check_ntp
new file mode 100755
index 0000000000..f8a503ceaf
--- /dev/null
+++ b/checkers/check_ntp
@@ -0,0 +1,465 @@
+#! /usr/bin/perl -w
+
+# (c)1999 Ian Cass, Knowledge Matters Ltd.
+# Read the GNU copyright stuff for all the legalese
+#
+# Check NTP time servers plugin. This plugin requires the ntpdate utility to
+# be installed on the system, however since it's part of the ntp suite, you
+# should already have it installed.
+#
+# $Id: check_ntp.pl,v 1.29 2005/05/25 14:05:41 sghosh Exp $
+#
+# Nothing clever done in this program - its a very simple bare basics hack to
+# get the job done.
+#
+# Things to do...
+# check @words[9] for time differences greater than +/- x secs & return a
+# warning.
+#
+# (c) 1999 Mark Jewiss, Knowledge Matters Limited
+# 22-9-1999, 12:45
+#
+# Modified script to accept 2 parameters or set defaults.
+# Now issues warning or critical alert is time difference is greater than the
+# time passed.
+#
+# These changes have not been tested completely due to the unavailability of a
+# server with the incorrect time.
+#
+# (c) 1999 Bo Kersey, VirCIO - Managed Server Solutions
+# 22-10-99, 12:17
+#
+# Modified the script to give useage if no parameters are input.
+#
+# Modified the script to check for negative as well as positive
+# time differences.
+#
+# Modified the script to work with ntpdate 3-5.93e Wed Apr 14 20:23:03 EDT 1999
+#
+# Modified the script to work with ntpdate's that return adjust or offset...
+#
+#
+# Script modified 2000 June 01 by William Pietri
+#
+# Modified script to handle weird cases:
+# o NTP server doesn't respond (e.g., has died)
+# o Server has correct time but isn't suitable synchronization
+# source. This happens while starting up and if contact
+# with master has been lost.
+#
+# Modifed to run under Embedded Perl (sghosh@users.sf.net)
+# - combined logic some blocks together..
+#
+# Added ntpdate check for stratum 16 desynch peer (James Fidell) Feb 03, 2003
+#
+# ntpdate - offset is in seconds
+# changed ntpdc to ntpq - jitter/dispersion is in milliseconds
+#
+# Patch for for regex for stratum1 refid.
+
+require 5.004;
+use POSIX;
+use strict;
+use Getopt::Long;
+use vars qw($opt_V $opt_h $opt_H $opt_t $opt_w $opt_c $opt_O $opt_j $opt_k $verbose $PROGNAME $def_jitter $ipv4 $ipv6);
+use lib "/usr/lib/nagios/plugins";
+use utils qw($TIMEOUT %ERRORS &print_revision &support);
+
+$PROGNAME="check_ntp";
+
+sub print_help ();
+sub print_usage ();
+
+$ENV{'PATH'}='';
+$ENV{'BASH_ENV'}='';
+$ENV{'ENV'}='';
+
+# defaults in sec
+my $DEFAULT_OFFSET_WARN = 60; # 1 minute
+my $DEFAULT_OFFSET_CRIT = 120; # 2 minutes
+# default in millisec
+my $DEFAULT_JITTER_WARN = 5000; # 5 sec
+my $DEFAULT_JITTER_CRIT = 10000; # 10 sec
+
+Getopt::Long::Configure('bundling');
+GetOptions
+ ("V" => \$opt_V, "version" => \$opt_V,
+ "h" => \$opt_h, "help" => \$opt_h,
+ "v" => \$verbose, "verbose" => \$verbose,
+ "4" => \$ipv4, "use-ipv4" => \$ipv4,
+ "6" => \$ipv6, "use-ipv6" => \$ipv6,
+ "w=f" => \$opt_w, "warning=f" => \$opt_w, # offset|adjust warning if above this number
+ "c=f" => \$opt_c, "critical=f" => \$opt_c, # offset|adjust critical if above this number
+ "O" => \$opt_O, "zero-offset" => \$opt_O, # zero-offset bad
+ "j=s" => \$opt_j, "jwarn=i" => \$opt_j, # jitter warning if above this number
+ "k=s" => \$opt_k, "jcrit=i" => \$opt_k, # jitter critical if above this number
+ "t=s" => \$opt_t, "timeout=i" => \$opt_t,
+ "H=s" => \$opt_H, "hostname=s" => \$opt_H);
+
+if ($opt_V) {
+ print_revision($PROGNAME,'$Revision: 1.29 $ ');
+ exit $ERRORS{'OK'};
+}
+
+if ($opt_h) {
+ print_help();
+ exit $ERRORS{'OK'};
+}
+
+# jitter test params specified
+if (defined $opt_j || defined $opt_k ) {
+ $def_jitter = 1;
+}
+
+$opt_H = shift unless ($opt_H);
+my $host = $1 if ($opt_H && $opt_H =~ m/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-zA-Z][-a-zA-Z0-9]+(\.[a-zA-Z][-a-zA-Z0-9]+)*)$/);
+unless ($host) {
+ print "No target host specified\n";
+ print_usage();
+ exit $ERRORS{'UNKNOWN'};
+}
+
+my ($timeout, $owarn, $ocrit, $jwarn, $jcrit);
+
+$timeout = $TIMEOUT;
+($opt_t) && ($opt_t =~ /^([0-9]+)$/) && ($timeout = $1);
+
+$owarn = $DEFAULT_OFFSET_WARN;
+($opt_w) && ($opt_w =~ /^([0-9.]+)$/) && ($owarn = $1);
+
+$ocrit = $DEFAULT_OFFSET_CRIT;
+($opt_c) && ($opt_c =~ /^([0-9.]+)$/) && ($ocrit = $1);
+
+$jwarn = $DEFAULT_JITTER_WARN;
+($opt_j) && ($opt_j =~ /^([0-9]+)$/) && ($jwarn = $1);
+
+$jcrit = $DEFAULT_JITTER_CRIT;
+($opt_k) && ($opt_k =~ /^([0-9]+)$/) && ($jcrit = $1);
+
+if ($ocrit < $owarn ) {
+ print "Critical offset should be larger than warning offset\n";
+ print_usage();
+ exit $ERRORS{"UNKNOWN"};
+}
+
+if ($def_jitter) {
+ if ($opt_k < $opt_j) {
+ print "Critical jitter should be larger than warning jitter\n";
+ print_usage();
+ exit $ERRORS{'UNKNOWN'};
+ }
+}
+
+
+my $stratum = -1;
+my $ignoreret = 0;
+my $answer = undef;
+my $offset = undef;
+my $jitter = undef;
+my $syspeer = undef;
+my $candidate = 0;
+my @candidates;
+my $msg; # first line of output to print if format is invalid
+
+my $state = $ERRORS{'UNKNOWN'};
+my $ntpdate_error = $ERRORS{'UNKNOWN'};
+my $jitter_error = $ERRORS{'UNKNOWN'};
+
+# some systems don't have a proper ntpq (migrated from ntpdc)
+my $have_ntpq = undef;
+if ($utils::PATH_TO_NTPQ && -x $utils::PATH_TO_NTPQ ) {
+ $have_ntpq = 1;
+}else{
+ $have_ntpq = 0;
+}
+
+# Just in case of problems, let's not hang Nagios
+$SIG{'ALRM'} = sub {
+ print ("ERROR: No response from ntp server (alarm)\n");
+ exit $ERRORS{"UNKNOWN"};
+};
+alarm($timeout);
+
+# Determine protocol to be used for ntpdate and ntpq
+my $ntpdate = $utils::PATH_TO_NTPDATE;
+my $ntpq = $utils::PATH_TO_NTPQ;
+if ($ipv4) {
+ $ntpdate .= " -4";
+ $ntpq .= " -4";
+}
+elsif ($ipv6) {
+ $ntpdate .= " -6";
+ $ntpq .= " -6";
+}
+# else don't use any flags
+
+###
+###
+### First, check ntpdate
+###
+###
+
+if (!open (NTPDATE, $ntpdate . " -q $host 2>&1 |")) {
+ print "Could not open ntpdate\n";
+ exit $ERRORS{"UNKNOWN"};
+}
+
+while () {
+ #print if ($verbose); # noop
+ $msg = $_ unless ($msg);
+
+ if (/stratum\s(\d+)/) {
+ $stratum = $1;
+ }
+
+ if (/(offset|adjust)\s+([-.\d]+)/i) {
+ $offset = $2;
+
+ # An offset of 0.000000 with an error is probably bogus. Actually,
+ # it's probably always bogus, but let's be paranoid here.
+ # Has been reported that 0.0000 happens in a production environment
+ # on Solaris 8 so this check should be taken out - SF tracker 1150777
+ if (defined $opt_O ) {
+ if ($offset == 0) { undef $offset;}
+ }
+
+ $ntpdate_error = defined ($offset) ? $ERRORS{"OK"} : $ERRORS{"CRITICAL"};
+ print "ntperr = $ntpdate_error \n" if $verbose;
+
+ }
+
+ if (/no server suitable for synchronization found/) {
+ if ($stratum == 16) {
+ $ntpdate_error = $ERRORS{"WARNING"};
+ $msg = "Desynchronized peer server found";
+ $ignoreret=1;
+ }
+ else {
+ $ntpdate_error = $ERRORS{"CRITICAL"};
+ $msg = "No suitable peer server found - ";
+ }
+ }
+
+}
+
+close (NTPDATE);
+# declare an error if we also get a non-zero return code from ntpdate
+# unless already set to critical
+if ( $? && !$ignoreret ) {
+ print "stderr = $? : $! \n" if $verbose;
+ $ntpdate_error = $ntpdate_error == $ERRORS{"CRITICAL"} ? $ERRORS{"CRITICAL"} : $ERRORS{"UNKNOWN"} ;
+ print "ntperr = $ntpdate_error : $!\n" if $verbose;
+}
+
+###
+###
+### Then scan xntpq/ntpq if it exists
+### and look in the 11th column for jitter
+###
+# Field 1: Tally Code ( Space, 'x','.','-','+','#','*','o')
+# Only match for '*' which implies sys.peer
+# or 'o' which implies pps.peer
+# If both exist, the last one is picked.
+# Field 2: address of the remote peer
+# Field 3: Refid of the clock (0.0.0.0 if unknown, WWWV/PPS/GPS/ACTS/USNO/PCS/... if Stratum1)
+# Field 4: stratum (0-15)
+# Field 5: Type of the peer: local (l), unicast (u), multicast (m)
+# broadcast (b); not sure about multicast/broadcast
+# Field 6: last packet receive (in seconds)
+# Field 7: polling interval
+# Field 8: reachability resgister (octal)
+# Field 9: delay
+# Field 10: offset
+# Field 11: dispersion/jitter
+#
+# According to bug 773588 Some solaris xntpd implementations seemto match on
+# "#" even though the docs say it exceeds maximum distance. Providing patch
+# here which will generate a warining.
+
+if ($have_ntpq) {
+
+ if ( open(NTPQ, $ntpq . " -np $host 2>&1 |") ) {
+ while () {
+ print $_ if ($verbose);
+ if ( /timed out/ ){
+ $have_ntpq = 0 ;
+ last ;
+ }
+ # number of candidates on for sys.peer
+ if (/^(\*|\+|\#|o])/) {
+ ++$candidate;
+ push (@candidates, $_);
+ print "Candidate count= $candidate\n" if ($verbose);
+ }
+
+ # match sys.peer or pps.peer
+ if (/^(\*|o)(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/) {
+ $syspeer = $2;
+ $stratum = $4;
+ $jitter = $11;
+ print "match $_ \n" if $verbose;
+ if ($jitter > $jcrit) {
+ print "Jitter_crit = $11 :$jcrit\n" if ($verbose);
+ $jitter_error = $ERRORS{'CRITICAL'};
+ } elsif ($jitter > $jwarn ) {
+ print "Jitter_warn = $11 :$jwarn\n" if ($verbose);
+ $jitter_error = $ERRORS{'WARNING'};
+ } else {
+ $jitter_error = $ERRORS{'OK'};
+ }
+ } else {
+ print "No match!\n" if $verbose;
+ $jitter = '(not parsed)';
+ }
+
+ }
+ close NTPQ;
+
+ # if we did not match sys.peer or pps.peer but matched # candidates only
+ # generate a warning
+ # based on bug id 773588
+ unless (defined $syspeer) {
+ if ($#candidates >=0) {
+ foreach my $c (@candidates) {
+ $c =~ /^(#)([-0-9.\s]+)\s+([-0-9A-Za-z_().]+)\s+([-0-9.]+)\s+([lumb-]+)\s+([-0-9m.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)/;
+ $syspeer = $2;
+ $stratum = $4;
+ $jitter = $11;
+ print "candidate match $c \n" if $verbose;
+ if ($jitter > $jcrit) {
+ print "Candidate match - Jitter_crit = $11 :$jcrit\n" if ($verbose);
+ $jitter_error = $ERRORS{'CRITICAL'};
+ }elsif ($jitter > $jwarn ) {
+ print "Candidate match - Jitter_warn = $11 :$jwarn \n" if ($verbose);
+ $jitter_error = $ERRORS{'WARNING'};
+ } else {
+ $jitter_error = $ERRORS{'WARNING'};
+ }
+ }
+
+ }
+ }
+ }
+}
+
+
+if ($ntpdate_error != $ERRORS{'OK'}) {
+ $state = $ntpdate_error;
+ if ($ntpdate_error == $ERRORS{'WARNING'} ) {
+ $answer = $msg;
+ }
+ else {
+ $answer = $msg . "Server for ntp probably down";
+ }
+
+ if (defined($offset) && abs($offset) > $ocrit) {
+ $state = $ERRORS{'CRITICAL'};
+ $answer = "Server Error and offset $offset sec > +/- $ocrit sec";
+ } elsif (defined($offset) && abs($offset) > $owarn) {
+ $answer = "Server error and offset $offset sec > +/- $owarn sec";
+ } elsif (defined($jitter) && abs($jitter) > $jcrit) {
+ $answer = "Server error and jitter $jitter msec > +/- $jcrit msec";
+ } elsif (defined($jitter) && abs($jitter) > $jwarn) {
+ $answer = "Server error and jitter $jitter msec > +/- $jwarn msec";
+ }
+
+} elsif ($have_ntpq && $jitter_error != $ERRORS{'OK'}) {
+ $state = $jitter_error;
+ $answer = "Jitter $jitter too high";
+ if (defined($offset) && abs($offset) > $ocrit) {
+ $state = $ERRORS{'CRITICAL'};
+ $answer = "Jitter error and offset $offset sec > +/- $ocrit sec";
+ } elsif (defined($offset) && abs($offset) > $owarn) {
+ $answer = "Jitter error and offset $offset sec > +/- $owarn sec";
+ } elsif (defined($jitter) && abs($jitter) > $jcrit) {
+ $answer = "Jitter error and jitter $jitter msec > +/- $jcrit msec";
+ } elsif (defined($jitter) && abs($jitter) > $jwarn) {
+ $answer = "Jitter error and jitter $jitter msec > +/- $jwarn msec";
+ }
+
+} elsif( !$have_ntpq ) { # no errors from ntpdate and no ntpq or ntpq timed out
+ if (abs($offset) > $ocrit) {
+ $state = $ERRORS{'CRITICAL'};
+ $answer = "Offset $offset sec > +/- $ocrit sec";
+ } elsif (abs($offset) > $owarn) {
+ $state = $ERRORS{'WARNING'};
+ $answer = "Offset $offset sec > +/- $owarn sec";
+ } elsif (( abs($offset) > $owarn) && $def_jitter ) {
+ $state = $ERRORS{'WARNING'};
+ $answer = "Offset $offset sec > +/- $owarn sec, ntpq timed out";
+ } elsif ( $def_jitter ) {
+ $state = $ERRORS{'WARNING'};
+ $answer = "Offset $offset secs, ntpq timed out";
+ } else{
+ $state = $ERRORS{'OK'};
+ $answer = "Offset $offset secs";
+ }
+
+
+
+} else { # no errors from ntpdate or ntpq
+ if (abs($offset) > $ocrit) {
+ $state = $ERRORS{'CRITICAL'};
+ $answer = "Offset $offset sec > +/- $ocrit sec, jitter $jitter msec";
+ } elsif (abs($jitter) > $jcrit ) {
+ $state = $ERRORS{'CRITICAL'};
+ $answer = "Jitter $jitter msec> +/- $jcrit msec, offset $offset sec";
+ } elsif (abs($offset) > $owarn) {
+ $state = $ERRORS{'WARNING'};
+ $answer = "Offset $offset sec > +/- $owarn sec, jitter $jitter msec";
+ } elsif (abs($jitter) > $jwarn ) {
+ $state = $ERRORS{'WARNING'};
+ $answer = "Jitter $jitter msec> +/- $jwarn msec, offset $offset sec";
+
+ } else {
+ $state = $ERRORS{'OK'};
+ $answer = "Offset $offset secs, jitter $jitter msec, peer is stratum $stratum";
+ }
+
+}
+
+foreach my $key (keys %ERRORS) {
+ if ($state==$ERRORS{$key}) {
+# print ("NTP $key: $answer");
+ print ("NTP $key: $answer|offset=$offset, jitter=" . $jitter/1000 . ",peer_stratum=$stratum\n");
+ last;
+ }
+}
+exit $state;
+
+
+####
+#### subs
+
+sub print_usage () {
+ print "Usage: $PROGNAME -H [-46] [-O] [-w ] [-c ] [-j ] [-k ] [-v verbose]\n";
+}
+
+sub print_help () {
+ print_revision($PROGNAME,'$Revision: 1.29 $');
+ print "Copyright (c) 2003 Bo Kersey/Karl DeBisschop\n";
+ print "\n";
+ print_usage();
+ print "
+Checks the local timestamp offset versus with ntpdate
+Checks the jitter/dispersion of clock signal between and its sys.peer with ntpq\n
+-O (--zero-offset)
+ A zero offset on \"ntpdate\" will generate a CRITICAL.\n
+-w (--warning)
+ Clock offset in seconds at which a warning message will be generated.\n Defaults to $DEFAULT_OFFSET_WARN.
+-c (--critical)
+ Clock offset in seconds at which a critical message will be generated.\n Defaults to $DEFAULT_OFFSET_CRIT.
+-j (--jwarn)
+ Clock jitter in milliseconds at which a warning message will be generated.\n Defaults to $DEFAULT_JITTER_WARN.
+-k (--jcrit)
+ Clock jitter in milliseconds at which a critical message will be generated.\n Defaults to $DEFAULT_JITTER_CRIT.
+
+ If jitter/dispersion is specified with -j or -k and ntpq times out, then a
+ warning is returned.\n
+-4 (--use-ipv4)
+ Use IPv4 connection
+-6 (--use-ipv6)
+ Use IPv6 connection
+\n";
+support();
+}
diff --git a/checkers/check_nwstat b/checkers/check_nwstat
new file mode 100755
index 0000000000..3e82019dd7
Binary files /dev/null and b/checkers/check_nwstat differ
diff --git a/checkers/check_oracle b/checkers/check_oracle
new file mode 100755
index 0000000000..5bf9066c78
--- /dev/null
+++ b/checkers/check_oracle
@@ -0,0 +1,284 @@
+#! /bin/sh
+#
+# latigid010@yahoo.com
+# 01/06/2000
+#
+# This Nagios plugin was created to check Oracle status
+#
+
+PROGNAME=`basename $0`
+PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
+REVISION=`echo '$Revision: 1.14 $' | sed -e 's/[^0-9.]//g'`
+
+. $PROGPATH/utils.sh
+
+
+print_usage() {
+ echo "Usage:"
+ echo " $PROGNAME --tns "
+ echo " $PROGNAME --db "
+ echo " $PROGNAME --login "
+ echo " $PROGNAME --cache "
+ echo " $PROGNAME --tablespace "
+ echo " $PROGNAME --oranames "
+ echo " $PROGNAME --help"
+ echo " $PROGNAME --version"
+}
+
+print_help() {
+ print_revision $PROGNAME $REVISION
+ echo ""
+ print_usage
+ echo ""
+ echo "Check Oracle status"
+ echo ""
+ echo "--tns SID/IP Address"
+ echo " Check remote TNS server"
+ echo "--db SID"
+ echo " Check local database (search /bin/ps for PMON process) and check"
+ echo " filesystem for sgadefORACLE_SID.dbf"
+ echo "--login SID"
+ echo " Attempt a dummy login and alert if not ORA-01017: invalid username/password"
+ echo "--cache"
+ echo " Check local database for library and buffer cache hit ratios"
+ echo " ---> Requires Oracle user/password and SID specified."
+ echo " ---> Requires select on v_$sysstat and v_$librarycache"
+ echo "--tablespace"
+ echo " Check local database for tablespace capacity in ORACLE_SID"
+ echo " ---> Requires Oracle user/password specified."
+ echo " ---> Requires select on dba_data_files and dba_free_space"
+ echo "--oranames Hostname"
+ echo " Check remote Oracle Names server"
+ echo "--help"
+ echo " Print this help screen"
+ echo "--version"
+ echo " Print version and license information"
+ echo ""
+ echo "If the plugin doesn't work, check that the ORACLE_HOME environment"
+ echo "variable is set, that ORACLE_HOME/bin is in your PATH, and the"
+ echo "tnsnames.ora file is locatable and is properly configured."
+ echo ""
+ echo "When checking local database status your ORACLE_SID is case sensitive."
+ echo ""
+ echo "If you want to use a default Oracle home, add in your oratab file:"
+ echo "*:/opt/app/oracle/product/7.3.4:N"
+ echo ""
+ support
+}
+
+case "$1" in
+1)
+ cmd='--tns'
+ ;;
+2)
+ cmd='--db'
+ ;;
+*)
+ cmd="$1"
+ ;;
+esac
+
+# Information options
+case "$cmd" in
+--help)
+ print_help
+ exit $STATE_OK
+ ;;
+-h)
+ print_help
+ exit $STATE_OK
+ ;;
+--version)
+ print_revision $PLUGIN $REVISION
+ exit $STATE_OK
+ ;;
+-V)
+ print_revision $PLUGIN $REVISION
+ exit $STATE_OK
+ ;;
+esac
+
+# Hunt down a reasonable ORACLE_HOME
+if [ -z "$ORACLE_HOME" ] ; then
+ # Adjust to taste
+ for oratab in /var/opt/oracle/oratab /etc/oratab
+ do
+ [ ! -f $oratab ] && continue
+ ORACLE_HOME=`IFS=:
+ while read SID ORACLE_HOME junk;
+ do
+ if [ "$SID" = "$2" -o "$SID" = "*" ] ; then
+ echo $ORACLE_HOME;
+ exit;
+ fi;
+ done < $oratab`
+ [ -n "$ORACLE_HOME" ] && break
+ done
+fi
+# Last resort
+[ -z "$ORACLE_HOME" -a -d $PROGPATH/oracle ] && ORACLE_HOME=$PROGPATH/oracle
+
+if [ -z "$ORACLE_HOME" -o ! -d "$ORACLE_HOME" ] ; then
+ echo "Cannot determine ORACLE_HOME for sid $2"
+ exit $STATE_UNKNOWN
+fi
+PATH=$PATH:$ORACLE_HOME/bin
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
+export ORACLE_HOME PATH LD_LIBRARY_PATH
+
+case "$cmd" in
+--tns)
+ tnschk=` tnsping $2`
+ tnschk2=` echo $tnschk | grep -c OK`
+ if [ ${tnschk2} -eq 1 ] ; then
+ tnschk3=` echo $tnschk | sed -e 's/.*(//' -e 's/).*//'`
+ echo "OK - reply time ${tnschk3} from $2"
+ exit $STATE_OK
+ else
+ echo "No TNS Listener on $2"
+ exit $STATE_CRITICAL
+ fi
+ ;;
+--oranames)
+ namesctl status $2 | awk '
+ /Server has been running for:/ {
+ msg = "OK: Up"
+ for (i = 6; i <= NF; i++) {
+ msg = msg " " $i
+ }
+ status = '$STATE_OK'
+ }
+ /error/ {
+ msg = "CRITICAL: " $0
+ status = '$STATE_CRITICAL'
+ }
+ END {
+ print msg
+ exit status
+ }'
+ ;;
+--db)
+ pmonchk=`ps -ef | grep -v grep | grep -c "ora_pmon_${2}$"`
+ if [ ${pmonchk} -ge 1 ] ; then
+ echo "${2} OK - ${pmonchk} PMON process(es) running"
+ exit $STATE_OK
+ #if [ -f $ORACLE_HOME/dbs/sga*${2}* ] ; then
+ #if [ ${pmonchk} -eq 1 ] ; then
+ #utime=`ls -la $ORACLE_HOME/dbs/sga*$2* | cut -c 43-55`
+ #echo "${2} OK - running since ${utime}"
+ #exit $STATE_OK
+ #fi
+ else
+ echo "${2} Database is DOWN"
+ exit $STATE_CRITICAL
+ fi
+ ;;
+--login)
+ loginchk=`sqlplus dummy/user@$2 < /dev/null`
+ loginchk2=` echo $loginchk | grep -c ORA-01017`
+ if [ ${loginchk2} -eq 1 ] ; then
+ echo "OK - dummy login connected"
+ exit $STATE_OK
+ else
+ loginchk3=` echo "$loginchk" | grep "ORA-" | head -1`
+ echo "CRITICAL - $loginchk3"
+ exit $STATE_CRITICAL
+ fi
+ ;;
+--cache)
+ if [ ${5} -gt ${6} ] ; then
+ echo "UNKNOWN - Warning level is less then Crit"
+ exit $STATE_UNKNOWN
+ fi
+ result=`sqlplus -s ${3}/${4}@${2} << EOF
+set pagesize 0
+set numf '9999999.99'
+select (1-(pr.value/(dbg.value+cg.value)))*100
+from v\\$sysstat pr, v\\$sysstat dbg, v\\$sysstat cg
+where pr.name='physical reads'
+and dbg.name='db block gets'
+and cg.name='consistent gets';
+EOF`
+
+ if [ -n "`echo $result | grep ORA-`" ] ; then
+ error=` echo "$result" | grep "ORA-" | head -1`
+ echo "CRITICAL - $error"
+ exit $STATE_CRITICAL
+ fi
+
+ buf_hr=`echo "$result" | awk '/^[0-9\. \t]+$/ {print int($1)}'`
+ buf_hrx=`echo "$result" | awk '/^[0-9\. \t]+$/ {print $1}'`
+ result=`sqlplus -s ${3}/${4}@${2} << EOF
+set pagesize 0
+set numf '9999999.99'
+select sum(lc.pins)/(sum(lc.pins)+sum(lc.reloads))*100
+from v\\$librarycache lc;
+EOF`
+
+ if [ -n "`echo $result | grep ORA-`" ] ; then
+ error=` echo "$result" | grep "ORA-" | head -1`
+ echo "CRITICAL - $error"
+ exit $STATE_CRITICAL
+ fi
+
+ lib_hr=`echo "$result" | awk '/^[0-9\. \t]+$/ {print int($1)}'`
+ lib_hrx=`echo "$result" | awk '/^[0-9\. \t]+$/ {print $1}'`
+
+ if [ $buf_hr -le ${5} -o $lib_hr -le ${5} ] ; then
+ echo "${2} CRITICAL - Cache Hit Rates: $lib_hrx% Lib -- $buf_hrx% Buff|lib=$lib_hrx%;${6};${5};0;100 buffer=$buf_hrx%;${6};${5};0;100"
+ exit $STATE_CRITICAL
+ fi
+ if [ $buf_hr -le ${6} -o $lib_hr -le ${6} ] ; then
+ echo "${2} WARNING - Cache Hit Rates: $lib_hrx% Lib -- $buf_hrx% Buff|lib=$lib_hrx%;${6};${5};0;100 buffer=$buf_hrx%;${6};${5};0;100"
+ exit $STATE_WARNING
+ fi
+ echo "${2} OK - Cache Hit Rates: $lib_hrx% Lib -- $buf_hrx% Buff|lib=$lib_hrx%;${6};${5};0;100 buffer=$buf_hrx%;${6};${5};0;100"
+
+ exit $STATE_OK
+ ;;
+--tablespace)
+ if [ ${6} -lt ${7} ] ; then
+ echo "UNKNOWN - Warning level is more then Crit"
+ exit $STATE_UNKNOWN
+ fi
+ result=`sqlplus -s ${3}/${4}@${2} << EOF
+set pagesize 0
+set numf '9999999.99'
+select b.free,a.total,100 - trunc(b.free/a.total * 1000) / 10 prc
+from (
+select tablespace_name,sum(bytes)/1024/1024 total
+from dba_data_files group by tablespace_name) A,
+( select tablespace_name,sum(bytes)/1024/1024 free
+from dba_free_space group by tablespace_name) B
+where a.tablespace_name=b.tablespace_name and a.tablespace_name='${5}';
+EOF`
+
+ if [ -n "`echo $result | grep ORA-`" ] ; then
+ error=` echo "$result" | grep "ORA-" | head -1`
+ echo "CRITICAL - $error"
+ exit $STATE_CRITICAL
+ fi
+
+ ts_free=`echo "$result" | awk '/^[ 0-9\.\t ]+$/ {print int($1)}'`
+ ts_total=`echo "$result" | awk '/^[ 0-9\.\t ]+$/ {print int($2)}'`
+ ts_pct=`echo "$result" | awk '/^[ 0-9\.\t ]+$/ {print int($3)}'`
+ ts_pctx=`echo "$result" | awk '/^[ 0-9\.\t ]+$/ {print $3}'`
+ if [ "$ts_free" -eq 0 -a "$ts_total" -eq 0 -a "$ts_pct" -eq 0 ] ; then
+ echo "No data returned by Oracle - tablespace $5 not found?"
+ exit $STATE_UNKNOWN
+ fi
+ if [ "$ts_pct" -ge ${6} ] ; then
+ echo "${2} : ${5} CRITICAL - $ts_pctx% used [ $ts_free / $ts_total MB available ]|${5}=$ts_pctx%;${7};${6};0;100"
+ exit $STATE_CRITICAL
+ fi
+ if [ "$ts_pct" -ge ${7} ] ; then
+ echo "${2} : ${5} WARNING - $ts_pctx% used [ $ts_free / $ts_total MB available ]|${5}=$ts_pctx%;${7};${6};0;100"
+ exit $STATE_WARNING
+ fi
+ echo "${2} : ${5} OK - $ts_pctx% used [ $ts_free / $ts_total MB available ]|${5}=$ts_pctx%;${7};${6};0;100"
+ exit $STATE_OK
+ ;;
+*)
+ print_usage
+ exit $STATE_UNKNOWN
+esac
diff --git a/checkers/check_overcr b/checkers/check_overcr
new file mode 100755
index 0000000000..8850dbee33
Binary files /dev/null and b/checkers/check_overcr differ
diff --git a/checkers/check_pgsql b/checkers/check_pgsql
new file mode 100755
index 0000000000..1847203517
Binary files /dev/null and b/checkers/check_pgsql differ
diff --git a/checkers/check_ping b/checkers/check_ping
new file mode 100755
index 0000000000..59ee1f0d6c
Binary files /dev/null and b/checkers/check_ping differ
diff --git a/checkers/check_pop b/checkers/check_pop
new file mode 120000
index 0000000000..e838da97eb
--- /dev/null
+++ b/checkers/check_pop
@@ -0,0 +1 @@
+check_tcp
\ No newline at end of file
diff --git a/checkers/check_procs b/checkers/check_procs
new file mode 100755
index 0000000000..73df901cb8
Binary files /dev/null and b/checkers/check_procs differ
diff --git a/checkers/check_radius b/checkers/check_radius
new file mode 100755
index 0000000000..f07273eacf
Binary files /dev/null and b/checkers/check_radius differ
diff --git a/checkers/check_real b/checkers/check_real
new file mode 100755
index 0000000000..8e1e98f521
Binary files /dev/null and b/checkers/check_real differ
diff --git a/checkers/check_rpc b/checkers/check_rpc
new file mode 100755
index 0000000000..cf3eb87e86
--- /dev/null
+++ b/checkers/check_rpc
@@ -0,0 +1,377 @@
+#! /usr/bin/perl -w
+#
+# check_rpc plugin for nagios
+#
+# usage:
+# check_rpc host service
+#
+# Check if an rpc serice is registered and running
+# using rpcinfo - $proto $host $prognum 2>&1 |";
+#
+# Use these hosts.cfg entries as examples
+#
+# command[check_nfs]=/some/path/libexec/check_rpc $HOSTADDRESS$ nfs
+# service[check_nfs]=NFS;24x7;3;5;5;unix-admin;60;24x7;1;1;1;;check_rpc
+#
+# initial version: 3 May 2000 by Truongchinh Nguyen and Karl DeBisschop
+# Modified May 2002 Subhendu Ghosh - support for ePN and patches
+# current status: $Revision: 1.8 $
+#
+# Copyright Notice: GPL
+# $Id: check_rpc.pl,v 1.8 2003/08/10 12:11:49 kdebisschop Exp $
+#
+
+use strict;
+use lib "/usr/lib/nagios/plugins";
+use utils qw($TIMEOUT %ERRORS &print_revision &support);
+use vars qw($PROGNAME);
+my ($verbose,@proto,%prognum,$host,$response,$prognum,$port,$cmd,$progver,$state);
+my ($array_ref,$test,$element,@progkeys,$proto,$a,$b);
+my ($opt_V,$opt_h,$opt_C,$opt_p,$opt_H,$opt_c,$opt_u,$opt_t);
+my ($line, @progvers, $response2,$response3);
+$opt_V = $opt_h = $opt_C = $opt_p = $opt_H = $opt_u = $opt_t ='';
+$state = 'UNKNOWN';
+$progver = $response=$response2= $response3 ='';
+
+$PROGNAME = "check_rpc";
+sub print_help ();
+sub print_usage ();
+sub in ($$);
+
+$ENV{'BASH_ENV'}='';
+$ENV{'ENV'}='';
+$ENV{'PATH'}='';
+$ENV{'LC_ALL'}='C';
+
+#Initialise protocol for each progname number
+# 'u' for UDP, 't' for TCP
+$proto[10003]='u';
+$proto[10004]='u';
+$proto[10007]='u';
+
+use Getopt::Long;
+Getopt::Long::Configure('bundling');
+GetOptions(
+ "V" => \$opt_V, "version" => \$opt_V,
+ "h" => \$opt_h, "help" => \$opt_h,
+ "C=s" => \$opt_C, "command=s" => \$opt_C,
+ "p=i" => \$opt_p, "port=i" => \$opt_p,
+ "H=s" => \$opt_H, "hostname=s" => \$opt_H,
+ "c=s" => \$opt_c, "progver=s" => \$opt_c,
+ "v+" => \$verbose, "verbose+" => \$verbose,
+ "u" => \$opt_u, "udp" => \$opt_u,
+ "t" => \$opt_t, "tcp" => \$opt_t
+);
+
+# -h means display verbose help screen
+if ($opt_h) { print_help(); exit $ERRORS{'OK'}; }
+
+# -V means display version number
+if ($opt_V) {
+ print_revision($PROGNAME,'$Revision: 1.8 $ ');
+ exit $ERRORS{'OK'};
+}
+
+# Hash containing all RPC program names and numbers
+# Add to the hash if support for new RPC program is required
+
+%prognum = (
+ "portmapper" => 100000 ,
+ "portmap" => 100000 ,
+ "sunrpc" => 100000 ,
+ "rpcbind" => 100000 ,
+ "rstatd" => 100001 ,
+ "rstat" => 100001 ,
+ "rup" => 100001 ,
+ "perfmeter" => 100001 ,
+ "rstat_svc" => 100001 ,
+ "rusersd" => 100002 ,
+ "rusers" => 100002 ,
+ "nfs" => 100003 ,
+ "nfsprog" => 100003 ,
+ "ypserv" => 100004 ,
+ "ypprog" => 100004 ,
+ "mountd" => 100005 ,
+ "mount" => 100005 ,
+ "showmount" => 100005 ,
+ "ypbind" => 100007 ,
+ "walld" => 100008 ,
+ "rwall" => 100008 ,
+ "shutdown" => 100008 ,
+ "yppasswdd" => 100009 ,
+ "yppasswd" => 100009 ,
+ "etherstatd" => 100010 ,
+ "etherstat" => 100010 ,
+ "rquotad" => 100011 ,
+ "rquotaprog" => 100011 ,
+ "quota" => 100011 ,
+ "rquota" => 100011 ,
+ "sprayd" => 100012 ,
+ "spray" => 100012 ,
+ "3270_mapper" => 100013 ,
+ "rje_mapper" => 100014 ,
+ "selection_svc" => 100015 ,
+ "selnsvc" => 100015 ,
+ "database_svc" => 100016 ,
+ "rexd" => 100017 ,
+ "rex" => 100017 ,
+ "alis" => 100018 ,
+ "sched" => 100019 ,
+ "llockmgr" => 100020 ,
+ "nlockmgr" => 100021 ,
+ "x25_inr" => 100022 ,
+ "statmon" => 100023 ,
+ "status" => 100024 ,
+ "bootparam" => 100026 ,
+ "ypupdated" => 100028 ,
+ "ypupdate" => 100028 ,
+ "keyserv" => 100029 ,
+ "keyserver" => 100029 ,
+ "sunlink_mapper" => 100033 ,
+ "tfsd" => 100037 ,
+ "nsed" => 100038 ,
+ "nsemntd" => 100039 ,
+ "showfhd" => 100043 ,
+ "showfh" => 100043 ,
+ "ioadmd" => 100055 ,
+ "rpc.ioadmd" => 100055 ,
+ "NETlicense" => 100062 ,
+ "sunisamd" => 100065 ,
+ "debug_svc" => 100066 ,
+ "dbsrv" => 100066 ,
+ "ypxfrd" => 100069 ,
+ "rpc.ypxfrd" => 100069 ,
+ "bugtraqd" => 100071 ,
+ "kerbd" => 100078 ,
+ "event" => 100101 ,
+ "na.event" => 100101 ,
+ "logger" => 100102 ,
+ "na.logger" => 100102 ,
+ "sync" => 100104 ,
+ "na.sync" => 100104 ,
+ "hostperf" => 100107 ,
+ "na.hostperf" => 100107 ,
+ "activity" => 100109 ,
+ "na.activity" => 100109 ,
+ "hostmem" => 100112 ,
+ "na.hostmem" => 100112 ,
+ "sample" => 100113 ,
+ "na.sample" => 100113 ,
+ "x25" => 100114 ,
+ "na.x25" => 100114 ,
+ "ping" => 100115 ,
+ "na.ping" => 100115 ,
+ "rpcnfs" => 100116 ,
+ "na.rpcnfs" => 100116 ,
+ "hostif" => 100117 ,
+ "na.hostif" => 100117 ,
+ "etherif" => 100118 ,
+ "na.etherif" => 100118 ,
+ "iproutes" => 100120 ,
+ "na.iproutes" => 100120 ,
+ "layers" => 100121 ,
+ "na.layers" => 100121 ,
+ "snmp" => 100122 ,
+ "na.snmp" => 100122 ,
+ "snmp-cmc" => 100122 ,
+ "snmp-synoptics" => 100122 ,
+ "snmp-unisys" => 100122 ,
+ "snmp-utk" => 100122 ,
+ "traffic" => 100123 ,
+ "na.traffic" => 100123 ,
+ "nfs_acl" => 100227 ,
+ "sadmind" => 100232 ,
+ "nisd" => 100300 ,
+ "rpc.nisd" => 100300 ,
+ "nispasswd" => 100303 ,
+ "rpc.nispasswdd" => 100303 ,
+ "ufsd" => 100233 ,
+ "ufsd" => 100233 ,
+ "pcnfsd" => 150001 ,
+ "pcnfs" => 150001 ,
+ "amd" => 300019 ,
+ "amq" => 300019 ,
+ "bwnfsd" => 545580417 ,
+ "fypxfrd" => 600100069 ,
+ "freebsd-ypxfrd" => 600100069 ,
+);
+
+# -v means verbose, -v-v means verbose twice = print above hash
+if (defined $verbose && ($verbose > 1) ){
+ my $key;
+ print "Supported programs:\n";
+ print " name\t=>\tnumber\n";
+ print " ===============================\n";
+ foreach $key (sort keys %prognum) {
+ print " $key \t=>\t$prognum{$key} \n";
+ }
+ print "\n\n";
+ print_usage();
+ exit $ERRORS{'OK'};
+}
+
+# -H means host name
+unless ($opt_H) { print_usage(); exit $ERRORS{'UNKNOWN'}; }
+
+if (! utils::is_hostname($opt_H)){
+ print "$opt_H is not a valid host name\n";
+ print_usage();
+ exit $ERRORS{"UNKNOWN"};
+}else{
+ $host = $opt_H;
+}
+
+if ($opt_t && $opt_u) {
+ print "Cannot define tcp AND udp\n";
+ print_usage();
+ exit $ERRORS{'UNKNOWN'};
+}
+
+
+# -C means command name or number
+$opt_C = shift unless ($opt_C);
+unless ($opt_C) { print_usage(); exit -1; }
+@progkeys = keys %prognum;
+if ($opt_C =~ m/^([0-9]+)$/){
+# $response = "RPC ok: program $opt_C (version ";
+ $prognum = $1;
+} elsif ( in( \@progkeys, $opt_C)) {
+# $response = "RPC ok: $opt_C (version ";
+ $prognum = $prognum{$opt_C};
+} else {
+ print "Program $opt_C is not defined\n";
+ exit $ERRORS{'UNKNOWN'};
+}
+
+# -p means port number
+if($opt_p =~ /^([0-9]+)$/){
+ $port = "-n $1";
+} else {
+ $port = "";
+}
+
+$proto = 'u';
+$proto = $proto[$prognum] if ($proto[$prognum]);
+$proto = 't' if ($opt_t);
+$proto = 'u' if ($opt_u);
+
+
+# Just in case of problems, let's not hang Nagios
+$SIG{'ALRM'} = sub {
+ print ("ERROR: No response from RPC server (alarm)\n");
+ exit $ERRORS{"UNKNOWN"};
+};
+alarm($TIMEOUT);
+
+# -c is progver - if we need to check multiple specified versions.
+if (defined $opt_c ) {
+ my $vers;
+ @progvers = split(/,/ ,$opt_c );
+ foreach $vers (sort @progvers) {
+ if($vers =~ /^([0-9]+)$/){
+ $progver = "$1";
+ print "Checking $opt_C version $progver proto $proto\n" if $verbose;
+ get_rpcinfo();
+ }else{
+ print "Version $vers is not an integer\n" if $verbose;
+ }
+
+ }
+}else{
+ get_rpcinfo();
+}
+
+
+## translate proto for output
+if ($proto eq "u" ){
+ $proto = "udp";
+}else{
+ $proto = "tcp";
+}
+
+if ($state eq 'OK') {
+ print "$state: RPC program $opt_C".$response." $proto running\n";
+}else{
+ if($response){
+ print "$state: RPC program $opt_C".$response2." $proto is not running,".$response." $proto is running\n";
+ }else{
+ print "$state: RPC program $opt_C $response2 $proto is not running\n";
+ }
+}
+exit $ERRORS{$state};
+
+
+######## Subroutines ==========================
+
+sub get_rpcinfo {
+ $cmd = "$utils::PATH_TO_RPCINFO $port -" . "$proto $host $prognum $progver 2>&1 |";
+ print "$cmd\n" if ($verbose);
+ open CMD, $cmd or die "Can't fork for rpcinfo: $!\n" ;
+
+ while ( $line = ) {
+ printf "$line " if $verbose;
+ chomp $line;
+
+ if ( $line =~ /program $prognum version ([0-9]*) ready and waiting/ ) {
+ $response .= " version $1";
+ $state = 'OK' unless $state ne 'UNKNOWN';
+ print "1:$response \n" if $verbose;
+ }
+
+ if ( $line =~ /program $prognum version ([0-9]*) is not available/ ) {
+ $response2 .= " version $1";
+ $state = 'CRITICAL';
+ print "2:$response2 \n" if $verbose;
+ }
+ if ( $line =~ /program $prognum is not available/ ) {
+ $response3 = "";
+ $response3 = "tcp" if $opt_t;
+ $response3 = "udp" if $opt_u;
+ $state = 'CRITICAL';
+ print "3:$response3 \n" if $verbose;
+ }
+ }
+ close CMD;
+}
+
+
+sub print_help() {
+ print_revision($PROGNAME,'$Revision: 1.8 $ ');
+ print "Copyright (c) 2002 Karl DeBisschop/Truongchinh Nguyen/Subhendu Ghosh\n";
+ print "\n";
+ print "Check if a rpc service is registered and running using\n";
+ print " rpcinfo -H host -C rpc_command \n";
+ print "\n";
+ print_usage();
+ print "\n";
+ print " The server providing the rpc service\n";
+ print " The program name (or number).\n";
+ print " The version you want to check for (one or more)\n";
+ print " Should prevent checks of unknown versions being syslogged\n";
+ print " e.g. 2,3,6 to check v2, v3, and v6\n";
+ print " [-u | -t] Test UDP or TCP\n";
+ print " [-v] Verbose \n";
+ print " [-v -v] Verbose - will print supported programs and numbers \n";
+ print "\n";
+ support();
+}
+
+sub print_usage () {
+ print "Usage: \n";
+ print " $PROGNAME -H host -C rpc_command [-p port] [-c program_version] [-u|-t] [-v]\n";
+ print " $PROGNAME [-h | --help]\n";
+ print " $PROGNAME [-V | --version]\n";
+}
+
+sub in ($$) {
+ $array_ref = shift;
+ $test = shift;
+
+ while ( $element = shift @{$array_ref} ) {
+ if ($test eq $element) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
diff --git a/checkers/check_sensors b/checkers/check_sensors
new file mode 100755
index 0000000000..66d264ad9b
--- /dev/null
+++ b/checkers/check_sensors
@@ -0,0 +1,65 @@
+#! /bin/sh
+
+PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
+
+PROGNAME=`basename $0`
+PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
+REVISION=`echo '$Revision: 1.2 $' | sed -e 's/[^0-9.]//g'`
+
+. $PROGPATH/utils.sh
+
+
+print_usage() {
+ echo "Usage: $PROGNAME"
+}
+
+print_help() {
+ print_revision $PROGNAME $REVISION
+ echo ""
+ print_usage
+ echo ""
+ echo "This plugin checks hardware status using the lm_sensors package."
+ echo ""
+ support
+ exit 0
+}
+
+case "$1" in
+ --help)
+ print_help
+ exit 0
+ ;;
+ -h)
+ print_help
+ exit 0
+ ;;
+ --version)
+ print_revision $PROGNAME $REVISION
+ exit 0
+ ;;
+ -V)
+ print_revision $PROGNAME $REVISION
+ exit 0
+ ;;
+ *)
+ sensordata=`sensors 2>&1`
+ status=$?
+ if test "$1" = "-v" -o "$1" = "--verbose"; then
+ echo ${sensordata}
+ fi
+ if test ${status} -eq 127; then
+ echo "SENSORS UNKNOWN - command not found (did you install lmsensors?)"
+ exit -1
+ elif test ${status} -ne 0 ; then
+ echo "WARNING - sensors returned state $status"
+ exit 1
+ fi
+ if echo ${sensordata} | egrep ALARM > /dev/null; then
+ echo SENSOR CRITICAL - Sensor alarm detected!
+ exit 2
+ else
+ echo sensor ok
+ exit 0
+ fi
+ ;;
+esac
diff --git a/checkers/check_simap b/checkers/check_simap
new file mode 120000
index 0000000000..e838da97eb
--- /dev/null
+++ b/checkers/check_simap
@@ -0,0 +1 @@
+check_tcp
\ No newline at end of file
diff --git a/checkers/check_smtp b/checkers/check_smtp
new file mode 100755
index 0000000000..3c24434b34
Binary files /dev/null and b/checkers/check_smtp differ
diff --git a/checkers/check_snmp b/checkers/check_snmp
new file mode 100755
index 0000000000..9d20a25769
Binary files /dev/null and b/checkers/check_snmp differ
diff --git a/checkers/check_spop b/checkers/check_spop
new file mode 120000
index 0000000000..e838da97eb
--- /dev/null
+++ b/checkers/check_spop
@@ -0,0 +1 @@
+check_tcp
\ No newline at end of file
diff --git a/checkers/check_ssh b/checkers/check_ssh
new file mode 100755
index 0000000000..dcdc18e3d6
Binary files /dev/null and b/checkers/check_ssh differ
diff --git a/checkers/check_ssmtp b/checkers/check_ssmtp
new file mode 120000
index 0000000000..e838da97eb
--- /dev/null
+++ b/checkers/check_ssmtp
@@ -0,0 +1 @@
+check_tcp
\ No newline at end of file
diff --git a/checkers/check_swap b/checkers/check_swap
new file mode 100755
index 0000000000..765e17aac6
Binary files /dev/null and b/checkers/check_swap differ
diff --git a/checkers/check_tcp b/checkers/check_tcp
new file mode 100755
index 0000000000..c334ed1df3
Binary files /dev/null and b/checkers/check_tcp differ
diff --git a/checkers/check_time b/checkers/check_time
new file mode 100755
index 0000000000..976f730c23
Binary files /dev/null and b/checkers/check_time differ
diff --git a/checkers/check_udp b/checkers/check_udp
new file mode 100755
index 0000000000..d9a4d22345
Binary files /dev/null and b/checkers/check_udp differ
diff --git a/checkers/check_udp2 b/checkers/check_udp2
new file mode 120000
index 0000000000..e838da97eb
--- /dev/null
+++ b/checkers/check_udp2
@@ -0,0 +1 @@
+check_tcp
\ No newline at end of file
diff --git a/checkers/check_ups b/checkers/check_ups
new file mode 100755
index 0000000000..4f64f99bed
Binary files /dev/null and b/checkers/check_ups differ
diff --git a/checkers/check_users b/checkers/check_users
new file mode 100755
index 0000000000..7795f20293
Binary files /dev/null and b/checkers/check_users differ
diff --git a/checkers/check_wave b/checkers/check_wave
new file mode 100755
index 0000000000..0f03c48850
--- /dev/null
+++ b/checkers/check_wave
@@ -0,0 +1,123 @@
+#! /usr/bin/perl -wT
+#
+# $Id: check_wave.pl,v 1.4 2002/10/28 13:05:08 kdebisschop Exp $
+
+
+use strict;
+use lib "/usr/lib/nagios/plugins";
+use utils qw($TIMEOUT %ERRORS &print_revision &support);
+use vars qw($PROGNAME);
+use Getopt::Long;
+use vars qw($opt_V $opt_h $verbose $opt_w $opt_c $opt_H);
+my (@test, $low1, $med1, $high1, $snr, $low2, $med2, $high2);
+my ($low, $med, $high, $lowavg, $medavg, $highavg, $tot, $ss);
+
+$PROGNAME = "check_wave";
+sub print_help ();
+sub print_usage ();
+
+$ENV{'PATH'}='';
+$ENV{'BASH_ENV'}='';
+$ENV{'ENV'}='';
+
+Getopt::Long::Configure('bundling');
+GetOptions
+ ("V" => \$opt_V, "version" => \$opt_V,
+ "h" => \$opt_h, "help" => \$opt_h,
+ "v" => \$verbose, "verbose" => \$verbose,
+ "w=s" => \$opt_w, "warning=s" => \$opt_w,
+ "c=s" => \$opt_c, "critical=s" => \$opt_c,
+ "H=s" => \$opt_H, "hostname=s" => \$opt_H);
+
+if ($opt_V) {
+ print_revision($PROGNAME,'$Revision: 1.4 $'); #'
+ exit $ERRORS{'OK'};
+}
+
+if ($opt_h) {
+ print_help();
+ exit $ERRORS{'OK'};
+}
+
+$opt_H = shift unless ($opt_H);
+print_usage() unless ($opt_H);
+my $host = $1 if ($opt_H =~ m/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-zA-Z][-a-zA-Z0]+(\.[a-zA-Z][-a-zA-Z0]+)*)$/);
+print_usage() unless ($host);
+
+($opt_c) || ($opt_c = shift) || ($opt_c = 120);
+my $critical = $1 if ($opt_c =~ /([0-9]+)/);
+
+($opt_w) || ($opt_w = shift) || ($opt_w = 60);
+my $warning = $1 if ($opt_w =~ /([0-9]+)/);
+
+$low1 = `snmpget $host public .1.3.6.1.4.1.74.2.21.1.2.1.8.1`;
+@test = split(/ /,$low1);
+$low1 = $test[2];
+
+$med1 = `snmpget $host public .1.3.6.1.4.1.74.2.21.1.2.1.9.1`;
+@test = split(/ /,$med1);
+$med1 = $test[2];
+
+$high1 = `snmpget $host public .1.3.6.1.4.1.74.2.21.1.2.1.10.1`;
+@test = split(/ /,$high1);
+$high1 = $test[2];
+
+sleep(2);
+
+$snr = `snmpget $host public .1.3.6.1.4.1.762.2.5.2.1.17.1`;
+@test = split(/ /,$snr);
+$snr = $test[2];
+$snr = int($snr*25);
+
+$low2 = `snmpget $host public .1.3.6.1.4.1.74.2.21.1.2.1.8.1`;
+@test = split(/ /,$low2);
+$low2 = $test[2];
+
+$med2 = `snmpget $host public .1.3.6.1.4.1.74.2.21.1.2.1.9.1`;
+@test = split(/ /,$med2);
+$med2 = $test[2];
+
+$high2 = `snmpget $host public .1.3.6.1.4.1.74.2.21.1.2.1.10.1`;
+@test = split(/ /,$high2);
+$high2 = $test[2];
+
+$low = $low2 - $low1;
+$med = $med2 - $med1;
+$high = $high2 - $high1;
+
+$tot = $low + $med + $high;
+
+if ($tot==0) {
+ $ss = 0;
+} else {
+ $lowavg = $low / $tot;
+ $medavg = $med / $tot;
+ $highavg = $high / $tot;
+ $ss = ($medavg*50) + ($highavg*100);
+}
+
+printf("Signal Strength at: %3.0f%, SNR at $snr%",$ss);
+
+if ($ss<$critical) {
+ exit(2);
+} elsif ($ss<$warning) {
+ exit(1);
+} else {
+ exit(0);
+}
+
+
+sub print_usage () {
+ print "Usage: $PROGNAME -H [-w ] [-c ]\n";
+}
+
+sub print_help () {
+ print_revision($PROGNAME,'$Revision: 1.4 $');
+ print "Copyright (c) 2000 Jeffery Blank/Karl DeBisschop\n";
+ print "\n";
+ print_usage();
+ print "\n";
+ print " = Signal strength at which a warning message will be generated.\n";
+ print " = Signal strength at which a critical message will be generated.\n\n";
+ support();
+}
diff --git a/checkers/negate b/checkers/negate
new file mode 100755
index 0000000000..d81c478767
Binary files /dev/null and b/checkers/negate differ
diff --git a/checkers/urlize b/checkers/urlize
new file mode 100755
index 0000000000..df17d2a526
Binary files /dev/null and b/checkers/urlize differ
diff --git a/checkers/utils.pm b/checkers/utils.pm
new file mode 100644
index 0000000000..0556ec49bd
--- /dev/null
+++ b/checkers/utils.pm
@@ -0,0 +1,83 @@
+# Utility drawer for Nagios plugins.
+# $Id: utils.pm.in,v 1.7 2003/04/13 04:25:36 sghosh Exp $
+#
+# $Log: utils.pm.in,v $
+# Revision 1.7 2003/04/13 04:25:36 sghosh
+# update for check_mailq - qmail support
+#
+# Revision 1.6 2003/02/03 20:29:55 sghosh
+# change ntpdc to ntpq (Jonathan Rozes,Thomas Schimpke, bug-656237 )
+#
+# Revision 1.5 2002/10/30 05:07:29 sghosh
+# monitor mailq
+#
+# Revision 1.4 2002/05/27 02:01:09 sghosh
+# new var - smbclient
+#
+# Revision 1.3 2002/05/10 03:49:22 sghosh
+# added programs to autoconf
+#
+# Revision 1.2 2002/05/08 05:10:35 sghosh
+# is_hostname added, update CODES to POSIX
+#
+#
+package utils;
+
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT_OK = qw($TIMEOUT %ERRORS &print_revision &support &usage);
+
+#use strict;
+#use vars($TIMEOUT %ERRORS);
+sub print_revision ($$);
+sub usage;
+sub support();
+sub is_hostname;
+
+## updated by autoconf
+$PATH_TO_RPCINFO = "/usr/bin/rpcinfo";
+$PATH_TO_NTPDATE = "/usr/sbin/ntpdate";
+$PATH_TO_NTPDC = "/usr/bin/ntpdc";
+$PATH_TO_NTPQ = "/usr/bin/ntpq";
+$PATH_TO_LMSTAT = "" ;
+$PATH_TO_SMBCLIENT = "/usr/bin/smbclient";
+$PATH_TO_MAILQ = "/usr/bin/mailq";
+$PATH_TO_QMAIL_QSTAT = "";
+
+## common variables
+$TIMEOUT = 15;
+%ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4);
+
+## utility subroutines
+sub print_revision ($$) {
+ my $commandName = shift;
+ my $pluginRevision = shift;
+ $pluginRevision =~ s/^\$Revision: //;
+ $pluginRevision =~ s/ \$\s*$//;
+ print "$commandName (nagios-plugins 1.4.2) $pluginRevision\n";
+ print "The nagios plugins come with ABSOLUTELY NO WARRANTY. You may redistribute\ncopies of the plugins under the terms of the GNU General Public License.\nFor more information about these matters, see the file named COPYING.\n";
+}
+
+sub support () {
+ my $support='Send email to nagios-users@lists.sourceforge.net if you have questions\nregarding use of this software. To submit patches or suggest improvements,\nsend email to nagiosplug-devel@lists.sourceforge.net.\nPlease include version information with all correspondence (when possible,\nuse output from the --version option of the plugin itself).\n';
+ $support =~ s/@/\@/g;
+ $support =~ s/\\n/\n/g;
+ print $support;
+}
+
+sub usage {
+ my $format=shift;
+ printf($format,@_);
+ exit $ERRORS{'UNKNOWN'};
+}
+
+sub is_hostname {
+ my $host1 = shift;
+ if ($host1 && $host1 =~ m/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-zA-Z][-a-zA-Z0-9]+(\.[a-zA-Z][-a-zA-Z0-9]+)*)$/) {
+ return 1;
+ }else{
+ return 0;
+ }
+}
+
+1;
diff --git a/checkers/utils.sh b/checkers/utils.sh
new file mode 100755
index 0000000000..313b61816c
--- /dev/null
+++ b/checkers/utils.sh
@@ -0,0 +1,23 @@
+#! /bin/sh
+
+STATE_OK=0
+STATE_WARNING=1
+STATE_CRITICAL=2
+STATE_UNKNOWN=3
+STATE_DEPENDENT=4
+
+if test -x /usr/bin/printf; then
+ ECHO=/usr/bin/printf
+else
+ ECHO=echo
+fi
+
+print_revision() {
+ echo "$1 (nagios-plugins 1.4.2) $2"
+ $ECHO "The nagios plugins come with ABSOLUTELY NO WARRANTY. You may redistribute\ncopies of the plugins under the terms of the GNU General Public License.\nFor more information about these matters, see the file named COPYING.\n" | /bin/sed -e 's/\n/ /g'
+}
+
+support() {
+ $ECHO "Send email to nagios-users@lists.sourceforge.net if you have questions\nregarding use of this software. To submit patches or suggest improvements,\nsend email to nagiosplug-devel@lists.sourceforge.net.\nPlease include version information with all correspondence (when possible,\nuse output from the --version option of the plugin itself).\n" | /bin/sed -e 's/\n/ /g'
+}
+
diff --git a/cleanup.php b/cleanup.php
new file mode 100755
index 0000000000..8e045fa6f6
--- /dev/null
+++ b/cleanup.php
@@ -0,0 +1,78 @@
+#!/usr/bin/php
+
+### Clean up the database removing old IPs and links
+
+
+include("config.php");
+include("includes/functions.php");
+
+$query = "SELECT *,A.id as id FROM ipaddr AS A, interfaces as I, devices as D
+ WHERE A.interface_id = I.id AND I.host = D.id AND D.status = '1' AND I.id LIKE '%$argv[1]'";
+
+$data = mysql_query($query);
+while($row = mysql_fetch_array($data)) {
+
+ $mask = trim(`$ipcalc $row[addr]/$row[cidr] | grep Netmask: | cut -d " " -f 4`);
+ $response = trim(`snmpget -v2c -Osq -c $row[community] $row[hostname] ipAdEntIfIndex.$row[addr] | cut -d " " -f 2`);
+ $maskcheck = trim(`snmpget -v2c -Osq -c $row[community] $row[hostname] ipAdEntNetMask.$row[addr] | cut -d " " -f 2`);
+ if($response == $row['ifIndex'] && $mask == $maskcheck) {
+ } else {
+ mysql_query("delete from ipaddr where id = '$row[id]'");
+ echo("Deleted $row[addr] from $row[hostname]\n");
+ }
+}
+
+$query = "SELECT *, I.id as id FROM interfaces AS I, devices as D
+ WHERE I.host = D.id AND D.status = '1'";
+$data = mysql_query($query);
+while($row = mysql_fetch_array($data)) {
+ $id = $row['id'];
+ $index = $row[ifIndex];
+ $hostname = $row['hostname'];
+ $community = $row['community'];
+ $response = trim(`snmpget -v2c -Osq -c $community $hostname ifIndex.$index | cut -d " " -f 2`);
+ if($response != $index) {
+ mysql_query("delete from interfaces where id = '$id'");
+ echo("Deleted $row[if] from $hostname\n");
+ }
+}
+
+echo(mysql_result(mysql_query("SELECT COUNT(*) FROM `interfaces`"), 0) . " interfaces at start\n");
+$interface_query = mysql_query("SELECT id,host FROM `interfaces`");
+while ($interface = mysql_fetch_array($interface_query)) {
+ $host = $interface['host'];
+ $id = $interface['id'];
+ if(mysql_result(mysql_query("SELECT COUNT(*) FROM `devices` WHERE `id` = '$host'"), 0) == '0') {
+ mysql_query("delete from interfaces where `id` = '$id'");
+ echo("Deleting if $id \n");
+ }
+}
+echo(mysql_result(mysql_query("SELECT COUNT(*) FROM `interfaces`"), 0) . " interfaces at end\n");
+
+echo(mysql_result(mysql_query("SELECT COUNT(id) FROM `links`"), 0) . " links at start\n");
+$link_query = mysql_query("SELECT id,src_if,dst_if FROM `links`");
+while ($link = mysql_fetch_array($link_query)) {
+ $id = $link['id'];
+ $src = $link['src_if'];
+ $dst = $link['dst_if'];
+ if(mysql_result(mysql_query("SELECT COUNT(id) FROM `interfaces` WHERE `id` = '$src'"), 0) == '0' || mysql_result(mysql_query("SELECT COUNT(id) FROM `interfaces` WHERE `id` = '$dst'"), 0) == '0') {
+ mysql_query("delete from links where `id` = '$id'");
+ echo("Deleting link $id \n");
+ }
+}
+echo(mysql_result(mysql_query("SELECT COUNT(id) FROM `links`"), 0) . " links at end\n");
+
+echo(mysql_result(mysql_query("SELECT COUNT(adj_id) FROM `adjacencies`"), 0) . " adjacencies at start\n");
+$link_query = mysql_query("SELECT * FROM `adjacencies`");
+while ($link = mysql_fetch_array($link_query)) {
+ $id = $link['adj_id'];
+ $netid = $link['network_id'];
+ $ifid = $link['interface_id'];
+ if(mysql_result(mysql_query("SELECT COUNT(id) FROM `interfaces` WHERE `id` = '$ifid'"), 0) == '0' || mysql_result(mysql_query("SELECT COUNT(id) FROM `networks` WHERE `id` = '$netid'"), 0) == '0') {
+ mysql_query("delete from adjacencies where `adj_id` = '$id'");
+ echo("Deleting link $id \n");
+ }
+}
+echo(mysql_result(mysql_query("SELECT COUNT(adj_id) FROM `adjacencies`"), 0) . " adjacencies at end\n");
+
+?>
diff --git a/config.php.default b/config.php.default
new file mode 100755
index 0000000000..a45ca82505
--- /dev/null
+++ b/config.php.default
@@ -0,0 +1,83 @@
+MySQL Error";
+ die;
+}
+mysql_select_db($db_name);
+
+$now = time();
+$day = time() - (24 * 60 * 60);
+$twoday = time() - (2 * 24 * 60 * 60);
+$week = time() - (7 * 24 * 60 * 60);
+$month = time() - (31 * 24 * 60 * 60);
+$year = time() - (365 * 24 * 60 * 60);
+
+?>
diff --git a/cron-hourly.sh b/cron-hourly.sh
new file mode 100755
index 0000000000..c21f5f1522
--- /dev/null
+++ b/cron-hourly.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+./cdp.php
+./poll-reachability.php
+./poll-os.php
+./discover-ifs.php
+./discover-nets.php
+./ips.php
+./discover-storage.php
+./cleanup.php
+./discover-temperatures.php
+./discover-cisco-temp.php
diff --git a/cron-minute.sh b/cron-minute.sh
new file mode 100755
index 0000000000..ff20a181c8
--- /dev/null
+++ b/cron-minute.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+./process-syslog.php
+sleep 5
+./process-syslog.php &
+sleep 5
+./process-syslog.php &
+sleep 5
+./process-syslog.php &
+sleep 5
+./process-syslog.php &
+sleep 5
+./process-syslog.php &
+sleep 5
+./process-syslog.php &
+sleep 5
+./process-syslog.php &
+sleep 5
+./process-syslog.php &
+sleep 5
+./process-syslog.php &
+sleep 5
+./process-syslog.php &
+sleep 5
+./process-syslog.php &
+
diff --git a/cron.sh b/cron.sh
new file mode 100755
index 0000000000..495c7e4dbb
--- /dev/null
+++ b/cron.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+./poll-reachability.php
+./poll-device.php &
+./poll-interface.php &
+./poll-temperatures.php &
+./ips.php &
+./check-services.php
+./alerts.php
+
+wget -O /var/sites/network.vostron.net/rrd/dill.vostron.net-mail_virus.rrd http://dill.vostron.net/rrd/mailgraph_virus.rrd
+wget -O /var/sites/network.vostron.net/rrd/dill.vostron.net-mail.rrd http://dill.vostron.net/rrd/mailgraph.rrd
+wget -O /var/sites/network.vostron.net/rrd/dill.vostron.net-courier.rrd http://dill.vostron.net/rrd/couriergraph.rrd
+
diff --git a/discover-cisco-temp.php b/discover-cisco-temp.php
new file mode 100755
index 0000000000..c85315b840
--- /dev/null
+++ b/discover-cisco-temp.php
@@ -0,0 +1,35 @@
+#!/usr/bin/php
+
+include("config.php");
+include("includes/functions.php");
+
+$device_query = mysql_query("SELECT * FROM `devices` WHERE `os` = 'IOS' AND `status` = '1'");
+while ($device = mysql_fetch_array($device_query)) {
+ $id = $device['id'];
+ $hostname = $device['hostname'];
+ $community = $device['community'];
+ echo("Detecting IOS temperature sensors for $hostname\n");
+ $oids = `snmpwalk -v2c -Osqn -c $community $hostname .1.3.6.1.4.1.9.9.13.1.3.1.2 | sed s/.1.3.6.1.4.1.9.9.13.1.3.1.2.//g`;
+ $oids = trim($oids);
+ foreach(explode("\n", $oids) as $data) {
+ $data = trim($data);
+ list($oid) = explode(" ", $data);
+ $temp_oid = ".1.3.6.1.4.1.9.9.13.1.3.1.3.$oid";
+ $descr_oid = ".1.3.6.1.4.1.9.9.13.1.3.1.2.$oid";
+ $descr = `snmpget -O qv -v2c -c $community $hostname $descr_oid`;
+ $temp = `snmpget -O qv -v2c -c $community $hostname $temp_oid`;
+ if(!strstr($descr, "No") && !strstr($temp, "No") && $descr != "" ) {
+ $descr = `snmpget -O qv -v2c -c $community $hostname $descr_oid`;
+ $descr = str_replace("\"", "", $descr);
+ $descr = str_replace("temperature", "", $descr);
+ $descr = str_replace("temp", "", $descr);
+ $descr = trim($descr);
+ if(mysql_result(mysql_query("SELECT count(temp_id) FROM `temperature` WHERE temp_oid = '.1.3.6.1.4.1.9.9.13.1.3.1.3.$oid' AND temp_host = '$id'"),0) == '0') {
+ $query = "INSERT INTO temperature (`temp_host`, `temp_oid`, `temp_descr`) values ('$id', '$temp_oid', '$descr')";
+ echo("$query -> $descr : $temp\n");
+ mysql_query($query);
+ }
+ }
+ }
+}
+?>
diff --git a/discover-ifs.php b/discover-ifs.php
new file mode 100755
index 0000000000..982174f152
--- /dev/null
+++ b/discover-ifs.php
@@ -0,0 +1,45 @@
+#!/usr/bin/php
+
+include("config.php");
+include("includes/functions.php");
+
+# Discover interfaces
+
+$device_query = mysql_query("SELECT id,hostname,community,snmpver FROM `devices` WHERE `id` LIKE '%" . $argv[1] . "' AND status = '1' AND os != 'Snom' ORDER BY id DESC");
+while ($device = mysql_fetch_row($device_query)) {
+
+ $id = $device['0'];
+ $hostname = $device['1'];
+ $community = $device['2'];
+ $snmpver = $device['3'];
+ $interfaces = `snmpwalk -O nsq -v2c -c $community $hostname ".1.3.6.1.2.1.2.2.1.2" | sed s/ifDescr.//g | sed s/\ \"/\|\|\"/g | sed s/\ /\|\|/g`;
+ $interfaces = trim($interfaces);
+ echo("Polling $hostname\n");
+ foreach(explode("\n", $interfaces) as $entry){
+ $entry = trim($entry);
+ list($ifIndex, $ifName) = explode("||", $entry);
+ if(!strstr($entry, "irtual")) {
+ $ifName = trim(str_replace("\"", "", $ifName));
+ $if = trim(strtolower($ifName));
+ $nullintf = 0;
+ foreach($bif as $bi) {
+ if (strstr($if, $bi)) {
+ $nullintf = 1;
+ }
+ }
+ if (preg_match('/serial[0-9]:/', $if)) { $nullintf = '1'; }
+ if (preg_match('/ng[0-9]+$/', $if)) { }
+ if ($nullintf == 0) {
+ if(mysql_result(mysql_query("SELECT COUNT(*) FROM `interfaces` WHERE `host` = '$id' AND `ifIndex` = '$ifIndex'"), 0) == '0') {
+ echo "Adding port $ifName \n";
+ mysql_query("INSERT INTO `interfaces` (`host`,`ifIndex`,`if`) VALUES ('$id','$ifIndex','$ifName')");
+ } else {
+ # echo("Already have $ifName \n");
+ }
+ } else {
+ # echo("Invalid $ifName\n");
+ }
+ }
+ }
+}
+?>
diff --git a/discover-ifs.sh b/discover-ifs.sh
new file mode 100755
index 0000000000..89c9fe9ff9
--- /dev/null
+++ b/discover-ifs.sh
@@ -0,0 +1,11 @@
+./discover-ifs.php 1 &
+./discover-ifs.php 2 &
+./discover-ifs.php 3 &
+./discover-ifs.php 4 &
+./discover-ifs.php 5 &
+./discover-ifs.php 6 &
+./discover-ifs.php 7 &
+./discover-ifs.php 8 &
+./discover-ifs.php 9 &
+./discover-ifs.php 0 &
+
diff --git a/discover-storage.php b/discover-storage.php
new file mode 100755
index 0000000000..b84fbb608c
--- /dev/null
+++ b/discover-storage.php
@@ -0,0 +1,31 @@
+#!/usr/bin/php
+
+include("config.php");
+include("includes/functions.php");
+
+$device_query = mysql_query("SELECT * FROM `devices` WHERE os = 'Linux' OR os = 'FreeBSD' OR os = 'NetBSD' OR os = 'OpenBSD' OR os = 'DragonFly' AND monowall = '0' AND status = '1'");
+while ($device = mysql_fetch_array($device_query)) {
+ $id = $device['id'];
+ $hostname = $device['hostname'];
+ $community = $device['community'];
+ echo("\n***$hostname***\n");
+ $oids = `snmpwalk -v2c -Osq -c $community $hostname hrStorageIndex | sed s/hrStorageIndex.//g`;
+ $oids = trim($oids);
+ foreach(explode("\n", $oids) as $data) {
+ $data = trim($data);
+ list($oid,$ifIndex) = explode(" ", $data);
+ $temp = `snmpget -O qv -v2c -c $community $hostname hrStorageDescr.$oid hrStorageAllocationUnits.$oid hrStorageSize.$oid hrStorageType.$oid`;
+ $temp = trim($temp);
+ list($descr, $units, $size, $type) = explode("\n", $temp);
+ list($units) = explode(" ", $units);
+ if(strstr($type, "FixedDisk") && $size > '0') {
+ echo("$oid,$descr,$units,$size\n");
+ if(mysql_result(mysql_query("SELECT count(storage_id) FROM `storage` WHERE hrStorageIndex = '$ifIndex' AND host_id = '$id'"),0) == '0') {
+ $query = "INSERT INTO storage (`host_id`, `hrStorageIndex`, `hrStorageDescr`,`hrStorageSize`,`hrStorageAllocationUnits`) values ('$id', '$ifIndex', '$descr', '$size', '$units')";
+ echo("$query \n");
+ mysql_query($query);
+ }
+ }
+ }
+}
+?>
diff --git a/discover-temperatures.php b/discover-temperatures.php
new file mode 100755
index 0000000000..1d887aefeb
--- /dev/null
+++ b/discover-temperatures.php
@@ -0,0 +1,34 @@
+#!/usr/bin/php
+
+include("config.php");
+include("includes/functions.php");
+
+
+### Discovery Observer-style temperature sensors
+
+$device_query = mysql_query("SELECT * FROM `devices` WHERE status = '1' AND os != 'IOS' AND os != 'ProCurve'");
+while ($device = mysql_fetch_array($device_query)) {
+ $id = $device['id'];
+ $hostname = $device['hostname'];
+ $community = $device['community'];
+ $snmpver = $device['snmpver'];
+ echo("\n***$hostname***\n");
+ $oids = `snmpwalk -$snmpver -Osqn -c $community $hostname .1.3.6.1.4.1.2021.7891 | sed s/.1.3.6.1.4.1.2021.7891.// | grep ".1.1 " | grep -v ".101." | cut -d"." -f 1`;
+ #$oids = `snmpwalk -v2c -Osqn -c $community $hostname .1.3.6.1.4.1.2021.7891 | sed s/.1.3.6.1.4.1.2021.7891.// | grep '1.1.1' | grep -v 0 | cut -d " " -f 2`;
+ $oids = trim($oids);
+ if(strstr($oids, "no")) { unset ($oids); }
+ foreach(explode("\n",$oids) as $oid) {
+ $oid = trim($oid);
+ if($oid != "") {
+ $descr = trim(str_replace("\"", "", `snmpget -v2c -Osqn -c $community $hostname .1.3.6.1.4.1.2021.7891.$oid.2.1 | sed s/.1.3.6.1.4.1.2021.7891.$oid.2.1\ //`));
+ $fulloid = ".1.3.6.1.4.1.2021.7891.$oid.101.1";
+ echo("Detected : $fulloid ($descr)\n");
+ if(!mysql_result(mysql_query("SELECT count(temp_id) FROM temperature WHERE `temp_host` = '$id' AND `temp_oid` = '$fulloid'"), 0)) {
+ mysql_query("INSERT INTO `temperature` (`temp_host`,`temp_oid`,`temp_descr`) VALUES ('$id', '$fulloid', '$descr');");
+ echo("Created $fulloid on $hostname\n");
+ }
+ }
+ }
+}
+?>
+
diff --git a/generate-iplist.php b/generate-iplist.php
new file mode 100755
index 0000000000..461fdbb9db
--- /dev/null
+++ b/generate-iplist.php
@@ -0,0 +1,30 @@
+#!/usr/bin/php
+
+include("config.php");
+include("includes/functions.php");
+
+`rm ips.txt && touch ips.txt`;
+
+$handle = fopen("ips.txt", "w+");
+
+$query = mysql_query("SELECT * FROM `networks`");
+while ($data = mysql_fetch_array($query)) {
+ $cidr = $data['cidr'];
+ list ($network, $bits) = split("/", $cidr);
+ if($bits != '32' && $bits != '32' && $bits > '22') {
+ $broadcast = trim(`$ipcalc $cidr | grep Broadcast | cut -d" " -f 2`);
+ $ip = ip2long($network) + '1';
+ $end = ip2long($broadcast);
+ while($ip < $end) {
+ $ipdotted = long2ip($ip);
+ if(mysql_result(mysql_query("SELECT count(id) FROM ipaddr WHERE addr = '$ipdotted'"),0) == '0' && match_network($nets, $ipdotted)) {
+ fputs($handle, $ipdotted . "\n");
+ }
+ $ip++;
+ }
+ }
+}
+
+`fping -t 100 -f ips.txt > ips-scanned.txt`;
+
+?>
diff --git a/generate-map.sh b/generate-map.sh
new file mode 100755
index 0000000000..3bec69ec4f
--- /dev/null
+++ b/generate-map.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+./map.php > map.dot && unflatten -l4 -f map.dot | dot -Tpng -o html/network-big.png && convert -resize 400x300 html/network-big.png html/network.png
+
diff --git a/get-apache.sh b/get-apache.sh
new file mode 100755
index 0000000000..46ef75d58e
--- /dev/null
+++ b/get-apache.sh
@@ -0,0 +1,43 @@
+#!/usr/bin/perl
+
+# depends on availability of status and extended status info from your
+# Apache webserver -- your httpd.conf needs to include something like the
+# following: (uncommented)
+#
+# SetHandler server-status
+# Order allow,deny
+# Allow from localhost
+#
+#ExtendedStatus On
+
+# can return hits or bytes (counters)
+
+@res = `/usr/bin/lynx -dump http://$ARGV[0]:80/server-status`;
+
+foreach $res (@res) {
+ if ($res =~ /Server uptime: (.*)$/) { $up = $1; last } else { next }
+ if ($res =~ /Server at/) { $server = $res; last } else { next }
+}
+
+@res = `/usr/bin/lynx -dump http://$ARGV[0]:80/server-status?auto`;
+
+foreach $res (@res) {
+ if ($res =~ /Total Accesses: (\d+)/) { $d1 = $1; next }
+ if ($res =~ /Total kBytes: (\d+)/) { $d2 = $1 * 1024; next }
+}
+
+$d1 = int($d1);
+$d2 = int($d2);
+
+#if ($ARGV[1] eq "hits") {
+ print "$d1\n";
+# print "$d1\n";
+#} elsif ($ARGV[1] eq "bytes") {
+ print "$d2\n";
+# print "$d2\n";
+#}
+
+print "$up\n";
+print "$server";
+
+
diff --git a/host-add.php b/host-add.php
new file mode 100755
index 0000000000..3bcb68984f
--- /dev/null
+++ b/host-add.php
@@ -0,0 +1,22 @@
+#!/usr/bin/php
+
+include("config.php"); include("includes/functions.php");
+
+if($argv[1] && $argv[2] && $argv[3]) {
+ $host = strtolower($argv[1]);
+ $community = $argv[2];
+ $snmpver = strtolower($argv[3]);
+ list($hostshort) = explode(".", $host);
+ if ( isDomainResolves($argv[1])){
+ if ( isPingable($argv[1])) {
+ if ( mysql_result(mysql_query("SELECT COUNT(*) FROM `devices` WHERE `hostname` = '$host'"), 0) == '0' ) {
+ $snmphost = trim(`snmpget -Oqv -$snmpver -c $community $host sysName.0 | sed s/\"//g`);
+ if ($snmphost == $host || $hostshort = $host) {
+ createHost ($host, $community, $snmpver);
+ } else { echo("Given hostname does not match SNMP-read hostname!\n"); }
+ } else { echo("Already got host $host\n"); }
+ } else { echo("Could not ping $host\n"); }
+ } else { echo("Could not resolve $host\n"); }
+} else { echo("Usage: ./host-add.php "); }
+
+?>
diff --git a/host-del.php b/host-del.php
new file mode 100755
index 0000000000..152a7e8899
--- /dev/null
+++ b/host-del.php
@@ -0,0 +1,20 @@
+#!/usr/bin/php
+
+include("config.php");
+include("includes/functions.php");
+
+# Remove a host and all related data from the system
+
+if($argv[1]) {
+ $host = strtolower($argv[1]);
+ $id = getidbyname($host);
+ mysql_query("DELETE FROM `devices` WHERE `id` = '$id'");
+ mysql_query("DELETE FROM `interfaces` WHERE `host` = '$id'");
+ `rm -f rrd/$host-*.rrd`;
+ `./cleanup.php`;
+ echo("Removed $host");
+} else {
+ echo("Need host to remove!\n\n");
+}
+
+?>
diff --git a/html/.htaccess b/html/.htaccess
new file mode 100644
index 0000000000..716530c27f
--- /dev/null
+++ b/html/.htaccess
@@ -0,0 +1,11 @@
+Options FollowSymlinks Multiviews
+
+RewriteBase /
+RewriteEngine on
+RewriteCond %{REQUEST_URI} !^(.*)\.php$
+RewriteCond %{REQUEST_URI} !^(.*)\.css$
+RewriteCond %{REQUEST_URI} !^(.*)\.jpg$
+RewriteCond %{REQUEST_URI} !^(.*)\.gif$
+RewriteCond %{REQUEST_URI} !^(.*)\.png$
+
+RewriteRule ^([a-z]+)$ ?page=$1
diff --git a/html/css/styles.css b/html/css/styles.css
new file mode 100644
index 0000000000..f8a46e9c20
--- /dev/null
+++ b/html/css/styles.css
@@ -0,0 +1,812 @@
+img { border: 0; }
+
+A { text-decoration: none; }
+A:link { color: #0000cc; }
+A:visited { color: #0000cc; }
+A:hover { color: #990099; }
+A:active { color: #00000; }
+
+A.red:visited, a.red, .red {color: #CC0000;}
+A.grey:visited, A.grey, .gray {color: #36393D;}
+A.black:visited, A.black, .black {color: #000000;}
+A.green:visited, A.green, .green {color: #008C00;}
+A.blue:visited, A.blue, .blue {color: #0000ff;}
+A.orange:visited, a.orange, .orange {color: #FF7400;}
+
+
+.pinkbg { background-color: #ffbbbb; }
+.redbg { background-color: #ff8585; }
+.bluebg { background-color: #aaaaff; }
+.greenbg { background-color: #aaffaa; }
+.greybg { background-color: #dddddd; }
+
+.page-h2 {
+ font-size: 14px;
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.header-text {
+ font-family: sans-serif;
+ font-size: 16px;
+ font-style: normal;
+ font-weight: bold;
+ color: #000000;
+}
+
+.interface-header {
+ font-family: sans-serif;
+ font-size: 20px;
+ font-style: normal;
+ font-weight: bold;
+ color: #000000;
+}
+
+.graphhead, .sectionhead {
+ font-size: 15px;
+ font-style: normal;
+ font-weight: bold;
+ color: #555;
+}
+
+.tablehead {
+ font-family: Verdana, arial, sans-serif;
+ font-weight: bold;
+ font-size: 13px;
+ font-style: normal;
+ font-weight: bold;
+ color: #666;
+}
+
+.box-desc {
+ font-family: "Verdana", Arial, Helvetica, sans-serif;
+ font-size: 12px;
+ font-style: italic;
+}
+
+.interface-desc {
+ font-family: "Verdana", Arial, Helvetica, sans-serif;
+ font-size: 11px;
+ font-style: normal;
+}
+
+.syslog {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 12px;
+ font-style: normal;
+ color: #000000;
+}
+
+.page-header, .device-header {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 24px;
+ font-weight: bold;
+ color: black;
+}
+
+.top-subtitle {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 22px;
+ font-weight: bold;
+ vertical-align: middle;
+}
+
+.device-header {
+ font-size: 20px;
+}
+
+.device-head {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 16px;
+ font-weight: bold;
+}
+
+.list-device, .list-device-ignored, .list-device-down, .list-device-ignored-up {
+}
+
+.device-head, .list-device {
+ color: #000cc;
+}
+
+.list-device-down, a.list-device-down, a.list-device-down:visited {
+ color: #cc0000;
+}
+
+a.list-device-ignored-up {
+ color: #009900;
+}
+
+.footer-text {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 12px;
+ font-style: normal;
+ font-weight: bold;
+ color: #FFFFFF;
+}
+
+.header-text-3 {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-style: normal;
+ font-weight: bold;
+ color: #ffffff;
+}
+
+.body-1 {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-style: normal;
+ font-weight: normal;
+ color: #000000;
+}
+
+.body-date-1 {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-style: normal;
+ font-weight: normal;
+ color: #000000;
+}
+
+.copy {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-style: italic;
+ font-weight: normal;
+ color: #000000;
+}
+
+.body-2 {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ color: #000000;
+}
+
+.body-field-1 {
+ font-family: verdana, font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+ font-style: normal;
+ font-weight: bold;
+ color: #000000;
+}
+
+.body-head-1 {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 16px;
+ font-style: normal;
+ font-weight: bold;
+ color: #000000;
+}
+
+.body-head {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 32px;
+ font-style: normal;
+ font-weight: bold;
+ color: #000000;
+}
+
+.body-head-2, .table-head-2 {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: bold;
+ color: #000000;
+}
+
+.table-head-2 {
+ background-color: #cccccc;
+}
+
+
+.text-more {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-style: normal;
+ font-weight: bold;
+ color: #cc0000;
+}
+
+.body-blue {
+ color: #0000CC;
+}
+
+.top-menu:link {
+ color: #dddddd;
+ text-decoration: none;
+}
+.top-menu:visited {
+ color: #dddddd;
+ text-decoration: none;
+}
+.top-menu:hover {
+ color: #CC0000;
+ text-decoration: none;
+}
+.top-menu:active {
+ color: #000000;
+ text-decoration: none;
+}
+
+.menu-box-dash-off {
+ border: 1px dashed #000000;
+}
+
+.copyright {
+ bottom: 0px;
+ margin: 10px auto;
+ position: relative;
+ background-color: #eeeeee;
+ text-align: center;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ font-style: italic;
+ font-weight: normal;
+ color: #000000;
+ width: 360px;
+ padding: 10px;
+}
+
+body {
+ margin: 0px; padding: 0px 0px 0px 0px;
+ background-color: #fff; color: #666;
+ font: 10pt Verdana;
+ line-height: 20px;
+}
+
+
+
+ Really Delete?
+ ';self.close()">Yes!
+ No!
diff --git a/html/graph.php b/html/graph.php
new file mode 100644
index 0000000000..f32cdf05b3
--- /dev/null
+++ b/html/graph.php
@@ -0,0 +1,158 @@
+
diff --git a/html/graphs b/html/graphs
new file mode 120000
index 0000000000..f37cb17edc
--- /dev/null
+++ b/html/graphs
@@ -0,0 +1 @@
+../graphs/
\ No newline at end of file
diff --git a/html/images/16/Thumbs.db b/html/images/16/Thumbs.db
new file mode 100755
index 0000000000..e464d402cd
Binary files /dev/null and b/html/images/16/Thumbs.db differ
diff --git a/html/images/16/accept.png b/html/images/16/accept.png
new file mode 100755
index 0000000000..89c8129a49
Binary files /dev/null and b/html/images/16/accept.png differ
diff --git a/html/images/16/add.png b/html/images/16/add.png
new file mode 100755
index 0000000000..6332fefea4
Binary files /dev/null and b/html/images/16/add.png differ
diff --git a/html/images/16/anchor.png b/html/images/16/anchor.png
new file mode 100755
index 0000000000..9b3422c61e
Binary files /dev/null and b/html/images/16/anchor.png differ
diff --git a/html/images/16/application.png b/html/images/16/application.png
new file mode 100755
index 0000000000..1dee9e3660
Binary files /dev/null and b/html/images/16/application.png differ
diff --git a/html/images/16/application_add.png b/html/images/16/application_add.png
new file mode 100755
index 0000000000..2e945076cf
Binary files /dev/null and b/html/images/16/application_add.png differ
diff --git a/html/images/16/application_cascade.png b/html/images/16/application_cascade.png
new file mode 100755
index 0000000000..da5c622eac
Binary files /dev/null and b/html/images/16/application_cascade.png differ
diff --git a/html/images/16/application_delete.png b/html/images/16/application_delete.png
new file mode 100755
index 0000000000..0a335acf67
Binary files /dev/null and b/html/images/16/application_delete.png differ
diff --git a/html/images/16/application_double.png b/html/images/16/application_double.png
new file mode 100755
index 0000000000..647592f2e9
Binary files /dev/null and b/html/images/16/application_double.png differ
diff --git a/html/images/16/application_edit.png b/html/images/16/application_edit.png
new file mode 100755
index 0000000000..fb2efb8775
Binary files /dev/null and b/html/images/16/application_edit.png differ
diff --git a/html/images/16/application_error.png b/html/images/16/application_error.png
new file mode 100755
index 0000000000..b35fa57171
Binary files /dev/null and b/html/images/16/application_error.png differ
diff --git a/html/images/16/application_form.png b/html/images/16/application_form.png
new file mode 100755
index 0000000000..807b862cfc
Binary files /dev/null and b/html/images/16/application_form.png differ
diff --git a/html/images/16/application_form_add.png b/html/images/16/application_form_add.png
new file mode 100755
index 0000000000..28c2175e69
Binary files /dev/null and b/html/images/16/application_form_add.png differ
diff --git a/html/images/16/application_form_delete.png b/html/images/16/application_form_delete.png
new file mode 100755
index 0000000000..cd305ec83b
Binary files /dev/null and b/html/images/16/application_form_delete.png differ
diff --git a/html/images/16/application_form_edit.png b/html/images/16/application_form_edit.png
new file mode 100755
index 0000000000..af486c940c
Binary files /dev/null and b/html/images/16/application_form_edit.png differ
diff --git a/html/images/16/application_form_magnify.png b/html/images/16/application_form_magnify.png
new file mode 100755
index 0000000000..7b7fbd17e3
Binary files /dev/null and b/html/images/16/application_form_magnify.png differ
diff --git a/html/images/16/application_get.png b/html/images/16/application_get.png
new file mode 100755
index 0000000000..28e41ea2bb
Binary files /dev/null and b/html/images/16/application_get.png differ
diff --git a/html/images/16/application_go.png b/html/images/16/application_go.png
new file mode 100755
index 0000000000..5cc2b0dd36
Binary files /dev/null and b/html/images/16/application_go.png differ
diff --git a/html/images/16/application_home.png b/html/images/16/application_home.png
new file mode 100755
index 0000000000..b60d0c85af
Binary files /dev/null and b/html/images/16/application_home.png differ
diff --git a/html/images/16/application_key.png b/html/images/16/application_key.png
new file mode 100755
index 0000000000..998d65c694
Binary files /dev/null and b/html/images/16/application_key.png differ
diff --git a/html/images/16/application_lightning.png b/html/images/16/application_lightning.png
new file mode 100755
index 0000000000..7e91545c73
Binary files /dev/null and b/html/images/16/application_lightning.png differ
diff --git a/html/images/16/application_link.png b/html/images/16/application_link.png
new file mode 100755
index 0000000000..f8fbb3ed94
Binary files /dev/null and b/html/images/16/application_link.png differ
diff --git a/html/images/16/application_osx.png b/html/images/16/application_osx.png
new file mode 100755
index 0000000000..9f022ece86
Binary files /dev/null and b/html/images/16/application_osx.png differ
diff --git a/html/images/16/application_osx_terminal.png b/html/images/16/application_osx_terminal.png
new file mode 100755
index 0000000000..b3d8ce01e2
Binary files /dev/null and b/html/images/16/application_osx_terminal.png differ
diff --git a/html/images/16/application_put.png b/html/images/16/application_put.png
new file mode 100755
index 0000000000..c30cf59894
Binary files /dev/null and b/html/images/16/application_put.png differ
diff --git a/html/images/16/application_side_boxes.png b/html/images/16/application_side_boxes.png
new file mode 100755
index 0000000000..efbf3c4f8a
Binary files /dev/null and b/html/images/16/application_side_boxes.png differ
diff --git a/html/images/16/application_side_contract.png b/html/images/16/application_side_contract.png
new file mode 100755
index 0000000000..3585f94d61
Binary files /dev/null and b/html/images/16/application_side_contract.png differ
diff --git a/html/images/16/application_side_expand.png b/html/images/16/application_side_expand.png
new file mode 100755
index 0000000000..030cf7c378
Binary files /dev/null and b/html/images/16/application_side_expand.png differ
diff --git a/html/images/16/application_side_list.png b/html/images/16/application_side_list.png
new file mode 100755
index 0000000000..248eaf1ac1
Binary files /dev/null and b/html/images/16/application_side_list.png differ
diff --git a/html/images/16/application_side_tree.png b/html/images/16/application_side_tree.png
new file mode 100755
index 0000000000..f04a52b3df
Binary files /dev/null and b/html/images/16/application_side_tree.png differ
diff --git a/html/images/16/application_split.png b/html/images/16/application_split.png
new file mode 100755
index 0000000000..a91c78a5c4
Binary files /dev/null and b/html/images/16/application_split.png differ
diff --git a/html/images/16/application_tile_horizontal.png b/html/images/16/application_tile_horizontal.png
new file mode 100755
index 0000000000..8a1191c389
Binary files /dev/null and b/html/images/16/application_tile_horizontal.png differ
diff --git a/html/images/16/application_tile_vertical.png b/html/images/16/application_tile_vertical.png
new file mode 100755
index 0000000000..1d40383d31
Binary files /dev/null and b/html/images/16/application_tile_vertical.png differ
diff --git a/html/images/16/application_view_columns.png b/html/images/16/application_view_columns.png
new file mode 100755
index 0000000000..dc2e9d5f5f
Binary files /dev/null and b/html/images/16/application_view_columns.png differ
diff --git a/html/images/16/application_view_detail.png b/html/images/16/application_view_detail.png
new file mode 100755
index 0000000000..aba044bbc9
Binary files /dev/null and b/html/images/16/application_view_detail.png differ
diff --git a/html/images/16/application_view_gallery.png b/html/images/16/application_view_gallery.png
new file mode 100755
index 0000000000..851950db7c
Binary files /dev/null and b/html/images/16/application_view_gallery.png differ
diff --git a/html/images/16/application_view_icons.png b/html/images/16/application_view_icons.png
new file mode 100755
index 0000000000..6a93cdaa78
Binary files /dev/null and b/html/images/16/application_view_icons.png differ
diff --git a/html/images/16/application_view_list.png b/html/images/16/application_view_list.png
new file mode 100755
index 0000000000..acc30b853b
Binary files /dev/null and b/html/images/16/application_view_list.png differ
diff --git a/html/images/16/application_view_tile.png b/html/images/16/application_view_tile.png
new file mode 100755
index 0000000000..3bc0bd32fc
Binary files /dev/null and b/html/images/16/application_view_tile.png differ
diff --git a/html/images/16/application_xp.png b/html/images/16/application_xp.png
new file mode 100755
index 0000000000..d22860a316
Binary files /dev/null and b/html/images/16/application_xp.png differ
diff --git a/html/images/16/application_xp_terminal.png b/html/images/16/application_xp_terminal.png
new file mode 100755
index 0000000000..c28dd63812
Binary files /dev/null and b/html/images/16/application_xp_terminal.png differ
diff --git a/html/images/16/arrow_branch.png b/html/images/16/arrow_branch.png
new file mode 100755
index 0000000000..7542db1d1a
Binary files /dev/null and b/html/images/16/arrow_branch.png differ
diff --git a/html/images/16/arrow_divide.png b/html/images/16/arrow_divide.png
new file mode 100755
index 0000000000..61a7b1d995
Binary files /dev/null and b/html/images/16/arrow_divide.png differ
diff --git a/html/images/16/arrow_down.png b/html/images/16/arrow_down.png
new file mode 100755
index 0000000000..2c4e279377
Binary files /dev/null and b/html/images/16/arrow_down.png differ
diff --git a/html/images/16/arrow_in.png b/html/images/16/arrow_in.png
new file mode 100755
index 0000000000..745c65134d
Binary files /dev/null and b/html/images/16/arrow_in.png differ
diff --git a/html/images/16/arrow_inout.png b/html/images/16/arrow_inout.png
new file mode 100755
index 0000000000..1b763672ab
Binary files /dev/null and b/html/images/16/arrow_inout.png differ
diff --git a/html/images/16/arrow_join.png b/html/images/16/arrow_join.png
new file mode 100755
index 0000000000..a128413d88
Binary files /dev/null and b/html/images/16/arrow_join.png differ
diff --git a/html/images/16/arrow_left.png b/html/images/16/arrow_left.png
new file mode 100755
index 0000000000..5dc696781e
Binary files /dev/null and b/html/images/16/arrow_left.png differ
diff --git a/html/images/16/arrow_merge.png b/html/images/16/arrow_merge.png
new file mode 100755
index 0000000000..7502dbb332
Binary files /dev/null and b/html/images/16/arrow_merge.png differ
diff --git a/html/images/16/arrow_out.png b/html/images/16/arrow_out.png
new file mode 100755
index 0000000000..2e9bc42bec
Binary files /dev/null and b/html/images/16/arrow_out.png differ
diff --git a/html/images/16/arrow_redo.png b/html/images/16/arrow_redo.png
new file mode 100755
index 0000000000..fdc394c7c5
Binary files /dev/null and b/html/images/16/arrow_redo.png differ
diff --git a/html/images/16/arrow_refresh.png b/html/images/16/arrow_refresh.png
new file mode 100755
index 0000000000..0de26566d4
Binary files /dev/null and b/html/images/16/arrow_refresh.png differ
diff --git a/html/images/16/arrow_refresh_small.png b/html/images/16/arrow_refresh_small.png
new file mode 100755
index 0000000000..d3087dfc92
Binary files /dev/null and b/html/images/16/arrow_refresh_small.png differ
diff --git a/html/images/16/arrow_right.png b/html/images/16/arrow_right.png
new file mode 100755
index 0000000000..b1a1819238
Binary files /dev/null and b/html/images/16/arrow_right.png differ
diff --git a/html/images/16/arrow_rotate_anticlockwise.png b/html/images/16/arrow_rotate_anticlockwise.png
new file mode 100755
index 0000000000..46c75aa859
Binary files /dev/null and b/html/images/16/arrow_rotate_anticlockwise.png differ
diff --git a/html/images/16/arrow_rotate_clockwise.png b/html/images/16/arrow_rotate_clockwise.png
new file mode 100755
index 0000000000..aa65210eb0
Binary files /dev/null and b/html/images/16/arrow_rotate_clockwise.png differ
diff --git a/html/images/16/arrow_switch.png b/html/images/16/arrow_switch.png
new file mode 100755
index 0000000000..258c16c63a
Binary files /dev/null and b/html/images/16/arrow_switch.png differ
diff --git a/html/images/16/arrow_turn_left.png b/html/images/16/arrow_turn_left.png
new file mode 100755
index 0000000000..a3d6c9e39e
Binary files /dev/null and b/html/images/16/arrow_turn_left.png differ
diff --git a/html/images/16/arrow_turn_right.png b/html/images/16/arrow_turn_right.png
new file mode 100755
index 0000000000..629f20d622
Binary files /dev/null and b/html/images/16/arrow_turn_right.png differ
diff --git a/html/images/16/arrow_undo.png b/html/images/16/arrow_undo.png
new file mode 100755
index 0000000000..6972c5e594
Binary files /dev/null and b/html/images/16/arrow_undo.png differ
diff --git a/html/images/16/arrow_up.png b/html/images/16/arrow_up.png
new file mode 100755
index 0000000000..1ebb193243
Binary files /dev/null and b/html/images/16/arrow_up.png differ
diff --git a/html/images/16/asterisk_orange.png b/html/images/16/asterisk_orange.png
new file mode 100755
index 0000000000..1ebebde546
Binary files /dev/null and b/html/images/16/asterisk_orange.png differ
diff --git a/html/images/16/asterisk_yellow.png b/html/images/16/asterisk_yellow.png
new file mode 100755
index 0000000000..bab7cc9bcc
Binary files /dev/null and b/html/images/16/asterisk_yellow.png differ
diff --git a/html/images/16/attach.png b/html/images/16/attach.png
new file mode 100755
index 0000000000..ea897cc9f1
Binary files /dev/null and b/html/images/16/attach.png differ
diff --git a/html/images/16/award_star_add.png b/html/images/16/award_star_add.png
new file mode 100755
index 0000000000..9c4be9be20
Binary files /dev/null and b/html/images/16/award_star_add.png differ
diff --git a/html/images/16/award_star_bronze_1.png b/html/images/16/award_star_bronze_1.png
new file mode 100755
index 0000000000..658c7117bb
Binary files /dev/null and b/html/images/16/award_star_bronze_1.png differ
diff --git a/html/images/16/award_star_bronze_2.png b/html/images/16/award_star_bronze_2.png
new file mode 100755
index 0000000000..e47babd7ba
Binary files /dev/null and b/html/images/16/award_star_bronze_2.png differ
diff --git a/html/images/16/award_star_bronze_3.png b/html/images/16/award_star_bronze_3.png
new file mode 100755
index 0000000000..396e4b3a25
Binary files /dev/null and b/html/images/16/award_star_bronze_3.png differ
diff --git a/html/images/16/award_star_delete.png b/html/images/16/award_star_delete.png
new file mode 100755
index 0000000000..4721b152a0
Binary files /dev/null and b/html/images/16/award_star_delete.png differ
diff --git a/html/images/16/award_star_gold_1.png b/html/images/16/award_star_gold_1.png
new file mode 100755
index 0000000000..97a22b72ee
Binary files /dev/null and b/html/images/16/award_star_gold_1.png differ
diff --git a/html/images/16/award_star_gold_2.png b/html/images/16/award_star_gold_2.png
new file mode 100755
index 0000000000..0eaa571757
Binary files /dev/null and b/html/images/16/award_star_gold_2.png differ
diff --git a/html/images/16/award_star_gold_3.png b/html/images/16/award_star_gold_3.png
new file mode 100755
index 0000000000..124c9914f3
Binary files /dev/null and b/html/images/16/award_star_gold_3.png differ
diff --git a/html/images/16/award_star_silver_1.png b/html/images/16/award_star_silver_1.png
new file mode 100755
index 0000000000..028a54626a
Binary files /dev/null and b/html/images/16/award_star_silver_1.png differ
diff --git a/html/images/16/award_star_silver_2.png b/html/images/16/award_star_silver_2.png
new file mode 100755
index 0000000000..e487c3a19e
Binary files /dev/null and b/html/images/16/award_star_silver_2.png differ
diff --git a/html/images/16/award_star_silver_3.png b/html/images/16/award_star_silver_3.png
new file mode 100755
index 0000000000..1d72d47247
Binary files /dev/null and b/html/images/16/award_star_silver_3.png differ
diff --git a/html/images/16/basket.png b/html/images/16/basket.png
new file mode 100755
index 0000000000..b0686d7871
Binary files /dev/null and b/html/images/16/basket.png differ
diff --git a/html/images/16/basket_add.png b/html/images/16/basket_add.png
new file mode 100755
index 0000000000..355436823b
Binary files /dev/null and b/html/images/16/basket_add.png differ
diff --git a/html/images/16/basket_delete.png b/html/images/16/basket_delete.png
new file mode 100755
index 0000000000..1349974f60
Binary files /dev/null and b/html/images/16/basket_delete.png differ
diff --git a/html/images/16/basket_edit.png b/html/images/16/basket_edit.png
new file mode 100755
index 0000000000..8138bbdf05
Binary files /dev/null and b/html/images/16/basket_edit.png differ
diff --git a/html/images/16/basket_error.png b/html/images/16/basket_error.png
new file mode 100755
index 0000000000..3978b2923a
Binary files /dev/null and b/html/images/16/basket_error.png differ
diff --git a/html/images/16/basket_go.png b/html/images/16/basket_go.png
new file mode 100755
index 0000000000..ed8b9a5769
Binary files /dev/null and b/html/images/16/basket_go.png differ
diff --git a/html/images/16/basket_put.png b/html/images/16/basket_put.png
new file mode 100755
index 0000000000..be62faaaab
Binary files /dev/null and b/html/images/16/basket_put.png differ
diff --git a/html/images/16/basket_remove.png b/html/images/16/basket_remove.png
new file mode 100755
index 0000000000..04dd7fd3bb
Binary files /dev/null and b/html/images/16/basket_remove.png differ
diff --git a/html/images/16/bell.png b/html/images/16/bell.png
new file mode 100755
index 0000000000..6e0015df4f
Binary files /dev/null and b/html/images/16/bell.png differ
diff --git a/html/images/16/bell_add.png b/html/images/16/bell_add.png
new file mode 100755
index 0000000000..7db01d6279
Binary files /dev/null and b/html/images/16/bell_add.png differ
diff --git a/html/images/16/bell_delete.png b/html/images/16/bell_delete.png
new file mode 100755
index 0000000000..23907bbba9
Binary files /dev/null and b/html/images/16/bell_delete.png differ
diff --git a/html/images/16/bell_error.png b/html/images/16/bell_error.png
new file mode 100755
index 0000000000..a0ddc00281
Binary files /dev/null and b/html/images/16/bell_error.png differ
diff --git a/html/images/16/bell_go.png b/html/images/16/bell_go.png
new file mode 100755
index 0000000000..b89bb34345
Binary files /dev/null and b/html/images/16/bell_go.png differ
diff --git a/html/images/16/bell_link.png b/html/images/16/bell_link.png
new file mode 100755
index 0000000000..b8c64af1ee
Binary files /dev/null and b/html/images/16/bell_link.png differ
diff --git a/html/images/16/bin.png b/html/images/16/bin.png
new file mode 100755
index 0000000000..ebad933c8b
Binary files /dev/null and b/html/images/16/bin.png differ
diff --git a/html/images/16/bin_closed.png b/html/images/16/bin_closed.png
new file mode 100755
index 0000000000..afe22ba99e
Binary files /dev/null and b/html/images/16/bin_closed.png differ
diff --git a/html/images/16/bin_empty.png b/html/images/16/bin_empty.png
new file mode 100755
index 0000000000..375b8bf6a0
Binary files /dev/null and b/html/images/16/bin_empty.png differ
diff --git a/html/images/16/bomb.png b/html/images/16/bomb.png
new file mode 100755
index 0000000000..1be37974ad
Binary files /dev/null and b/html/images/16/bomb.png differ
diff --git a/html/images/16/book.png b/html/images/16/book.png
new file mode 100755
index 0000000000..b0f4dd7928
Binary files /dev/null and b/html/images/16/book.png differ
diff --git a/html/images/16/book_add.png b/html/images/16/book_add.png
new file mode 100755
index 0000000000..e2f0847274
Binary files /dev/null and b/html/images/16/book_add.png differ
diff --git a/html/images/16/book_addresses.png b/html/images/16/book_addresses.png
new file mode 100755
index 0000000000..b73419ba82
Binary files /dev/null and b/html/images/16/book_addresses.png differ
diff --git a/html/images/16/book_delete.png b/html/images/16/book_delete.png
new file mode 100755
index 0000000000..d9a6340d72
Binary files /dev/null and b/html/images/16/book_delete.png differ
diff --git a/html/images/16/book_edit.png b/html/images/16/book_edit.png
new file mode 100755
index 0000000000..6e756cc85a
Binary files /dev/null and b/html/images/16/book_edit.png differ
diff --git a/html/images/16/book_error.png b/html/images/16/book_error.png
new file mode 100755
index 0000000000..f3fbed0dc8
Binary files /dev/null and b/html/images/16/book_error.png differ
diff --git a/html/images/16/book_go.png b/html/images/16/book_go.png
new file mode 100755
index 0000000000..cd4e1964c4
Binary files /dev/null and b/html/images/16/book_go.png differ
diff --git a/html/images/16/book_key.png b/html/images/16/book_key.png
new file mode 100755
index 0000000000..d8e23ec932
Binary files /dev/null and b/html/images/16/book_key.png differ
diff --git a/html/images/16/book_link.png b/html/images/16/book_link.png
new file mode 100755
index 0000000000..dd0820e86d
Binary files /dev/null and b/html/images/16/book_link.png differ
diff --git a/html/images/16/book_next.png b/html/images/16/book_next.png
new file mode 100755
index 0000000000..ff2ea1ab92
Binary files /dev/null and b/html/images/16/book_next.png differ
diff --git a/html/images/16/book_open.png b/html/images/16/book_open.png
new file mode 100755
index 0000000000..7d863f9497
Binary files /dev/null and b/html/images/16/book_open.png differ
diff --git a/html/images/16/book_previous.png b/html/images/16/book_previous.png
new file mode 100755
index 0000000000..2e53c6980f
Binary files /dev/null and b/html/images/16/book_previous.png differ
diff --git a/html/images/16/box.png b/html/images/16/box.png
new file mode 100755
index 0000000000..8443c23eb9
Binary files /dev/null and b/html/images/16/box.png differ
diff --git a/html/images/16/brick.png b/html/images/16/brick.png
new file mode 100755
index 0000000000..7851cf34c9
Binary files /dev/null and b/html/images/16/brick.png differ
diff --git a/html/images/16/brick_add.png b/html/images/16/brick_add.png
new file mode 100755
index 0000000000..fac186bfb7
Binary files /dev/null and b/html/images/16/brick_add.png differ
diff --git a/html/images/16/brick_delete.png b/html/images/16/brick_delete.png
new file mode 100755
index 0000000000..3a8c373482
Binary files /dev/null and b/html/images/16/brick_delete.png differ
diff --git a/html/images/16/brick_edit.png b/html/images/16/brick_edit.png
new file mode 100755
index 0000000000..eb06df3bb3
Binary files /dev/null and b/html/images/16/brick_edit.png differ
diff --git a/html/images/16/brick_error.png b/html/images/16/brick_error.png
new file mode 100755
index 0000000000..18ab01eb2b
Binary files /dev/null and b/html/images/16/brick_error.png differ
diff --git a/html/images/16/brick_go.png b/html/images/16/brick_go.png
new file mode 100755
index 0000000000..fe0d33567d
Binary files /dev/null and b/html/images/16/brick_go.png differ
diff --git a/html/images/16/brick_link.png b/html/images/16/brick_link.png
new file mode 100755
index 0000000000..9ebf013a23
Binary files /dev/null and b/html/images/16/brick_link.png differ
diff --git a/html/images/16/bricks.png b/html/images/16/bricks.png
new file mode 100755
index 0000000000..0905f933b8
Binary files /dev/null and b/html/images/16/bricks.png differ
diff --git a/html/images/16/briefcase.png b/html/images/16/briefcase.png
new file mode 100755
index 0000000000..05c5649129
Binary files /dev/null and b/html/images/16/briefcase.png differ
diff --git a/html/images/16/bug.png b/html/images/16/bug.png
new file mode 100755
index 0000000000..2d5fb90ec6
Binary files /dev/null and b/html/images/16/bug.png differ
diff --git a/html/images/16/bug_add.png b/html/images/16/bug_add.png
new file mode 100755
index 0000000000..ced7817474
Binary files /dev/null and b/html/images/16/bug_add.png differ
diff --git a/html/images/16/bug_delete.png b/html/images/16/bug_delete.png
new file mode 100755
index 0000000000..e81d7571a9
Binary files /dev/null and b/html/images/16/bug_delete.png differ
diff --git a/html/images/16/bug_edit.png b/html/images/16/bug_edit.png
new file mode 100755
index 0000000000..e5c7dc0572
Binary files /dev/null and b/html/images/16/bug_edit.png differ
diff --git a/html/images/16/bug_error.png b/html/images/16/bug_error.png
new file mode 100755
index 0000000000..c4e8c28096
Binary files /dev/null and b/html/images/16/bug_error.png differ
diff --git a/html/images/16/bug_go.png b/html/images/16/bug_go.png
new file mode 100755
index 0000000000..4e4ae99db3
Binary files /dev/null and b/html/images/16/bug_go.png differ
diff --git a/html/images/16/bug_link.png b/html/images/16/bug_link.png
new file mode 100755
index 0000000000..30e25abac0
Binary files /dev/null and b/html/images/16/bug_link.png differ
diff --git a/html/images/16/building.png b/html/images/16/building.png
new file mode 100755
index 0000000000..11a017cfaa
Binary files /dev/null and b/html/images/16/building.png differ
diff --git a/html/images/16/building_add.png b/html/images/16/building_add.png
new file mode 100755
index 0000000000..d88e2b9ab7
Binary files /dev/null and b/html/images/16/building_add.png differ
diff --git a/html/images/16/building_delete.png b/html/images/16/building_delete.png
new file mode 100755
index 0000000000..db6455d2d5
Binary files /dev/null and b/html/images/16/building_delete.png differ
diff --git a/html/images/16/building_edit.png b/html/images/16/building_edit.png
new file mode 100755
index 0000000000..646db36bf7
Binary files /dev/null and b/html/images/16/building_edit.png differ
diff --git a/html/images/16/building_error.png b/html/images/16/building_error.png
new file mode 100755
index 0000000000..a342eefc68
Binary files /dev/null and b/html/images/16/building_error.png differ
diff --git a/html/images/16/building_go.png b/html/images/16/building_go.png
new file mode 100755
index 0000000000..cdcbcb381c
Binary files /dev/null and b/html/images/16/building_go.png differ
diff --git a/html/images/16/building_key.png b/html/images/16/building_key.png
new file mode 100755
index 0000000000..8b79e30ed9
Binary files /dev/null and b/html/images/16/building_key.png differ
diff --git a/html/images/16/building_link.png b/html/images/16/building_link.png
new file mode 100755
index 0000000000..a340629ac9
Binary files /dev/null and b/html/images/16/building_link.png differ
diff --git a/html/images/16/bullet_add.png b/html/images/16/bullet_add.png
new file mode 100755
index 0000000000..41ff8335b0
Binary files /dev/null and b/html/images/16/bullet_add.png differ
diff --git a/html/images/16/bullet_arrow_bottom.png b/html/images/16/bullet_arrow_bottom.png
new file mode 100755
index 0000000000..1a28d82500
Binary files /dev/null and b/html/images/16/bullet_arrow_bottom.png differ
diff --git a/html/images/16/bullet_arrow_down.png b/html/images/16/bullet_arrow_down.png
new file mode 100755
index 0000000000..9b23c06d7b
Binary files /dev/null and b/html/images/16/bullet_arrow_down.png differ
diff --git a/html/images/16/bullet_arrow_top.png b/html/images/16/bullet_arrow_top.png
new file mode 100755
index 0000000000..0ce86d2b2b
Binary files /dev/null and b/html/images/16/bullet_arrow_top.png differ
diff --git a/html/images/16/bullet_arrow_up.png b/html/images/16/bullet_arrow_up.png
new file mode 100755
index 0000000000..24df0f4212
Binary files /dev/null and b/html/images/16/bullet_arrow_up.png differ
diff --git a/html/images/16/bullet_black.png b/html/images/16/bullet_black.png
new file mode 100755
index 0000000000..57619706d1
Binary files /dev/null and b/html/images/16/bullet_black.png differ
diff --git a/html/images/16/bullet_blue.png b/html/images/16/bullet_blue.png
new file mode 100755
index 0000000000..a7651ec8a0
Binary files /dev/null and b/html/images/16/bullet_blue.png differ
diff --git a/html/images/16/bullet_delete.png b/html/images/16/bullet_delete.png
new file mode 100755
index 0000000000..bd6271b246
Binary files /dev/null and b/html/images/16/bullet_delete.png differ
diff --git a/html/images/16/bullet_disk.png b/html/images/16/bullet_disk.png
new file mode 100755
index 0000000000..209c6a7862
Binary files /dev/null and b/html/images/16/bullet_disk.png differ
diff --git a/html/images/16/bullet_error.png b/html/images/16/bullet_error.png
new file mode 100755
index 0000000000..bca2b491fd
Binary files /dev/null and b/html/images/16/bullet_error.png differ
diff --git a/html/images/16/bullet_feed.png b/html/images/16/bullet_feed.png
new file mode 100755
index 0000000000..1a0e0f18f8
Binary files /dev/null and b/html/images/16/bullet_feed.png differ
diff --git a/html/images/16/bullet_go.png b/html/images/16/bullet_go.png
new file mode 100755
index 0000000000..bc4faa709e
Binary files /dev/null and b/html/images/16/bullet_go.png differ
diff --git a/html/images/16/bullet_green.png b/html/images/16/bullet_green.png
new file mode 100755
index 0000000000..058ad261f5
Binary files /dev/null and b/html/images/16/bullet_green.png differ
diff --git a/html/images/16/bullet_key.png b/html/images/16/bullet_key.png
new file mode 100755
index 0000000000..3d37f2ea49
Binary files /dev/null and b/html/images/16/bullet_key.png differ
diff --git a/html/images/16/bullet_orange.png b/html/images/16/bullet_orange.png
new file mode 100755
index 0000000000..fa63024e55
Binary files /dev/null and b/html/images/16/bullet_orange.png differ
diff --git a/html/images/16/bullet_picture.png b/html/images/16/bullet_picture.png
new file mode 100755
index 0000000000..386cb302f1
Binary files /dev/null and b/html/images/16/bullet_picture.png differ
diff --git a/html/images/16/bullet_pink.png b/html/images/16/bullet_pink.png
new file mode 100755
index 0000000000..0c9f73e3f5
Binary files /dev/null and b/html/images/16/bullet_pink.png differ
diff --git a/html/images/16/bullet_purple.png b/html/images/16/bullet_purple.png
new file mode 100755
index 0000000000..52ba5036b9
Binary files /dev/null and b/html/images/16/bullet_purple.png differ
diff --git a/html/images/16/bullet_red.png b/html/images/16/bullet_red.png
new file mode 100755
index 0000000000..0cd8031158
Binary files /dev/null and b/html/images/16/bullet_red.png differ
diff --git a/html/images/16/bullet_star.png b/html/images/16/bullet_star.png
new file mode 100755
index 0000000000..fab774a328
Binary files /dev/null and b/html/images/16/bullet_star.png differ
diff --git a/html/images/16/bullet_toggle_minus.png b/html/images/16/bullet_toggle_minus.png
new file mode 100755
index 0000000000..b47ce55f68
Binary files /dev/null and b/html/images/16/bullet_toggle_minus.png differ
diff --git a/html/images/16/bullet_toggle_plus.png b/html/images/16/bullet_toggle_plus.png
new file mode 100755
index 0000000000..9ab4a89664
Binary files /dev/null and b/html/images/16/bullet_toggle_plus.png differ
diff --git a/html/images/16/bullet_white.png b/html/images/16/bullet_white.png
new file mode 100755
index 0000000000..a9af8d44bf
Binary files /dev/null and b/html/images/16/bullet_white.png differ
diff --git a/html/images/16/bullet_wrench.png b/html/images/16/bullet_wrench.png
new file mode 100755
index 0000000000..67817e6e5a
Binary files /dev/null and b/html/images/16/bullet_wrench.png differ
diff --git a/html/images/16/bullet_yellow.png b/html/images/16/bullet_yellow.png
new file mode 100755
index 0000000000..6469cea7e9
Binary files /dev/null and b/html/images/16/bullet_yellow.png differ
diff --git a/html/images/16/cake.png b/html/images/16/cake.png
new file mode 100755
index 0000000000..4ef151aeef
Binary files /dev/null and b/html/images/16/cake.png differ
diff --git a/html/images/16/calculator.png b/html/images/16/calculator.png
new file mode 100755
index 0000000000..701a60a5a4
Binary files /dev/null and b/html/images/16/calculator.png differ
diff --git a/html/images/16/calculator_add.png b/html/images/16/calculator_add.png
new file mode 100755
index 0000000000..fd377bde39
Binary files /dev/null and b/html/images/16/calculator_add.png differ
diff --git a/html/images/16/calculator_delete.png b/html/images/16/calculator_delete.png
new file mode 100755
index 0000000000..ac96170ecd
Binary files /dev/null and b/html/images/16/calculator_delete.png differ
diff --git a/html/images/16/calculator_edit.png b/html/images/16/calculator_edit.png
new file mode 100755
index 0000000000..63b06b9875
Binary files /dev/null and b/html/images/16/calculator_edit.png differ
diff --git a/html/images/16/calculator_error.png b/html/images/16/calculator_error.png
new file mode 100755
index 0000000000..0bc4288a47
Binary files /dev/null and b/html/images/16/calculator_error.png differ
diff --git a/html/images/16/calculator_link.png b/html/images/16/calculator_link.png
new file mode 100755
index 0000000000..a2a8fe69f1
Binary files /dev/null and b/html/images/16/calculator_link.png differ
diff --git a/html/images/16/calendar.png b/html/images/16/calendar.png
new file mode 100755
index 0000000000..658913852d
Binary files /dev/null and b/html/images/16/calendar.png differ
diff --git a/html/images/16/calendar_add.png b/html/images/16/calendar_add.png
new file mode 100755
index 0000000000..17679db6bd
Binary files /dev/null and b/html/images/16/calendar_add.png differ
diff --git a/html/images/16/calendar_delete.png b/html/images/16/calendar_delete.png
new file mode 100755
index 0000000000..69a3b10ad1
Binary files /dev/null and b/html/images/16/calendar_delete.png differ
diff --git a/html/images/16/calendar_edit.png b/html/images/16/calendar_edit.png
new file mode 100755
index 0000000000..d1d2d6e684
Binary files /dev/null and b/html/images/16/calendar_edit.png differ
diff --git a/html/images/16/calendar_link.png b/html/images/16/calendar_link.png
new file mode 100755
index 0000000000..6b106b9429
Binary files /dev/null and b/html/images/16/calendar_link.png differ
diff --git a/html/images/16/calendar_view_day.png b/html/images/16/calendar_view_day.png
new file mode 100755
index 0000000000..9740f76ee6
Binary files /dev/null and b/html/images/16/calendar_view_day.png differ
diff --git a/html/images/16/calendar_view_month.png b/html/images/16/calendar_view_month.png
new file mode 100755
index 0000000000..6cff76c1db
Binary files /dev/null and b/html/images/16/calendar_view_month.png differ
diff --git a/html/images/16/calendar_view_week.png b/html/images/16/calendar_view_week.png
new file mode 100755
index 0000000000..8fe695f51f
Binary files /dev/null and b/html/images/16/calendar_view_week.png differ
diff --git a/html/images/16/camera.png b/html/images/16/camera.png
new file mode 100755
index 0000000000..8536d1a795
Binary files /dev/null and b/html/images/16/camera.png differ
diff --git a/html/images/16/camera_add.png b/html/images/16/camera_add.png
new file mode 100755
index 0000000000..08b5da9891
Binary files /dev/null and b/html/images/16/camera_add.png differ
diff --git a/html/images/16/camera_delete.png b/html/images/16/camera_delete.png
new file mode 100755
index 0000000000..3846d74cd8
Binary files /dev/null and b/html/images/16/camera_delete.png differ
diff --git a/html/images/16/camera_edit.png b/html/images/16/camera_edit.png
new file mode 100755
index 0000000000..b5015b103a
Binary files /dev/null and b/html/images/16/camera_edit.png differ
diff --git a/html/images/16/camera_error.png b/html/images/16/camera_error.png
new file mode 100755
index 0000000000..3c1bc95c9c
Binary files /dev/null and b/html/images/16/camera_error.png differ
diff --git a/html/images/16/camera_go.png b/html/images/16/camera_go.png
new file mode 100755
index 0000000000..94ce2b255d
Binary files /dev/null and b/html/images/16/camera_go.png differ
diff --git a/html/images/16/camera_link.png b/html/images/16/camera_link.png
new file mode 100755
index 0000000000..d2ac9f9350
Binary files /dev/null and b/html/images/16/camera_link.png differ
diff --git a/html/images/16/camera_small.png b/html/images/16/camera_small.png
new file mode 100755
index 0000000000..454b0b0199
Binary files /dev/null and b/html/images/16/camera_small.png differ
diff --git a/html/images/16/cancel.png b/html/images/16/cancel.png
new file mode 100755
index 0000000000..c149c2bc01
Binary files /dev/null and b/html/images/16/cancel.png differ
diff --git a/html/images/16/car.png b/html/images/16/car.png
new file mode 100755
index 0000000000..4f3a770f04
Binary files /dev/null and b/html/images/16/car.png differ
diff --git a/html/images/16/car_add.png b/html/images/16/car_add.png
new file mode 100755
index 0000000000..1215a51a4c
Binary files /dev/null and b/html/images/16/car_add.png differ
diff --git a/html/images/16/car_delete.png b/html/images/16/car_delete.png
new file mode 100755
index 0000000000..2803b56784
Binary files /dev/null and b/html/images/16/car_delete.png differ
diff --git a/html/images/16/cart.png b/html/images/16/cart.png
new file mode 100755
index 0000000000..1baf7b9fde
Binary files /dev/null and b/html/images/16/cart.png differ
diff --git a/html/images/16/cart_add.png b/html/images/16/cart_add.png
new file mode 100755
index 0000000000..45c2900089
Binary files /dev/null and b/html/images/16/cart_add.png differ
diff --git a/html/images/16/cart_delete.png b/html/images/16/cart_delete.png
new file mode 100755
index 0000000000..ac5bce5c88
Binary files /dev/null and b/html/images/16/cart_delete.png differ
diff --git a/html/images/16/cart_edit.png b/html/images/16/cart_edit.png
new file mode 100755
index 0000000000..b94ff88e6a
Binary files /dev/null and b/html/images/16/cart_edit.png differ
diff --git a/html/images/16/cart_error.png b/html/images/16/cart_error.png
new file mode 100755
index 0000000000..144c8353aa
Binary files /dev/null and b/html/images/16/cart_error.png differ
diff --git a/html/images/16/cart_go.png b/html/images/16/cart_go.png
new file mode 100755
index 0000000000..20ee0584f6
Binary files /dev/null and b/html/images/16/cart_go.png differ
diff --git a/html/images/16/cart_put.png b/html/images/16/cart_put.png
new file mode 100755
index 0000000000..3aec353e03
Binary files /dev/null and b/html/images/16/cart_put.png differ
diff --git a/html/images/16/cart_remove.png b/html/images/16/cart_remove.png
new file mode 100755
index 0000000000..360217b526
Binary files /dev/null and b/html/images/16/cart_remove.png differ
diff --git a/html/images/16/cd.png b/html/images/16/cd.png
new file mode 100755
index 0000000000..ef4322357c
Binary files /dev/null and b/html/images/16/cd.png differ
diff --git a/html/images/16/cd_add.png b/html/images/16/cd_add.png
new file mode 100755
index 0000000000..b0254effa6
Binary files /dev/null and b/html/images/16/cd_add.png differ
diff --git a/html/images/16/cd_burn.png b/html/images/16/cd_burn.png
new file mode 100755
index 0000000000..157cb0ba99
Binary files /dev/null and b/html/images/16/cd_burn.png differ
diff --git a/html/images/16/cd_delete.png b/html/images/16/cd_delete.png
new file mode 100755
index 0000000000..7d7b3d525b
Binary files /dev/null and b/html/images/16/cd_delete.png differ
diff --git a/html/images/16/cd_edit.png b/html/images/16/cd_edit.png
new file mode 100755
index 0000000000..b0dc194b05
Binary files /dev/null and b/html/images/16/cd_edit.png differ
diff --git a/html/images/16/cd_eject.png b/html/images/16/cd_eject.png
new file mode 100755
index 0000000000..762932f6b1
Binary files /dev/null and b/html/images/16/cd_eject.png differ
diff --git a/html/images/16/cd_go.png b/html/images/16/cd_go.png
new file mode 100755
index 0000000000..13e04991c5
Binary files /dev/null and b/html/images/16/cd_go.png differ
diff --git a/html/images/16/chart_bar.png b/html/images/16/chart_bar.png
new file mode 100755
index 0000000000..9051fbc609
Binary files /dev/null and b/html/images/16/chart_bar.png differ
diff --git a/html/images/16/chart_bar_add.png b/html/images/16/chart_bar_add.png
new file mode 100755
index 0000000000..d283e846a2
Binary files /dev/null and b/html/images/16/chart_bar_add.png differ
diff --git a/html/images/16/chart_bar_delete.png b/html/images/16/chart_bar_delete.png
new file mode 100755
index 0000000000..259f686873
Binary files /dev/null and b/html/images/16/chart_bar_delete.png differ
diff --git a/html/images/16/chart_bar_edit.png b/html/images/16/chart_bar_edit.png
new file mode 100755
index 0000000000..df64d97e61
Binary files /dev/null and b/html/images/16/chart_bar_edit.png differ
diff --git a/html/images/16/chart_bar_error.png b/html/images/16/chart_bar_error.png
new file mode 100755
index 0000000000..bdacea5e5e
Binary files /dev/null and b/html/images/16/chart_bar_error.png differ
diff --git a/html/images/16/chart_bar_link.png b/html/images/16/chart_bar_link.png
new file mode 100755
index 0000000000..bf18aed48b
Binary files /dev/null and b/html/images/16/chart_bar_link.png differ
diff --git a/html/images/16/chart_curve.png b/html/images/16/chart_curve.png
new file mode 100755
index 0000000000..01e933a619
Binary files /dev/null and b/html/images/16/chart_curve.png differ
diff --git a/html/images/16/chart_curve_add.png b/html/images/16/chart_curve_add.png
new file mode 100755
index 0000000000..f9e2050460
Binary files /dev/null and b/html/images/16/chart_curve_add.png differ
diff --git a/html/images/16/chart_curve_delete.png b/html/images/16/chart_curve_delete.png
new file mode 100755
index 0000000000..b411391c40
Binary files /dev/null and b/html/images/16/chart_curve_delete.png differ
diff --git a/html/images/16/chart_curve_edit.png b/html/images/16/chart_curve_edit.png
new file mode 100755
index 0000000000..bd07673b55
Binary files /dev/null and b/html/images/16/chart_curve_edit.png differ
diff --git a/html/images/16/chart_curve_error.png b/html/images/16/chart_curve_error.png
new file mode 100755
index 0000000000..906dd03836
Binary files /dev/null and b/html/images/16/chart_curve_error.png differ
diff --git a/html/images/16/chart_curve_go.png b/html/images/16/chart_curve_go.png
new file mode 100755
index 0000000000..ac9eda51a4
Binary files /dev/null and b/html/images/16/chart_curve_go.png differ
diff --git a/html/images/16/chart_curve_link.png b/html/images/16/chart_curve_link.png
new file mode 100755
index 0000000000..144eafe086
Binary files /dev/null and b/html/images/16/chart_curve_link.png differ
diff --git a/html/images/16/chart_line.png b/html/images/16/chart_line.png
new file mode 100755
index 0000000000..85020f3205
Binary files /dev/null and b/html/images/16/chart_line.png differ
diff --git a/html/images/16/chart_line_add.png b/html/images/16/chart_line_add.png
new file mode 100755
index 0000000000..5571a5ebc9
Binary files /dev/null and b/html/images/16/chart_line_add.png differ
diff --git a/html/images/16/chart_line_delete.png b/html/images/16/chart_line_delete.png
new file mode 100755
index 0000000000..5b0aa90129
Binary files /dev/null and b/html/images/16/chart_line_delete.png differ
diff --git a/html/images/16/chart_line_edit.png b/html/images/16/chart_line_edit.png
new file mode 100755
index 0000000000..9cf660733d
Binary files /dev/null and b/html/images/16/chart_line_edit.png differ
diff --git a/html/images/16/chart_line_error.png b/html/images/16/chart_line_error.png
new file mode 100755
index 0000000000..ff23c03a8a
Binary files /dev/null and b/html/images/16/chart_line_error.png differ
diff --git a/html/images/16/chart_line_link.png b/html/images/16/chart_line_link.png
new file mode 100755
index 0000000000..f3727d22e7
Binary files /dev/null and b/html/images/16/chart_line_link.png differ
diff --git a/html/images/16/chart_organisation.png b/html/images/16/chart_organisation.png
new file mode 100755
index 0000000000..c32d25c16f
Binary files /dev/null and b/html/images/16/chart_organisation.png differ
diff --git a/html/images/16/chart_organisation_add.png b/html/images/16/chart_organisation_add.png
new file mode 100755
index 0000000000..f0dba4ac43
Binary files /dev/null and b/html/images/16/chart_organisation_add.png differ
diff --git a/html/images/16/chart_organisation_delete.png b/html/images/16/chart_organisation_delete.png
new file mode 100755
index 0000000000..7dc8dcac25
Binary files /dev/null and b/html/images/16/chart_organisation_delete.png differ
diff --git a/html/images/16/chart_pie.png b/html/images/16/chart_pie.png
new file mode 100755
index 0000000000..fe00fa050a
Binary files /dev/null and b/html/images/16/chart_pie.png differ
diff --git a/html/images/16/chart_pie_add.png b/html/images/16/chart_pie_add.png
new file mode 100755
index 0000000000..bf0822ee1c
Binary files /dev/null and b/html/images/16/chart_pie_add.png differ
diff --git a/html/images/16/chart_pie_delete.png b/html/images/16/chart_pie_delete.png
new file mode 100755
index 0000000000..5ab9efd554
Binary files /dev/null and b/html/images/16/chart_pie_delete.png differ
diff --git a/html/images/16/chart_pie_edit.png b/html/images/16/chart_pie_edit.png
new file mode 100755
index 0000000000..3debc12d5e
Binary files /dev/null and b/html/images/16/chart_pie_edit.png differ
diff --git a/html/images/16/chart_pie_error.png b/html/images/16/chart_pie_error.png
new file mode 100755
index 0000000000..7344174fe9
Binary files /dev/null and b/html/images/16/chart_pie_error.png differ
diff --git a/html/images/16/chart_pie_link.png b/html/images/16/chart_pie_link.png
new file mode 100755
index 0000000000..c072f8e05a
Binary files /dev/null and b/html/images/16/chart_pie_link.png differ
diff --git a/html/images/16/clock.png b/html/images/16/clock.png
new file mode 100755
index 0000000000..e2672c2067
Binary files /dev/null and b/html/images/16/clock.png differ
diff --git a/html/images/16/clock_add.png b/html/images/16/clock_add.png
new file mode 100755
index 0000000000..598b839b81
Binary files /dev/null and b/html/images/16/clock_add.png differ
diff --git a/html/images/16/clock_delete.png b/html/images/16/clock_delete.png
new file mode 100755
index 0000000000..8bf9efe4ba
Binary files /dev/null and b/html/images/16/clock_delete.png differ
diff --git a/html/images/16/clock_edit.png b/html/images/16/clock_edit.png
new file mode 100755
index 0000000000..7d3571887a
Binary files /dev/null and b/html/images/16/clock_edit.png differ
diff --git a/html/images/16/clock_error.png b/html/images/16/clock_error.png
new file mode 100755
index 0000000000..a7c461ba9a
Binary files /dev/null and b/html/images/16/clock_error.png differ
diff --git a/html/images/16/clock_go.png b/html/images/16/clock_go.png
new file mode 100755
index 0000000000..a1a24d3f30
Binary files /dev/null and b/html/images/16/clock_go.png differ
diff --git a/html/images/16/clock_link.png b/html/images/16/clock_link.png
new file mode 100755
index 0000000000..481cf04c12
Binary files /dev/null and b/html/images/16/clock_link.png differ
diff --git a/html/images/16/clock_pause.png b/html/images/16/clock_pause.png
new file mode 100755
index 0000000000..ba74725857
Binary files /dev/null and b/html/images/16/clock_pause.png differ
diff --git a/html/images/16/clock_play.png b/html/images/16/clock_play.png
new file mode 100755
index 0000000000..fb4ebc850a
Binary files /dev/null and b/html/images/16/clock_play.png differ
diff --git a/html/images/16/clock_red.png b/html/images/16/clock_red.png
new file mode 100755
index 0000000000..2842cc3386
Binary files /dev/null and b/html/images/16/clock_red.png differ
diff --git a/html/images/16/clock_stop.png b/html/images/16/clock_stop.png
new file mode 100755
index 0000000000..6fe8a6f951
Binary files /dev/null and b/html/images/16/clock_stop.png differ
diff --git a/html/images/16/cog.png b/html/images/16/cog.png
new file mode 100755
index 0000000000..67de2c6ccb
Binary files /dev/null and b/html/images/16/cog.png differ
diff --git a/html/images/16/cog_add.png b/html/images/16/cog_add.png
new file mode 100755
index 0000000000..04f22badca
Binary files /dev/null and b/html/images/16/cog_add.png differ
diff --git a/html/images/16/cog_delete.png b/html/images/16/cog_delete.png
new file mode 100755
index 0000000000..8ce71c475c
Binary files /dev/null and b/html/images/16/cog_delete.png differ
diff --git a/html/images/16/cog_disable.png b/html/images/16/cog_disable.png
new file mode 100644
index 0000000000..30539d97e9
Binary files /dev/null and b/html/images/16/cog_disable.png differ
diff --git a/html/images/16/cog_edit.png b/html/images/16/cog_edit.png
new file mode 100755
index 0000000000..47b75a456a
Binary files /dev/null and b/html/images/16/cog_edit.png differ
diff --git a/html/images/16/cog_error.png b/html/images/16/cog_error.png
new file mode 100755
index 0000000000..47667430a9
Binary files /dev/null and b/html/images/16/cog_error.png differ
diff --git a/html/images/16/cog_go.png b/html/images/16/cog_go.png
new file mode 100755
index 0000000000..3262767cda
Binary files /dev/null and b/html/images/16/cog_go.png differ
diff --git a/html/images/16/coins.png b/html/images/16/coins.png
new file mode 100755
index 0000000000..0ca9074d66
Binary files /dev/null and b/html/images/16/coins.png differ
diff --git a/html/images/16/coins_add.png b/html/images/16/coins_add.png
new file mode 100755
index 0000000000..cdff5d3d4d
Binary files /dev/null and b/html/images/16/coins_add.png differ
diff --git a/html/images/16/coins_delete.png b/html/images/16/coins_delete.png
new file mode 100755
index 0000000000..18e0c0fd94
Binary files /dev/null and b/html/images/16/coins_delete.png differ
diff --git a/html/images/16/color_swatch.png b/html/images/16/color_swatch.png
new file mode 100755
index 0000000000..6e6e85212b
Binary files /dev/null and b/html/images/16/color_swatch.png differ
diff --git a/html/images/16/color_wheel.png b/html/images/16/color_wheel.png
new file mode 100755
index 0000000000..809fb00e5a
Binary files /dev/null and b/html/images/16/color_wheel.png differ
diff --git a/html/images/16/comment.png b/html/images/16/comment.png
new file mode 100755
index 0000000000..7bc9233ea6
Binary files /dev/null and b/html/images/16/comment.png differ
diff --git a/html/images/16/comment_add.png b/html/images/16/comment_add.png
new file mode 100755
index 0000000000..75e78dede2
Binary files /dev/null and b/html/images/16/comment_add.png differ
diff --git a/html/images/16/comment_delete.png b/html/images/16/comment_delete.png
new file mode 100755
index 0000000000..643fdbe8d9
Binary files /dev/null and b/html/images/16/comment_delete.png differ
diff --git a/html/images/16/comment_edit.png b/html/images/16/comment_edit.png
new file mode 100755
index 0000000000..73db110df5
Binary files /dev/null and b/html/images/16/comment_edit.png differ
diff --git a/html/images/16/comments.png b/html/images/16/comments.png
new file mode 100755
index 0000000000..39433cf78a
Binary files /dev/null and b/html/images/16/comments.png differ
diff --git a/html/images/16/comments_add.png b/html/images/16/comments_add.png
new file mode 100755
index 0000000000..b32563442d
Binary files /dev/null and b/html/images/16/comments_add.png differ
diff --git a/html/images/16/comments_delete.png b/html/images/16/comments_delete.png
new file mode 100755
index 0000000000..6df7376d05
Binary files /dev/null and b/html/images/16/comments_delete.png differ
diff --git a/html/images/16/compress.png b/html/images/16/compress.png
new file mode 100755
index 0000000000..8606ff0fd2
Binary files /dev/null and b/html/images/16/compress.png differ
diff --git a/html/images/16/computer.png b/html/images/16/computer.png
new file mode 100755
index 0000000000..9bc37dce36
Binary files /dev/null and b/html/images/16/computer.png differ
diff --git a/html/images/16/computer_add.png b/html/images/16/computer_add.png
new file mode 100755
index 0000000000..db604ee3bc
Binary files /dev/null and b/html/images/16/computer_add.png differ
diff --git a/html/images/16/computer_delete.png b/html/images/16/computer_delete.png
new file mode 100755
index 0000000000..5e9b26836c
Binary files /dev/null and b/html/images/16/computer_delete.png differ
diff --git a/html/images/16/computer_edit.png b/html/images/16/computer_edit.png
new file mode 100755
index 0000000000..34c72fe521
Binary files /dev/null and b/html/images/16/computer_edit.png differ
diff --git a/html/images/16/computer_error.png b/html/images/16/computer_error.png
new file mode 100755
index 0000000000..b2c3ed5780
Binary files /dev/null and b/html/images/16/computer_error.png differ
diff --git a/html/images/16/computer_go.png b/html/images/16/computer_go.png
new file mode 100755
index 0000000000..0b26144d83
Binary files /dev/null and b/html/images/16/computer_go.png differ
diff --git a/html/images/16/computer_key.png b/html/images/16/computer_key.png
new file mode 100755
index 0000000000..eca543017d
Binary files /dev/null and b/html/images/16/computer_key.png differ
diff --git a/html/images/16/computer_link.png b/html/images/16/computer_link.png
new file mode 100755
index 0000000000..3859db2147
Binary files /dev/null and b/html/images/16/computer_link.png differ
diff --git a/html/images/16/connect.png b/html/images/16/connect.png
new file mode 100755
index 0000000000..024138eb33
Binary files /dev/null and b/html/images/16/connect.png differ
diff --git a/html/images/16/contrast.png b/html/images/16/contrast.png
new file mode 100755
index 0000000000..adcc0046f8
Binary files /dev/null and b/html/images/16/contrast.png differ
diff --git a/html/images/16/contrast_decrease.png b/html/images/16/contrast_decrease.png
new file mode 100755
index 0000000000..0155bf5c0b
Binary files /dev/null and b/html/images/16/contrast_decrease.png differ
diff --git a/html/images/16/contrast_high.png b/html/images/16/contrast_high.png
new file mode 100755
index 0000000000..d87c8cbb79
Binary files /dev/null and b/html/images/16/contrast_high.png differ
diff --git a/html/images/16/contrast_increase.png b/html/images/16/contrast_increase.png
new file mode 100755
index 0000000000..a3e7f5200a
Binary files /dev/null and b/html/images/16/contrast_increase.png differ
diff --git a/html/images/16/contrast_low.png b/html/images/16/contrast_low.png
new file mode 100755
index 0000000000..dc9f4b100e
Binary files /dev/null and b/html/images/16/contrast_low.png differ
diff --git a/html/images/16/control_eject.png b/html/images/16/control_eject.png
new file mode 100755
index 0000000000..924d817bb6
Binary files /dev/null and b/html/images/16/control_eject.png differ
diff --git a/html/images/16/control_eject_blue.png b/html/images/16/control_eject_blue.png
new file mode 100755
index 0000000000..2bd4963834
Binary files /dev/null and b/html/images/16/control_eject_blue.png differ
diff --git a/html/images/16/control_end.png b/html/images/16/control_end.png
new file mode 100755
index 0000000000..036e04dcd9
Binary files /dev/null and b/html/images/16/control_end.png differ
diff --git a/html/images/16/control_end_blue.png b/html/images/16/control_end_blue.png
new file mode 100755
index 0000000000..7207935761
Binary files /dev/null and b/html/images/16/control_end_blue.png differ
diff --git a/html/images/16/control_equalizer.png b/html/images/16/control_equalizer.png
new file mode 100755
index 0000000000..46060872cc
Binary files /dev/null and b/html/images/16/control_equalizer.png differ
diff --git a/html/images/16/control_equalizer_blue.png b/html/images/16/control_equalizer_blue.png
new file mode 100755
index 0000000000..1b2e6a3746
Binary files /dev/null and b/html/images/16/control_equalizer_blue.png differ
diff --git a/html/images/16/control_fastforward.png b/html/images/16/control_fastforward.png
new file mode 100755
index 0000000000..31f7fd3adf
Binary files /dev/null and b/html/images/16/control_fastforward.png differ
diff --git a/html/images/16/control_fastforward_blue.png b/html/images/16/control_fastforward_blue.png
new file mode 100755
index 0000000000..4a2f9d4e4a
Binary files /dev/null and b/html/images/16/control_fastforward_blue.png differ
diff --git a/html/images/16/control_pause.png b/html/images/16/control_pause.png
new file mode 100755
index 0000000000..2d9ce9c4ec
Binary files /dev/null and b/html/images/16/control_pause.png differ
diff --git a/html/images/16/control_pause_blue.png b/html/images/16/control_pause_blue.png
new file mode 100755
index 0000000000..ec61099b0b
Binary files /dev/null and b/html/images/16/control_pause_blue.png differ
diff --git a/html/images/16/control_play.png b/html/images/16/control_play.png
new file mode 100755
index 0000000000..0846555d0c
Binary files /dev/null and b/html/images/16/control_play.png differ
diff --git a/html/images/16/control_play_blue.png b/html/images/16/control_play_blue.png
new file mode 100755
index 0000000000..f8c8ec683e
Binary files /dev/null and b/html/images/16/control_play_blue.png differ
diff --git a/html/images/16/control_repeat.png b/html/images/16/control_repeat.png
new file mode 100755
index 0000000000..1c4f57a161
Binary files /dev/null and b/html/images/16/control_repeat.png differ
diff --git a/html/images/16/control_repeat_blue.png b/html/images/16/control_repeat_blue.png
new file mode 100755
index 0000000000..406ec333bc
Binary files /dev/null and b/html/images/16/control_repeat_blue.png differ
diff --git a/html/images/16/control_rewind.png b/html/images/16/control_rewind.png
new file mode 100755
index 0000000000..c029447717
Binary files /dev/null and b/html/images/16/control_rewind.png differ
diff --git a/html/images/16/control_rewind_blue.png b/html/images/16/control_rewind_blue.png
new file mode 100755
index 0000000000..15d1584bdb
Binary files /dev/null and b/html/images/16/control_rewind_blue.png differ
diff --git a/html/images/16/control_start.png b/html/images/16/control_start.png
new file mode 100755
index 0000000000..7dd1c07fba
Binary files /dev/null and b/html/images/16/control_start.png differ
diff --git a/html/images/16/control_start_blue.png b/html/images/16/control_start_blue.png
new file mode 100755
index 0000000000..6f11fcb086
Binary files /dev/null and b/html/images/16/control_start_blue.png differ
diff --git a/html/images/16/control_stop.png b/html/images/16/control_stop.png
new file mode 100755
index 0000000000..893bb60e53
Binary files /dev/null and b/html/images/16/control_stop.png differ
diff --git a/html/images/16/control_stop_blue.png b/html/images/16/control_stop_blue.png
new file mode 100755
index 0000000000..e6f75d232d
Binary files /dev/null and b/html/images/16/control_stop_blue.png differ
diff --git a/html/images/16/controller.png b/html/images/16/controller.png
new file mode 100755
index 0000000000..5cf76ed029
Binary files /dev/null and b/html/images/16/controller.png differ
diff --git a/html/images/16/controller_add.png b/html/images/16/controller_add.png
new file mode 100755
index 0000000000..efecb3871b
Binary files /dev/null and b/html/images/16/controller_add.png differ
diff --git a/html/images/16/controller_delete.png b/html/images/16/controller_delete.png
new file mode 100755
index 0000000000..3d83bc7b9a
Binary files /dev/null and b/html/images/16/controller_delete.png differ
diff --git a/html/images/16/controller_error.png b/html/images/16/controller_error.png
new file mode 100755
index 0000000000..7f17c0cb7a
Binary files /dev/null and b/html/images/16/controller_error.png differ
diff --git a/html/images/16/creditcards.png b/html/images/16/creditcards.png
new file mode 100755
index 0000000000..4eae583e15
Binary files /dev/null and b/html/images/16/creditcards.png differ
diff --git a/html/images/16/cross.png b/html/images/16/cross.png
new file mode 100755
index 0000000000..1514d51a3c
Binary files /dev/null and b/html/images/16/cross.png differ
diff --git a/html/images/16/css.png b/html/images/16/css.png
new file mode 100755
index 0000000000..23f3101811
Binary files /dev/null and b/html/images/16/css.png differ
diff --git a/html/images/16/css_add.png b/html/images/16/css_add.png
new file mode 100755
index 0000000000..e8ea10fcd6
Binary files /dev/null and b/html/images/16/css_add.png differ
diff --git a/html/images/16/css_delete.png b/html/images/16/css_delete.png
new file mode 100755
index 0000000000..326aba4407
Binary files /dev/null and b/html/images/16/css_delete.png differ
diff --git a/html/images/16/css_go.png b/html/images/16/css_go.png
new file mode 100755
index 0000000000..6cdf38c366
Binary files /dev/null and b/html/images/16/css_go.png differ
diff --git a/html/images/16/css_valid.png b/html/images/16/css_valid.png
new file mode 100755
index 0000000000..4c72ca5a40
Binary files /dev/null and b/html/images/16/css_valid.png differ
diff --git a/html/images/16/cup.png b/html/images/16/cup.png
new file mode 100755
index 0000000000..b7bfcd15fb
Binary files /dev/null and b/html/images/16/cup.png differ
diff --git a/html/images/16/cup_add.png b/html/images/16/cup_add.png
new file mode 100755
index 0000000000..4ecaece296
Binary files /dev/null and b/html/images/16/cup_add.png differ
diff --git a/html/images/16/cup_delete.png b/html/images/16/cup_delete.png
new file mode 100755
index 0000000000..59a6d9c614
Binary files /dev/null and b/html/images/16/cup_delete.png differ
diff --git a/html/images/16/cup_edit.png b/html/images/16/cup_edit.png
new file mode 100755
index 0000000000..0b8f1e1ef5
Binary files /dev/null and b/html/images/16/cup_edit.png differ
diff --git a/html/images/16/cup_error.png b/html/images/16/cup_error.png
new file mode 100755
index 0000000000..68798748d2
Binary files /dev/null and b/html/images/16/cup_error.png differ
diff --git a/html/images/16/cup_go.png b/html/images/16/cup_go.png
new file mode 100755
index 0000000000..9527efbe40
Binary files /dev/null and b/html/images/16/cup_go.png differ
diff --git a/html/images/16/cup_key.png b/html/images/16/cup_key.png
new file mode 100755
index 0000000000..7ae160ce25
Binary files /dev/null and b/html/images/16/cup_key.png differ
diff --git a/html/images/16/cup_link.png b/html/images/16/cup_link.png
new file mode 100755
index 0000000000..41d1ace1af
Binary files /dev/null and b/html/images/16/cup_link.png differ
diff --git a/html/images/16/cursor.png b/html/images/16/cursor.png
new file mode 100755
index 0000000000..532f532d87
Binary files /dev/null and b/html/images/16/cursor.png differ
diff --git a/html/images/16/cut.png b/html/images/16/cut.png
new file mode 100755
index 0000000000..f215d6f6b7
Binary files /dev/null and b/html/images/16/cut.png differ
diff --git a/html/images/16/cut_red.png b/html/images/16/cut_red.png
new file mode 100755
index 0000000000..85bb2f0fd7
Binary files /dev/null and b/html/images/16/cut_red.png differ
diff --git a/html/images/16/database.png b/html/images/16/database.png
new file mode 100755
index 0000000000..3d09261a26
Binary files /dev/null and b/html/images/16/database.png differ
diff --git a/html/images/16/database_add.png b/html/images/16/database_add.png
new file mode 100755
index 0000000000..802bd6cde0
Binary files /dev/null and b/html/images/16/database_add.png differ
diff --git a/html/images/16/database_connect.png b/html/images/16/database_connect.png
new file mode 100755
index 0000000000..3a111977cd
Binary files /dev/null and b/html/images/16/database_connect.png differ
diff --git a/html/images/16/database_delete.png b/html/images/16/database_delete.png
new file mode 100755
index 0000000000..cce652e845
Binary files /dev/null and b/html/images/16/database_delete.png differ
diff --git a/html/images/16/database_edit.png b/html/images/16/database_edit.png
new file mode 100755
index 0000000000..e501b668c7
Binary files /dev/null and b/html/images/16/database_edit.png differ
diff --git a/html/images/16/database_error.png b/html/images/16/database_error.png
new file mode 100755
index 0000000000..578221aaab
Binary files /dev/null and b/html/images/16/database_error.png differ
diff --git a/html/images/16/database_gear.png b/html/images/16/database_gear.png
new file mode 100755
index 0000000000..7c0ab2b4c6
Binary files /dev/null and b/html/images/16/database_gear.png differ
diff --git a/html/images/16/database_go.png b/html/images/16/database_go.png
new file mode 100755
index 0000000000..61a8556c40
Binary files /dev/null and b/html/images/16/database_go.png differ
diff --git a/html/images/16/database_key.png b/html/images/16/database_key.png
new file mode 100755
index 0000000000..3334147679
Binary files /dev/null and b/html/images/16/database_key.png differ
diff --git a/html/images/16/database_lightning.png b/html/images/16/database_lightning.png
new file mode 100755
index 0000000000..d9eefc2251
Binary files /dev/null and b/html/images/16/database_lightning.png differ
diff --git a/html/images/16/database_link.png b/html/images/16/database_link.png
new file mode 100755
index 0000000000..4c8204af15
Binary files /dev/null and b/html/images/16/database_link.png differ
diff --git a/html/images/16/database_refresh.png b/html/images/16/database_refresh.png
new file mode 100755
index 0000000000..ff803be124
Binary files /dev/null and b/html/images/16/database_refresh.png differ
diff --git a/html/images/16/database_save.png b/html/images/16/database_save.png
new file mode 100755
index 0000000000..44c06dddf1
Binary files /dev/null and b/html/images/16/database_save.png differ
diff --git a/html/images/16/database_table.png b/html/images/16/database_table.png
new file mode 100755
index 0000000000..693709cbc1
Binary files /dev/null and b/html/images/16/database_table.png differ
diff --git a/html/images/16/date.png b/html/images/16/date.png
new file mode 100755
index 0000000000..783c83357f
Binary files /dev/null and b/html/images/16/date.png differ
diff --git a/html/images/16/date_add.png b/html/images/16/date_add.png
new file mode 100755
index 0000000000..6a7ae025f3
Binary files /dev/null and b/html/images/16/date_add.png differ
diff --git a/html/images/16/date_delete.png b/html/images/16/date_delete.png
new file mode 100755
index 0000000000..969a6b7239
Binary files /dev/null and b/html/images/16/date_delete.png differ
diff --git a/html/images/16/date_edit.png b/html/images/16/date_edit.png
new file mode 100755
index 0000000000..e681065038
Binary files /dev/null and b/html/images/16/date_edit.png differ
diff --git a/html/images/16/date_error.png b/html/images/16/date_error.png
new file mode 100755
index 0000000000..442cd97d09
Binary files /dev/null and b/html/images/16/date_error.png differ
diff --git a/html/images/16/date_go.png b/html/images/16/date_go.png
new file mode 100755
index 0000000000..52dd9f3ae3
Binary files /dev/null and b/html/images/16/date_go.png differ
diff --git a/html/images/16/date_link.png b/html/images/16/date_link.png
new file mode 100755
index 0000000000..9f0aada714
Binary files /dev/null and b/html/images/16/date_link.png differ
diff --git a/html/images/16/date_magnify.png b/html/images/16/date_magnify.png
new file mode 100755
index 0000000000..cd05f19064
Binary files /dev/null and b/html/images/16/date_magnify.png differ
diff --git a/html/images/16/date_next.png b/html/images/16/date_next.png
new file mode 100755
index 0000000000..48d740abf7
Binary files /dev/null and b/html/images/16/date_next.png differ
diff --git a/html/images/16/date_previous.png b/html/images/16/date_previous.png
new file mode 100755
index 0000000000..e117a8374f
Binary files /dev/null and b/html/images/16/date_previous.png differ
diff --git a/html/images/16/delete.png b/html/images/16/delete.png
new file mode 100755
index 0000000000..08f249365a
Binary files /dev/null and b/html/images/16/delete.png differ
diff --git a/html/images/16/disconnect.png b/html/images/16/disconnect.png
new file mode 100755
index 0000000000..b335cb11c4
Binary files /dev/null and b/html/images/16/disconnect.png differ
diff --git a/html/images/16/disk.png b/html/images/16/disk.png
new file mode 100755
index 0000000000..99d532e8b1
Binary files /dev/null and b/html/images/16/disk.png differ
diff --git a/html/images/16/disk_multiple.png b/html/images/16/disk_multiple.png
new file mode 100755
index 0000000000..fc5a52f5e4
Binary files /dev/null and b/html/images/16/disk_multiple.png differ
diff --git a/html/images/16/door.png b/html/images/16/door.png
new file mode 100755
index 0000000000..369fc46ed2
Binary files /dev/null and b/html/images/16/door.png differ
diff --git a/html/images/16/door_in.png b/html/images/16/door_in.png
new file mode 100755
index 0000000000..41676a0a5b
Binary files /dev/null and b/html/images/16/door_in.png differ
diff --git a/html/images/16/door_open.png b/html/images/16/door_open.png
new file mode 100755
index 0000000000..64bab57ddd
Binary files /dev/null and b/html/images/16/door_open.png differ
diff --git a/html/images/16/door_out.png b/html/images/16/door_out.png
new file mode 100755
index 0000000000..2541d2bcbc
Binary files /dev/null and b/html/images/16/door_out.png differ
diff --git a/html/images/16/drink.png b/html/images/16/drink.png
new file mode 100755
index 0000000000..d98359c2ab
Binary files /dev/null and b/html/images/16/drink.png differ
diff --git a/html/images/16/drink_empty.png b/html/images/16/drink_empty.png
new file mode 100755
index 0000000000..a40211ed41
Binary files /dev/null and b/html/images/16/drink_empty.png differ
diff --git a/html/images/16/drive.png b/html/images/16/drive.png
new file mode 100755
index 0000000000..37b7c9b27d
Binary files /dev/null and b/html/images/16/drive.png differ
diff --git a/html/images/16/drive_add.png b/html/images/16/drive_add.png
new file mode 100755
index 0000000000..29a35d5aa8
Binary files /dev/null and b/html/images/16/drive_add.png differ
diff --git a/html/images/16/drive_burn.png b/html/images/16/drive_burn.png
new file mode 100755
index 0000000000..80fd79f982
Binary files /dev/null and b/html/images/16/drive_burn.png differ
diff --git a/html/images/16/drive_cd.png b/html/images/16/drive_cd.png
new file mode 100755
index 0000000000..1850b701cf
Binary files /dev/null and b/html/images/16/drive_cd.png differ
diff --git a/html/images/16/drive_cd_empty.png b/html/images/16/drive_cd_empty.png
new file mode 100755
index 0000000000..8df38d9e67
Binary files /dev/null and b/html/images/16/drive_cd_empty.png differ
diff --git a/html/images/16/drive_delete.png b/html/images/16/drive_delete.png
new file mode 100755
index 0000000000..e6eb186651
Binary files /dev/null and b/html/images/16/drive_delete.png differ
diff --git a/html/images/16/drive_disk.png b/html/images/16/drive_disk.png
new file mode 100755
index 0000000000..5a51e81988
Binary files /dev/null and b/html/images/16/drive_disk.png differ
diff --git a/html/images/16/drive_edit.png b/html/images/16/drive_edit.png
new file mode 100755
index 0000000000..7923fada4b
Binary files /dev/null and b/html/images/16/drive_edit.png differ
diff --git a/html/images/16/drive_error.png b/html/images/16/drive_error.png
new file mode 100755
index 0000000000..309f63962c
Binary files /dev/null and b/html/images/16/drive_error.png differ
diff --git a/html/images/16/drive_go.png b/html/images/16/drive_go.png
new file mode 100755
index 0000000000..fc53379efc
Binary files /dev/null and b/html/images/16/drive_go.png differ
diff --git a/html/images/16/drive_key.png b/html/images/16/drive_key.png
new file mode 100755
index 0000000000..d0b3c673a6
Binary files /dev/null and b/html/images/16/drive_key.png differ
diff --git a/html/images/16/drive_link.png b/html/images/16/drive_link.png
new file mode 100755
index 0000000000..8679c4b5c2
Binary files /dev/null and b/html/images/16/drive_link.png differ
diff --git a/html/images/16/drive_magnify.png b/html/images/16/drive_magnify.png
new file mode 100755
index 0000000000..0f0f4446bb
Binary files /dev/null and b/html/images/16/drive_magnify.png differ
diff --git a/html/images/16/drive_network.png b/html/images/16/drive_network.png
new file mode 100755
index 0000000000..63d2d5d5b1
Binary files /dev/null and b/html/images/16/drive_network.png differ
diff --git a/html/images/16/drive_rename.png b/html/images/16/drive_rename.png
new file mode 100755
index 0000000000..2a9f38b447
Binary files /dev/null and b/html/images/16/drive_rename.png differ
diff --git a/html/images/16/drive_user.png b/html/images/16/drive_user.png
new file mode 100755
index 0000000000..0b4751ce42
Binary files /dev/null and b/html/images/16/drive_user.png differ
diff --git a/html/images/16/drive_web.png b/html/images/16/drive_web.png
new file mode 100755
index 0000000000..8850a83557
Binary files /dev/null and b/html/images/16/drive_web.png differ
diff --git a/html/images/16/dvd.png b/html/images/16/dvd.png
new file mode 100755
index 0000000000..9d94de5df0
Binary files /dev/null and b/html/images/16/dvd.png differ
diff --git a/html/images/16/dvd_add.png b/html/images/16/dvd_add.png
new file mode 100755
index 0000000000..517d112156
Binary files /dev/null and b/html/images/16/dvd_add.png differ
diff --git a/html/images/16/dvd_delete.png b/html/images/16/dvd_delete.png
new file mode 100755
index 0000000000..87bed22197
Binary files /dev/null and b/html/images/16/dvd_delete.png differ
diff --git a/html/images/16/dvd_edit.png b/html/images/16/dvd_edit.png
new file mode 100755
index 0000000000..d6330aa996
Binary files /dev/null and b/html/images/16/dvd_edit.png differ
diff --git a/html/images/16/dvd_error.png b/html/images/16/dvd_error.png
new file mode 100755
index 0000000000..8f6d4bee38
Binary files /dev/null and b/html/images/16/dvd_error.png differ
diff --git a/html/images/16/dvd_go.png b/html/images/16/dvd_go.png
new file mode 100755
index 0000000000..ef6959f7bd
Binary files /dev/null and b/html/images/16/dvd_go.png differ
diff --git a/html/images/16/dvd_key.png b/html/images/16/dvd_key.png
new file mode 100755
index 0000000000..da9307f66d
Binary files /dev/null and b/html/images/16/dvd_key.png differ
diff --git a/html/images/16/dvd_link.png b/html/images/16/dvd_link.png
new file mode 100755
index 0000000000..caad7263ac
Binary files /dev/null and b/html/images/16/dvd_link.png differ
diff --git a/html/images/16/email.png b/html/images/16/email.png
new file mode 100755
index 0000000000..7348aed77f
Binary files /dev/null and b/html/images/16/email.png differ
diff --git a/html/images/16/email_add.png b/html/images/16/email_add.png
new file mode 100755
index 0000000000..6c933681f3
Binary files /dev/null and b/html/images/16/email_add.png differ
diff --git a/html/images/16/email_attach.png b/html/images/16/email_attach.png
new file mode 100755
index 0000000000..1f994851c6
Binary files /dev/null and b/html/images/16/email_attach.png differ
diff --git a/html/images/16/email_delete.png b/html/images/16/email_delete.png
new file mode 100755
index 0000000000..a9932b1ad5
Binary files /dev/null and b/html/images/16/email_delete.png differ
diff --git a/html/images/16/email_edit.png b/html/images/16/email_edit.png
new file mode 100755
index 0000000000..244f04ae15
Binary files /dev/null and b/html/images/16/email_edit.png differ
diff --git a/html/images/16/email_error.png b/html/images/16/email_error.png
new file mode 100755
index 0000000000..8bdd3304de
Binary files /dev/null and b/html/images/16/email_error.png differ
diff --git a/html/images/16/email_go.png b/html/images/16/email_go.png
new file mode 100755
index 0000000000..4a6c5d396a
Binary files /dev/null and b/html/images/16/email_go.png differ
diff --git a/html/images/16/email_link.png b/html/images/16/email_link.png
new file mode 100755
index 0000000000..2c49f78a65
Binary files /dev/null and b/html/images/16/email_link.png differ
diff --git a/html/images/16/email_open.png b/html/images/16/email_open.png
new file mode 100755
index 0000000000..7b6f9813d4
Binary files /dev/null and b/html/images/16/email_open.png differ
diff --git a/html/images/16/email_open_image.png b/html/images/16/email_open_image.png
new file mode 100755
index 0000000000..e588e2fb2d
Binary files /dev/null and b/html/images/16/email_open_image.png differ
diff --git a/html/images/16/emoticon_evilgrin.png b/html/images/16/emoticon_evilgrin.png
new file mode 100755
index 0000000000..817bd509b0
Binary files /dev/null and b/html/images/16/emoticon_evilgrin.png differ
diff --git a/html/images/16/emoticon_grin.png b/html/images/16/emoticon_grin.png
new file mode 100755
index 0000000000..fc60c5e1cd
Binary files /dev/null and b/html/images/16/emoticon_grin.png differ
diff --git a/html/images/16/emoticon_happy.png b/html/images/16/emoticon_happy.png
new file mode 100755
index 0000000000..6b7336e175
Binary files /dev/null and b/html/images/16/emoticon_happy.png differ
diff --git a/html/images/16/emoticon_smile.png b/html/images/16/emoticon_smile.png
new file mode 100755
index 0000000000..ade431851b
Binary files /dev/null and b/html/images/16/emoticon_smile.png differ
diff --git a/html/images/16/emoticon_surprised.png b/html/images/16/emoticon_surprised.png
new file mode 100755
index 0000000000..4520cfc552
Binary files /dev/null and b/html/images/16/emoticon_surprised.png differ
diff --git a/html/images/16/emoticon_tongue.png b/html/images/16/emoticon_tongue.png
new file mode 100755
index 0000000000..ecafd2ffc5
Binary files /dev/null and b/html/images/16/emoticon_tongue.png differ
diff --git a/html/images/16/emoticon_unhappy.png b/html/images/16/emoticon_unhappy.png
new file mode 100755
index 0000000000..fd5d030ef7
Binary files /dev/null and b/html/images/16/emoticon_unhappy.png differ
diff --git a/html/images/16/emoticon_waii.png b/html/images/16/emoticon_waii.png
new file mode 100755
index 0000000000..458f936117
Binary files /dev/null and b/html/images/16/emoticon_waii.png differ
diff --git a/html/images/16/emoticon_wink.png b/html/images/16/emoticon_wink.png
new file mode 100755
index 0000000000..a631949b51
Binary files /dev/null and b/html/images/16/emoticon_wink.png differ
diff --git a/html/images/16/error.png b/html/images/16/error.png
new file mode 100755
index 0000000000..628cf2dae3
Binary files /dev/null and b/html/images/16/error.png differ
diff --git a/html/images/16/error_add.png b/html/images/16/error_add.png
new file mode 100755
index 0000000000..4c974840e9
Binary files /dev/null and b/html/images/16/error_add.png differ
diff --git a/html/images/16/error_delete.png b/html/images/16/error_delete.png
new file mode 100755
index 0000000000..7f78bcc8e1
Binary files /dev/null and b/html/images/16/error_delete.png differ
diff --git a/html/images/16/error_go.png b/html/images/16/error_go.png
new file mode 100755
index 0000000000..caa1838d7f
Binary files /dev/null and b/html/images/16/error_go.png differ
diff --git a/html/images/16/exclamation.png b/html/images/16/exclamation.png
new file mode 100755
index 0000000000..c37bd062e6
Binary files /dev/null and b/html/images/16/exclamation.png differ
diff --git a/html/images/16/eye.png b/html/images/16/eye.png
new file mode 100755
index 0000000000..564a1a9714
Binary files /dev/null and b/html/images/16/eye.png differ
diff --git a/html/images/16/feed.png b/html/images/16/feed.png
new file mode 100755
index 0000000000..315c4f4fa6
Binary files /dev/null and b/html/images/16/feed.png differ
diff --git a/html/images/16/feed_add.png b/html/images/16/feed_add.png
new file mode 100755
index 0000000000..e77d46e8a2
Binary files /dev/null and b/html/images/16/feed_add.png differ
diff --git a/html/images/16/feed_delete.png b/html/images/16/feed_delete.png
new file mode 100755
index 0000000000..5e332b4cc4
Binary files /dev/null and b/html/images/16/feed_delete.png differ
diff --git a/html/images/16/feed_disk.png b/html/images/16/feed_disk.png
new file mode 100755
index 0000000000..a158c998df
Binary files /dev/null and b/html/images/16/feed_disk.png differ
diff --git a/html/images/16/feed_edit.png b/html/images/16/feed_edit.png
new file mode 100755
index 0000000000..f1fde7a9ce
Binary files /dev/null and b/html/images/16/feed_edit.png differ
diff --git a/html/images/16/feed_error.png b/html/images/16/feed_error.png
new file mode 100755
index 0000000000..c0a801c7f7
Binary files /dev/null and b/html/images/16/feed_error.png differ
diff --git a/html/images/16/feed_go.png b/html/images/16/feed_go.png
new file mode 100755
index 0000000000..f2eed1ecf0
Binary files /dev/null and b/html/images/16/feed_go.png differ
diff --git a/html/images/16/feed_key.png b/html/images/16/feed_key.png
new file mode 100755
index 0000000000..156bfa9719
Binary files /dev/null and b/html/images/16/feed_key.png differ
diff --git a/html/images/16/feed_link.png b/html/images/16/feed_link.png
new file mode 100755
index 0000000000..c45a534597
Binary files /dev/null and b/html/images/16/feed_link.png differ
diff --git a/html/images/16/feed_magnify.png b/html/images/16/feed_magnify.png
new file mode 100755
index 0000000000..3023695d8c
Binary files /dev/null and b/html/images/16/feed_magnify.png differ
diff --git a/html/images/16/female.png b/html/images/16/female.png
new file mode 100755
index 0000000000..f92958e6af
Binary files /dev/null and b/html/images/16/female.png differ
diff --git a/html/images/16/film.png b/html/images/16/film.png
new file mode 100755
index 0000000000..b0ce7bb198
Binary files /dev/null and b/html/images/16/film.png differ
diff --git a/html/images/16/film_add.png b/html/images/16/film_add.png
new file mode 100755
index 0000000000..40d681feba
Binary files /dev/null and b/html/images/16/film_add.png differ
diff --git a/html/images/16/film_delete.png b/html/images/16/film_delete.png
new file mode 100755
index 0000000000..23a2508c5c
Binary files /dev/null and b/html/images/16/film_delete.png differ
diff --git a/html/images/16/film_edit.png b/html/images/16/film_edit.png
new file mode 100755
index 0000000000..af66b73f20
Binary files /dev/null and b/html/images/16/film_edit.png differ
diff --git a/html/images/16/film_error.png b/html/images/16/film_error.png
new file mode 100755
index 0000000000..88f3d69bca
Binary files /dev/null and b/html/images/16/film_error.png differ
diff --git a/html/images/16/film_go.png b/html/images/16/film_go.png
new file mode 100755
index 0000000000..dd0168ea92
Binary files /dev/null and b/html/images/16/film_go.png differ
diff --git a/html/images/16/film_key.png b/html/images/16/film_key.png
new file mode 100755
index 0000000000..58921624ea
Binary files /dev/null and b/html/images/16/film_key.png differ
diff --git a/html/images/16/film_link.png b/html/images/16/film_link.png
new file mode 100755
index 0000000000..0f24e86e40
Binary files /dev/null and b/html/images/16/film_link.png differ
diff --git a/html/images/16/film_save.png b/html/images/16/film_save.png
new file mode 100755
index 0000000000..bc8c0d3536
Binary files /dev/null and b/html/images/16/film_save.png differ
diff --git a/html/images/16/find.png b/html/images/16/find.png
new file mode 100755
index 0000000000..1547479646
Binary files /dev/null and b/html/images/16/find.png differ
diff --git a/html/images/16/flag_blue.png b/html/images/16/flag_blue.png
new file mode 100755
index 0000000000..003924f5ea
Binary files /dev/null and b/html/images/16/flag_blue.png differ
diff --git a/html/images/16/flag_green.png b/html/images/16/flag_green.png
new file mode 100755
index 0000000000..e4bc611f87
Binary files /dev/null and b/html/images/16/flag_green.png differ
diff --git a/html/images/16/flag_orange.png b/html/images/16/flag_orange.png
new file mode 100755
index 0000000000..e63202420f
Binary files /dev/null and b/html/images/16/flag_orange.png differ
diff --git a/html/images/16/flag_pink.png b/html/images/16/flag_pink.png
new file mode 100755
index 0000000000..5f15e526c0
Binary files /dev/null and b/html/images/16/flag_pink.png differ
diff --git a/html/images/16/flag_purple.png b/html/images/16/flag_purple.png
new file mode 100755
index 0000000000..d06986644c
Binary files /dev/null and b/html/images/16/flag_purple.png differ
diff --git a/html/images/16/flag_red.png b/html/images/16/flag_red.png
new file mode 100755
index 0000000000..e8a602da7b
Binary files /dev/null and b/html/images/16/flag_red.png differ
diff --git a/html/images/16/flag_yellow.png b/html/images/16/flag_yellow.png
new file mode 100755
index 0000000000..14c89a5430
Binary files /dev/null and b/html/images/16/flag_yellow.png differ
diff --git a/html/images/16/folder.png b/html/images/16/folder.png
new file mode 100755
index 0000000000..784e8fa482
Binary files /dev/null and b/html/images/16/folder.png differ
diff --git a/html/images/16/folder_add.png b/html/images/16/folder_add.png
new file mode 100755
index 0000000000..529fe8fe04
Binary files /dev/null and b/html/images/16/folder_add.png differ
diff --git a/html/images/16/folder_bell.png b/html/images/16/folder_bell.png
new file mode 100755
index 0000000000..d04dd7f513
Binary files /dev/null and b/html/images/16/folder_bell.png differ
diff --git a/html/images/16/folder_brick.png b/html/images/16/folder_brick.png
new file mode 100755
index 0000000000..5dea9769a2
Binary files /dev/null and b/html/images/16/folder_brick.png differ
diff --git a/html/images/16/folder_bug.png b/html/images/16/folder_bug.png
new file mode 100755
index 0000000000..4f791b684b
Binary files /dev/null and b/html/images/16/folder_bug.png differ
diff --git a/html/images/16/folder_camera.png b/html/images/16/folder_camera.png
new file mode 100755
index 0000000000..c9519416dd
Binary files /dev/null and b/html/images/16/folder_camera.png differ
diff --git a/html/images/16/folder_database.png b/html/images/16/folder_database.png
new file mode 100755
index 0000000000..5193e2eff3
Binary files /dev/null and b/html/images/16/folder_database.png differ
diff --git a/html/images/16/folder_delete.png b/html/images/16/folder_delete.png
new file mode 100755
index 0000000000..112b01638e
Binary files /dev/null and b/html/images/16/folder_delete.png differ
diff --git a/html/images/16/folder_edit.png b/html/images/16/folder_edit.png
new file mode 100755
index 0000000000..ad669cc781
Binary files /dev/null and b/html/images/16/folder_edit.png differ
diff --git a/html/images/16/folder_error.png b/html/images/16/folder_error.png
new file mode 100755
index 0000000000..1af8809513
Binary files /dev/null and b/html/images/16/folder_error.png differ
diff --git a/html/images/16/folder_explore.png b/html/images/16/folder_explore.png
new file mode 100755
index 0000000000..0ba939184d
Binary files /dev/null and b/html/images/16/folder_explore.png differ
diff --git a/html/images/16/folder_feed.png b/html/images/16/folder_feed.png
new file mode 100755
index 0000000000..d06ee51e41
Binary files /dev/null and b/html/images/16/folder_feed.png differ
diff --git a/html/images/16/folder_find.png b/html/images/16/folder_find.png
new file mode 100755
index 0000000000..c64e2ee679
Binary files /dev/null and b/html/images/16/folder_find.png differ
diff --git a/html/images/16/folder_go.png b/html/images/16/folder_go.png
new file mode 100755
index 0000000000..34a736f702
Binary files /dev/null and b/html/images/16/folder_go.png differ
diff --git a/html/images/16/folder_heart.png b/html/images/16/folder_heart.png
new file mode 100755
index 0000000000..56d7da1d6a
Binary files /dev/null and b/html/images/16/folder_heart.png differ
diff --git a/html/images/16/folder_image.png b/html/images/16/folder_image.png
new file mode 100755
index 0000000000..d5df75bb6e
Binary files /dev/null and b/html/images/16/folder_image.png differ
diff --git a/html/images/16/folder_key.png b/html/images/16/folder_key.png
new file mode 100755
index 0000000000..fb9b4c2bbc
Binary files /dev/null and b/html/images/16/folder_key.png differ
diff --git a/html/images/16/folder_lightbulb.png b/html/images/16/folder_lightbulb.png
new file mode 100755
index 0000000000..f367a51172
Binary files /dev/null and b/html/images/16/folder_lightbulb.png differ
diff --git a/html/images/16/folder_link.png b/html/images/16/folder_link.png
new file mode 100755
index 0000000000..b9b75f6c39
Binary files /dev/null and b/html/images/16/folder_link.png differ
diff --git a/html/images/16/folder_magnify.png b/html/images/16/folder_magnify.png
new file mode 100755
index 0000000000..0a3e7985c1
Binary files /dev/null and b/html/images/16/folder_magnify.png differ
diff --git a/html/images/16/folder_page.png b/html/images/16/folder_page.png
new file mode 100755
index 0000000000..1ef6e11438
Binary files /dev/null and b/html/images/16/folder_page.png differ
diff --git a/html/images/16/folder_page_white.png b/html/images/16/folder_page_white.png
new file mode 100755
index 0000000000..14d6b6181f
Binary files /dev/null and b/html/images/16/folder_page_white.png differ
diff --git a/html/images/16/folder_palette.png b/html/images/16/folder_palette.png
new file mode 100755
index 0000000000..ba12fe8acc
Binary files /dev/null and b/html/images/16/folder_palette.png differ
diff --git a/html/images/16/folder_picture.png b/html/images/16/folder_picture.png
new file mode 100755
index 0000000000..052b33638e
Binary files /dev/null and b/html/images/16/folder_picture.png differ
diff --git a/html/images/16/folder_star.png b/html/images/16/folder_star.png
new file mode 100755
index 0000000000..448e46fd5a
Binary files /dev/null and b/html/images/16/folder_star.png differ
diff --git a/html/images/16/folder_table.png b/html/images/16/folder_table.png
new file mode 100755
index 0000000000..473cee355d
Binary files /dev/null and b/html/images/16/folder_table.png differ
diff --git a/html/images/16/folder_user.png b/html/images/16/folder_user.png
new file mode 100755
index 0000000000..f021c3e12a
Binary files /dev/null and b/html/images/16/folder_user.png differ
diff --git a/html/images/16/folder_wrench.png b/html/images/16/folder_wrench.png
new file mode 100755
index 0000000000..ea3404e031
Binary files /dev/null and b/html/images/16/folder_wrench.png differ
diff --git a/html/images/16/font.png b/html/images/16/font.png
new file mode 100755
index 0000000000..b7960db9da
Binary files /dev/null and b/html/images/16/font.png differ
diff --git a/html/images/16/font_add.png b/html/images/16/font_add.png
new file mode 100755
index 0000000000..b709ebaef4
Binary files /dev/null and b/html/images/16/font_add.png differ
diff --git a/html/images/16/font_delete.png b/html/images/16/font_delete.png
new file mode 100755
index 0000000000..1d6124d6e3
Binary files /dev/null and b/html/images/16/font_delete.png differ
diff --git a/html/images/16/font_go.png b/html/images/16/font_go.png
new file mode 100755
index 0000000000..75eba80d62
Binary files /dev/null and b/html/images/16/font_go.png differ
diff --git a/html/images/16/group.png b/html/images/16/group.png
new file mode 100755
index 0000000000..7fb4e1f1e1
Binary files /dev/null and b/html/images/16/group.png differ
diff --git a/html/images/16/group_add.png b/html/images/16/group_add.png
new file mode 100755
index 0000000000..06c5350cb1
Binary files /dev/null and b/html/images/16/group_add.png differ
diff --git a/html/images/16/group_delete.png b/html/images/16/group_delete.png
new file mode 100755
index 0000000000..4489ca238a
Binary files /dev/null and b/html/images/16/group_delete.png differ
diff --git a/html/images/16/group_edit.png b/html/images/16/group_edit.png
new file mode 100755
index 0000000000..c88b945b0a
Binary files /dev/null and b/html/images/16/group_edit.png differ
diff --git a/html/images/16/group_error.png b/html/images/16/group_error.png
new file mode 100755
index 0000000000..7364a13cbe
Binary files /dev/null and b/html/images/16/group_error.png differ
diff --git a/html/images/16/group_gear.png b/html/images/16/group_gear.png
new file mode 100755
index 0000000000..2544f2e637
Binary files /dev/null and b/html/images/16/group_gear.png differ
diff --git a/html/images/16/group_go.png b/html/images/16/group_go.png
new file mode 100755
index 0000000000..1f5233308b
Binary files /dev/null and b/html/images/16/group_go.png differ
diff --git a/html/images/16/group_key.png b/html/images/16/group_key.png
new file mode 100755
index 0000000000..257f111ca8
Binary files /dev/null and b/html/images/16/group_key.png differ
diff --git a/html/images/16/group_link.png b/html/images/16/group_link.png
new file mode 100755
index 0000000000..c77ed8812e
Binary files /dev/null and b/html/images/16/group_link.png differ
diff --git a/html/images/16/heart.png b/html/images/16/heart.png
new file mode 100755
index 0000000000..d9ee53e590
Binary files /dev/null and b/html/images/16/heart.png differ
diff --git a/html/images/16/heart_add.png b/html/images/16/heart_add.png
new file mode 100755
index 0000000000..d4195ff802
Binary files /dev/null and b/html/images/16/heart_add.png differ
diff --git a/html/images/16/heart_delete.png b/html/images/16/heart_delete.png
new file mode 100755
index 0000000000..ce523e3436
Binary files /dev/null and b/html/images/16/heart_delete.png differ
diff --git a/html/images/16/help.png b/html/images/16/help.png
new file mode 100755
index 0000000000..5c870176d4
Binary files /dev/null and b/html/images/16/help.png differ
diff --git a/html/images/16/hourglass.png b/html/images/16/hourglass.png
new file mode 100755
index 0000000000..57b03ce7a6
Binary files /dev/null and b/html/images/16/hourglass.png differ
diff --git a/html/images/16/hourglass_add.png b/html/images/16/hourglass_add.png
new file mode 100755
index 0000000000..170dfff1ec
Binary files /dev/null and b/html/images/16/hourglass_add.png differ
diff --git a/html/images/16/hourglass_delete.png b/html/images/16/hourglass_delete.png
new file mode 100755
index 0000000000..4b1337be8f
Binary files /dev/null and b/html/images/16/hourglass_delete.png differ
diff --git a/html/images/16/hourglass_go.png b/html/images/16/hourglass_go.png
new file mode 100755
index 0000000000..b2d3a98bc4
Binary files /dev/null and b/html/images/16/hourglass_go.png differ
diff --git a/html/images/16/hourglass_link.png b/html/images/16/hourglass_link.png
new file mode 100755
index 0000000000..ecc59b0abe
Binary files /dev/null and b/html/images/16/hourglass_link.png differ
diff --git a/html/images/16/house.png b/html/images/16/house.png
new file mode 100755
index 0000000000..fed62219f5
Binary files /dev/null and b/html/images/16/house.png differ
diff --git a/html/images/16/house_go.png b/html/images/16/house_go.png
new file mode 100755
index 0000000000..5457dbd3cd
Binary files /dev/null and b/html/images/16/house_go.png differ
diff --git a/html/images/16/house_link.png b/html/images/16/house_link.png
new file mode 100755
index 0000000000..be2c2719ec
Binary files /dev/null and b/html/images/16/house_link.png differ
diff --git a/html/images/16/html.png b/html/images/16/html.png
new file mode 100755
index 0000000000..55d1072eaf
Binary files /dev/null and b/html/images/16/html.png differ
diff --git a/html/images/16/html_add.png b/html/images/16/html_add.png
new file mode 100755
index 0000000000..f1c08b7d68
Binary files /dev/null and b/html/images/16/html_add.png differ
diff --git a/html/images/16/html_delete.png b/html/images/16/html_delete.png
new file mode 100755
index 0000000000..1bd28489e5
Binary files /dev/null and b/html/images/16/html_delete.png differ
diff --git a/html/images/16/html_go.png b/html/images/16/html_go.png
new file mode 100755
index 0000000000..a95cede1e4
Binary files /dev/null and b/html/images/16/html_go.png differ
diff --git a/html/images/16/html_valid.png b/html/images/16/html_valid.png
new file mode 100755
index 0000000000..71cec9249a
Binary files /dev/null and b/html/images/16/html_valid.png differ
diff --git a/html/images/16/if-connect.png b/html/images/16/if-connect.png
new file mode 100644
index 0000000000..b493035b67
Binary files /dev/null and b/html/images/16/if-connect.png differ
diff --git a/html/images/16/if-disable.png b/html/images/16/if-disable.png
new file mode 100755
index 0000000000..08645998b5
Binary files /dev/null and b/html/images/16/if-disable.png differ
diff --git a/html/images/16/if-disconnect.png b/html/images/16/if-disconnect.png
new file mode 100644
index 0000000000..e3a81fe943
Binary files /dev/null and b/html/images/16/if-disconnect.png differ
diff --git a/html/images/16/if-enable.png b/html/images/16/if-enable.png
new file mode 100644
index 0000000000..b335cb11c4
Binary files /dev/null and b/html/images/16/if-enable.png differ
diff --git a/html/images/16/image.png b/html/images/16/image.png
new file mode 100755
index 0000000000..fc3c393caa
Binary files /dev/null and b/html/images/16/image.png differ
diff --git a/html/images/16/image_add.png b/html/images/16/image_add.png
new file mode 100755
index 0000000000..fc5d6139e9
Binary files /dev/null and b/html/images/16/image_add.png differ
diff --git a/html/images/16/image_delete.png b/html/images/16/image_delete.png
new file mode 100755
index 0000000000..c260e1d966
Binary files /dev/null and b/html/images/16/image_delete.png differ
diff --git a/html/images/16/image_edit.png b/html/images/16/image_edit.png
new file mode 100755
index 0000000000..0aa4cc6512
Binary files /dev/null and b/html/images/16/image_edit.png differ
diff --git a/html/images/16/image_link.png b/html/images/16/image_link.png
new file mode 100755
index 0000000000..4bdb3541ec
Binary files /dev/null and b/html/images/16/image_link.png differ
diff --git a/html/images/16/images.png b/html/images/16/images.png
new file mode 100755
index 0000000000..184860d1e0
Binary files /dev/null and b/html/images/16/images.png differ
diff --git a/html/images/16/information.png b/html/images/16/information.png
new file mode 100755
index 0000000000..12cd1aef90
Binary files /dev/null and b/html/images/16/information.png differ
diff --git a/html/images/16/ipod.png b/html/images/16/ipod.png
new file mode 100755
index 0000000000..3f768da502
Binary files /dev/null and b/html/images/16/ipod.png differ
diff --git a/html/images/16/ipod_cast.png b/html/images/16/ipod_cast.png
new file mode 100755
index 0000000000..6f6d3406cb
Binary files /dev/null and b/html/images/16/ipod_cast.png differ
diff --git a/html/images/16/ipod_cast_add.png b/html/images/16/ipod_cast_add.png
new file mode 100755
index 0000000000..c3257f5f1e
Binary files /dev/null and b/html/images/16/ipod_cast_add.png differ
diff --git a/html/images/16/ipod_cast_delete.png b/html/images/16/ipod_cast_delete.png
new file mode 100755
index 0000000000..377ab6950b
Binary files /dev/null and b/html/images/16/ipod_cast_delete.png differ
diff --git a/html/images/16/ipod_sound.png b/html/images/16/ipod_sound.png
new file mode 100755
index 0000000000..fef6e8bada
Binary files /dev/null and b/html/images/16/ipod_sound.png differ
diff --git a/html/images/16/joystick.png b/html/images/16/joystick.png
new file mode 100755
index 0000000000..62168f56f2
Binary files /dev/null and b/html/images/16/joystick.png differ
diff --git a/html/images/16/joystick_add.png b/html/images/16/joystick_add.png
new file mode 100755
index 0000000000..77e710772f
Binary files /dev/null and b/html/images/16/joystick_add.png differ
diff --git a/html/images/16/joystick_delete.png b/html/images/16/joystick_delete.png
new file mode 100755
index 0000000000..5d44b59250
Binary files /dev/null and b/html/images/16/joystick_delete.png differ
diff --git a/html/images/16/joystick_error.png b/html/images/16/joystick_error.png
new file mode 100755
index 0000000000..b32149e27a
Binary files /dev/null and b/html/images/16/joystick_error.png differ
diff --git a/html/images/16/key.png b/html/images/16/key.png
new file mode 100755
index 0000000000..4ec1a92814
Binary files /dev/null and b/html/images/16/key.png differ
diff --git a/html/images/16/key_add.png b/html/images/16/key_add.png
new file mode 100755
index 0000000000..d40740396c
Binary files /dev/null and b/html/images/16/key_add.png differ
diff --git a/html/images/16/key_delete.png b/html/images/16/key_delete.png
new file mode 100755
index 0000000000..00dec80d84
Binary files /dev/null and b/html/images/16/key_delete.png differ
diff --git a/html/images/16/key_go.png b/html/images/16/key_go.png
new file mode 100755
index 0000000000..30b0dc316e
Binary files /dev/null and b/html/images/16/key_go.png differ
diff --git a/html/images/16/keyboard.png b/html/images/16/keyboard.png
new file mode 100755
index 0000000000..898d402d70
Binary files /dev/null and b/html/images/16/keyboard.png differ
diff --git a/html/images/16/keyboard_add.png b/html/images/16/keyboard_add.png
new file mode 100755
index 0000000000..26938dd0c3
Binary files /dev/null and b/html/images/16/keyboard_add.png differ
diff --git a/html/images/16/keyboard_delete.png b/html/images/16/keyboard_delete.png
new file mode 100755
index 0000000000..1786ed5bec
Binary files /dev/null and b/html/images/16/keyboard_delete.png differ
diff --git a/html/images/16/keyboard_magnify.png b/html/images/16/keyboard_magnify.png
new file mode 100755
index 0000000000..928fc17b4d
Binary files /dev/null and b/html/images/16/keyboard_magnify.png differ
diff --git a/html/images/16/layers.png b/html/images/16/layers.png
new file mode 100755
index 0000000000..00818f6363
Binary files /dev/null and b/html/images/16/layers.png differ
diff --git a/html/images/16/layout.png b/html/images/16/layout.png
new file mode 100755
index 0000000000..ea086b0428
Binary files /dev/null and b/html/images/16/layout.png differ
diff --git a/html/images/16/layout_add.png b/html/images/16/layout_add.png
new file mode 100755
index 0000000000..62037221c0
Binary files /dev/null and b/html/images/16/layout_add.png differ
diff --git a/html/images/16/layout_content.png b/html/images/16/layout_content.png
new file mode 100755
index 0000000000..b4aaad9a45
Binary files /dev/null and b/html/images/16/layout_content.png differ
diff --git a/html/images/16/layout_delete.png b/html/images/16/layout_delete.png
new file mode 100755
index 0000000000..4bd45f1316
Binary files /dev/null and b/html/images/16/layout_delete.png differ
diff --git a/html/images/16/layout_edit.png b/html/images/16/layout_edit.png
new file mode 100755
index 0000000000..ab3100b5c5
Binary files /dev/null and b/html/images/16/layout_edit.png differ
diff --git a/html/images/16/layout_error.png b/html/images/16/layout_error.png
new file mode 100755
index 0000000000..5b5acea92c
Binary files /dev/null and b/html/images/16/layout_error.png differ
diff --git a/html/images/16/layout_header.png b/html/images/16/layout_header.png
new file mode 100755
index 0000000000..c6ea7f2308
Binary files /dev/null and b/html/images/16/layout_header.png differ
diff --git a/html/images/16/layout_link.png b/html/images/16/layout_link.png
new file mode 100755
index 0000000000..3445d42063
Binary files /dev/null and b/html/images/16/layout_link.png differ
diff --git a/html/images/16/layout_sidebar.png b/html/images/16/layout_sidebar.png
new file mode 100755
index 0000000000..3be27bb9bb
Binary files /dev/null and b/html/images/16/layout_sidebar.png differ
diff --git a/html/images/16/lightbulb.png b/html/images/16/lightbulb.png
new file mode 100755
index 0000000000..d22fde8ba4
Binary files /dev/null and b/html/images/16/lightbulb.png differ
diff --git a/html/images/16/lightbulb_add.png b/html/images/16/lightbulb_add.png
new file mode 100755
index 0000000000..0dd848bd63
Binary files /dev/null and b/html/images/16/lightbulb_add.png differ
diff --git a/html/images/16/lightbulb_delete.png b/html/images/16/lightbulb_delete.png
new file mode 100755
index 0000000000..f4781daa84
Binary files /dev/null and b/html/images/16/lightbulb_delete.png differ
diff --git a/html/images/16/lightbulb_off.png b/html/images/16/lightbulb_off.png
new file mode 100755
index 0000000000..e95b8c5b12
Binary files /dev/null and b/html/images/16/lightbulb_off.png differ
diff --git a/html/images/16/lightning.png b/html/images/16/lightning.png
new file mode 100755
index 0000000000..9680afd12f
Binary files /dev/null and b/html/images/16/lightning.png differ
diff --git a/html/images/16/lightning_add.png b/html/images/16/lightning_add.png
new file mode 100755
index 0000000000..dac3c9050c
Binary files /dev/null and b/html/images/16/lightning_add.png differ
diff --git a/html/images/16/lightning_delete.png b/html/images/16/lightning_delete.png
new file mode 100755
index 0000000000..dfe2770509
Binary files /dev/null and b/html/images/16/lightning_delete.png differ
diff --git a/html/images/16/lightning_go.png b/html/images/16/lightning_go.png
new file mode 100755
index 0000000000..29039e6a8b
Binary files /dev/null and b/html/images/16/lightning_go.png differ
diff --git a/html/images/16/link.png b/html/images/16/link.png
new file mode 100755
index 0000000000..25eacb7c25
Binary files /dev/null and b/html/images/16/link.png differ
diff --git a/html/images/16/link_add.png b/html/images/16/link_add.png
new file mode 100755
index 0000000000..00be352c57
Binary files /dev/null and b/html/images/16/link_add.png differ
diff --git a/html/images/16/link_break.png b/html/images/16/link_break.png
new file mode 100755
index 0000000000..523575306d
Binary files /dev/null and b/html/images/16/link_break.png differ
diff --git a/html/images/16/link_delete.png b/html/images/16/link_delete.png
new file mode 100755
index 0000000000..f66e2974ef
Binary files /dev/null and b/html/images/16/link_delete.png differ
diff --git a/html/images/16/link_edit.png b/html/images/16/link_edit.png
new file mode 100755
index 0000000000..5b3aed090f
Binary files /dev/null and b/html/images/16/link_edit.png differ
diff --git a/html/images/16/link_error.png b/html/images/16/link_error.png
new file mode 100755
index 0000000000..ab694b1ac4
Binary files /dev/null and b/html/images/16/link_error.png differ
diff --git a/html/images/16/link_go.png b/html/images/16/link_go.png
new file mode 100755
index 0000000000..ae8cae806e
Binary files /dev/null and b/html/images/16/link_go.png differ
diff --git a/html/images/16/lock.png b/html/images/16/lock.png
new file mode 100755
index 0000000000..2ebc4f6f96
Binary files /dev/null and b/html/images/16/lock.png differ
diff --git a/html/images/16/lock_add.png b/html/images/16/lock_add.png
new file mode 100755
index 0000000000..a7b566b1f9
Binary files /dev/null and b/html/images/16/lock_add.png differ
diff --git a/html/images/16/lock_break.png b/html/images/16/lock_break.png
new file mode 100755
index 0000000000..13578ab5ad
Binary files /dev/null and b/html/images/16/lock_break.png differ
diff --git a/html/images/16/lock_delete.png b/html/images/16/lock_delete.png
new file mode 100755
index 0000000000..ecb50a93fd
Binary files /dev/null and b/html/images/16/lock_delete.png differ
diff --git a/html/images/16/lock_edit.png b/html/images/16/lock_edit.png
new file mode 100755
index 0000000000..116aa5b7f1
Binary files /dev/null and b/html/images/16/lock_edit.png differ
diff --git a/html/images/16/lock_go.png b/html/images/16/lock_go.png
new file mode 100755
index 0000000000..8c7c89b26e
Binary files /dev/null and b/html/images/16/lock_go.png differ
diff --git a/html/images/16/lock_open.png b/html/images/16/lock_open.png
new file mode 100755
index 0000000000..a471765ff1
Binary files /dev/null and b/html/images/16/lock_open.png differ
diff --git a/html/images/16/lorry.png b/html/images/16/lorry.png
new file mode 100755
index 0000000000..8f95f5a5d8
Binary files /dev/null and b/html/images/16/lorry.png differ
diff --git a/html/images/16/lorry_add.png b/html/images/16/lorry_add.png
new file mode 100755
index 0000000000..a2c512499d
Binary files /dev/null and b/html/images/16/lorry_add.png differ
diff --git a/html/images/16/lorry_delete.png b/html/images/16/lorry_delete.png
new file mode 100755
index 0000000000..66217f5262
Binary files /dev/null and b/html/images/16/lorry_delete.png differ
diff --git a/html/images/16/lorry_error.png b/html/images/16/lorry_error.png
new file mode 100755
index 0000000000..3619ead96b
Binary files /dev/null and b/html/images/16/lorry_error.png differ
diff --git a/html/images/16/lorry_flatbed.png b/html/images/16/lorry_flatbed.png
new file mode 100755
index 0000000000..8b20f55034
Binary files /dev/null and b/html/images/16/lorry_flatbed.png differ
diff --git a/html/images/16/lorry_go.png b/html/images/16/lorry_go.png
new file mode 100755
index 0000000000..1c296a6aa0
Binary files /dev/null and b/html/images/16/lorry_go.png differ
diff --git a/html/images/16/lorry_link.png b/html/images/16/lorry_link.png
new file mode 100755
index 0000000000..5e6663e5c4
Binary files /dev/null and b/html/images/16/lorry_link.png differ
diff --git a/html/images/16/magifier_zoom_out.png b/html/images/16/magifier_zoom_out.png
new file mode 100755
index 0000000000..81f28199ac
Binary files /dev/null and b/html/images/16/magifier_zoom_out.png differ
diff --git a/html/images/16/magnifier.png b/html/images/16/magnifier.png
new file mode 100755
index 0000000000..cf3d97f75e
Binary files /dev/null and b/html/images/16/magnifier.png differ
diff --git a/html/images/16/magnifier_zoom_in.png b/html/images/16/magnifier_zoom_in.png
new file mode 100755
index 0000000000..af4fe07477
Binary files /dev/null and b/html/images/16/magnifier_zoom_in.png differ
diff --git a/html/images/16/male.png b/html/images/16/male.png
new file mode 100755
index 0000000000..25d6ea91d1
Binary files /dev/null and b/html/images/16/male.png differ
diff --git a/html/images/16/map.png b/html/images/16/map.png
new file mode 100755
index 0000000000..f90ef25ec7
Binary files /dev/null and b/html/images/16/map.png differ
diff --git a/html/images/16/map_add.png b/html/images/16/map_add.png
new file mode 100755
index 0000000000..2b72da06ae
Binary files /dev/null and b/html/images/16/map_add.png differ
diff --git a/html/images/16/map_delete.png b/html/images/16/map_delete.png
new file mode 100755
index 0000000000..e74402f9c4
Binary files /dev/null and b/html/images/16/map_delete.png differ
diff --git a/html/images/16/map_edit.png b/html/images/16/map_edit.png
new file mode 100755
index 0000000000..93d4d7e5ff
Binary files /dev/null and b/html/images/16/map_edit.png differ
diff --git a/html/images/16/map_go.png b/html/images/16/map_go.png
new file mode 100755
index 0000000000..11eab26db5
Binary files /dev/null and b/html/images/16/map_go.png differ
diff --git a/html/images/16/map_magnify.png b/html/images/16/map_magnify.png
new file mode 100755
index 0000000000..7184c9ddf0
Binary files /dev/null and b/html/images/16/map_magnify.png differ
diff --git a/html/images/16/medal_bronze_1.png b/html/images/16/medal_bronze_1.png
new file mode 100755
index 0000000000..5f8a6d65d5
Binary files /dev/null and b/html/images/16/medal_bronze_1.png differ
diff --git a/html/images/16/medal_bronze_2.png b/html/images/16/medal_bronze_2.png
new file mode 100755
index 0000000000..623d68c5d6
Binary files /dev/null and b/html/images/16/medal_bronze_2.png differ
diff --git a/html/images/16/medal_bronze_3.png b/html/images/16/medal_bronze_3.png
new file mode 100755
index 0000000000..ed3f43eb02
Binary files /dev/null and b/html/images/16/medal_bronze_3.png differ
diff --git a/html/images/16/medal_bronze_add.png b/html/images/16/medal_bronze_add.png
new file mode 100755
index 0000000000..8487b2c196
Binary files /dev/null and b/html/images/16/medal_bronze_add.png differ
diff --git a/html/images/16/medal_bronze_delete.png b/html/images/16/medal_bronze_delete.png
new file mode 100755
index 0000000000..d32aed727a
Binary files /dev/null and b/html/images/16/medal_bronze_delete.png differ
diff --git a/html/images/16/medal_gold_1.png b/html/images/16/medal_gold_1.png
new file mode 100755
index 0000000000..87584dc958
Binary files /dev/null and b/html/images/16/medal_gold_1.png differ
diff --git a/html/images/16/medal_gold_2.png b/html/images/16/medal_gold_2.png
new file mode 100755
index 0000000000..fa3a15dd67
Binary files /dev/null and b/html/images/16/medal_gold_2.png differ
diff --git a/html/images/16/medal_gold_3.png b/html/images/16/medal_gold_3.png
new file mode 100755
index 0000000000..ef1b08b920
Binary files /dev/null and b/html/images/16/medal_gold_3.png differ
diff --git a/html/images/16/medal_gold_add.png b/html/images/16/medal_gold_add.png
new file mode 100755
index 0000000000..dcade0d8db
Binary files /dev/null and b/html/images/16/medal_gold_add.png differ
diff --git a/html/images/16/medal_gold_delete.png b/html/images/16/medal_gold_delete.png
new file mode 100755
index 0000000000..84b06d5bfd
Binary files /dev/null and b/html/images/16/medal_gold_delete.png differ
diff --git a/html/images/16/medal_silver_1.png b/html/images/16/medal_silver_1.png
new file mode 100755
index 0000000000..75a64da325
Binary files /dev/null and b/html/images/16/medal_silver_1.png differ
diff --git a/html/images/16/medal_silver_2.png b/html/images/16/medal_silver_2.png
new file mode 100755
index 0000000000..2e0fe75c90
Binary files /dev/null and b/html/images/16/medal_silver_2.png differ
diff --git a/html/images/16/medal_silver_3.png b/html/images/16/medal_silver_3.png
new file mode 100755
index 0000000000..e385b54673
Binary files /dev/null and b/html/images/16/medal_silver_3.png differ
diff --git a/html/images/16/medal_silver_add.png b/html/images/16/medal_silver_add.png
new file mode 100755
index 0000000000..b0633fa0ef
Binary files /dev/null and b/html/images/16/medal_silver_add.png differ
diff --git a/html/images/16/medal_silver_delete.png b/html/images/16/medal_silver_delete.png
new file mode 100755
index 0000000000..06cab46790
Binary files /dev/null and b/html/images/16/medal_silver_delete.png differ
diff --git a/html/images/16/money.png b/html/images/16/money.png
new file mode 100755
index 0000000000..42c52d05f6
Binary files /dev/null and b/html/images/16/money.png differ
diff --git a/html/images/16/money_add.png b/html/images/16/money_add.png
new file mode 100755
index 0000000000..588fa9d078
Binary files /dev/null and b/html/images/16/money_add.png differ
diff --git a/html/images/16/money_delete.png b/html/images/16/money_delete.png
new file mode 100755
index 0000000000..eae2c524b0
Binary files /dev/null and b/html/images/16/money_delete.png differ
diff --git a/html/images/16/money_dollar.png b/html/images/16/money_dollar.png
new file mode 100755
index 0000000000..59af163824
Binary files /dev/null and b/html/images/16/money_dollar.png differ
diff --git a/html/images/16/money_euro.png b/html/images/16/money_euro.png
new file mode 100755
index 0000000000..b322ba9296
Binary files /dev/null and b/html/images/16/money_euro.png differ
diff --git a/html/images/16/money_pound.png b/html/images/16/money_pound.png
new file mode 100755
index 0000000000..b711364637
Binary files /dev/null and b/html/images/16/money_pound.png differ
diff --git a/html/images/16/money_yen.png b/html/images/16/money_yen.png
new file mode 100755
index 0000000000..228a6778bc
Binary files /dev/null and b/html/images/16/money_yen.png differ
diff --git a/html/images/16/monitor.png b/html/images/16/monitor.png
new file mode 100755
index 0000000000..d040bd0223
Binary files /dev/null and b/html/images/16/monitor.png differ
diff --git a/html/images/16/monitor_add.png b/html/images/16/monitor_add.png
new file mode 100755
index 0000000000..a818066400
Binary files /dev/null and b/html/images/16/monitor_add.png differ
diff --git a/html/images/16/monitor_delete.png b/html/images/16/monitor_delete.png
new file mode 100755
index 0000000000..37332563f2
Binary files /dev/null and b/html/images/16/monitor_delete.png differ
diff --git a/html/images/16/monitor_edit.png b/html/images/16/monitor_edit.png
new file mode 100755
index 0000000000..f772c562f4
Binary files /dev/null and b/html/images/16/monitor_edit.png differ
diff --git a/html/images/16/monitor_error.png b/html/images/16/monitor_error.png
new file mode 100755
index 0000000000..270c5018d2
Binary files /dev/null and b/html/images/16/monitor_error.png differ
diff --git a/html/images/16/monitor_go.png b/html/images/16/monitor_go.png
new file mode 100755
index 0000000000..8af3eda9f2
Binary files /dev/null and b/html/images/16/monitor_go.png differ
diff --git a/html/images/16/monitor_lightning.png b/html/images/16/monitor_lightning.png
new file mode 100755
index 0000000000..06e53a9d19
Binary files /dev/null and b/html/images/16/monitor_lightning.png differ
diff --git a/html/images/16/monitor_link.png b/html/images/16/monitor_link.png
new file mode 100755
index 0000000000..a014b025af
Binary files /dev/null and b/html/images/16/monitor_link.png differ
diff --git a/html/images/16/mouse.png b/html/images/16/mouse.png
new file mode 100755
index 0000000000..63a92fa91c
Binary files /dev/null and b/html/images/16/mouse.png differ
diff --git a/html/images/16/mouse_add.png b/html/images/16/mouse_add.png
new file mode 100755
index 0000000000..65bcab5206
Binary files /dev/null and b/html/images/16/mouse_add.png differ
diff --git a/html/images/16/mouse_delete.png b/html/images/16/mouse_delete.png
new file mode 100755
index 0000000000..72865668cf
Binary files /dev/null and b/html/images/16/mouse_delete.png differ
diff --git a/html/images/16/mouse_error.png b/html/images/16/mouse_error.png
new file mode 100755
index 0000000000..bcc156238b
Binary files /dev/null and b/html/images/16/mouse_error.png differ
diff --git a/html/images/16/music.png b/html/images/16/music.png
new file mode 100755
index 0000000000..a8b3ede3df
Binary files /dev/null and b/html/images/16/music.png differ
diff --git a/html/images/16/new.png b/html/images/16/new.png
new file mode 100755
index 0000000000..6a9bf03707
Binary files /dev/null and b/html/images/16/new.png differ
diff --git a/html/images/16/newspaper.png b/html/images/16/newspaper.png
new file mode 100755
index 0000000000..6a2ecce1b8
Binary files /dev/null and b/html/images/16/newspaper.png differ
diff --git a/html/images/16/newspaper_add.png b/html/images/16/newspaper_add.png
new file mode 100755
index 0000000000..8140e8c101
Binary files /dev/null and b/html/images/16/newspaper_add.png differ
diff --git a/html/images/16/newspaper_delete.png b/html/images/16/newspaper_delete.png
new file mode 100755
index 0000000000..bde96ce19a
Binary files /dev/null and b/html/images/16/newspaper_delete.png differ
diff --git a/html/images/16/newspaper_go.png b/html/images/16/newspaper_go.png
new file mode 100755
index 0000000000..fd6142871d
Binary files /dev/null and b/html/images/16/newspaper_go.png differ
diff --git a/html/images/16/newspaper_link.png b/html/images/16/newspaper_link.png
new file mode 100755
index 0000000000..99e57cba87
Binary files /dev/null and b/html/images/16/newspaper_link.png differ
diff --git a/html/images/16/note.png b/html/images/16/note.png
new file mode 100755
index 0000000000..244e6ca045
Binary files /dev/null and b/html/images/16/note.png differ
diff --git a/html/images/16/note_add.png b/html/images/16/note_add.png
new file mode 100755
index 0000000000..abdad91eb2
Binary files /dev/null and b/html/images/16/note_add.png differ
diff --git a/html/images/16/note_delete.png b/html/images/16/note_delete.png
new file mode 100755
index 0000000000..8a1f0ff56f
Binary files /dev/null and b/html/images/16/note_delete.png differ
diff --git a/html/images/16/note_edit.png b/html/images/16/note_edit.png
new file mode 100755
index 0000000000..291bfc7647
Binary files /dev/null and b/html/images/16/note_edit.png differ
diff --git a/html/images/16/note_error.png b/html/images/16/note_error.png
new file mode 100755
index 0000000000..896dadfd17
Binary files /dev/null and b/html/images/16/note_error.png differ
diff --git a/html/images/16/note_go.png b/html/images/16/note_go.png
new file mode 100755
index 0000000000..49e54fd872
Binary files /dev/null and b/html/images/16/note_go.png differ
diff --git a/html/images/16/overlays.png b/html/images/16/overlays.png
new file mode 100755
index 0000000000..ab3100b5c5
Binary files /dev/null and b/html/images/16/overlays.png differ
diff --git a/html/images/16/package.png b/html/images/16/package.png
new file mode 100755
index 0000000000..da3c2a2d74
Binary files /dev/null and b/html/images/16/package.png differ
diff --git a/html/images/16/package_add.png b/html/images/16/package_add.png
new file mode 100755
index 0000000000..9c8a9da4ae
Binary files /dev/null and b/html/images/16/package_add.png differ
diff --git a/html/images/16/package_delete.png b/html/images/16/package_delete.png
new file mode 100755
index 0000000000..86f7fbc299
Binary files /dev/null and b/html/images/16/package_delete.png differ
diff --git a/html/images/16/package_go.png b/html/images/16/package_go.png
new file mode 100755
index 0000000000..aace63ad6f
Binary files /dev/null and b/html/images/16/package_go.png differ
diff --git a/html/images/16/package_green.png b/html/images/16/package_green.png
new file mode 100755
index 0000000000..25b28bb6aa
Binary files /dev/null and b/html/images/16/package_green.png differ
diff --git a/html/images/16/package_link.png b/html/images/16/package_link.png
new file mode 100755
index 0000000000..48e7ab55f0
Binary files /dev/null and b/html/images/16/package_link.png differ
diff --git a/html/images/16/page.png b/html/images/16/page.png
new file mode 100755
index 0000000000..03ddd799fa
Binary files /dev/null and b/html/images/16/page.png differ
diff --git a/html/images/16/page_add.png b/html/images/16/page_add.png
new file mode 100755
index 0000000000..d5bfa0719b
Binary files /dev/null and b/html/images/16/page_add.png differ
diff --git a/html/images/16/page_attach.png b/html/images/16/page_attach.png
new file mode 100755
index 0000000000..89ee2da075
Binary files /dev/null and b/html/images/16/page_attach.png differ
diff --git a/html/images/16/page_code.png b/html/images/16/page_code.png
new file mode 100755
index 0000000000..f7ea90419d
Binary files /dev/null and b/html/images/16/page_code.png differ
diff --git a/html/images/16/page_copy.png b/html/images/16/page_copy.png
new file mode 100755
index 0000000000..195dc6d6c3
Binary files /dev/null and b/html/images/16/page_copy.png differ
diff --git a/html/images/16/page_delete.png b/html/images/16/page_delete.png
new file mode 100755
index 0000000000..3141467c67
Binary files /dev/null and b/html/images/16/page_delete.png differ
diff --git a/html/images/16/page_edit.png b/html/images/16/page_edit.png
new file mode 100755
index 0000000000..046811ed7a
Binary files /dev/null and b/html/images/16/page_edit.png differ
diff --git a/html/images/16/page_error.png b/html/images/16/page_error.png
new file mode 100755
index 0000000000..f07f449a44
Binary files /dev/null and b/html/images/16/page_error.png differ
diff --git a/html/images/16/page_excel.png b/html/images/16/page_excel.png
new file mode 100755
index 0000000000..eb6158eb5c
Binary files /dev/null and b/html/images/16/page_excel.png differ
diff --git a/html/images/16/page_find.png b/html/images/16/page_find.png
new file mode 100755
index 0000000000..2f193889f7
Binary files /dev/null and b/html/images/16/page_find.png differ
diff --git a/html/images/16/page_gear.png b/html/images/16/page_gear.png
new file mode 100755
index 0000000000..8e83281c5f
Binary files /dev/null and b/html/images/16/page_gear.png differ
diff --git a/html/images/16/page_go.png b/html/images/16/page_go.png
new file mode 100755
index 0000000000..80fe1ed0cc
Binary files /dev/null and b/html/images/16/page_go.png differ
diff --git a/html/images/16/page_green.png b/html/images/16/page_green.png
new file mode 100755
index 0000000000..de8e003f9f
Binary files /dev/null and b/html/images/16/page_green.png differ
diff --git a/html/images/16/page_key.png b/html/images/16/page_key.png
new file mode 100755
index 0000000000..d6626cb09e
Binary files /dev/null and b/html/images/16/page_key.png differ
diff --git a/html/images/16/page_lightning.png b/html/images/16/page_lightning.png
new file mode 100755
index 0000000000..7e568703d6
Binary files /dev/null and b/html/images/16/page_lightning.png differ
diff --git a/html/images/16/page_link.png b/html/images/16/page_link.png
new file mode 100755
index 0000000000..312eab0914
Binary files /dev/null and b/html/images/16/page_link.png differ
diff --git a/html/images/16/page_paintbrush.png b/html/images/16/page_paintbrush.png
new file mode 100755
index 0000000000..246a2f0b42
Binary files /dev/null and b/html/images/16/page_paintbrush.png differ
diff --git a/html/images/16/page_paste.png b/html/images/16/page_paste.png
new file mode 100755
index 0000000000..968f073fdd
Binary files /dev/null and b/html/images/16/page_paste.png differ
diff --git a/html/images/16/page_red.png b/html/images/16/page_red.png
new file mode 100755
index 0000000000..0b18247da5
Binary files /dev/null and b/html/images/16/page_red.png differ
diff --git a/html/images/16/page_refresh.png b/html/images/16/page_refresh.png
new file mode 100755
index 0000000000..cf347c7d46
Binary files /dev/null and b/html/images/16/page_refresh.png differ
diff --git a/html/images/16/page_save.png b/html/images/16/page_save.png
new file mode 100755
index 0000000000..caea546af5
Binary files /dev/null and b/html/images/16/page_save.png differ
diff --git a/html/images/16/page_white.png b/html/images/16/page_white.png
new file mode 100755
index 0000000000..8b8b1ca000
Binary files /dev/null and b/html/images/16/page_white.png differ
diff --git a/html/images/16/page_white_acrobat.png b/html/images/16/page_white_acrobat.png
new file mode 100755
index 0000000000..8f8095e46f
Binary files /dev/null and b/html/images/16/page_white_acrobat.png differ
diff --git a/html/images/16/page_white_actionscript.png b/html/images/16/page_white_actionscript.png
new file mode 100755
index 0000000000..159b240751
Binary files /dev/null and b/html/images/16/page_white_actionscript.png differ
diff --git a/html/images/16/page_white_add.png b/html/images/16/page_white_add.png
new file mode 100755
index 0000000000..aa23dde374
Binary files /dev/null and b/html/images/16/page_white_add.png differ
diff --git a/html/images/16/page_white_c.png b/html/images/16/page_white_c.png
new file mode 100755
index 0000000000..34a05cccf0
Binary files /dev/null and b/html/images/16/page_white_c.png differ
diff --git a/html/images/16/page_white_camera.png b/html/images/16/page_white_camera.png
new file mode 100755
index 0000000000..f501a593a4
Binary files /dev/null and b/html/images/16/page_white_camera.png differ
diff --git a/html/images/16/page_white_cd.png b/html/images/16/page_white_cd.png
new file mode 100755
index 0000000000..848bdaf3f1
Binary files /dev/null and b/html/images/16/page_white_cd.png differ
diff --git a/html/images/16/page_white_code.png b/html/images/16/page_white_code.png
new file mode 100755
index 0000000000..0c76bd1297
Binary files /dev/null and b/html/images/16/page_white_code.png differ
diff --git a/html/images/16/page_white_code_red.png b/html/images/16/page_white_code_red.png
new file mode 100755
index 0000000000..87a6914507
Binary files /dev/null and b/html/images/16/page_white_code_red.png differ
diff --git a/html/images/16/page_white_coldfusion.png b/html/images/16/page_white_coldfusion.png
new file mode 100755
index 0000000000..c66011fb0f
Binary files /dev/null and b/html/images/16/page_white_coldfusion.png differ
diff --git a/html/images/16/page_white_compressed.png b/html/images/16/page_white_compressed.png
new file mode 100755
index 0000000000..2b6b1007f3
Binary files /dev/null and b/html/images/16/page_white_compressed.png differ
diff --git a/html/images/16/page_white_copy.png b/html/images/16/page_white_copy.png
new file mode 100755
index 0000000000..a9f31a278e
Binary files /dev/null and b/html/images/16/page_white_copy.png differ
diff --git a/html/images/16/page_white_cplusplus.png b/html/images/16/page_white_cplusplus.png
new file mode 100755
index 0000000000..a87cf847cb
Binary files /dev/null and b/html/images/16/page_white_cplusplus.png differ
diff --git a/html/images/16/page_white_csharp.png b/html/images/16/page_white_csharp.png
new file mode 100755
index 0000000000..ffb8fc932f
Binary files /dev/null and b/html/images/16/page_white_csharp.png differ
diff --git a/html/images/16/page_white_cup.png b/html/images/16/page_white_cup.png
new file mode 100755
index 0000000000..0a7d6f4a6f
Binary files /dev/null and b/html/images/16/page_white_cup.png differ
diff --git a/html/images/16/page_white_database.png b/html/images/16/page_white_database.png
new file mode 100755
index 0000000000..bddba1f98c
Binary files /dev/null and b/html/images/16/page_white_database.png differ
diff --git a/html/images/16/page_white_delete.png b/html/images/16/page_white_delete.png
new file mode 100755
index 0000000000..af1ecaf298
Binary files /dev/null and b/html/images/16/page_white_delete.png differ
diff --git a/html/images/16/page_white_dvd.png b/html/images/16/page_white_dvd.png
new file mode 100755
index 0000000000..4cc537af0b
Binary files /dev/null and b/html/images/16/page_white_dvd.png differ
diff --git a/html/images/16/page_white_edit.png b/html/images/16/page_white_edit.png
new file mode 100755
index 0000000000..b93e77600d
Binary files /dev/null and b/html/images/16/page_white_edit.png differ
diff --git a/html/images/16/page_white_error.png b/html/images/16/page_white_error.png
new file mode 100755
index 0000000000..9fc5a0a103
Binary files /dev/null and b/html/images/16/page_white_error.png differ
diff --git a/html/images/16/page_white_excel.png b/html/images/16/page_white_excel.png
new file mode 100755
index 0000000000..b977d7e52e
Binary files /dev/null and b/html/images/16/page_white_excel.png differ
diff --git a/html/images/16/page_white_find.png b/html/images/16/page_white_find.png
new file mode 100755
index 0000000000..5818436370
Binary files /dev/null and b/html/images/16/page_white_find.png differ
diff --git a/html/images/16/page_white_flash.png b/html/images/16/page_white_flash.png
new file mode 100755
index 0000000000..5769120b1b
Binary files /dev/null and b/html/images/16/page_white_flash.png differ
diff --git a/html/images/16/page_white_freehand.png b/html/images/16/page_white_freehand.png
new file mode 100755
index 0000000000..8d719df520
Binary files /dev/null and b/html/images/16/page_white_freehand.png differ
diff --git a/html/images/16/page_white_gear.png b/html/images/16/page_white_gear.png
new file mode 100755
index 0000000000..106f5aa361
Binary files /dev/null and b/html/images/16/page_white_gear.png differ
diff --git a/html/images/16/page_white_get.png b/html/images/16/page_white_get.png
new file mode 100755
index 0000000000..e4a1ecba1b
Binary files /dev/null and b/html/images/16/page_white_get.png differ
diff --git a/html/images/16/page_white_go.png b/html/images/16/page_white_go.png
new file mode 100755
index 0000000000..7e62a924bc
Binary files /dev/null and b/html/images/16/page_white_go.png differ
diff --git a/html/images/16/page_white_h.png b/html/images/16/page_white_h.png
new file mode 100755
index 0000000000..e902abb076
Binary files /dev/null and b/html/images/16/page_white_h.png differ
diff --git a/html/images/16/page_white_horizontal.png b/html/images/16/page_white_horizontal.png
new file mode 100755
index 0000000000..1d2d0a4987
Binary files /dev/null and b/html/images/16/page_white_horizontal.png differ
diff --git a/html/images/16/page_white_key.png b/html/images/16/page_white_key.png
new file mode 100755
index 0000000000..d616484522
Binary files /dev/null and b/html/images/16/page_white_key.png differ
diff --git a/html/images/16/page_white_lightning.png b/html/images/16/page_white_lightning.png
new file mode 100755
index 0000000000..7215d1e8b0
Binary files /dev/null and b/html/images/16/page_white_lightning.png differ
diff --git a/html/images/16/page_white_link.png b/html/images/16/page_white_link.png
new file mode 100755
index 0000000000..bf7bd1c9bf
Binary files /dev/null and b/html/images/16/page_white_link.png differ
diff --git a/html/images/16/page_white_magnify.png b/html/images/16/page_white_magnify.png
new file mode 100755
index 0000000000..f6b74cc40f
Binary files /dev/null and b/html/images/16/page_white_magnify.png differ
diff --git a/html/images/16/page_white_medal.png b/html/images/16/page_white_medal.png
new file mode 100755
index 0000000000..d3fffb6d98
Binary files /dev/null and b/html/images/16/page_white_medal.png differ
diff --git a/html/images/16/page_white_office.png b/html/images/16/page_white_office.png
new file mode 100755
index 0000000000..a65bcb3e1e
Binary files /dev/null and b/html/images/16/page_white_office.png differ
diff --git a/html/images/16/page_white_paint.png b/html/images/16/page_white_paint.png
new file mode 100755
index 0000000000..23a37b891c
Binary files /dev/null and b/html/images/16/page_white_paint.png differ
diff --git a/html/images/16/page_white_paintbrush.png b/html/images/16/page_white_paintbrush.png
new file mode 100755
index 0000000000..f907e44b33
Binary files /dev/null and b/html/images/16/page_white_paintbrush.png differ
diff --git a/html/images/16/page_white_paste.png b/html/images/16/page_white_paste.png
new file mode 100755
index 0000000000..5b2cbb3fd0
Binary files /dev/null and b/html/images/16/page_white_paste.png differ
diff --git a/html/images/16/page_white_php.png b/html/images/16/page_white_php.png
new file mode 100755
index 0000000000..7868a25945
Binary files /dev/null and b/html/images/16/page_white_php.png differ
diff --git a/html/images/16/page_white_picture.png b/html/images/16/page_white_picture.png
new file mode 100755
index 0000000000..134b669368
Binary files /dev/null and b/html/images/16/page_white_picture.png differ
diff --git a/html/images/16/page_white_powerpoint.png b/html/images/16/page_white_powerpoint.png
new file mode 100755
index 0000000000..c4eff0387d
Binary files /dev/null and b/html/images/16/page_white_powerpoint.png differ
diff --git a/html/images/16/page_white_put.png b/html/images/16/page_white_put.png
new file mode 100755
index 0000000000..884ffd6f0a
Binary files /dev/null and b/html/images/16/page_white_put.png differ
diff --git a/html/images/16/page_white_ruby.png b/html/images/16/page_white_ruby.png
new file mode 100755
index 0000000000..f59b7c4365
Binary files /dev/null and b/html/images/16/page_white_ruby.png differ
diff --git a/html/images/16/page_white_stack.png b/html/images/16/page_white_stack.png
new file mode 100755
index 0000000000..44084add79
Binary files /dev/null and b/html/images/16/page_white_stack.png differ
diff --git a/html/images/16/page_white_star.png b/html/images/16/page_white_star.png
new file mode 100755
index 0000000000..3a1441c9a1
Binary files /dev/null and b/html/images/16/page_white_star.png differ
diff --git a/html/images/16/page_white_swoosh.png b/html/images/16/page_white_swoosh.png
new file mode 100755
index 0000000000..e7708292ad
Binary files /dev/null and b/html/images/16/page_white_swoosh.png differ
diff --git a/html/images/16/page_white_text.png b/html/images/16/page_white_text.png
new file mode 100755
index 0000000000..813f712f72
Binary files /dev/null and b/html/images/16/page_white_text.png differ
diff --git a/html/images/16/page_white_text_width.png b/html/images/16/page_white_text_width.png
new file mode 100755
index 0000000000..d9cf13256f
Binary files /dev/null and b/html/images/16/page_white_text_width.png differ
diff --git a/html/images/16/page_white_tux.png b/html/images/16/page_white_tux.png
new file mode 100755
index 0000000000..52699bfee0
Binary files /dev/null and b/html/images/16/page_white_tux.png differ
diff --git a/html/images/16/page_white_vector.png b/html/images/16/page_white_vector.png
new file mode 100755
index 0000000000..4a05955b33
Binary files /dev/null and b/html/images/16/page_white_vector.png differ
diff --git a/html/images/16/page_white_visualstudio.png b/html/images/16/page_white_visualstudio.png
new file mode 100755
index 0000000000..a0a433dfbb
Binary files /dev/null and b/html/images/16/page_white_visualstudio.png differ
diff --git a/html/images/16/page_white_width.png b/html/images/16/page_white_width.png
new file mode 100755
index 0000000000..1eb880947d
Binary files /dev/null and b/html/images/16/page_white_width.png differ
diff --git a/html/images/16/page_white_word.png b/html/images/16/page_white_word.png
new file mode 100755
index 0000000000..ae8ecbf476
Binary files /dev/null and b/html/images/16/page_white_word.png differ
diff --git a/html/images/16/page_white_world.png b/html/images/16/page_white_world.png
new file mode 100755
index 0000000000..6ed2490ed1
Binary files /dev/null and b/html/images/16/page_white_world.png differ
diff --git a/html/images/16/page_white_wrench.png b/html/images/16/page_white_wrench.png
new file mode 100755
index 0000000000..fecadd08af
Binary files /dev/null and b/html/images/16/page_white_wrench.png differ
diff --git a/html/images/16/page_white_zip.png b/html/images/16/page_white_zip.png
new file mode 100755
index 0000000000..fd4bbccdf1
Binary files /dev/null and b/html/images/16/page_white_zip.png differ
diff --git a/html/images/16/page_word.png b/html/images/16/page_word.png
new file mode 100755
index 0000000000..834cdfaf48
Binary files /dev/null and b/html/images/16/page_word.png differ
diff --git a/html/images/16/page_world.png b/html/images/16/page_world.png
new file mode 100755
index 0000000000..b8895ddecf
Binary files /dev/null and b/html/images/16/page_world.png differ
diff --git a/html/images/16/paintbrush.png b/html/images/16/paintbrush.png
new file mode 100755
index 0000000000..a3ecf87784
Binary files /dev/null and b/html/images/16/paintbrush.png differ
diff --git a/html/images/16/paintcan.png b/html/images/16/paintcan.png
new file mode 100755
index 0000000000..f82a8865a7
Binary files /dev/null and b/html/images/16/paintcan.png differ
diff --git a/html/images/16/palette.png b/html/images/16/palette.png
new file mode 100755
index 0000000000..73c5b3f243
Binary files /dev/null and b/html/images/16/palette.png differ
diff --git a/html/images/16/paste_plain.png b/html/images/16/paste_plain.png
new file mode 100755
index 0000000000..c0490eb797
Binary files /dev/null and b/html/images/16/paste_plain.png differ
diff --git a/html/images/16/paste_word.png b/html/images/16/paste_word.png
new file mode 100755
index 0000000000..f6b87f82cb
Binary files /dev/null and b/html/images/16/paste_word.png differ
diff --git a/html/images/16/pencil.png b/html/images/16/pencil.png
new file mode 100755
index 0000000000..0bfecd50ee
Binary files /dev/null and b/html/images/16/pencil.png differ
diff --git a/html/images/16/pencil_add.png b/html/images/16/pencil_add.png
new file mode 100755
index 0000000000..902bbe61b3
Binary files /dev/null and b/html/images/16/pencil_add.png differ
diff --git a/html/images/16/pencil_delete.png b/html/images/16/pencil_delete.png
new file mode 100755
index 0000000000..d8944e6ead
Binary files /dev/null and b/html/images/16/pencil_delete.png differ
diff --git a/html/images/16/pencil_go.png b/html/images/16/pencil_go.png
new file mode 100755
index 0000000000..937bded9d8
Binary files /dev/null and b/html/images/16/pencil_go.png differ
diff --git a/html/images/16/phone.png b/html/images/16/phone.png
new file mode 100755
index 0000000000..c39f162f85
Binary files /dev/null and b/html/images/16/phone.png differ
diff --git a/html/images/16/phone_add.png b/html/images/16/phone_add.png
new file mode 100755
index 0000000000..d3555e024e
Binary files /dev/null and b/html/images/16/phone_add.png differ
diff --git a/html/images/16/phone_delete.png b/html/images/16/phone_delete.png
new file mode 100755
index 0000000000..bbe4f8aba2
Binary files /dev/null and b/html/images/16/phone_delete.png differ
diff --git a/html/images/16/phone_sound.png b/html/images/16/phone_sound.png
new file mode 100755
index 0000000000..7fdf1c58c0
Binary files /dev/null and b/html/images/16/phone_sound.png differ
diff --git a/html/images/16/photo.png b/html/images/16/photo.png
new file mode 100755
index 0000000000..6c2aaaaaf3
Binary files /dev/null and b/html/images/16/photo.png differ
diff --git a/html/images/16/photo_add.png b/html/images/16/photo_add.png
new file mode 100755
index 0000000000..63cc355cbb
Binary files /dev/null and b/html/images/16/photo_add.png differ
diff --git a/html/images/16/photo_delete.png b/html/images/16/photo_delete.png
new file mode 100755
index 0000000000..18b67df43a
Binary files /dev/null and b/html/images/16/photo_delete.png differ
diff --git a/html/images/16/photo_link.png b/html/images/16/photo_link.png
new file mode 100755
index 0000000000..e6bb35fbf8
Binary files /dev/null and b/html/images/16/photo_link.png differ
diff --git a/html/images/16/photos.png b/html/images/16/photos.png
new file mode 100755
index 0000000000..8836fe6c07
Binary files /dev/null and b/html/images/16/photos.png differ
diff --git a/html/images/16/picture.png b/html/images/16/picture.png
new file mode 100755
index 0000000000..4a158fef7e
Binary files /dev/null and b/html/images/16/picture.png differ
diff --git a/html/images/16/picture_add.png b/html/images/16/picture_add.png
new file mode 100755
index 0000000000..d6d3f85644
Binary files /dev/null and b/html/images/16/picture_add.png differ
diff --git a/html/images/16/picture_delete.png b/html/images/16/picture_delete.png
new file mode 100755
index 0000000000..cca9f535d9
Binary files /dev/null and b/html/images/16/picture_delete.png differ
diff --git a/html/images/16/picture_edit.png b/html/images/16/picture_edit.png
new file mode 100755
index 0000000000..9a70c34998
Binary files /dev/null and b/html/images/16/picture_edit.png differ
diff --git a/html/images/16/picture_empty.png b/html/images/16/picture_empty.png
new file mode 100755
index 0000000000..abd2b9bb48
Binary files /dev/null and b/html/images/16/picture_empty.png differ
diff --git a/html/images/16/picture_error.png b/html/images/16/picture_error.png
new file mode 100755
index 0000000000..d41d90d64f
Binary files /dev/null and b/html/images/16/picture_error.png differ
diff --git a/html/images/16/picture_go.png b/html/images/16/picture_go.png
new file mode 100755
index 0000000000..27c63c5afe
Binary files /dev/null and b/html/images/16/picture_go.png differ
diff --git a/html/images/16/picture_key.png b/html/images/16/picture_key.png
new file mode 100755
index 0000000000..667086c0da
Binary files /dev/null and b/html/images/16/picture_key.png differ
diff --git a/html/images/16/picture_link.png b/html/images/16/picture_link.png
new file mode 100755
index 0000000000..42dca7440b
Binary files /dev/null and b/html/images/16/picture_link.png differ
diff --git a/html/images/16/picture_save.png b/html/images/16/picture_save.png
new file mode 100755
index 0000000000..777fb5d2e6
Binary files /dev/null and b/html/images/16/picture_save.png differ
diff --git a/html/images/16/pictures.png b/html/images/16/pictures.png
new file mode 100755
index 0000000000..d9591c13f6
Binary files /dev/null and b/html/images/16/pictures.png differ
diff --git a/html/images/16/pilcrow.png b/html/images/16/pilcrow.png
new file mode 100755
index 0000000000..95704fbab3
Binary files /dev/null and b/html/images/16/pilcrow.png differ
diff --git a/html/images/16/pill.png b/html/images/16/pill.png
new file mode 100755
index 0000000000..f2bdef6be8
Binary files /dev/null and b/html/images/16/pill.png differ
diff --git a/html/images/16/pill_add.png b/html/images/16/pill_add.png
new file mode 100755
index 0000000000..ac9c2df6a4
Binary files /dev/null and b/html/images/16/pill_add.png differ
diff --git a/html/images/16/pill_delete.png b/html/images/16/pill_delete.png
new file mode 100755
index 0000000000..c61592e8d8
Binary files /dev/null and b/html/images/16/pill_delete.png differ
diff --git a/html/images/16/pill_go.png b/html/images/16/pill_go.png
new file mode 100755
index 0000000000..e5c07d415d
Binary files /dev/null and b/html/images/16/pill_go.png differ
diff --git a/html/images/16/plugin.png b/html/images/16/plugin.png
new file mode 100755
index 0000000000..6187b15aec
Binary files /dev/null and b/html/images/16/plugin.png differ
diff --git a/html/images/16/plugin_add.png b/html/images/16/plugin_add.png
new file mode 100755
index 0000000000..ae43690ece
Binary files /dev/null and b/html/images/16/plugin_add.png differ
diff --git a/html/images/16/plugin_delete.png b/html/images/16/plugin_delete.png
new file mode 100755
index 0000000000..d9c3376d45
Binary files /dev/null and b/html/images/16/plugin_delete.png differ
diff --git a/html/images/16/plugin_disabled.png b/html/images/16/plugin_disabled.png
new file mode 100755
index 0000000000..f4f6be59cb
Binary files /dev/null and b/html/images/16/plugin_disabled.png differ
diff --git a/html/images/16/plugin_edit.png b/html/images/16/plugin_edit.png
new file mode 100755
index 0000000000..b6cb0ecf7e
Binary files /dev/null and b/html/images/16/plugin_edit.png differ
diff --git a/html/images/16/plugin_error.png b/html/images/16/plugin_error.png
new file mode 100755
index 0000000000..cff65d7fec
Binary files /dev/null and b/html/images/16/plugin_error.png differ
diff --git a/html/images/16/plugin_go.png b/html/images/16/plugin_go.png
new file mode 100755
index 0000000000..41da9913dc
Binary files /dev/null and b/html/images/16/plugin_go.png differ
diff --git a/html/images/16/plugin_link.png b/html/images/16/plugin_link.png
new file mode 100755
index 0000000000..445c18868e
Binary files /dev/null and b/html/images/16/plugin_link.png differ
diff --git a/html/images/16/printer.png b/html/images/16/printer.png
new file mode 100755
index 0000000000..a350d18715
Binary files /dev/null and b/html/images/16/printer.png differ
diff --git a/html/images/16/printer_add.png b/html/images/16/printer_add.png
new file mode 100755
index 0000000000..d228d0580d
Binary files /dev/null and b/html/images/16/printer_add.png differ
diff --git a/html/images/16/printer_delete.png b/html/images/16/printer_delete.png
new file mode 100755
index 0000000000..1d8605f2f7
Binary files /dev/null and b/html/images/16/printer_delete.png differ
diff --git a/html/images/16/printer_empty.png b/html/images/16/printer_empty.png
new file mode 100755
index 0000000000..94e8c1618c
Binary files /dev/null and b/html/images/16/printer_empty.png differ
diff --git a/html/images/16/printer_error.png b/html/images/16/printer_error.png
new file mode 100755
index 0000000000..279ebb0e53
Binary files /dev/null and b/html/images/16/printer_error.png differ
diff --git a/html/images/16/rainbow.png b/html/images/16/rainbow.png
new file mode 100755
index 0000000000..5ede989a4b
Binary files /dev/null and b/html/images/16/rainbow.png differ
diff --git a/html/images/16/report.png b/html/images/16/report.png
new file mode 100755
index 0000000000..779ad58efc
Binary files /dev/null and b/html/images/16/report.png differ
diff --git a/html/images/16/report_add.png b/html/images/16/report_add.png
new file mode 100755
index 0000000000..d5eac9bccd
Binary files /dev/null and b/html/images/16/report_add.png differ
diff --git a/html/images/16/report_delete.png b/html/images/16/report_delete.png
new file mode 100755
index 0000000000..dcce0b64da
Binary files /dev/null and b/html/images/16/report_delete.png differ
diff --git a/html/images/16/report_disk.png b/html/images/16/report_disk.png
new file mode 100755
index 0000000000..1c856cd615
Binary files /dev/null and b/html/images/16/report_disk.png differ
diff --git a/html/images/16/report_edit.png b/html/images/16/report_edit.png
new file mode 100755
index 0000000000..c61a6d8477
Binary files /dev/null and b/html/images/16/report_edit.png differ
diff --git a/html/images/16/report_go.png b/html/images/16/report_go.png
new file mode 100755
index 0000000000..f35a97938c
Binary files /dev/null and b/html/images/16/report_go.png differ
diff --git a/html/images/16/report_key.png b/html/images/16/report_key.png
new file mode 100755
index 0000000000..90b758e8fa
Binary files /dev/null and b/html/images/16/report_key.png differ
diff --git a/html/images/16/report_link.png b/html/images/16/report_link.png
new file mode 100755
index 0000000000..23f2611e99
Binary files /dev/null and b/html/images/16/report_link.png differ
diff --git a/html/images/16/report_magnify.png b/html/images/16/report_magnify.png
new file mode 100755
index 0000000000..aeaa889534
Binary files /dev/null and b/html/images/16/report_magnify.png differ
diff --git a/html/images/16/report_picture.png b/html/images/16/report_picture.png
new file mode 100755
index 0000000000..3a9a7e5eb9
Binary files /dev/null and b/html/images/16/report_picture.png differ
diff --git a/html/images/16/report_user.png b/html/images/16/report_user.png
new file mode 100755
index 0000000000..7766edd745
Binary files /dev/null and b/html/images/16/report_user.png differ
diff --git a/html/images/16/report_word.png b/html/images/16/report_word.png
new file mode 100755
index 0000000000..9951342485
Binary files /dev/null and b/html/images/16/report_word.png differ
diff --git a/html/images/16/resultset_first.png b/html/images/16/resultset_first.png
new file mode 100755
index 0000000000..b03eaf8b54
Binary files /dev/null and b/html/images/16/resultset_first.png differ
diff --git a/html/images/16/resultset_last.png b/html/images/16/resultset_last.png
new file mode 100755
index 0000000000..8ec8947847
Binary files /dev/null and b/html/images/16/resultset_last.png differ
diff --git a/html/images/16/resultset_next.png b/html/images/16/resultset_next.png
new file mode 100755
index 0000000000..e252606d3e
Binary files /dev/null and b/html/images/16/resultset_next.png differ
diff --git a/html/images/16/resultset_previous.png b/html/images/16/resultset_previous.png
new file mode 100755
index 0000000000..18f9cc1094
Binary files /dev/null and b/html/images/16/resultset_previous.png differ
diff --git a/html/images/16/rosette.png b/html/images/16/rosette.png
new file mode 100755
index 0000000000..f233bc7705
Binary files /dev/null and b/html/images/16/rosette.png differ
diff --git a/html/images/16/rss.png b/html/images/16/rss.png
new file mode 100755
index 0000000000..1dc6ff30ba
Binary files /dev/null and b/html/images/16/rss.png differ
diff --git a/html/images/16/rss_add.png b/html/images/16/rss_add.png
new file mode 100755
index 0000000000..b590beb738
Binary files /dev/null and b/html/images/16/rss_add.png differ
diff --git a/html/images/16/rss_delete.png b/html/images/16/rss_delete.png
new file mode 100755
index 0000000000..9deb738ded
Binary files /dev/null and b/html/images/16/rss_delete.png differ
diff --git a/html/images/16/rss_go.png b/html/images/16/rss_go.png
new file mode 100755
index 0000000000..43a86bff65
Binary files /dev/null and b/html/images/16/rss_go.png differ
diff --git a/html/images/16/rss_valid.png b/html/images/16/rss_valid.png
new file mode 100755
index 0000000000..a6d0b0e872
Binary files /dev/null and b/html/images/16/rss_valid.png differ
diff --git a/html/images/16/ruby.png b/html/images/16/ruby.png
new file mode 100755
index 0000000000..f763a16880
Binary files /dev/null and b/html/images/16/ruby.png differ
diff --git a/html/images/16/ruby_add.png b/html/images/16/ruby_add.png
new file mode 100755
index 0000000000..a2cd648f67
Binary files /dev/null and b/html/images/16/ruby_add.png differ
diff --git a/html/images/16/ruby_delete.png b/html/images/16/ruby_delete.png
new file mode 100755
index 0000000000..30022630d8
Binary files /dev/null and b/html/images/16/ruby_delete.png differ
diff --git a/html/images/16/ruby_gear.png b/html/images/16/ruby_gear.png
new file mode 100755
index 0000000000..4a10590b4c
Binary files /dev/null and b/html/images/16/ruby_gear.png differ
diff --git a/html/images/16/ruby_get.png b/html/images/16/ruby_get.png
new file mode 100755
index 0000000000..f5203c7e94
Binary files /dev/null and b/html/images/16/ruby_get.png differ
diff --git a/html/images/16/ruby_go.png b/html/images/16/ruby_go.png
new file mode 100755
index 0000000000..d8d276e3cd
Binary files /dev/null and b/html/images/16/ruby_go.png differ
diff --git a/html/images/16/ruby_key.png b/html/images/16/ruby_key.png
new file mode 100755
index 0000000000..451cfebe27
Binary files /dev/null and b/html/images/16/ruby_key.png differ
diff --git a/html/images/16/ruby_link.png b/html/images/16/ruby_link.png
new file mode 100755
index 0000000000..bf4be526fb
Binary files /dev/null and b/html/images/16/ruby_link.png differ
diff --git a/html/images/16/ruby_put.png b/html/images/16/ruby_put.png
new file mode 100755
index 0000000000..e026323c25
Binary files /dev/null and b/html/images/16/ruby_put.png differ
diff --git a/html/images/16/script.png b/html/images/16/script.png
new file mode 100755
index 0000000000..0f9ed4d483
Binary files /dev/null and b/html/images/16/script.png differ
diff --git a/html/images/16/script_add.png b/html/images/16/script_add.png
new file mode 100755
index 0000000000..d650552d96
Binary files /dev/null and b/html/images/16/script_add.png differ
diff --git a/html/images/16/script_code.png b/html/images/16/script_code.png
new file mode 100755
index 0000000000..63fe6ceff5
Binary files /dev/null and b/html/images/16/script_code.png differ
diff --git a/html/images/16/script_code_red.png b/html/images/16/script_code_red.png
new file mode 100755
index 0000000000..8fcf0f09ae
Binary files /dev/null and b/html/images/16/script_code_red.png differ
diff --git a/html/images/16/script_delete.png b/html/images/16/script_delete.png
new file mode 100755
index 0000000000..e6500ced7b
Binary files /dev/null and b/html/images/16/script_delete.png differ
diff --git a/html/images/16/script_edit.png b/html/images/16/script_edit.png
new file mode 100755
index 0000000000..b4d31ce282
Binary files /dev/null and b/html/images/16/script_edit.png differ
diff --git a/html/images/16/script_error.png b/html/images/16/script_error.png
new file mode 100755
index 0000000000..04919548e6
Binary files /dev/null and b/html/images/16/script_error.png differ
diff --git a/html/images/16/script_gear.png b/html/images/16/script_gear.png
new file mode 100755
index 0000000000..56fcf84a85
Binary files /dev/null and b/html/images/16/script_gear.png differ
diff --git a/html/images/16/script_go.png b/html/images/16/script_go.png
new file mode 100755
index 0000000000..8e154e2313
Binary files /dev/null and b/html/images/16/script_go.png differ
diff --git a/html/images/16/script_key.png b/html/images/16/script_key.png
new file mode 100755
index 0000000000..49bb24d71d
Binary files /dev/null and b/html/images/16/script_key.png differ
diff --git a/html/images/16/script_lightning.png b/html/images/16/script_lightning.png
new file mode 100755
index 0000000000..b3fa18ce29
Binary files /dev/null and b/html/images/16/script_lightning.png differ
diff --git a/html/images/16/script_link.png b/html/images/16/script_link.png
new file mode 100755
index 0000000000..bdeb9852b2
Binary files /dev/null and b/html/images/16/script_link.png differ
diff --git a/html/images/16/script_palette.png b/html/images/16/script_palette.png
new file mode 100755
index 0000000000..6d46962dcf
Binary files /dev/null and b/html/images/16/script_palette.png differ
diff --git a/html/images/16/script_save.png b/html/images/16/script_save.png
new file mode 100755
index 0000000000..36216d8276
Binary files /dev/null and b/html/images/16/script_save.png differ
diff --git a/html/images/16/server.png b/html/images/16/server.png
new file mode 100755
index 0000000000..720a237c73
Binary files /dev/null and b/html/images/16/server.png differ
diff --git a/html/images/16/server_add.png b/html/images/16/server_add.png
new file mode 100755
index 0000000000..3f10a3a9f4
Binary files /dev/null and b/html/images/16/server_add.png differ
diff --git a/html/images/16/server_chart.png b/html/images/16/server_chart.png
new file mode 100755
index 0000000000..1128d3f338
Binary files /dev/null and b/html/images/16/server_chart.png differ
diff --git a/html/images/16/server_compressed.png b/html/images/16/server_compressed.png
new file mode 100755
index 0000000000..bf49fad9de
Binary files /dev/null and b/html/images/16/server_compressed.png differ
diff --git a/html/images/16/server_connect.png b/html/images/16/server_connect.png
new file mode 100755
index 0000000000..49b269145a
Binary files /dev/null and b/html/images/16/server_connect.png differ
diff --git a/html/images/16/server_database.png b/html/images/16/server_database.png
new file mode 100755
index 0000000000..b24e826c70
Binary files /dev/null and b/html/images/16/server_database.png differ
diff --git a/html/images/16/server_delete.png b/html/images/16/server_delete.png
new file mode 100755
index 0000000000..61e740fe18
Binary files /dev/null and b/html/images/16/server_delete.png differ
diff --git a/html/images/16/server_edit.png b/html/images/16/server_edit.png
new file mode 100755
index 0000000000..dc76253713
Binary files /dev/null and b/html/images/16/server_edit.png differ
diff --git a/html/images/16/server_error.png b/html/images/16/server_error.png
new file mode 100755
index 0000000000..f640256399
Binary files /dev/null and b/html/images/16/server_error.png differ
diff --git a/html/images/16/server_go.png b/html/images/16/server_go.png
new file mode 100755
index 0000000000..540c8e2689
Binary files /dev/null and b/html/images/16/server_go.png differ
diff --git a/html/images/16/server_key.png b/html/images/16/server_key.png
new file mode 100755
index 0000000000..ecd517425f
Binary files /dev/null and b/html/images/16/server_key.png differ
diff --git a/html/images/16/server_lightning.png b/html/images/16/server_lightning.png
new file mode 100755
index 0000000000..b0f4e46cdf
Binary files /dev/null and b/html/images/16/server_lightning.png differ
diff --git a/html/images/16/server_link.png b/html/images/16/server_link.png
new file mode 100755
index 0000000000..e8821dfd88
Binary files /dev/null and b/html/images/16/server_link.png differ
diff --git a/html/images/16/server_uncompressed.png b/html/images/16/server_uncompressed.png
new file mode 100755
index 0000000000..86e8325b9c
Binary files /dev/null and b/html/images/16/server_uncompressed.png differ
diff --git a/html/images/16/shading.png b/html/images/16/shading.png
new file mode 100755
index 0000000000..09275f9c09
Binary files /dev/null and b/html/images/16/shading.png differ
diff --git a/html/images/16/shape_align_bottom.png b/html/images/16/shape_align_bottom.png
new file mode 100755
index 0000000000..55d2694008
Binary files /dev/null and b/html/images/16/shape_align_bottom.png differ
diff --git a/html/images/16/shape_align_center.png b/html/images/16/shape_align_center.png
new file mode 100755
index 0000000000..efe9a98e5f
Binary files /dev/null and b/html/images/16/shape_align_center.png differ
diff --git a/html/images/16/shape_align_left.png b/html/images/16/shape_align_left.png
new file mode 100755
index 0000000000..aaedc41b5f
Binary files /dev/null and b/html/images/16/shape_align_left.png differ
diff --git a/html/images/16/shape_align_middle.png b/html/images/16/shape_align_middle.png
new file mode 100755
index 0000000000..d350dd88fb
Binary files /dev/null and b/html/images/16/shape_align_middle.png differ
diff --git a/html/images/16/shape_align_right.png b/html/images/16/shape_align_right.png
new file mode 100755
index 0000000000..ff556b6a91
Binary files /dev/null and b/html/images/16/shape_align_right.png differ
diff --git a/html/images/16/shape_align_top.png b/html/images/16/shape_align_top.png
new file mode 100755
index 0000000000..1181b43fb2
Binary files /dev/null and b/html/images/16/shape_align_top.png differ
diff --git a/html/images/16/shape_flip_horizontal.png b/html/images/16/shape_flip_horizontal.png
new file mode 100755
index 0000000000..8667c81f8b
Binary files /dev/null and b/html/images/16/shape_flip_horizontal.png differ
diff --git a/html/images/16/shape_flip_vertical.png b/html/images/16/shape_flip_vertical.png
new file mode 100755
index 0000000000..0bd66d19ba
Binary files /dev/null and b/html/images/16/shape_flip_vertical.png differ
diff --git a/html/images/16/shape_group.png b/html/images/16/shape_group.png
new file mode 100755
index 0000000000..bb2ff516d3
Binary files /dev/null and b/html/images/16/shape_group.png differ
diff --git a/html/images/16/shape_handles.png b/html/images/16/shape_handles.png
new file mode 100755
index 0000000000..ce27fe3a03
Binary files /dev/null and b/html/images/16/shape_handles.png differ
diff --git a/html/images/16/shape_move_back.png b/html/images/16/shape_move_back.png
new file mode 100755
index 0000000000..a216ffd36c
Binary files /dev/null and b/html/images/16/shape_move_back.png differ
diff --git a/html/images/16/shape_move_backwards.png b/html/images/16/shape_move_backwards.png
new file mode 100755
index 0000000000..ee3f9b27ac
Binary files /dev/null and b/html/images/16/shape_move_backwards.png differ
diff --git a/html/images/16/shape_move_forwards.png b/html/images/16/shape_move_forwards.png
new file mode 100755
index 0000000000..cfe44932c3
Binary files /dev/null and b/html/images/16/shape_move_forwards.png differ
diff --git a/html/images/16/shape_move_front.png b/html/images/16/shape_move_front.png
new file mode 100755
index 0000000000..b4a4e3b785
Binary files /dev/null and b/html/images/16/shape_move_front.png differ
diff --git a/html/images/16/shape_rotate_anticlockwise.png b/html/images/16/shape_rotate_anticlockwise.png
new file mode 100755
index 0000000000..07a30206c2
Binary files /dev/null and b/html/images/16/shape_rotate_anticlockwise.png differ
diff --git a/html/images/16/shape_rotate_clockwise.png b/html/images/16/shape_rotate_clockwise.png
new file mode 100755
index 0000000000..b99db7d701
Binary files /dev/null and b/html/images/16/shape_rotate_clockwise.png differ
diff --git a/html/images/16/shape_square.png b/html/images/16/shape_square.png
new file mode 100755
index 0000000000..33af046098
Binary files /dev/null and b/html/images/16/shape_square.png differ
diff --git a/html/images/16/shape_square_add.png b/html/images/16/shape_square_add.png
new file mode 100755
index 0000000000..31edfce597
Binary files /dev/null and b/html/images/16/shape_square_add.png differ
diff --git a/html/images/16/shape_square_delete.png b/html/images/16/shape_square_delete.png
new file mode 100755
index 0000000000..ede912de03
Binary files /dev/null and b/html/images/16/shape_square_delete.png differ
diff --git a/html/images/16/shape_square_edit.png b/html/images/16/shape_square_edit.png
new file mode 100755
index 0000000000..d28dc6b1a4
Binary files /dev/null and b/html/images/16/shape_square_edit.png differ
diff --git a/html/images/16/shape_square_error.png b/html/images/16/shape_square_error.png
new file mode 100755
index 0000000000..0d0dcfa9a6
Binary files /dev/null and b/html/images/16/shape_square_error.png differ
diff --git a/html/images/16/shape_square_go.png b/html/images/16/shape_square_go.png
new file mode 100755
index 0000000000..5a2ad90191
Binary files /dev/null and b/html/images/16/shape_square_go.png differ
diff --git a/html/images/16/shape_square_key.png b/html/images/16/shape_square_key.png
new file mode 100755
index 0000000000..c34b982a07
Binary files /dev/null and b/html/images/16/shape_square_key.png differ
diff --git a/html/images/16/shape_square_link.png b/html/images/16/shape_square_link.png
new file mode 100755
index 0000000000..b885fcc606
Binary files /dev/null and b/html/images/16/shape_square_link.png differ
diff --git a/html/images/16/shape_ungroup.png b/html/images/16/shape_ungroup.png
new file mode 100755
index 0000000000..3a6f369a50
Binary files /dev/null and b/html/images/16/shape_ungroup.png differ
diff --git a/html/images/16/shield.png b/html/images/16/shield.png
new file mode 100755
index 0000000000..3cb4e25789
Binary files /dev/null and b/html/images/16/shield.png differ
diff --git a/html/images/16/shield_add.png b/html/images/16/shield_add.png
new file mode 100755
index 0000000000..e20a1b4ab6
Binary files /dev/null and b/html/images/16/shield_add.png differ
diff --git a/html/images/16/shield_delete.png b/html/images/16/shield_delete.png
new file mode 100755
index 0000000000..22823a70d9
Binary files /dev/null and b/html/images/16/shield_delete.png differ
diff --git a/html/images/16/shield_go.png b/html/images/16/shield_go.png
new file mode 100755
index 0000000000..e9bd852247
Binary files /dev/null and b/html/images/16/shield_go.png differ
diff --git a/html/images/16/sitemap.png b/html/images/16/sitemap.png
new file mode 100755
index 0000000000..ca779f3237
Binary files /dev/null and b/html/images/16/sitemap.png differ
diff --git a/html/images/16/sitemap_color.png b/html/images/16/sitemap_color.png
new file mode 100755
index 0000000000..c64582bcd4
Binary files /dev/null and b/html/images/16/sitemap_color.png differ
diff --git a/html/images/16/sound.png b/html/images/16/sound.png
new file mode 100755
index 0000000000..6056d234a9
Binary files /dev/null and b/html/images/16/sound.png differ
diff --git a/html/images/16/sound_add.png b/html/images/16/sound_add.png
new file mode 100755
index 0000000000..965c503c60
Binary files /dev/null and b/html/images/16/sound_add.png differ
diff --git a/html/images/16/sound_delete.png b/html/images/16/sound_delete.png
new file mode 100755
index 0000000000..ab9577aa13
Binary files /dev/null and b/html/images/16/sound_delete.png differ
diff --git a/html/images/16/sound_low.png b/html/images/16/sound_low.png
new file mode 100755
index 0000000000..4d918633fb
Binary files /dev/null and b/html/images/16/sound_low.png differ
diff --git a/html/images/16/sound_mute.png b/html/images/16/sound_mute.png
new file mode 100755
index 0000000000..b652d2a71f
Binary files /dev/null and b/html/images/16/sound_mute.png differ
diff --git a/html/images/16/sound_none.png b/html/images/16/sound_none.png
new file mode 100755
index 0000000000..b497ebd54a
Binary files /dev/null and b/html/images/16/sound_none.png differ
diff --git a/html/images/16/spellcheck.png b/html/images/16/spellcheck.png
new file mode 100755
index 0000000000..ebc632d9bc
Binary files /dev/null and b/html/images/16/spellcheck.png differ
diff --git a/html/images/16/sport_8ball.png b/html/images/16/sport_8ball.png
new file mode 100755
index 0000000000..4f627b7689
Binary files /dev/null and b/html/images/16/sport_8ball.png differ
diff --git a/html/images/16/sport_basketball.png b/html/images/16/sport_basketball.png
new file mode 100755
index 0000000000..f7a000b9ae
Binary files /dev/null and b/html/images/16/sport_basketball.png differ
diff --git a/html/images/16/sport_football.png b/html/images/16/sport_football.png
new file mode 100755
index 0000000000..199f0f7f1c
Binary files /dev/null and b/html/images/16/sport_football.png differ
diff --git a/html/images/16/sport_golf.png b/html/images/16/sport_golf.png
new file mode 100755
index 0000000000..e21fa44c5d
Binary files /dev/null and b/html/images/16/sport_golf.png differ
diff --git a/html/images/16/sport_raquet.png b/html/images/16/sport_raquet.png
new file mode 100755
index 0000000000..f5e0f0c2ce
Binary files /dev/null and b/html/images/16/sport_raquet.png differ
diff --git a/html/images/16/sport_shuttlecock.png b/html/images/16/sport_shuttlecock.png
new file mode 100755
index 0000000000..917287fa0b
Binary files /dev/null and b/html/images/16/sport_shuttlecock.png differ
diff --git a/html/images/16/sport_soccer.png b/html/images/16/sport_soccer.png
new file mode 100755
index 0000000000..3eb1828b16
Binary files /dev/null and b/html/images/16/sport_soccer.png differ
diff --git a/html/images/16/sport_tennis.png b/html/images/16/sport_tennis.png
new file mode 100755
index 0000000000..e88a6efa1d
Binary files /dev/null and b/html/images/16/sport_tennis.png differ
diff --git a/html/images/16/star.png b/html/images/16/star.png
new file mode 100755
index 0000000000..b88c857895
Binary files /dev/null and b/html/images/16/star.png differ
diff --git a/html/images/16/status_away.png b/html/images/16/status_away.png
new file mode 100755
index 0000000000..70bcbccaae
Binary files /dev/null and b/html/images/16/status_away.png differ
diff --git a/html/images/16/status_busy.png b/html/images/16/status_busy.png
new file mode 100755
index 0000000000..987c806fff
Binary files /dev/null and b/html/images/16/status_busy.png differ
diff --git a/html/images/16/status_offline.png b/html/images/16/status_offline.png
new file mode 100755
index 0000000000..a88261a65e
Binary files /dev/null and b/html/images/16/status_offline.png differ
diff --git a/html/images/16/status_online.png b/html/images/16/status_online.png
new file mode 100755
index 0000000000..947bd4b62c
Binary files /dev/null and b/html/images/16/status_online.png differ
diff --git a/html/images/16/stop.png b/html/images/16/stop.png
new file mode 100755
index 0000000000..0cfd585963
Binary files /dev/null and b/html/images/16/stop.png differ
diff --git a/html/images/16/style.png b/html/images/16/style.png
new file mode 100755
index 0000000000..81e41de7d3
Binary files /dev/null and b/html/images/16/style.png differ
diff --git a/html/images/16/style_add.png b/html/images/16/style_add.png
new file mode 100755
index 0000000000..e0369c6be9
Binary files /dev/null and b/html/images/16/style_add.png differ
diff --git a/html/images/16/style_delete.png b/html/images/16/style_delete.png
new file mode 100755
index 0000000000..640f187ece
Binary files /dev/null and b/html/images/16/style_delete.png differ
diff --git a/html/images/16/style_edit.png b/html/images/16/style_edit.png
new file mode 100755
index 0000000000..25bb5b677f
Binary files /dev/null and b/html/images/16/style_edit.png differ
diff --git a/html/images/16/style_go.png b/html/images/16/style_go.png
new file mode 100755
index 0000000000..25d6181ac9
Binary files /dev/null and b/html/images/16/style_go.png differ
diff --git a/html/images/16/sum.png b/html/images/16/sum.png
new file mode 100755
index 0000000000..fd7b32e43b
Binary files /dev/null and b/html/images/16/sum.png differ
diff --git a/html/images/16/tab.png b/html/images/16/tab.png
new file mode 100755
index 0000000000..3d8207fd74
Binary files /dev/null and b/html/images/16/tab.png differ
diff --git a/html/images/16/tab_add.png b/html/images/16/tab_add.png
new file mode 100755
index 0000000000..d3b99364a0
Binary files /dev/null and b/html/images/16/tab_add.png differ
diff --git a/html/images/16/tab_delete.png b/html/images/16/tab_delete.png
new file mode 100755
index 0000000000..100da2f1ad
Binary files /dev/null and b/html/images/16/tab_delete.png differ
diff --git a/html/images/16/tab_edit.png b/html/images/16/tab_edit.png
new file mode 100755
index 0000000000..4c09c0fd70
Binary files /dev/null and b/html/images/16/tab_edit.png differ
diff --git a/html/images/16/tab_go.png b/html/images/16/tab_go.png
new file mode 100755
index 0000000000..844ce04bd6
Binary files /dev/null and b/html/images/16/tab_go.png differ
diff --git a/html/images/16/table.png b/html/images/16/table.png
new file mode 100755
index 0000000000..abcd93689a
Binary files /dev/null and b/html/images/16/table.png differ
diff --git a/html/images/16/table_add.png b/html/images/16/table_add.png
new file mode 100755
index 0000000000..2a3e5c4df1
Binary files /dev/null and b/html/images/16/table_add.png differ
diff --git a/html/images/16/table_delete.png b/html/images/16/table_delete.png
new file mode 100755
index 0000000000..b85916d921
Binary files /dev/null and b/html/images/16/table_delete.png differ
diff --git a/html/images/16/table_edit.png b/html/images/16/table_edit.png
new file mode 100755
index 0000000000..bfcb0249af
Binary files /dev/null and b/html/images/16/table_edit.png differ
diff --git a/html/images/16/table_error.png b/html/images/16/table_error.png
new file mode 100755
index 0000000000..589e92b554
Binary files /dev/null and b/html/images/16/table_error.png differ
diff --git a/html/images/16/table_gear.png b/html/images/16/table_gear.png
new file mode 100755
index 0000000000..cfc2702acd
Binary files /dev/null and b/html/images/16/table_gear.png differ
diff --git a/html/images/16/table_go.png b/html/images/16/table_go.png
new file mode 100755
index 0000000000..0528dfa24e
Binary files /dev/null and b/html/images/16/table_go.png differ
diff --git a/html/images/16/table_key.png b/html/images/16/table_key.png
new file mode 100755
index 0000000000..34e23e24e8
Binary files /dev/null and b/html/images/16/table_key.png differ
diff --git a/html/images/16/table_lightning.png b/html/images/16/table_lightning.png
new file mode 100755
index 0000000000..612612b5e4
Binary files /dev/null and b/html/images/16/table_lightning.png differ
diff --git a/html/images/16/table_link.png b/html/images/16/table_link.png
new file mode 100755
index 0000000000..decac8a62e
Binary files /dev/null and b/html/images/16/table_link.png differ
diff --git a/html/images/16/table_multiple.png b/html/images/16/table_multiple.png
new file mode 100755
index 0000000000..d76448e34a
Binary files /dev/null and b/html/images/16/table_multiple.png differ
diff --git a/html/images/16/table_refresh.png b/html/images/16/table_refresh.png
new file mode 100755
index 0000000000..ab92010c2c
Binary files /dev/null and b/html/images/16/table_refresh.png differ
diff --git a/html/images/16/table_relationship.png b/html/images/16/table_relationship.png
new file mode 100755
index 0000000000..28b8505c0e
Binary files /dev/null and b/html/images/16/table_relationship.png differ
diff --git a/html/images/16/table_row_delete.png b/html/images/16/table_row_delete.png
new file mode 100755
index 0000000000..54c69691ed
Binary files /dev/null and b/html/images/16/table_row_delete.png differ
diff --git a/html/images/16/table_row_insert.png b/html/images/16/table_row_insert.png
new file mode 100755
index 0000000000..ff5925efd4
Binary files /dev/null and b/html/images/16/table_row_insert.png differ
diff --git a/html/images/16/table_save.png b/html/images/16/table_save.png
new file mode 100755
index 0000000000..25b74d18f7
Binary files /dev/null and b/html/images/16/table_save.png differ
diff --git a/html/images/16/table_sort.png b/html/images/16/table_sort.png
new file mode 100755
index 0000000000..ed6785a6a3
Binary files /dev/null and b/html/images/16/table_sort.png differ
diff --git a/html/images/16/tag.png b/html/images/16/tag.png
new file mode 100755
index 0000000000..e093032a77
Binary files /dev/null and b/html/images/16/tag.png differ
diff --git a/html/images/16/tag_blue.png b/html/images/16/tag_blue.png
new file mode 100755
index 0000000000..9757fc6ed6
Binary files /dev/null and b/html/images/16/tag_blue.png differ
diff --git a/html/images/16/tag_blue_add.png b/html/images/16/tag_blue_add.png
new file mode 100755
index 0000000000..f135248f82
Binary files /dev/null and b/html/images/16/tag_blue_add.png differ
diff --git a/html/images/16/tag_blue_delete.png b/html/images/16/tag_blue_delete.png
new file mode 100755
index 0000000000..9fbae67250
Binary files /dev/null and b/html/images/16/tag_blue_delete.png differ
diff --git a/html/images/16/tag_blue_edit.png b/html/images/16/tag_blue_edit.png
new file mode 100755
index 0000000000..2a9f6266eb
Binary files /dev/null and b/html/images/16/tag_blue_edit.png differ
diff --git a/html/images/16/tag_green.png b/html/images/16/tag_green.png
new file mode 100755
index 0000000000..83ec984bd7
Binary files /dev/null and b/html/images/16/tag_green.png differ
diff --git a/html/images/16/tag_orange.png b/html/images/16/tag_orange.png
new file mode 100755
index 0000000000..454a59f30c
Binary files /dev/null and b/html/images/16/tag_orange.png differ
diff --git a/html/images/16/tag_pink.png b/html/images/16/tag_pink.png
new file mode 100755
index 0000000000..76e2296cc1
Binary files /dev/null and b/html/images/16/tag_pink.png differ
diff --git a/html/images/16/tag_purple.png b/html/images/16/tag_purple.png
new file mode 100755
index 0000000000..ebaf0e8743
Binary files /dev/null and b/html/images/16/tag_purple.png differ
diff --git a/html/images/16/tag_red.png b/html/images/16/tag_red.png
new file mode 100755
index 0000000000..6ebb37d25f
Binary files /dev/null and b/html/images/16/tag_red.png differ
diff --git a/html/images/16/tag_yellow.png b/html/images/16/tag_yellow.png
new file mode 100755
index 0000000000..83d12924ff
Binary files /dev/null and b/html/images/16/tag_yellow.png differ
diff --git a/html/images/16/telephone.png b/html/images/16/telephone.png
new file mode 100755
index 0000000000..cecc436fbd
Binary files /dev/null and b/html/images/16/telephone.png differ
diff --git a/html/images/16/telephone_add.png b/html/images/16/telephone_add.png
new file mode 100755
index 0000000000..5591cfc4ac
Binary files /dev/null and b/html/images/16/telephone_add.png differ
diff --git a/html/images/16/telephone_delete.png b/html/images/16/telephone_delete.png
new file mode 100755
index 0000000000..0013268e93
Binary files /dev/null and b/html/images/16/telephone_delete.png differ
diff --git a/html/images/16/telephone_edit.png b/html/images/16/telephone_edit.png
new file mode 100755
index 0000000000..bcf6d7ec1d
Binary files /dev/null and b/html/images/16/telephone_edit.png differ
diff --git a/html/images/16/telephone_error.png b/html/images/16/telephone_error.png
new file mode 100755
index 0000000000..d3ec3a110d
Binary files /dev/null and b/html/images/16/telephone_error.png differ
diff --git a/html/images/16/telephone_go.png b/html/images/16/telephone_go.png
new file mode 100755
index 0000000000..395c8fbf59
Binary files /dev/null and b/html/images/16/telephone_go.png differ
diff --git a/html/images/16/telephone_key.png b/html/images/16/telephone_key.png
new file mode 100755
index 0000000000..cef5dec4e7
Binary files /dev/null and b/html/images/16/telephone_key.png differ
diff --git a/html/images/16/telephone_link.png b/html/images/16/telephone_link.png
new file mode 100755
index 0000000000..ef1ee5dd74
Binary files /dev/null and b/html/images/16/telephone_link.png differ
diff --git a/html/images/16/television.png b/html/images/16/television.png
new file mode 100755
index 0000000000..1738a4f106
Binary files /dev/null and b/html/images/16/television.png differ
diff --git a/html/images/16/television_add.png b/html/images/16/television_add.png
new file mode 100755
index 0000000000..2baaad99e5
Binary files /dev/null and b/html/images/16/television_add.png differ
diff --git a/html/images/16/television_delete.png b/html/images/16/television_delete.png
new file mode 100755
index 0000000000..b9a5860251
Binary files /dev/null and b/html/images/16/television_delete.png differ
diff --git a/html/images/16/text_align_center.png b/html/images/16/text_align_center.png
new file mode 100755
index 0000000000..57beb38139
Binary files /dev/null and b/html/images/16/text_align_center.png differ
diff --git a/html/images/16/text_align_justify.png b/html/images/16/text_align_justify.png
new file mode 100755
index 0000000000..2fbdd6920a
Binary files /dev/null and b/html/images/16/text_align_justify.png differ
diff --git a/html/images/16/text_align_left.png b/html/images/16/text_align_left.png
new file mode 100755
index 0000000000..6c8fcc1165
Binary files /dev/null and b/html/images/16/text_align_left.png differ
diff --git a/html/images/16/text_align_right.png b/html/images/16/text_align_right.png
new file mode 100755
index 0000000000..a1502571c9
Binary files /dev/null and b/html/images/16/text_align_right.png differ
diff --git a/html/images/16/text_allcaps.png b/html/images/16/text_allcaps.png
new file mode 100755
index 0000000000..280fd442b3
Binary files /dev/null and b/html/images/16/text_allcaps.png differ
diff --git a/html/images/16/text_bold.png b/html/images/16/text_bold.png
new file mode 100755
index 0000000000..889ae80e37
Binary files /dev/null and b/html/images/16/text_bold.png differ
diff --git a/html/images/16/text_columns.png b/html/images/16/text_columns.png
new file mode 100755
index 0000000000..97b2e03534
Binary files /dev/null and b/html/images/16/text_columns.png differ
diff --git a/html/images/16/text_dropcaps.png b/html/images/16/text_dropcaps.png
new file mode 100755
index 0000000000..dd65786a7b
Binary files /dev/null and b/html/images/16/text_dropcaps.png differ
diff --git a/html/images/16/text_heading_1.png b/html/images/16/text_heading_1.png
new file mode 100755
index 0000000000..9c122e91e3
Binary files /dev/null and b/html/images/16/text_heading_1.png differ
diff --git a/html/images/16/text_heading_2.png b/html/images/16/text_heading_2.png
new file mode 100755
index 0000000000..fbd87657fb
Binary files /dev/null and b/html/images/16/text_heading_2.png differ
diff --git a/html/images/16/text_heading_3.png b/html/images/16/text_heading_3.png
new file mode 100755
index 0000000000..c7836cf09e
Binary files /dev/null and b/html/images/16/text_heading_3.png differ
diff --git a/html/images/16/text_heading_4.png b/html/images/16/text_heading_4.png
new file mode 100755
index 0000000000..4e929eaf58
Binary files /dev/null and b/html/images/16/text_heading_4.png differ
diff --git a/html/images/16/text_heading_5.png b/html/images/16/text_heading_5.png
new file mode 100755
index 0000000000..30cabebf74
Binary files /dev/null and b/html/images/16/text_heading_5.png differ
diff --git a/html/images/16/text_heading_6.png b/html/images/16/text_heading_6.png
new file mode 100755
index 0000000000..058170a20c
Binary files /dev/null and b/html/images/16/text_heading_6.png differ
diff --git a/html/images/16/text_horizontalrule.png b/html/images/16/text_horizontalrule.png
new file mode 100755
index 0000000000..8dd1da1c1b
Binary files /dev/null and b/html/images/16/text_horizontalrule.png differ
diff --git a/html/images/16/text_indent.png b/html/images/16/text_indent.png
new file mode 100755
index 0000000000..9364532344
Binary files /dev/null and b/html/images/16/text_indent.png differ
diff --git a/html/images/16/text_indent_remove.png b/html/images/16/text_indent_remove.png
new file mode 100755
index 0000000000..1651b074eb
Binary files /dev/null and b/html/images/16/text_indent_remove.png differ
diff --git a/html/images/16/text_italic.png b/html/images/16/text_italic.png
new file mode 100755
index 0000000000..8482ac8cb1
Binary files /dev/null and b/html/images/16/text_italic.png differ
diff --git a/html/images/16/text_kerning.png b/html/images/16/text_kerning.png
new file mode 100755
index 0000000000..377def6459
Binary files /dev/null and b/html/images/16/text_kerning.png differ
diff --git a/html/images/16/text_letter_omega.png b/html/images/16/text_letter_omega.png
new file mode 100755
index 0000000000..5075ec6b85
Binary files /dev/null and b/html/images/16/text_letter_omega.png differ
diff --git a/html/images/16/text_letterspacing.png b/html/images/16/text_letterspacing.png
new file mode 100755
index 0000000000..41390f5490
Binary files /dev/null and b/html/images/16/text_letterspacing.png differ
diff --git a/html/images/16/text_linespacing.png b/html/images/16/text_linespacing.png
new file mode 100755
index 0000000000..1a91cbdd5f
Binary files /dev/null and b/html/images/16/text_linespacing.png differ
diff --git a/html/images/16/text_list_bullets.png b/html/images/16/text_list_bullets.png
new file mode 100755
index 0000000000..4a8672bde4
Binary files /dev/null and b/html/images/16/text_list_bullets.png differ
diff --git a/html/images/16/text_list_numbers.png b/html/images/16/text_list_numbers.png
new file mode 100755
index 0000000000..33b0b8df39
Binary files /dev/null and b/html/images/16/text_list_numbers.png differ
diff --git a/html/images/16/text_lowercase.png b/html/images/16/text_lowercase.png
new file mode 100755
index 0000000000..382a102e3d
Binary files /dev/null and b/html/images/16/text_lowercase.png differ
diff --git a/html/images/16/text_padding_bottom.png b/html/images/16/text_padding_bottom.png
new file mode 100755
index 0000000000..4880c43a14
Binary files /dev/null and b/html/images/16/text_padding_bottom.png differ
diff --git a/html/images/16/text_padding_left.png b/html/images/16/text_padding_left.png
new file mode 100755
index 0000000000..b55482eee4
Binary files /dev/null and b/html/images/16/text_padding_left.png differ
diff --git a/html/images/16/text_padding_right.png b/html/images/16/text_padding_right.png
new file mode 100755
index 0000000000..106edae52d
Binary files /dev/null and b/html/images/16/text_padding_right.png differ
diff --git a/html/images/16/text_padding_top.png b/html/images/16/text_padding_top.png
new file mode 100755
index 0000000000..c5c45b2d6e
Binary files /dev/null and b/html/images/16/text_padding_top.png differ
diff --git a/html/images/16/text_replace.png b/html/images/16/text_replace.png
new file mode 100755
index 0000000000..877f82feae
Binary files /dev/null and b/html/images/16/text_replace.png differ
diff --git a/html/images/16/text_signature.png b/html/images/16/text_signature.png
new file mode 100755
index 0000000000..c72fd80882
Binary files /dev/null and b/html/images/16/text_signature.png differ
diff --git a/html/images/16/text_smallcaps.png b/html/images/16/text_smallcaps.png
new file mode 100755
index 0000000000..5b98a6e133
Binary files /dev/null and b/html/images/16/text_smallcaps.png differ
diff --git a/html/images/16/text_strikethrough.png b/html/images/16/text_strikethrough.png
new file mode 100755
index 0000000000..612058a78e
Binary files /dev/null and b/html/images/16/text_strikethrough.png differ
diff --git a/html/images/16/text_subscript.png b/html/images/16/text_subscript.png
new file mode 100755
index 0000000000..1a2b01017d
Binary files /dev/null and b/html/images/16/text_subscript.png differ
diff --git a/html/images/16/text_superscript.png b/html/images/16/text_superscript.png
new file mode 100755
index 0000000000..2fb2a7c748
Binary files /dev/null and b/html/images/16/text_superscript.png differ
diff --git a/html/images/16/text_underline.png b/html/images/16/text_underline.png
new file mode 100755
index 0000000000..90d0df2868
Binary files /dev/null and b/html/images/16/text_underline.png differ
diff --git a/html/images/16/text_uppercase.png b/html/images/16/text_uppercase.png
new file mode 100755
index 0000000000..8dcc2dbbb2
Binary files /dev/null and b/html/images/16/text_uppercase.png differ
diff --git a/html/images/16/textfield.png b/html/images/16/textfield.png
new file mode 100755
index 0000000000..d37e7304e2
Binary files /dev/null and b/html/images/16/textfield.png differ
diff --git a/html/images/16/textfield_add.png b/html/images/16/textfield_add.png
new file mode 100755
index 0000000000..204de72316
Binary files /dev/null and b/html/images/16/textfield_add.png differ
diff --git a/html/images/16/textfield_delete.png b/html/images/16/textfield_delete.png
new file mode 100755
index 0000000000..c7bd58b217
Binary files /dev/null and b/html/images/16/textfield_delete.png differ
diff --git a/html/images/16/textfield_key.png b/html/images/16/textfield_key.png
new file mode 100755
index 0000000000..a9d5e4f8cc
Binary files /dev/null and b/html/images/16/textfield_key.png differ
diff --git a/html/images/16/textfield_rename.png b/html/images/16/textfield_rename.png
new file mode 100755
index 0000000000..4e3688edc8
Binary files /dev/null and b/html/images/16/textfield_rename.png differ
diff --git a/html/images/16/thumb_down.png b/html/images/16/thumb_down.png
new file mode 100755
index 0000000000..3c832d4c83
Binary files /dev/null and b/html/images/16/thumb_down.png differ
diff --git a/html/images/16/thumb_up.png b/html/images/16/thumb_up.png
new file mode 100755
index 0000000000..2bd16ccf29
Binary files /dev/null and b/html/images/16/thumb_up.png differ
diff --git a/html/images/16/tick.png b/html/images/16/tick.png
new file mode 100755
index 0000000000..a9925a06ab
Binary files /dev/null and b/html/images/16/tick.png differ
diff --git a/html/images/16/time.png b/html/images/16/time.png
new file mode 100755
index 0000000000..911da3f1d3
Binary files /dev/null and b/html/images/16/time.png differ
diff --git a/html/images/16/time_add.png b/html/images/16/time_add.png
new file mode 100755
index 0000000000..dcc45cb22d
Binary files /dev/null and b/html/images/16/time_add.png differ
diff --git a/html/images/16/time_delete.png b/html/images/16/time_delete.png
new file mode 100755
index 0000000000..5bf8313c6f
Binary files /dev/null and b/html/images/16/time_delete.png differ
diff --git a/html/images/16/time_go.png b/html/images/16/time_go.png
new file mode 100755
index 0000000000..d451ee0611
Binary files /dev/null and b/html/images/16/time_go.png differ
diff --git a/html/images/16/timeline_marker.png b/html/images/16/timeline_marker.png
new file mode 100755
index 0000000000..a3fbddf88b
Binary files /dev/null and b/html/images/16/timeline_marker.png differ
diff --git a/html/images/16/transmit.png b/html/images/16/transmit.png
new file mode 100755
index 0000000000..f54bf736cd
Binary files /dev/null and b/html/images/16/transmit.png differ
diff --git a/html/images/16/transmit_add.png b/html/images/16/transmit_add.png
new file mode 100755
index 0000000000..b7fd4e685f
Binary files /dev/null and b/html/images/16/transmit_add.png differ
diff --git a/html/images/16/transmit_blue.png b/html/images/16/transmit_blue.png
new file mode 100755
index 0000000000..7b1142fc70
Binary files /dev/null and b/html/images/16/transmit_blue.png differ
diff --git a/html/images/16/transmit_delete.png b/html/images/16/transmit_delete.png
new file mode 100755
index 0000000000..3d72be2a38
Binary files /dev/null and b/html/images/16/transmit_delete.png differ
diff --git a/html/images/16/transmit_edit.png b/html/images/16/transmit_edit.png
new file mode 100755
index 0000000000..eb9a3dd593
Binary files /dev/null and b/html/images/16/transmit_edit.png differ
diff --git a/html/images/16/transmit_error.png b/html/images/16/transmit_error.png
new file mode 100755
index 0000000000..fd1d4499ab
Binary files /dev/null and b/html/images/16/transmit_error.png differ
diff --git a/html/images/16/transmit_go.png b/html/images/16/transmit_go.png
new file mode 100755
index 0000000000..10137e55ca
Binary files /dev/null and b/html/images/16/transmit_go.png differ
diff --git a/html/images/16/tux.png b/html/images/16/tux.png
new file mode 100755
index 0000000000..bbefe2ec45
Binary files /dev/null and b/html/images/16/tux.png differ
diff --git a/html/images/16/user.png b/html/images/16/user.png
new file mode 100755
index 0000000000..79f35ccbda
Binary files /dev/null and b/html/images/16/user.png differ
diff --git a/html/images/16/user_add.png b/html/images/16/user_add.png
new file mode 100755
index 0000000000..deae99bcff
Binary files /dev/null and b/html/images/16/user_add.png differ
diff --git a/html/images/16/user_comment.png b/html/images/16/user_comment.png
new file mode 100755
index 0000000000..e54ebebafb
Binary files /dev/null and b/html/images/16/user_comment.png differ
diff --git a/html/images/16/user_delete.png b/html/images/16/user_delete.png
new file mode 100755
index 0000000000..acbb5630e5
Binary files /dev/null and b/html/images/16/user_delete.png differ
diff --git a/html/images/16/user_edit.png b/html/images/16/user_edit.png
new file mode 100755
index 0000000000..c1974cda74
Binary files /dev/null and b/html/images/16/user_edit.png differ
diff --git a/html/images/16/user_female.png b/html/images/16/user_female.png
new file mode 100755
index 0000000000..7c71de03b2
Binary files /dev/null and b/html/images/16/user_female.png differ
diff --git a/html/images/16/user_go.png b/html/images/16/user_go.png
new file mode 100755
index 0000000000..0468cf08f3
Binary files /dev/null and b/html/images/16/user_go.png differ
diff --git a/html/images/16/user_gray.png b/html/images/16/user_gray.png
new file mode 100755
index 0000000000..8fd539e9cb
Binary files /dev/null and b/html/images/16/user_gray.png differ
diff --git a/html/images/16/user_green.png b/html/images/16/user_green.png
new file mode 100755
index 0000000000..30383c2de5
Binary files /dev/null and b/html/images/16/user_green.png differ
diff --git a/html/images/16/user_orange.png b/html/images/16/user_orange.png
new file mode 100755
index 0000000000..b818127df6
Binary files /dev/null and b/html/images/16/user_orange.png differ
diff --git a/html/images/16/user_red.png b/html/images/16/user_red.png
new file mode 100755
index 0000000000..c6f66e8b30
Binary files /dev/null and b/html/images/16/user_red.png differ
diff --git a/html/images/16/user_suit.png b/html/images/16/user_suit.png
new file mode 100755
index 0000000000..b3454e15fb
Binary files /dev/null and b/html/images/16/user_suit.png differ
diff --git a/html/images/16/vcard.png b/html/images/16/vcard.png
new file mode 100755
index 0000000000..c02f315d20
Binary files /dev/null and b/html/images/16/vcard.png differ
diff --git a/html/images/16/vcard_add.png b/html/images/16/vcard_add.png
new file mode 100755
index 0000000000..2a68453811
Binary files /dev/null and b/html/images/16/vcard_add.png differ
diff --git a/html/images/16/vcard_delete.png b/html/images/16/vcard_delete.png
new file mode 100755
index 0000000000..b194b971b3
Binary files /dev/null and b/html/images/16/vcard_delete.png differ
diff --git a/html/images/16/vcard_edit.png b/html/images/16/vcard_edit.png
new file mode 100755
index 0000000000..ab0f6e73d6
Binary files /dev/null and b/html/images/16/vcard_edit.png differ
diff --git a/html/images/16/vector.png b/html/images/16/vector.png
new file mode 100755
index 0000000000..a1291c2dfa
Binary files /dev/null and b/html/images/16/vector.png differ
diff --git a/html/images/16/vector_add.png b/html/images/16/vector_add.png
new file mode 100755
index 0000000000..988770f408
Binary files /dev/null and b/html/images/16/vector_add.png differ
diff --git a/html/images/16/vector_delete.png b/html/images/16/vector_delete.png
new file mode 100755
index 0000000000..ca139e0f33
Binary files /dev/null and b/html/images/16/vector_delete.png differ
diff --git a/html/images/16/wand.png b/html/images/16/wand.png
new file mode 100755
index 0000000000..44ccbf8128
Binary files /dev/null and b/html/images/16/wand.png differ
diff --git a/html/images/16/weather_clouds.png b/html/images/16/weather_clouds.png
new file mode 100755
index 0000000000..3f73eaa144
Binary files /dev/null and b/html/images/16/weather_clouds.png differ
diff --git a/html/images/16/weather_cloudy.png b/html/images/16/weather_cloudy.png
new file mode 100755
index 0000000000..5856e1d054
Binary files /dev/null and b/html/images/16/weather_cloudy.png differ
diff --git a/html/images/16/weather_lightning.png b/html/images/16/weather_lightning.png
new file mode 100755
index 0000000000..1d42b3673f
Binary files /dev/null and b/html/images/16/weather_lightning.png differ
diff --git a/html/images/16/weather_rain.png b/html/images/16/weather_rain.png
new file mode 100755
index 0000000000..cb3d54d064
Binary files /dev/null and b/html/images/16/weather_rain.png differ
diff --git a/html/images/16/weather_snow.png b/html/images/16/weather_snow.png
new file mode 100755
index 0000000000..45bbdf19c6
Binary files /dev/null and b/html/images/16/weather_snow.png differ
diff --git a/html/images/16/weather_sun.png b/html/images/16/weather_sun.png
new file mode 100755
index 0000000000..0156c266e4
Binary files /dev/null and b/html/images/16/weather_sun.png differ
diff --git a/html/images/16/webcam.png b/html/images/16/webcam.png
new file mode 100755
index 0000000000..af71c30610
Binary files /dev/null and b/html/images/16/webcam.png differ
diff --git a/html/images/16/webcam_add.png b/html/images/16/webcam_add.png
new file mode 100755
index 0000000000..f02fcfa99c
Binary files /dev/null and b/html/images/16/webcam_add.png differ
diff --git a/html/images/16/webcam_delete.png b/html/images/16/webcam_delete.png
new file mode 100755
index 0000000000..bd6277f516
Binary files /dev/null and b/html/images/16/webcam_delete.png differ
diff --git a/html/images/16/webcam_error.png b/html/images/16/webcam_error.png
new file mode 100755
index 0000000000..2faa70679b
Binary files /dev/null and b/html/images/16/webcam_error.png differ
diff --git a/html/images/16/world.png b/html/images/16/world.png
new file mode 100755
index 0000000000..68f21d3011
Binary files /dev/null and b/html/images/16/world.png differ
diff --git a/html/images/16/world_add.png b/html/images/16/world_add.png
new file mode 100755
index 0000000000..6d0d7f74c0
Binary files /dev/null and b/html/images/16/world_add.png differ
diff --git a/html/images/16/world_delete.png b/html/images/16/world_delete.png
new file mode 100755
index 0000000000..ffcd1156f2
Binary files /dev/null and b/html/images/16/world_delete.png differ
diff --git a/html/images/16/world_edit.png b/html/images/16/world_edit.png
new file mode 100755
index 0000000000..00794d4088
Binary files /dev/null and b/html/images/16/world_edit.png differ
diff --git a/html/images/16/world_go.png b/html/images/16/world_go.png
new file mode 100755
index 0000000000..aee9c97f82
Binary files /dev/null and b/html/images/16/world_go.png differ
diff --git a/html/images/16/world_link.png b/html/images/16/world_link.png
new file mode 100755
index 0000000000..b8edc1265d
Binary files /dev/null and b/html/images/16/world_link.png differ
diff --git a/html/images/16/wrench.png b/html/images/16/wrench.png
new file mode 100755
index 0000000000..5c8213fef5
Binary files /dev/null and b/html/images/16/wrench.png differ
diff --git a/html/images/16/wrench_orange.png b/html/images/16/wrench_orange.png
new file mode 100755
index 0000000000..565a9330e0
Binary files /dev/null and b/html/images/16/wrench_orange.png differ
diff --git a/html/images/16/xhtml.png b/html/images/16/xhtml.png
new file mode 100755
index 0000000000..da5dbf200d
Binary files /dev/null and b/html/images/16/xhtml.png differ
diff --git a/html/images/16/xhtml_add.png b/html/images/16/xhtml_add.png
new file mode 100755
index 0000000000..bbaf784f21
Binary files /dev/null and b/html/images/16/xhtml_add.png differ
diff --git a/html/images/16/xhtml_delete.png b/html/images/16/xhtml_delete.png
new file mode 100755
index 0000000000..157b5201d0
Binary files /dev/null and b/html/images/16/xhtml_delete.png differ
diff --git a/html/images/16/xhtml_go.png b/html/images/16/xhtml_go.png
new file mode 100755
index 0000000000..43cf81448f
Binary files /dev/null and b/html/images/16/xhtml_go.png differ
diff --git a/html/images/16/xhtml_valid.png b/html/images/16/xhtml_valid.png
new file mode 100755
index 0000000000..d2e1cfbe3c
Binary files /dev/null and b/html/images/16/xhtml_valid.png differ
diff --git a/html/images/16/zoom.png b/html/images/16/zoom.png
new file mode 100755
index 0000000000..908612e394
Binary files /dev/null and b/html/images/16/zoom.png differ
diff --git a/html/images/16/zoom_in.png b/html/images/16/zoom_in.png
new file mode 100755
index 0000000000..cdf0a52fe0
Binary files /dev/null and b/html/images/16/zoom_in.png differ
diff --git a/html/images/16/zoom_out.png b/html/images/16/zoom_out.png
new file mode 100755
index 0000000000..07bf98a79c
Binary files /dev/null and b/html/images/16/zoom_out.png differ
diff --git a/html/images/arrow.gif b/html/images/arrow.gif
new file mode 100755
index 0000000000..ac790e0bcb
Binary files /dev/null and b/html/images/arrow.gif differ
diff --git a/html/images/arrows.gif b/html/images/arrows.gif
new file mode 100755
index 0000000000..f315cb68b5
Binary files /dev/null and b/html/images/arrows.gif differ
diff --git a/html/images/customers.png b/html/images/customers.png
new file mode 100755
index 0000000000..0e0e064a5d
Binary files /dev/null and b/html/images/customers.png differ
diff --git a/html/images/delete.gif b/html/images/delete.gif
new file mode 100755
index 0000000000..5f1597dafc
Binary files /dev/null and b/html/images/delete.gif differ
diff --git a/html/images/devices.png b/html/images/devices.png
new file mode 100755
index 0000000000..cd8f063faf
Binary files /dev/null and b/html/images/devices.png differ
diff --git a/html/images/eventlog.png b/html/images/eventlog.png
new file mode 100755
index 0000000000..bdf25cc016
Binary files /dev/null and b/html/images/eventlog.png differ
diff --git a/html/images/header_bg.gif b/html/images/header_bg.gif
new file mode 100644
index 0000000000..590578280c
Binary files /dev/null and b/html/images/header_bg.gif differ
diff --git a/html/images/icon.png b/html/images/icon.png
new file mode 100755
index 0000000000..eeca93544d
Binary files /dev/null and b/html/images/icon.png differ
diff --git a/html/images/lang/Thumbs.db b/html/images/lang/Thumbs.db
new file mode 100755
index 0000000000..b8768a26c3
Binary files /dev/null and b/html/images/lang/Thumbs.db differ
diff --git a/html/images/lang/en.gif b/html/images/lang/en.gif
new file mode 100755
index 0000000000..00c9d57ba4
Binary files /dev/null and b/html/images/lang/en.gif differ
diff --git a/html/images/lang/es.gif b/html/images/lang/es.gif
new file mode 100755
index 0000000000..86e38ee57b
Binary files /dev/null and b/html/images/lang/es.gif differ
diff --git a/html/images/lang/fr.gif b/html/images/lang/fr.gif
new file mode 100755
index 0000000000..7168eb2e0d
Binary files /dev/null and b/html/images/lang/fr.gif differ
diff --git a/html/images/lang/gm.gif b/html/images/lang/gm.gif
new file mode 100755
index 0000000000..18c70f9dd0
Binary files /dev/null and b/html/images/lang/gm.gif differ
diff --git a/html/images/lang/no.gif b/html/images/lang/no.gif
new file mode 100755
index 0000000000..eddabd71c3
Binary files /dev/null and b/html/images/lang/no.gif differ
diff --git a/html/images/lang/sw.gif b/html/images/lang/sw.gif
new file mode 100755
index 0000000000..6cf01365e5
Binary files /dev/null and b/html/images/lang/sw.gif differ
diff --git a/html/images/logo.gif b/html/images/logo.gif
new file mode 100755
index 0000000000..ef5b336b21
Binary files /dev/null and b/html/images/logo.gif differ
diff --git a/html/images/logo.jpg b/html/images/logo.jpg
new file mode 100755
index 0000000000..1bec2e4879
Binary files /dev/null and b/html/images/logo.jpg differ
diff --git a/html/images/logo.png b/html/images/logo.png
new file mode 100755
index 0000000000..2e0479eb31
Binary files /dev/null and b/html/images/logo.png differ
diff --git a/html/images/mail-reply.gif b/html/images/mail-reply.gif
new file mode 100755
index 0000000000..e993f584f6
Binary files /dev/null and b/html/images/mail-reply.gif differ
diff --git a/html/images/mail.gif b/html/images/mail.gif
new file mode 100755
index 0000000000..c823df186d
Binary files /dev/null and b/html/images/mail.gif differ
diff --git a/html/images/menu2.gif b/html/images/menu2.gif
new file mode 100755
index 0000000000..a738b7f9bf
Binary files /dev/null and b/html/images/menu2.gif differ
diff --git a/html/images/neu/add.png b/html/images/neu/add.png
new file mode 100755
index 0000000000..6b636fe2a1
Binary files /dev/null and b/html/images/neu/add.png differ
diff --git a/html/images/neu/battery.png b/html/images/neu/battery.png
new file mode 100755
index 0000000000..4c85a940d4
Binary files /dev/null and b/html/images/neu/battery.png differ
diff --git a/html/images/neu/cancel.png b/html/images/neu/cancel.png
new file mode 100755
index 0000000000..5cb3841484
Binary files /dev/null and b/html/images/neu/cancel.png differ
diff --git a/html/images/neu/computer.png b/html/images/neu/computer.png
new file mode 100755
index 0000000000..51a68d58be
Binary files /dev/null and b/html/images/neu/computer.png differ
diff --git a/html/images/neu/connected.png b/html/images/neu/connected.png
new file mode 100755
index 0000000000..72103e6dc5
Binary files /dev/null and b/html/images/neu/connected.png differ
diff --git a/html/images/neu/customers.png b/html/images/neu/customers.png
new file mode 100755
index 0000000000..2c1fa65ed2
Binary files /dev/null and b/html/images/neu/customers.png differ
diff --git a/html/images/neu/display.png b/html/images/neu/display.png
new file mode 100755
index 0000000000..d01edb2a44
Binary files /dev/null and b/html/images/neu/display.png differ
diff --git a/html/images/neu/dns.png b/html/images/neu/dns.png
new file mode 100755
index 0000000000..b2c29fa792
Binary files /dev/null and b/html/images/neu/dns.png differ
diff --git a/html/images/neu/edit.png b/html/images/neu/edit.png
new file mode 100755
index 0000000000..a653bfec70
Binary files /dev/null and b/html/images/neu/edit.png differ
diff --git a/html/images/neu/error.png b/html/images/neu/error.png
new file mode 100755
index 0000000000..4564a31bdf
Binary files /dev/null and b/html/images/neu/error.png differ
diff --git a/html/images/neu/exit.png b/html/images/neu/exit.png
new file mode 100755
index 0000000000..bdea2cd36e
Binary files /dev/null and b/html/images/neu/exit.png differ
diff --git a/html/images/neu/find.png b/html/images/neu/find.png
new file mode 100755
index 0000000000..b98e348708
Binary files /dev/null and b/html/images/neu/find.png differ
diff --git a/html/images/neu/folder_home.png b/html/images/neu/folder_home.png
new file mode 100755
index 0000000000..a3c4765466
Binary files /dev/null and b/html/images/neu/folder_home.png differ
diff --git a/html/images/neu/help.png b/html/images/neu/help.png
new file mode 100755
index 0000000000..6de563b16b
Binary files /dev/null and b/html/images/neu/help.png differ
diff --git a/html/images/neu/hide-graphs.png b/html/images/neu/hide-graphs.png
new file mode 100755
index 0000000000..621fe3cd1f
Binary files /dev/null and b/html/images/neu/hide-graphs.png differ
diff --git a/html/images/neu/info.png b/html/images/neu/info.png
new file mode 100755
index 0000000000..99ab40a678
Binary files /dev/null and b/html/images/neu/info.png differ
diff --git a/html/images/neu/internet.png b/html/images/neu/internet.png
new file mode 100755
index 0000000000..e440a5a1c7
Binary files /dev/null and b/html/images/neu/internet.png differ
diff --git a/html/images/neu/locked.png b/html/images/neu/locked.png
new file mode 100755
index 0000000000..292f7017cd
Binary files /dev/null and b/html/images/neu/locked.png differ
diff --git a/html/images/neu/mail.png b/html/images/neu/mail.png
new file mode 100755
index 0000000000..ef882022ab
Binary files /dev/null and b/html/images/neu/mail.png differ
diff --git a/html/images/neu/monitor.png b/html/images/neu/monitor.png
new file mode 100755
index 0000000000..b62cb68eba
Binary files /dev/null and b/html/images/neu/monitor.png differ
diff --git a/html/images/neu/network.png b/html/images/neu/network.png
new file mode 100755
index 0000000000..3cf136184e
Binary files /dev/null and b/html/images/neu/network.png differ
diff --git a/html/images/neu/ok.png b/html/images/neu/ok.png
new file mode 100755
index 0000000000..450a80cb3f
Binary files /dev/null and b/html/images/neu/ok.png differ
diff --git a/html/images/neu/prefs.png b/html/images/neu/prefs.png
new file mode 100755
index 0000000000..256ce9a81f
Binary files /dev/null and b/html/images/neu/prefs.png differ
diff --git a/html/images/neu/question.png b/html/images/neu/question.png
new file mode 100755
index 0000000000..f30e54810e
Binary files /dev/null and b/html/images/neu/question.png differ
diff --git a/html/images/neu/remove.png b/html/images/neu/remove.png
new file mode 100755
index 0000000000..0815d3f3a0
Binary files /dev/null and b/html/images/neu/remove.png differ
diff --git a/html/images/neu/screens.png b/html/images/neu/screens.png
new file mode 100755
index 0000000000..d74aec27e5
Binary files /dev/null and b/html/images/neu/screens.png differ
diff --git a/html/images/neu/server.png b/html/images/neu/server.png
new file mode 100755
index 0000000000..bd5aebeabd
Binary files /dev/null and b/html/images/neu/server.png differ
diff --git a/html/images/neu/settings.png b/html/images/neu/settings.png
new file mode 100755
index 0000000000..79f7b90dff
Binary files /dev/null and b/html/images/neu/settings.png differ
diff --git a/html/images/neu/show-graphs.png b/html/images/neu/show-graphs.png
new file mode 100755
index 0000000000..e795ffc7d2
Binary files /dev/null and b/html/images/neu/show-graphs.png differ
diff --git a/html/images/neu/system.png b/html/images/neu/system.png
new file mode 100755
index 0000000000..426460b1a8
Binary files /dev/null and b/html/images/neu/system.png differ
diff --git a/html/images/neu/system2.png b/html/images/neu/system2.png
new file mode 100755
index 0000000000..73b6920317
Binary files /dev/null and b/html/images/neu/system2.png differ
diff --git a/html/images/neu/terminal.png b/html/images/neu/terminal.png
new file mode 100755
index 0000000000..cfa6d279b8
Binary files /dev/null and b/html/images/neu/terminal.png differ
diff --git a/html/images/neu/warning.png b/html/images/neu/warning.png
new file mode 100755
index 0000000000..35f61aebac
Binary files /dev/null and b/html/images/neu/warning.png differ
diff --git a/html/images/neu/web.png b/html/images/neu/web.png
new file mode 100755
index 0000000000..49f7290ff9
Binary files /dev/null and b/html/images/neu/web.png differ
diff --git a/html/images/neu/web2.png b/html/images/neu/web2.png
new file mode 100755
index 0000000000..91906b6848
Binary files /dev/null and b/html/images/neu/web2.png differ
diff --git a/html/images/no-graph.png b/html/images/no-graph.png
new file mode 100755
index 0000000000..f68082158b
Binary files /dev/null and b/html/images/no-graph.png differ
diff --git a/html/images/observe-100.png b/html/images/observe-100.png
new file mode 100755
index 0000000000..27f22aea1e
Binary files /dev/null and b/html/images/observe-100.png differ
diff --git a/html/images/os/apple.gif b/html/images/os/apple.gif
new file mode 100755
index 0000000000..2bdf6e5b5e
Binary files /dev/null and b/html/images/os/apple.gif differ
diff --git a/html/images/os/centos.png b/html/images/os/centos.png
new file mode 100755
index 0000000000..0d5c19e999
Binary files /dev/null and b/html/images/os/centos.png differ
diff --git a/html/images/os/debian.png b/html/images/os/debian.png
new file mode 100755
index 0000000000..00519ad37c
Binary files /dev/null and b/html/images/os/debian.png differ
diff --git a/html/images/os/dragonfly.png b/html/images/os/dragonfly.png
new file mode 100755
index 0000000000..68387b4d6a
Binary files /dev/null and b/html/images/os/dragonfly.png differ
diff --git a/html/images/os/fedora.png b/html/images/os/fedora.png
new file mode 100755
index 0000000000..bb0920f31f
Binary files /dev/null and b/html/images/os/fedora.png differ
diff --git a/html/images/os/freebsd.png b/html/images/os/freebsd.png
new file mode 100755
index 0000000000..c8e48f0534
Binary files /dev/null and b/html/images/os/freebsd.png differ
diff --git a/html/images/os/ios.gif b/html/images/os/ios.gif
new file mode 100755
index 0000000000..5af6d830c7
Binary files /dev/null and b/html/images/os/ios.gif differ
diff --git a/html/images/os/linux.png b/html/images/os/linux.png
new file mode 100755
index 0000000000..b545571a9f
Binary files /dev/null and b/html/images/os/linux.png differ
diff --git a/html/images/os/m0n0wall.png b/html/images/os/m0n0wall.png
new file mode 100755
index 0000000000..228abbf98a
Binary files /dev/null and b/html/images/os/m0n0wall.png differ
diff --git a/html/images/os/mandrake.png b/html/images/os/mandrake.png
new file mode 100755
index 0000000000..98ec329bf0
Binary files /dev/null and b/html/images/os/mandrake.png differ
diff --git a/html/images/os/netbsd.png b/html/images/os/netbsd.png
new file mode 100755
index 0000000000..cf9f46f063
Binary files /dev/null and b/html/images/os/netbsd.png differ
diff --git a/html/images/os/openbsd.png b/html/images/os/openbsd.png
new file mode 100755
index 0000000000..4f50fbbf61
Binary files /dev/null and b/html/images/os/openbsd.png differ
diff --git a/html/images/os/pfsense.png b/html/images/os/pfsense.png
new file mode 100755
index 0000000000..f9e223c4a3
Binary files /dev/null and b/html/images/os/pfsense.png differ
diff --git a/html/images/os/procurve.png b/html/images/os/procurve.png
new file mode 100755
index 0000000000..600dc4e55e
Binary files /dev/null and b/html/images/os/procurve.png differ
diff --git a/html/images/os/ram.gif b/html/images/os/ram.gif
new file mode 100755
index 0000000000..c2ab19a194
Binary files /dev/null and b/html/images/os/ram.gif differ
diff --git a/html/images/os/redhat.png b/html/images/os/redhat.png
new file mode 100755
index 0000000000..82822d10f8
Binary files /dev/null and b/html/images/os/redhat.png differ
diff --git a/html/images/os/sgi.gif b/html/images/os/sgi.gif
new file mode 100755
index 0000000000..2945f1c85a
Binary files /dev/null and b/html/images/os/sgi.gif differ
diff --git a/html/images/os/slackware.png b/html/images/os/slackware.png
new file mode 100755
index 0000000000..6bb89bc80f
Binary files /dev/null and b/html/images/os/slackware.png differ
diff --git a/html/images/os/snom.png b/html/images/os/snom.png
new file mode 100755
index 0000000000..1cc4919d8a
Binary files /dev/null and b/html/images/os/snom.png differ
diff --git a/html/images/os/solaris.gif b/html/images/os/solaris.gif
new file mode 100755
index 0000000000..690534f83e
Binary files /dev/null and b/html/images/os/solaris.gif differ
diff --git a/html/images/os/sun.gif b/html/images/os/sun.gif
new file mode 100755
index 0000000000..e0ed0be04c
Binary files /dev/null and b/html/images/os/sun.gif differ
diff --git a/html/images/os/suse.png b/html/images/os/suse.png
new file mode 100755
index 0000000000..917bab466b
Binary files /dev/null and b/html/images/os/suse.png differ
diff --git a/html/images/os/ubuntu.png b/html/images/os/ubuntu.png
new file mode 100755
index 0000000000..2b1a99b188
Binary files /dev/null and b/html/images/os/ubuntu.png differ
diff --git a/html/images/os/voswall.png b/html/images/os/voswall.png
new file mode 100755
index 0000000000..25b352b6b6
Binary files /dev/null and b/html/images/os/voswall.png differ
diff --git a/html/images/os/windows.gif b/html/images/os/windows.gif
new file mode 100755
index 0000000000..65b48309ae
Binary files /dev/null and b/html/images/os/windows.gif differ
diff --git a/html/images/password-blue.png b/html/images/password-blue.png
new file mode 100755
index 0000000000..8bda6f1c67
Binary files /dev/null and b/html/images/password-blue.png differ
diff --git a/html/images/password.png b/html/images/password.png
new file mode 100755
index 0000000000..5e17dfcfcc
Binary files /dev/null and b/html/images/password.png differ
diff --git a/html/images/peering.png b/html/images/peering.png
new file mode 100755
index 0000000000..5b39b7167a
Binary files /dev/null and b/html/images/peering.png differ
diff --git a/html/images/phone.gif b/html/images/phone.gif
new file mode 100755
index 0000000000..3885c869f0
Binary files /dev/null and b/html/images/phone.gif differ
diff --git a/html/images/readme.html b/html/images/readme.html
new file mode 100755
index 0000000000..3852c6dd5a
--- /dev/null
+++ b/html/images/readme.html
@@ -0,0 +1,1495 @@
+
+
+
+
+
+
+ famfamfam.com: Silk Icons
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/html/images/readme.txt b/html/images/readme.txt
new file mode 100755
index 0000000000..400a64d785
--- /dev/null
+++ b/html/images/readme.txt
@@ -0,0 +1,22 @@
+Silk icon set 1.3
+
+_________________________________________
+Mark James
+http://www.famfamfam.com/lab/icons/silk/
+_________________________________________
+
+This work is licensed under a
+Creative Commons Attribution 2.5 License.
+[ http://creativecommons.org/licenses/by/2.5/ ]
+
+This means you may use it for any purpose,
+and make any changes you like.
+All I ask is that you include a link back
+to this page in your credits.
+
+Are you using this icon set? Send me an email
+(including a link or picture if available) to
+mjames@gmail.com
+
+Any other questions about this icon set please
+contact mjames@gmail.com
\ No newline at end of file
diff --git a/html/images/shade.gif b/html/images/shade.gif
new file mode 100755
index 0000000000..2dd62496ae
Binary files /dev/null and b/html/images/shade.gif differ
diff --git a/html/images/shadeactive.gif b/html/images/shadeactive.gif
new file mode 100755
index 0000000000..a329e63816
Binary files /dev/null and b/html/images/shadeactive.gif differ
diff --git a/html/images/sites.png b/html/images/sites.png
new file mode 100755
index 0000000000..426ea907e1
Binary files /dev/null and b/html/images/sites.png differ
diff --git a/html/images/small/add.png b/html/images/small/add.png
new file mode 100755
index 0000000000..d3e570d0f0
Binary files /dev/null and b/html/images/small/add.png differ
diff --git a/html/images/small/cog.png b/html/images/small/cog.png
new file mode 100755
index 0000000000..a2aa786fda
Binary files /dev/null and b/html/images/small/cog.png differ
diff --git a/html/images/small/dns.png b/html/images/small/dns.png
new file mode 100755
index 0000000000..85dbfe46bf
Binary files /dev/null and b/html/images/small/dns.png differ
diff --git a/html/images/small/graphs.png b/html/images/small/graphs.png
new file mode 100755
index 0000000000..5871920603
Binary files /dev/null and b/html/images/small/graphs.png differ
diff --git a/html/images/small/help.png b/html/images/small/help.png
new file mode 100755
index 0000000000..f914d0d290
Binary files /dev/null and b/html/images/small/help.png differ
diff --git a/html/images/small/home.png b/html/images/small/home.png
new file mode 100755
index 0000000000..e72800a1d6
Binary files /dev/null and b/html/images/small/home.png differ
diff --git a/html/images/small/important.png b/html/images/small/important.png
new file mode 100755
index 0000000000..1e3bbb311b
Binary files /dev/null and b/html/images/small/important.png differ
diff --git a/html/images/small/info.png b/html/images/small/info.png
new file mode 100755
index 0000000000..8d10a16936
Binary files /dev/null and b/html/images/small/info.png differ
diff --git a/html/images/small/internet.png b/html/images/small/internet.png
new file mode 100755
index 0000000000..d2ee2389af
Binary files /dev/null and b/html/images/small/internet.png differ
diff --git a/html/images/small/monitor.png b/html/images/small/monitor.png
new file mode 100755
index 0000000000..bf9cf90d4c
Binary files /dev/null and b/html/images/small/monitor.png differ
diff --git a/html/images/small/refresh.png b/html/images/small/refresh.png
new file mode 100755
index 0000000000..3235e72564
Binary files /dev/null and b/html/images/small/refresh.png differ
diff --git a/html/images/small/screens.png b/html/images/small/screens.png
new file mode 100755
index 0000000000..cd7b11f6b9
Binary files /dev/null and b/html/images/small/screens.png differ
diff --git a/html/images/small/server.png b/html/images/small/server.png
new file mode 100755
index 0000000000..5c442fa35e
Binary files /dev/null and b/html/images/small/server.png differ
diff --git a/html/images/small/users.png b/html/images/small/users.png
new file mode 100755
index 0000000000..0bdf797176
Binary files /dev/null and b/html/images/small/users.png differ
diff --git a/html/images/small/wiki.png b/html/images/small/wiki.png
new file mode 100755
index 0000000000..e12717effc
Binary files /dev/null and b/html/images/small/wiki.png differ
diff --git a/html/images/small/world.png b/html/images/small/world.png
new file mode 100755
index 0000000000..07a756888c
Binary files /dev/null and b/html/images/small/world.png differ
diff --git a/html/images/status.png b/html/images/status.png
new file mode 100755
index 0000000000..3b9c725ed1
Binary files /dev/null and b/html/images/status.png differ
diff --git a/html/images/sub2a.gif b/html/images/sub2a.gif
new file mode 100755
index 0000000000..2de1089ab8
Binary files /dev/null and b/html/images/sub2a.gif differ
diff --git a/html/images/tabs/norm_left.gif b/html/images/tabs/norm_left.gif
new file mode 100755
index 0000000000..f3e3679a17
Binary files /dev/null and b/html/images/tabs/norm_left.gif differ
diff --git a/html/images/tabs/norm_left_on.gif b/html/images/tabs/norm_left_on.gif
new file mode 100755
index 0000000000..f9952e86cc
Binary files /dev/null and b/html/images/tabs/norm_left_on.gif differ
diff --git a/html/images/tabs/norm_right.gif b/html/images/tabs/norm_right.gif
new file mode 100755
index 0000000000..4b27fc361f
Binary files /dev/null and b/html/images/tabs/norm_right.gif differ
diff --git a/html/images/tabs/norm_right_on.gif b/html/images/tabs/norm_right_on.gif
new file mode 100755
index 0000000000..fc8ac15a15
Binary files /dev/null and b/html/images/tabs/norm_right_on.gif differ
diff --git a/html/images/transit.png b/html/images/transit.png
new file mode 100755
index 0000000000..368df2f01b
Binary files /dev/null and b/html/images/transit.png differ
diff --git a/html/images/txt.gif b/html/images/txt.gif
new file mode 100755
index 0000000000..f67d54f7b2
Binary files /dev/null and b/html/images/txt.gif differ
diff --git a/html/images/wiki.png b/html/images/wiki.png
new file mode 100755
index 0000000000..82ff766092
Binary files /dev/null and b/html/images/wiki.png differ
diff --git a/html/includes/.confirm_login.php.swp b/html/includes/.confirm_login.php.swp
new file mode 100644
index 0000000000..e542b03859
Binary files /dev/null and b/html/includes/.confirm_login.php.swp differ
diff --git a/html/includes/.login.inc.php.swo b/html/includes/.login.inc.php.swo
new file mode 100644
index 0000000000..e4331bcd51
Binary files /dev/null and b/html/includes/.login.inc.php.swo differ
diff --git a/html/includes/.login.inc.php.swp b/html/includes/.login.inc.php.swp
new file mode 100644
index 0000000000..f8e57a0a5e
Binary files /dev/null and b/html/includes/.login.inc.php.swp differ
diff --git a/html/includes/add-srv.inc b/html/includes/add-srv.inc
new file mode 100644
index 0000000000..e6943e56cd
--- /dev/null
+++ b/html/includes/add-srv.inc
@@ -0,0 +1,16 @@
+
+
+ $updated = '1';
+
+ $sql = "INSERT INTO `services` (`service_host`,`service_ip`,`service_type`,`service_desc`,`service_param`,`service_ignore`)
+ VALUES ('" . $_POST['device']. "','" . $_POST['ip'] . "','" . $_POST['type'] . "',
+ '" . $_POST['descr'] . "','" . $_POST['params'] . "','0')";
+
+ $query = mysql_query($sql);
+ $affected = mysql_affected_rows() . "records affected";
+
+ $message .= $message_break . "Service added!";
+ $message_break .= " "
+
+
+?>
diff --git a/html/includes/ajaxtabs.inc b/html/includes/ajaxtabs.inc
new file mode 100644
index 0000000000..051c428d68
--- /dev/null
+++ b/html/includes/ajaxtabs.inc
@@ -0,0 +1,9 @@
+
diff --git a/html/includes/authenticate.inc b/html/includes/authenticate.inc
new file mode 100644
index 0000000000..02db0f8182
--- /dev/null
+++ b/html/includes/authenticate.inc
@@ -0,0 +1,36 @@
+
diff --git a/html/includes/dev-data-linux.inc b/html/includes/dev-data-linux.inc
new file mode 100644
index 0000000000..7ee3c14ab3
--- /dev/null
+++ b/html/includes/dev-data-linux.inc
@@ -0,0 +1,14 @@
+
+ Operating System $device[os] $device[version] ($device[features])
+ Hardware $device[hardware]
+ Uptime " . formatuptime($device[uptime]) . "
+
+");
+
+
+?>
diff --git a/html/includes/dev-edit.inc b/html/includes/dev-edit.inc
new file mode 100644
index 0000000000..4dd7eb2fe6
--- /dev/null
+++ b/html/includes/dev-edit.inc
@@ -0,0 +1,137 @@
+ "5") {
+ include("includes/edit-host.inc");
+ }
+}
+
+if($_POST['addsrv']) {
+ if($userlevel > "5") {
+ include("includes/add-srv.inc");
+ }
+}
+
+
+$device = mysql_fetch_array(mysql_query("SELECT * FROM `devices` WHERE `id` = '$_GET[id]'"));
+$descr = $device['purpose'];
+
+if($updated) { print_message("Device Settings Saved"); }
+
+if($device['type'] == 'server') { $server_select = "selected"; }
+if($device['type'] == 'network') { $network_select = "selected"; }
+if($device['type'] == 'firewall') { $firewall_select = "selected"; }
+if($device['type'] == 'workstation') { $workstation_select = "selected"; }
+if($device['type'] == 'other') { $other_select = "selected"; }
+
+echo("");
+
+}
+
diff --git a/html/includes/dev-events.inc b/html/includes/dev-events.inc
new file mode 100644
index 0000000000..81818272a8
--- /dev/null
+++ b/html/includes/dev-events.inc
@@ -0,0 +1,15 @@
+
+
+$query = "SELECT *,DATE_FORMAT(datetime, '%D %b %Y %T') as humandate FROM `eventlog` WHERE `host` = '$_GET[id]' ORDER BY `datetime` DESC LIMIT 0,250";
+$data = mysql_query($query);
+
+echo("");
+
+while($entry = mysql_fetch_array($data)) {
+
+include("includes/print-event.inc");
+
+}
+echo("
");
+
+ ?>
diff --git a/html/includes/dev-graphs.inc b/html/includes/dev-graphs.inc
new file mode 100644
index 0000000000..9a7f7c2df3
--- /dev/null
+++ b/html/includes/dev-graphs.inc
@@ -0,0 +1,189 @@
+
+
+$device_query = mysql_query("select * from devices WHERE id = '$_GET[id]'");
+while($device = mysql_fetch_array($device_query)) {
+ $hostname = $device[hostname];
+ $bg="#ffffff";
+
+
+ echo("");
+
+ switch ($device['os']) {
+ case "ProCurve":
+ echo("
Processor Utilisation
");
+ $graph_type = "cpu"; include ("includes/print-device-graph.php");
+ echo("
");
+ echo("
Memory Usage
");
+ $graph_type = "mem"; include ("includes/print-device-graph.php");
+ echo("
");
+ echo("
Device Uptime
");
+ $graph_type = "uptime"; include ("includes/print-device-graph.php"); break;
+ echo("
");
+
+ break;
+ case "Windows":
+ $graph_type = "cpu";
+ include ("includes/print-device-graph.php");
+
+ $memgraph = memgraphWin ($device[hostname] . "-mem.rrd", $device[hostname] . "-mem.png", $day, $now, 335, 100);
+ $loadgraph = loadgraphWin ($device[hostname] . "-load.rrd", $device[hostname] . "-load.png", $day, $now, 335, 100);
+ $cpugraphm = cpugraphWin ($device[hostname] . "-cpu.rrd", $device[hostname] . "-cpu-m.png", $month, $now, 335, 100);
+ $memgraphm = memgraphWin ($device[hostname] . "-mem.rrd", $device[hostname] . "-mem-m.png", $month, $now, 335, 100);
+ $loadgraphm = loadgraphWin ($device[hostname] . "-load.rrd", $device[hostname] . "-load-m.png", $month, $now, 335, 100);
+ $usersgraph = usersgraphWin ($device[hostname] . "-sys.rrd", $device[hostname] . "-users.png", $day, $now, 335, 100);
+ $usersgraphm = usersgraphWin ($device[hostname] . "-sys.rrd", $device[hostname] . "-users-m.png", $month, $now, 335, 100);
+ $procsgraph = procsgraphWin ($device[hostname] . "-sys.rrd", $device[hostname] . "-procs.png", $day, $now, 335, 100);
+ $procsgraphm = procsgraphWin ($device[hostname] . "-sys.rrd", $device[hostname] . "-procs-m.png", $month, $now, 335, 100);
+ break;
+ case "FreeBSD":
+ case "NetBSD":
+ case "Linux":
+ case "m0n0wall":
+ case "Voswall":
+ case "DragonFly":
+ case "OpenBSD":
+ case "pfSense":
+ echo("
Processor Utilisation
");
+ $graph_type = "cpu"; include ("includes/print-device-graph.php");
+ echo("
");
+ if($device[os] == "m0n0wall" || $device[os] == "pfSense" || $device[os] == "Voswall" || $device[monowall]) {
+ echo("
Device Uptime
");
+ $graph_type = "uptime"; include ("includes/print-device-graph.php"); break;
+ echo("
");
+ }
+ if($device['os'] != "NetBSD") {
+ echo("
Memory Utilisation
");
+ $graph_type = "mem"; include ("includes/print-device-graph.php");
+ echo("
");
+ }
+
+ if(mysql_result(mysql_query("SELECT count(storage_id) FROM storage WHERE host_id = '$device[id]'"),0)) {
+ echo("
Storage
");
+ $graph_type = "unixfs"; include ("includes/print-device-graph.php");
+ echo("
");
+ }
+
+ if(mysql_result(mysql_query("SELECT count(*) FROM temperature WHERE temp_host = '$device[id]'"),0)) {
+ echo("
Temperatures
");
+ $graph_type = "temp"; include ("includes/print-device-graph.php");
+ echo("
");
+ }
+ echo("
IP Statistics
");
+ $graph_type = "ip_graph"; include ("includes/print-device-graph.php");
+ echo("
");
+ echo("
TCP Statistics
");
+ $graph_type = "tcp_graph"; include ("includes/print-device-graph.php");
+ echo("
");
+ echo("
UDP Statistics
");
+ $graph_type = "udp_graph"; include ("includes/print-device-graph.php");
+ echo("
");
+ echo("
ICMP Statistics
");
+ $graph_type = "icmp_graph"; include ("includes/print-device-graph.php");
+ echo("
");
+ echo("
System Load
");
+ $graph_type = "load"; include ("includes/print-device-graph.php");
+ echo("
");
+ echo("
Users Logged On
");
+ $graph_type = "users"; include ("includes/print-device-graph.php");
+ echo("
");
+ echo("
Running Processes
");
+ $graph_type = "procs"; include ("includes/print-device-graph.php");
+ echo("
");
+ if($device[postfix] == '1') {
+ echo("
Postfix Mail Statistics
");
+ $graph_type = "postfix"; include ("includes/print-device-graph.php");
+ echo("
");
+ echo("
Postfix Mail Error Statistics
");
+ $graph_type = "postfixerrors"; include ("includes/print-device-graph.php");
+ echo("
");
+ }
+ if($device[courier] == '1') {
+ echo("
Postfix Mail Statistics
");
+ $graph_type = "courier"; include ("includes/print-device-graph.php");
+ echo("
");
+ }
+ if($device[apache] == '1') {
+ echo("
Apache Hits
");
+ $graph_type = "apachehits"; include ("includes/print-device-graph.php");
+ echo("
");
+ echo("
Apache Traffic
");
+ $graph_type = "apachebits"; include ("includes/print-device-graph.php");
+ echo("
");
+ }
+ echo("
Device Uptime
");
+ $graph_type = "uptime"; include ("includes/print-device-graph.php");
+ echo("
");
+ break;
+ case "IOS":
+ echo("
CPU Usage
");
+ $graph_type = "cpu"; include ("includes/print-device-graph.php");
+ echo("
Memory Usage
");
+ echo("
");
+ $graph_type = "mem"; include ("includes/print-device-graph.php");
+ echo("
");
+ if(mysql_result(mysql_query("SELECT count(*) FROM temperature WHERE temp_host = '$device[id]'"),0)) {
+ echo("
Temperatures
");
+ $graph_type = "temp"; include ("includes/print-device-graph.php");
+ echo("
");
+ }
+ echo("
IP Statistics
");
+ $graph_type = "ip_graph"; include ("includes/print-device-graph.php");
+ echo("
");
+ echo("
TCP Statistics
");
+ $graph_type = "tcp_graph"; include ("includes/print-device-graph.php");
+ echo("
");
+ echo("
UDP Statistics
");
+ $graph_type = "udp_graph"; include ("includes/print-device-graph.php");
+ echo("
");
+ echo("
ICMP Statistics
");
+ $graph_type = "icmp_graph"; include ("includes/print-device-graph.php");
+ echo("
");
+ echo("
Uptime
");
+ $graph_type = "uptime"; include ("includes/print-device-graph.php");
+ break;
+ case "Snom":
+ echo("
Calls
");
+ $graph_type = "calls"; include ("includes/print-device-graph.php");
+ }
+
+ if($memgraph) {
+ echo("
");
+ }
+ if($storagegraph) {
+ echo("$storagegraph");
+ }
+ if($loadgraph) {
+ echo("
");
+ }
+ if($tempgraph) {
+ echo("
");
+ }
+ if($mailsgraph) {
+ echo("
");
+ }
+ if($mailerrorgraph) {
+ echo("
");
+ }
+ if($couriergraph) {
+ echo("
");
+ }
+ if($ahitsgraph) {
+ echo("
");
+ }
+ if($abitsgraph) {
+ echo("
");
+ }
+ if($usersgraph) {
+ echo("
");
+ }
+ if($procsgraph) {
+ echo("
");
+ }
+ if($uptimegraph) {
+ echo("
");
+ }
+ echo("
");
+}
+
+?>
+
diff --git a/html/includes/dev-ifgraphs.inc b/html/includes/dev-ifgraphs.inc
new file mode 100644
index 0000000000..ca12154d56
--- /dev/null
+++ b/html/includes/dev-ifgraphs.inc
@@ -0,0 +1,7 @@
+
diff --git a/html/includes/dev-ifs.inc b/html/includes/dev-ifs.inc
new file mode 100644
index 0000000000..ba0f2cf856
--- /dev/null
+++ b/html/includes/dev-ifs.inc
@@ -0,0 +1,13 @@
+");
+ $i = "1";
+ $interface_query = mysql_query("select * from interfaces WHERE host = '$_GET[id]' ORDER BY 'ifIndex'");
+ while($interface = mysql_fetch_array($interface_query)) {
+ include("includes/print-interface.inc");
+ }
+ echo("
");
+
+?>
diff --git a/html/includes/dev-overview.inc b/html/includes/dev-overview.inc
new file mode 100644
index 0000000000..c6b71620ef
--- /dev/null
+++ b/html/includes/dev-overview.inc
@@ -0,0 +1,123 @@
+
+ ");
+
+
+if(file_exists("includes/dev-data-" . strtolower($device[os]) . ".inc")) {
+ echo("");
+ echo("
Device Data
");
+ include("includes/dev-data-" . strtolower($device[os]) . ".inc");
+ echo("
");
+}
+
+
+echo("");
+
+$query = "SELECT *,DATE_FORMAT(datetime, '%d/%b/%y %T') as humandate FROM `eventlog` WHERE `host` = '$_GET[id]' ORDER BY `datetime` DESC LIMIT 0,10";
+$data = mysql_query($query);
+
+echo("
Recent Events
+
");
+
+while($entry = mysql_fetch_array($data)) {
+
+include("includes/print-event.inc");
+
+}
+echo("
");
+
+echo(" ");
+
+if($interfaces['total']) {
+
+ echo("");
+ echo("
Interfaces
");
+
+echo("
+
+
+ $interfaces[total]
+ $interfaces[up]
+ $interfaces[down]
+ $interfaces[disabled]
+
");
+
+ echo("
");
+
+ $sql = "SELECT * FROM interfaces WHERE host = '$id'";
+ $query = mysql_query($sql);
+ while($data = mysql_fetch_array($query)) {
+ $up_admin = $data['up_admin'];
+ $up = $data['up'];
+ if ($up_admin == "down") { $status = "grey"; }
+ if ($up_admin == "up" && $up == "down") { $status = "red"; }
+ if ($up_admin == "up" && $up == "up") { $status = "blue"; }
+ echo("$ifbreak
" . generateiflink($data, makeshortif(strtolower($data['if']))) . " ");
+ $ifbreak = ", ";
+ }
+ unset($break);
+ echo("
");
+
+ echo("
");
+
+}
+
+if($services['total']) {
+
+ echo("");
+ echo("
Services
");
+
+echo("
+
+
+ $services[total]
+ $services[up]
+ $services[down]
+ $services[disabled]
+
");
+
+
+
+ echo("
");
+
+ $sql = "SELECT * FROM services WHERE service_host = '$id' ORDER BY service_type";
+ $query = mysql_query($sql);
+ while($data = mysql_fetch_array($query)) {
+ if ($data[service_status] == "0" && $data[service_ignore] == "1") { $status = "grey"; }
+ if ($data[service_status] == "1" && $data[service_ignore] == "1") { $status = "green"; }
+ if ($data[service_status] == "0" && $data[service_ignore] == "0") { $status = "red"; }
+ if ($data[service_status] == "1" && $data[service_ignore] == "0") { $status = "blue"; }
+ echo("$break
" . strtolower($data[service_type]) . " ");
+ $break = ", ";
+ }
+
+ echo("
");
+
+}
+
+
+
+echo("
");
+
+?>
diff --git a/html/includes/dev-srv.inc b/html/includes/dev-srv.inc
new file mode 100644
index 0000000000..507a78ebdd
--- /dev/null
+++ b/html/includes/dev-srv.inc
@@ -0,0 +1,24 @@
+
+
+$hostname = gethostbyid($_GET[id]);
+
+if(mysql_result(mysql_query("select count(service_id) from services WHERE service_host = '$_GET[id]'"), 0) > '0') {
+
+ echo("");
+ $i = "1";
+ $service_query = mysql_query("select * from services WHERE service_host = '$_GET[id]' ORDER BY service_type");
+ while($service = mysql_fetch_array($service_query)) {
+
+ include("includes/print-service.inc");
+ }
+ echo("
");
+
+} else {
+
+ echo("No Services");
+
+}
+
+
+?>
+
diff --git a/html/includes/dev-syslog.inc b/html/includes/dev-syslog.inc
new file mode 100644
index 0000000000..ea740df5cc
--- /dev/null
+++ b/html/includes/dev-syslog.inc
@@ -0,0 +1,15 @@
+
+
+$query = "SELECT * FROM `syslog` WHERE `host` = '$_GET[id]' ORDER BY `datetime` DESC LIMIT 0,250";
+$data = mysql_query($query);
+
+echo("");
+
+while($entry = mysql_fetch_array($data)) {
+
+include("includes/print-syslog.inc");
+
+}
+echo("
");
+
+ ?>
diff --git a/html/includes/device-header.inc b/html/includes/device-header.inc
new file mode 100644
index 0000000000..e7f627ca33
--- /dev/null
+++ b/html/includes/device-header.inc
@@ -0,0 +1,21 @@
+
+ $image
+ " . generatedevicelink($device) . "
+ $device[purpose]
+
+ ");
+
+?>
diff --git a/html/includes/edit-host.inc b/html/includes/edit-host.inc
new file mode 100644
index 0000000000..0b65bede20
--- /dev/null
+++ b/html/includes/edit-host.inc
@@ -0,0 +1,16 @@
+
+
+ $updated = '1';
+
+ $descr = $_POST['descr'];
+ $apache = $_POST['apache'];
+ $temp = $_POST['temp'];
+ $ignore = $_POST['ignore'];
+ $type = $_POST['type'];
+
+ $sql = "UPDATE `devices` SET `purpose` = '$descr', `apache` = '$apache', `temp` = '$temp', `type` = '$type', `ignore` = '$ignore' WHERE `id` = '$_GET[id]'";
+ $query = mysql_query($sql);
+
+ $affected = mysql_affected_rows() . "records affected";
+
+?>
diff --git a/html/includes/hostbox-old.inc b/html/includes/hostbox-old.inc
new file mode 100644
index 0000000000..63dba2eba3
--- /dev/null
+++ b/html/includes/hostbox-old.inc
@@ -0,0 +1,32 @@
+"; }
+
+ echo("");
+ echo("
+
+ $image
+ $device[hostname]
+ $device[hardware]
+ $device[os] $device[version]
+ $device[features]
+ $device[location]
+ Up " . formatUptime($device[uptime]) ."
+ ");
+
+ if($_GET['page'] == 'device') {
+ if($_GET['graphs'] == 'yes') {
+ echo("
+ Hide Graphs
");
+ } else {
+ echo("
+ Show Graphs
");
+ }
+ }
+
+echo(" ");
+
+ echo("
");
+
+?>
diff --git a/html/includes/hostbox.inc b/html/includes/hostbox.inc
new file mode 100644
index 0000000000..41ca28b546
--- /dev/null
+++ b/html/includes/hostbox.inc
@@ -0,0 +1,30 @@
+
+ $image
+ " . generatedevicelink($device) . "
+ $device[purpose]
+ $device[os]
+ $device[version]
+ $device[hardware]
+ $device[features]
+ " . formatUptime($device[uptime]) . "
+
+ $device[location]
+
+
+ ");
+
+?>
diff --git a/html/includes/ifbox.inc b/html/includes/ifbox.inc
new file mode 100644
index 0000000000..2b06ec1858
--- /dev/null
+++ b/html/includes/ifbox.inc
@@ -0,0 +1,22 @@
+$inf
");
+ if($ifalias && $ifalias != "") { echo("$ifalias "); }
+ if($iftype && $iftype != "") { echo("$iftype ");
+ if($mac && $mac != "") { echo("$mac ");
+ } else { echo(" "); }
+ }
+
+ if($interface[ifType] != "softwareLoopback") {
+ if($speed == '0') { $speed = "0bps"; }
+ echo("$speed");
+ if($interface[ifDuplex] != unknown) { echo(" / $interface[ifDuplex]-duplex"); }
+ if($interface[ifMtu] && $interface[ifMtu] != "") { echo(" / $interface[ifMtu]MTU "); }
+ echo("");
+ }
+
+ echo ("$status ");
+
+?>
diff --git a/html/includes/print-device-graph.php b/html/includes/print-device-graph.php
new file mode 100644
index 0000000000..5a6d1b3c23
--- /dev/null
+++ b/html/includes/print-device-graph.php
@@ -0,0 +1,25 @@
+', LEFT);\" onmouseout=\"return nd();\">
+ ");
+ echo("', LEFT);\" onmouseout=\"return nd();\">
+ ");
+ echo("', LEFT);\" onmouseout=\"return nd();\">
+ ");
+ echo("', LEFT);\" onmouseout=\"return nd();\">
+ ");
+
+?>
+
diff --git a/html/includes/print-event-short.inc b/html/includes/print-event-short.inc
new file mode 100644
index 0000000000..ad5f0d1736
--- /dev/null
+++ b/html/includes/print-event-short.inc
@@ -0,0 +1,35 @@
+
+
+
+if($bg == $list_colour_a) { $bg = $list_colour_b; } else { $bg=$list_colour_a; }
+
+ $hostname = gethostbyid($entry['host']);
+ $interface = fixifname(getifbyid($entry['interface']));
+
+ unset($icon);
+
+ $icon = geteventicon($entry['message']);
+ if($icon) {$icon = " "; }
+
+
+ echo("
+
+
+ $entry[humandate]
+ ");
+ $if['id'] = $entry[interface];
+ $if['if'] = $interface;
+ echo("
+ " . generateiflink($if) . "
+
+ $icon
+
+ $entry[message]
+
+
+ ");
+
+
+
+
+?>
diff --git a/html/includes/print-event.inc b/html/includes/print-event.inc
new file mode 100644
index 0000000000..c3f76890a5
--- /dev/null
+++ b/html/includes/print-event.inc
@@ -0,0 +1,43 @@
+
+
+
+if($bg == $list_colour_a) { $bg = $list_colour_b; } else { $bg=$list_colour_a; }
+
+ $hostname = gethostbyid($entry['host']);
+ $interface = fixifname(getifbyid($entry['interface']));
+
+ unset($icon);
+
+ $icon = geteventicon($entry['message']);
+ if($icon) {$icon = " "; }
+
+
+ echo("
+
+
+ $entry[humandate]
+ ");
+ if(!$_GET[id] && !$overview) {
+ $dev['id'] = $entry['host'];
+ $dev['hostname'] = $hostname;
+ echo("
+ " . generatedevicelink($dev) . "
+ ");
+ }
+
+ $if['id'] = $entry[interface];
+ $if['if'] = $interface;
+ echo("
+ " . generateiflink($if) . "
+
+ $icon
+
+ $entry[message]
+
+
+ ");
+
+
+
+
+?>
diff --git a/html/includes/print-interface-graphs.php b/html/includes/print-interface-graphs.php
new file mode 100644
index 0000000000..3d84aa81a6
--- /dev/null
+++ b/html/includes/print-interface-graphs.php
@@ -0,0 +1,24 @@
+', LEFT);\" onmouseout=\"return nd();\">
+ ");
+ echo("', LEFT);\" onmouseout=\"return nd();\">
+ ");
+ echo("', LEFT);\" onmouseout=\"return nd();\">
+ ");
+ echo("', LEFT);\" onmouseout=\"return nd();\">
+ ");
+
+?>
diff --git a/html/includes/print-interface.inc b/html/includes/print-interface.inc
new file mode 100644
index 0000000000..105505b3de
--- /dev/null
+++ b/html/includes/print-interface.inc
@@ -0,0 +1,102 @@
+";}
+ if($bg == "#ffffff") { $bg = "#e5e5e5"; } else { $bg="#ffffff"; }
+ $graph_url = "graph.php?if=$if_id&from=$twoday&to=$now&width=400&height=120&type=bits";
+ echo("
+
+ ');\" onmouseout=\"return nd();\"
+ class='$ifclass' href='?page=interface&id=$interface[id]'>
+ $i. $inf
+ $ifname ");
+ unset ($break);
+ $iftype = fixiftype($interface[ifType]);
+ if(!$dographs) {
+ $ipdata = mysql_query("SELECT * FROM `ipaddr` WHERE `interface_id` = '$interface[id]'");
+ while($ip = mysql_fetch_Array($ipdata)) {
+ echo("$break $ip[addr]/$ip[cidr] ");
+ $break = " ";
+ }
+ echo("");
+ echo(" ");
+ if($speed && $speed != "") { echo("$speed "); }
+ echo(" ");
+ if($iftype && $iftype != "") { echo("$iftype "); } else { echo("-"); }
+ echo(" ");
+ if($mac && $mac != "") { echo("$mac "); } else { echo("-"); }
+ echo(" ");
+ if($interface[ifMtu] && $interface[ifMtu] != "") { echo("MTU $interface[ifMtu] "); } else { echo("-"); }
+
+# if($interface[ifDuplex] != unknown) { echo("Duplex $interface[ifDuplex] "); } else { echo("-"); }
+}
+
+echo(" ");
+ echo("");
+ if ( strpos($inf, "oopback") === false && !$dographs) {
+ $link_query = mysql_query("select I.if, D.hostname, D.id AS dev_id, I.id from links AS L, interfaces AS I, devices AS D WHERE L.src_if = '$if_id' AND L.dst_if = I.id AND I.host = D.id");
+ while($link = mysql_fetch_array($link_query)) {
+ echo(" " . generateiflink($link) . " on " . generatedevicelink($link) . " ");
+ $br = " ";
+ }
+ unset($br);
+ $adj_sql = "SELECT * FROM networks AS N, interfaces AS I, adjacencies AS A ";
+ $adj_sql = $adj_sql . "WHERE I.id = A.interface_id AND A.network_id = N.id ";
+ $adj_sql = $adj_sql . "AND I.id = '$if_id'";
+ $adj_query = mysql_query("$adj_sql");
+ while($adjs = mysql_fetch_array($adj_query)) {
+ $network_id = $adjs['network_id'];
+ $newsql = "SELECT *, I.id AS iid, D.id AS did FROM adjacencies AS A, networks as N, interfaces as I, devices as D ";
+ $newsql = $newsql . "WHERE N.id = '$network_id' AND A.network_id = N.id AND I.id = A.interface_id AND D.id = I.host ";
+ $newsql = $newsql . "AND D.id != '$device[id]' AND I.if NOT LIKE '%loopback%' GROUP BY D.id ORDER BY D.hostname";
+ $new_query = mysql_query($newsql);
+ while($new = mysql_fetch_array($new_query)) {
+ if ($new['status'] == '0') { $class = "red"; } else { $class = "blue"; }
+ if ($new['ignore'] == '1') {
+ $class = "grey";
+ if ($new['status'] == '1') { $class = "green"; }
+ }
+ $this_ifid = $new['iid'];
+ $this_hostid = $new['did'];
+ $this_hostname = $new['hostname'];
+ $this_ifname = fixifName($new['if']);
+ $wq = mysql_query("select count(*) FROM links WHERE dst_if = '$this_ifid' AND src_if = $if_id;");
+ if (@mysql_result($wq, 0) == '0' && $this_hostname != $hostname) {
+ $graph_url = "graph.php?if=$this_ifid&from=$twoday&to=$now&width=400&height=120&type=bits";
+ echo("$br " . generateiflink($new) . " on " . generatedevicelink($new));
+ $br = " ";
+ }
+ }
+ }
+ unset($br);
+ }
+
+ echo(" ");
+
+ // If we're showing graphs, generate the graph and print the img tags
+ if($dographs && is_file("rrd/" . $hostname . ".". $ifIndex . ".rrd")) {
+ $daily_traffic = "graph.php?if=$if_id&type=bits&from=$day&to=$now&width=210&height=100";
+ $weekly_traffic = "graph.php?if=$if_id&type=bits&from=$week&to=$now&width=210&height=100";
+ $monthly_traffic = "graph.php?if=$if_id&type=bits&from=$month&to=$now&width=210&height=100";
+ $yearly_traffic = "graph.php?if=$if_id&type=bits&from=$year&to=$now&width=210&height=100";
+
+ echo("");
+ echo(" ");
+ echo(" ");
+ echo(" ");
+ }
+
+
+
+ $i++;
+
+
+?>
diff --git a/html/includes/print-menubar.php b/html/includes/print-menubar.php
new file mode 100644
index 0000000000..6e59475125
--- /dev/null
+++ b/html/includes/print-menubar.php
@@ -0,0 +1,118 @@
+
+
+
diff --git a/html/includes/print-service.inc b/html/includes/print-service.inc
new file mode 100644
index 0000000000..f6b955f9df
--- /dev/null
+++ b/html/includes/print-service.inc
@@ -0,0 +1,53 @@
+$service_type ";
+ } elseif ($service[service_status] == '1') {$status = "$service_type ";
+ } elseif ($service[service_status] == '2') {$status = "$service_type ";}
+
+ $message = trim($service[service_message]);
+ $message = str_replace("\n", " ", $message);
+
+ $since = time() - $service[service_changed];
+ $since = formatUptime($since);
+
+ if($service[service_checked]) {
+ $checked = time() - $service[service_checked];
+ $checked = formatUptime($checked);
+ } else { $checked = "Never"; }
+
+
+ echo("
+ $service[service_id]. ");
+
+if($device_id) {
+ if(!$samehost) {
+ $device[id] = $device_id;
+ $device[hostname] = $device_hostname;
+ echo("" . generatedevicelink($device) . " ");
+ } else {
+ echo(" ");
+ }
+}
+
+echo("
+
+ $status
+
+
+ $since
+
+
+ $message
+
+ ");
+
+ $i++;
+
+
+?>
diff --git a/html/includes/print-syslog.inc b/html/includes/print-syslog.inc
new file mode 100644
index 0000000000..e9cf49f50a
--- /dev/null
+++ b/html/includes/print-syslog.inc
@@ -0,0 +1,35 @@
+
+
+
+if($bg == $list_colour_a) { $bg = $list_colour_b; } else { $bg=$list_colour_a; }
+
+ $hostname = gethostbyid($entry['host']);
+ $interface = fixifname(getifbyid($entry['interface']));
+
+ unset($icon);
+
+ $icon = geteventicon($entry['message']);
+ if($icon) {$icon = " "; }
+
+
+ echo("
+
+
+ $entry[datetime]
+
+
+ $entry[priority]
+
+
+ $entry[program]
+
+
+ $entry[msg]
+
+
+ ");
+
+
+
+
+?>
diff --git a/html/includes/publicnav.inc b/html/includes/publicnav.inc
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/html/includes/topnav.inc b/html/includes/topnav.inc
new file mode 100644
index 0000000000..1a8a7da024
--- /dev/null
+++ b/html/includes/topnav.inc
@@ -0,0 +1,58 @@
+
+
+
+
+
+ Devices :
+ $devices[count]
+ ( $devices[up] up
+ $devices[down] down
+ $devices[disabled] ignored )
+ ");
+ echo("");
+ echo("Interfaces :
+ $interfaces[count]
+ ( $interfaces[up] up
+ $interfaces[down] down
+ $interfaces[disabled] disabled )
+ ");
+ echo(" ");
+ echo("Services :
+ $services[count]
+ ( $services[up] up
+ $services[down] down
+ $services[disabled] ignored )
+ ");
+ echo(" ");
+ ?>
+
+
+
+
+
+
+
diff --git a/html/index.php b/html/index.php
new file mode 100755
index 0000000000..0e3543b47f
--- /dev/null
+++ b/html/index.php
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if($_SESSION['authenticated']) {
+ echo("Logged in as $_SESSION[username] (Logout )");
+ } else {
+ echo("Not logged in!");
+ }
+ ?>
+
+
+
+
+
+
+");} ?>
+
+
+
+
+
+
+
+ Generated in $gentime seconds
+ Project Observer $observer_version © 2006-2007 Adam Armstrong
+ Development Sponsored by Vostron .");
+
+?>
+
+
+
diff --git a/html/js/Mini/overlib_anchor_mini.js b/html/js/Mini/overlib_anchor_mini.js
new file mode 100644
index 0000000000..c12a034dfc
--- /dev/null
+++ b/html/js/Mini/overlib_anchor_mini.js
@@ -0,0 +1,98 @@
+//\/////
+//\ overLIB Anchor Plugin
+//\ This file requires overLIB 4.10 or later.
+//\
+//\ overLIB 4.10 - You may not remove or change this notice.
+//\ Copyright Erik Bosrup 1998-2004. All rights reserved.
+//\ Contributors are listed on the homepage.
+//\ See http://www.bosrup.com/web/overlib/ for details.
+//\/////
+//\ THIS IS A VERY MODIFIED VERSION. DO NOT EDIT OR PUBLISH. GET THE ORIGINAL!
+if(typeof olInfo=='undefined'||typeof olInfo.meets=='undefined'||!olInfo.meets(4.10))alert('overLIB 4.10 or later is required for the Anchor Plugin.');else{registerCommands('anchor,anchorx,anchory,noanchorwarn,anchoralign');
+if(typeof ol_anchor=='undefined')var ol_anchor='';if(typeof ol_anchorx=='undefined')var ol_anchorx=0;if(typeof ol_anchory=='undefined')var ol_anchory=0;if(typeof ol_noanchorwarn=='undefined')var ol_noanchorwarn=1;if(typeof ol_anchoralign=='undefined')var ol_anchoralign='UL';
+var o3_anchor="",o3_anchorx=0,o3_anchory=0,o3_noanchorwarn=1,o3_anchoralign='UL',mrkObj,rmrkPosition;
+function setAnchorVariables(){o3_anchor=ol_anchor;o3_anchorx=ol_anchorx;o3_anchory=ol_anchory;o3_noanchorwarn=ol_noanchorwarn;o3_anchoralign=ol_anchoralign;mrkObj=null;}
+function parseAnchorExtras(pf,i,ar){var v,k=i;
+if(k1){mkObj=mlyr[0]
+offsets[0]+=mlyr[0].x+mlyr[1].pageX
+offsets[1]+=mlyr[0].y+mlyr[1].pageY
+}else{if(mlyr.toString().indexOf('Image')!=-1||mlyr.toString().indexOf('Anchor')!=-1){offsets[0]+=mlyr.x
+offsets[1]+=mlyr.y
+}else{offsets[0]+=mlyr.pageX
+offsets[1]+=mlyr.pageY}}
+}else{offsets[0]+=pageLocation(mlyr,'Left')
+offsets[1]+=pageLocation(mlyr,'Top')}
+of=getAnchorOffsets(mkObj)
+if(typeof o3_dragimg!='undefined'&& o3_dragimg){olImgLeft=offsets[0];olImgTop=offsets[1];}
+offsets[0]+=of[0]
+offsets[1]+=of[1]
+if(typeof o3_dragimg!='undefined'&& o3_dragimg){olImgRight=offsets[0];olImgBottom=offsets[1];return;}
+return offsets;}
+function getAnchorOffsets(mkObj){var fx=fy=0, mp,puc,mkAry,sx=sy=0,w=o3_anchoralign
+var mW=mH=pW=pH=0
+var off=[0,0]
+mkAry=w.split(',');
+if(mkAry.length<3){mp=mkAry[0].toUpperCase();puc=(mkAry.length==1)?mp:mkAry[1].toUpperCase();}else if(mkAry.length==3){if(!isNaN(mkAry[0])){mp=mkAry.slice(0,2);puc=mkAry[2].toUpperCase();}else{mp=mkAry[0].toUpperCase();puc=mkAry.slice(1);}
+}else{mp=mkAry.slice(0,2);puc=mkAry.slice(2);}
+var shdwPresent=typeof o3_shadow!='undefined'&& o3_shadow
+if(shdwPresent){sx=Math.abs(o3_shadowx);sy=Math.abs(o3_shadowy);}
+pW=(shdwPresent?parseInt(o3_width):(olNs4?over.clip.width:over.offsetWidth))
+pH=(shdwPresent?parseInt(o3_aboveheight):(olNs4?over.clip.height:over.offsetHeight))
+if(olOp&& o3_wrap){pW=(shdwPresent?parseInt(o3_width):(olNs4?over.clip.width:over.offsetWidth))
+pH=(shdwPresent?parseInt(o3_aboveheight):(olNs4?over.clip.height:over.offsetHeight))}
+if(!olOp&& mkObj.toString().indexOf('Image')!=-1){mW=mkObj.width
+mH=mkObj.height
+}else if(!olOp&& mkObj.toString().indexOf('Anchor')!=-1){mp='UL'
+}else{mW=(olNs4)?mkObj.clip.width:mkObj.offsetWidth
+mH=(olNs4)?mkObj.clip.height:mkObj.offsetHeight}
+if(!isNaN(mp)||typeof mp=='object'){if(typeof mp=='object'){fx=parseFloat(mp[0]);fy=parseFloat(mp[1]);}else
+fx=fy=parseFloat(mp);off=[Math.round(fx*mW),Math.round(fy*mH)];}else{if(mp=='UR')off=[mW,0]
+else if(mp=='LL')off=[0,mH]
+else if(mp=='LR')off=[mW,mH]}
+if(typeof o3_dragimg!='undefined'&& o3_dragimg)return off;else{if(!isNaN(puc)||typeof puc=='object' ){if(typeof puc=='object'){fx=parseFloat(puc[0]);fy=parseFloat(puc[1]);}else
+fx=fy=parseFloat(puc);off[0]-=Math.round(fx*(pW-sx));off[1]-=Math.round(fy*(pH-sy));}else{if(puc=='UR'){off[0]-=(pW-sx);off[1]-=sy
+}else if(puc=='LL'){off[0]-=sx;off[1]-=(pH-sy)
+}else if(puc=='LR'){off[0]-=(pW-sx);off[1]-=(pH-sy)}}
+return off}}
+function pageLocation(o,t){var x=0
+while(o.offsetParent){x+=o['offset'+t]
+o=o.offsetParent}
+x+=o['offset'+t]
+return x}
+function getRefById(l,d){var r="",j
+d=(d||document)
+if(d.all)return d.all[l]
+else if(d.getElementById)return d.getElementById(l)
+else if(d.layers&& d.layers.length>0){if(d.layers[l])return d.layers[l]
+for(j=0;j0){for(j=0;j0)return r
+else if(r)return [r,d.layers[j]]}}
+return null}
+registerRunTimeFunction(setAnchorVariables);registerCmdLineFunction(parseAnchorExtras);registerPostParseFunction(checkAnchorObject);registerHook("createPopup",anchorPreface,FAFTER);registerHook("horizontalPlacement",anchorHorizontal,FCHAIN);registerHook("verticalPlacement",anchorVertical,FCHAIN);if(olInfo.meets(4.10))registerNoParameterCommands('noanchorwarn');
+}
diff --git a/html/js/Mini/overlib_centerpopup_mini.js b/html/js/Mini/overlib_centerpopup_mini.js
new file mode 100644
index 0000000000..595385f223
--- /dev/null
+++ b/html/js/Mini/overlib_centerpopup_mini.js
@@ -0,0 +1,28 @@
+//\/////
+//\ overLIB Center Popup Plugin
+//\ This file requires overLIB 4.10 or later.
+//\
+//\ overLIB 4.10 - You may not remove or change this notice.
+//\ Copyright Erik Bosrup 1998-2003. All rights reserved.
+//\ Contributors are listed on the homepage.
+//\ See http://www.bosrup.com/web/overlib/ for details.
+//\/////
+//\ THIS IS A VERY MODIFIED VERSION. DO NOT EDIT OR PUBLISH. GET THE ORIGINAL!
+if(typeof olInfo=='undefined'||typeof olInfo.meets=='undefined'||!olInfo.meets(4.10))alert('overLIB 4.10 or later is required for the Center Popup Plugin.');else{registerCommands('centerpopup,centeroffset');
+if(typeof ol_centerpopup=='undefined')var ol_centerpopup=0;if(typeof ol_centeroffset=='undefined')var ol_centeroffset='0';
+var o3_centerpopup=0,o3_centeroffset='0';
+function setCenterPopupVariables(){o3_centerpopup=ol_centerpopup;o3_centeroffset=ol_centeroffset;}
+function parseCenterPopupExtras(pf,i,ar){var k=i,v;
+if(k1?parseInt(vdisp[1]):0);if(typeof o3_followscroll!='undefined'&&o3_followscroll&&o3_sticky)o3_rely=placeY;
+return placeY;}
+registerRunTimeFunction(setCenterPopupVariables);registerCmdLineFunction(parseCenterPopupExtras);registerHook('horizontalPlacement',centerPopupHorizontal,FCHAIN);registerHook('verticalPlacement',centerPopupVertical,FCHAIN);if(olInfo.meets(4.10))registerNoParameterCommands('centerpopup');
+}
diff --git a/html/js/Mini/overlib_crossframe_mini.js b/html/js/Mini/overlib_crossframe_mini.js
new file mode 100644
index 0000000000..b69000e7c6
--- /dev/null
+++ b/html/js/Mini/overlib_crossframe_mini.js
@@ -0,0 +1,36 @@
+//\/////
+//\ overLIB Crossframe Support Plugin
+//\ This file requires overLIB 4.10 or later.
+//\
+//\ overLIB 4.05 - You may not remove or change this notice.
+//\ Copyright Erik Bosrup 1998-2004. All rights reserved.
+//\ Contributors are listed on the homepage.
+//\ See http://www.bosrup.com/web/overlib/ for details.
+//\/////
+//\ THIS IS A VERY MODIFIED VERSION. DO NOT EDIT OR PUBLISH. GET THE ORIGINAL!
+if(typeof olInfo=='undefined'||typeof olInfo.meets=='undefined'||!olInfo.meets(4.10))alert('overLIB 4.10 or later is required for the Cross Frame Support Plugin.');else{registerCommands('frame');
+function parseFrameExtras(pf,i,ar){var k=i,v;
+if(k0){retVal=frmDepth(thisFrame[i],ofrm);if(retVal=='')continue;}else if(thisFrame[i]!=ofrm)continue;retVal='['+i+']'+retVal;break;}
+return retVal;}
+function getFrmRef(srcFrm,tgetFrm){var rtnVal=''
+if(tgetFrm!=srcFrm){var tFrm=frmDepth(top.frames,tgetFrm)
+var sFrm=frmDepth(top.frames,srcFrm)
+if(sFrm.length==tFrm.length){l=tFrm.lastIndexOf('[')
+if(l){while( sFrm.substring(0,l)!=tFrm.substring(0,l) )
+l=tFrm.lastIndexOf('[',l-1)
+tFrm=tFrm.substr(l)
+sFrm=sFrm.substr(l)}}
+var cnt=0,p='',str=tFrm
+while((k=str.lastIndexOf('['))!=-1){cnt++
+str=str.substring(0,k)}
+for(var i=0;i ';set_background("");
+return txt;}
+function ol_content_caption_cssstyle(text,title,close){var nameId;closing="";closeevent="onMouseOver";
+if(o3_closeclick==1)closeevent=(o3_closetitle?"title='"+o3_closetitle+"'":"")+" onClick";
+if(o3_capicon!=""){nameId=' hspace=\"5\"'+' align=\"middle\" alt=\"\"';if(typeof o3_dragimg!='undefined'&&o3_dragimg)nameId=' hspace=\"5\"'+' name=\"'+o3_dragimg+'\" id=\"'+o3_dragimg+'\" align=\"middle\" alt=\"Drag Enabled\" title=\"Drag Enabled\"';o3_capicon=' ';}
+if(close!=""){closing=''+close+' ';}
+txt=''+o3_capicon+title+' '+closing+'
';set_background("");
+return txt;}
+function ol_content_background_cssstyle(text,picture,hasfullhtml){if(hasfullhtml){txt=text;}else{var pU,hU,wU;pU=(o3_padunit=='%'?'%':'');hU=(o3_heightunit=='%'?'%':'');wU=(o3_widthunit=='%'?'%':'');txt='';}
+set_background(picture);
+return txt;}
+registerRunTimeFunction(setCSSStyleVariables);registerCmdLineFunction(parseCSSStyleExtras);registerHook("ol_content_simple",ol_content_simple_cssstyle,FALTERNATE,CSSSTYLE);registerHook("ol_content_caption",ol_content_caption_cssstyle,FALTERNATE,CSSSTYLE);registerHook("ol_content_background",ol_content_background_cssstyle,FALTERNATE,CSSSTYLE);
+}
diff --git a/html/js/Mini/overlib_debug_mini.js b/html/js/Mini/overlib_debug_mini.js
new file mode 100644
index 0000000000..ec88637a65
--- /dev/null
+++ b/html/js/Mini/overlib_debug_mini.js
@@ -0,0 +1,49 @@
+//\/////
+//\ overLIB Debug Plugin
+//\ This file requires overLIB 4.10 or later.
+//\
+//\ overLIB 4.05 - You may not remove or change this notice.
+//\ Copyright Erik Bosrup 1998-2003. All rights reserved.
+//\ Contributors are listed on the homepage.
+//\ See http://www.bosrup.com/web/overlib/ for details.
+//\/////
+//\ THIS IS A VERY MODIFIED VERSION. DO NOT EDIT OR PUBLISH. GET THE ORIGINAL!
+if(typeof olInfo=='undefined'||typeof olInfo.meets=='undefined'||!olInfo.meets(4.10))alert('overLIB 4.10 or later is required for the Debug Plugin.');else{var olZindex;registerCommands('allowdebug');
+function parseDebugExtras(pf,i,ar){var k=i,v;
+if(k';}else{with(sho.style){backgroundColor='#ffffcc';padding='5px';border='1px #000000 solid';}
+shoObj=sho.style;}
+lvl=getLayerLevel(theDiv);
+if(typeof sho.position=='undefined'){sho.position=new Pagelocation(10+lvl*20,10,1);if(typeof olZindex=='undefined')olZindex=getDivZindex();shoObj.zIndex=olZindex+1+lvl;}
+txt+='';txt+=''+theDiv+' X ';txt+='Item Value ';for(var i=istrt;i'+args[i]+': '+args[++i]+' ';txt+='
'+(olNs4?' ':'');
+if(olNs4){sho.document.open();sho.document.write(txt);sho.document.close();}else{if(olIe5&&isMac)sho.innerHTML='';sho.innerHTML=txt;}
+showAllVisibleLayers();}
+function getLayerLevel(lyr){var i=0;
+if(typeof document.popups=='undefined'){document.popups=new Array(lyr);}else{var l=document.popups;for(var i=0;i /g,">").replace(/"/g,""");}
+registerCmdLineFunction(parseDebugExtras);
+}
diff --git a/html/js/Mini/overlib_exclusive_mini.js b/html/js/Mini/overlib_exclusive_mini.js
new file mode 100644
index 0000000000..f51d89d11c
--- /dev/null
+++ b/html/js/Mini/overlib_exclusive_mini.js
@@ -0,0 +1 @@
+}
diff --git a/html/js/Mini/overlib_followscroll_mini.js b/html/js/Mini/overlib_followscroll_mini.js
new file mode 100644
index 0000000000..09e7db823e
--- /dev/null
+++ b/html/js/Mini/overlib_followscroll_mini.js
@@ -0,0 +1,38 @@
+//\/////
+//\ overLIB Follow Scroll Plugin
+//\ This file requires overLIB 4.10 or later.
+//\
+//\ overLIB 4.10 - You may not remove or change this notice.
+//\ Copyright Erik Bosrup 1998-2004. All rights reserved.
+//\ Contributors are listed on the homepage.
+//\ See http://www.bosrup.com/web/overlib/ for details.
+//\/////
+//\ THIS IS A VERY MODIFIED VERSION. DO NOT EDIT OR PUBLISH. GET THE ORIGINAL!
+if(typeof olInfo=='undefined'||typeof olInfo.meets=='undefined'||!olInfo.meets(4.10))alert('overLIB 4.10 or later is required for the Follow Scroll Plugin.');else{registerCommands('followscroll,followscrollrefresh');
+if(typeof ol_followscroll=='undefined')var ol_followscroll=0;if(typeof ol_followscrollrefresh=='undefined')var ol_followscrollrefresh=100;
+var o3_followscroll=0,o3_followscrollrefresh=100;
+function setScrollVariables(){o3_followscroll=ol_followscroll;o3_followscrollrefresh=ol_followscrollrefresh;}
+function parseScrollExtras(pf,i,ar){var k=i,v;if(k50)?20:widthFix;iwidth=o3_frame.innerWidth;}else if(eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientWidth=='number'")&&eval('o3_frame.'+docRoot+'.clientWidth'))
+iwidth=eval('o3_frame.'+docRoot+'.clientWidth');
+winoffset=(olIe4)?eval('o3_frame.'+docRoot+'.scrollLeft'):o3_frame.pageXOffset;
+placeX=runHook('horizontalPlacement',FCHAIN,iwidth,winoffset,widthFix);
+if(o3_frame.innerHeight)iheight=o3_frame.innerHeight;else if(eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientHeight=='number'")&&eval('o3_frame.'+docRoot+'.clientHeight'))
+iheight=eval('o3_frame.'+docRoot+'.clientHeight');
+scrolloffset=(olIe4)?eval('o3_frame.'+docRoot+'.scrollTop'):o3_frame.pageYOffset;
+placeY=runHook('verticalPlacement',FCHAIN,iheight,scrolloffset);
+repositionTo(over,placeX,placeY);
+if(o3_followscroll&&o3_sticky&&(o3_relx||o3_rely)&&(typeof o3_draggable=='undefined'||!o3_draggable)){if(typeof over.scroller=='undefined'||over.scroller.canScroll)over.scroller=new Scroller(placeX-winoffset,placeY-scrolloffset,o3_followscrollrefresh);}}
+function Scroller(X,Y,refresh){this.canScroll=0;this.refresh=refresh;this.x=X;this.y=Y;this.timer=setTimeout("repositionOver()",this.refresh);}
+function cancelScroll(){if(!o3_followscroll||typeof over.scroller=='undefined')return;over.scroller.canScroll=1;
+if(over.scroller.timer){clearTimeout(over.scroller.timer);over.scroller.timer=null;}}
+function getPageScrollY(){if(o3_frame.pageYOffset)return o3_frame.pageYOffset;if(eval(docRoot))return eval('o3_frame.'+docRoot+'.scrollTop');return-1;}
+function getPageScrollX(){if(o3_frame.pageXOffset)return o3_frame.pageXOffset;if(eval(docRoot))return eval('o3_frame.'+docRoot+'.scrollLeft');return-1;}
+function getLayerTop(layer){if(layer.pageY)return layer.pageY;if(layer.style.top)return parseInt(layer.style.top);return-1;}
+function getLayerLeft(layer){if(layer.pageX)return layer.pageX;if(layer.style.left)return parseInt(layer.style.left);return-1;}
+function repositionOver(){var X,Y,pgLeft,pgTop;pgTop=getPageScrollY();pgLeft=getPageScrollX();X=getLayerLeft(over)-pgLeft;Y=getLayerTop(over)-pgTop;
+if(X!=over.scroller.x||Y!=over.scroller.y)repositionTo(over,pgLeft+over.scroller.x,pgTop+over.scroller.y);over.scroller.timer=setTimeout("repositionOver()",over.scroller.refresh);}
+registerRunTimeFunction(setScrollVariables);registerCmdLineFunction(parseScrollExtras);registerHook("hideObject",cancelScroll,FAFTER);registerHook("placeLayer",scroll_placeLayer,FREPLACE);if(olInfo.meets(4.10))registerNoParameterCommands('followscroll');}
diff --git a/html/js/Mini/overlib_hideform_mini.js b/html/js/Mini/overlib_hideform_mini.js
new file mode 100644
index 0000000000..4a4ffca76c
--- /dev/null
+++ b/html/js/Mini/overlib_hideform_mini.js
@@ -0,0 +1,33 @@
+//\/////
+//\ overLIB Hide Form Plugin
+//\
+//\ Uses an iframe shim to mask system controls for IE v5.5 or higher as suggested in
+//\ http://dotnetjunkies.com/weblog/jking/posts/488.aspx
+//\ This file requires overLIB 4.10 or later.
+//\
+//\ overLIB 4.05 - You may not remove or change this notice.
+//\ Copyright Erik Bosrup 1998-2004. All rights reserved.
+//\ Contributors are listed on the homepage.
+//\ See http://www.bosrup.com/web/overlib/ for details.
+//\/////
+//\ THIS IS A VERY MODIFIED VERSION. DO NOT EDIT OR PUBLISH. GET THE ORIGINAL!
+if(typeof olInfo=='undefined'||typeof olInfo.meets=='undefined'||!olInfo.meets(4.10))alert('overLIB 4.10 or later is required for the HideForm Plugin.');else{
+function generatePopUp(content){if(!olIe4||olOp||!olIe55||(typeof o3_shadow!='undefined'&&o3_shadow)||(typeof o3_bubble!='undefined'&&o3_bubble))return;
+var wd,ht,txt,zIdx=0;
+wd=parseInt(o3_width);ht=over.offsetHeight;txt=backDropSource(wd,ht,zIdx++);txt+=''+content+'
';layerWrite(txt);}
+function backDropSource(width,height,Z){return '';}
+function hideSelectBox(){if(olNs4||olOp||olIe55)return;var px,py,pw,ph,sx,sw,sy,sh,selEl,v;
+if(olIe4)v=0;else{v=navigator.userAgent.match(/Gecko\/(\d{8})/i);if(!v)return;v=parseInt(v[1]);}
+if(v<20030624){px=parseInt(over.style.left);py=parseInt(over.style.top);pw=o3_width;ph=(o3_aboveheight?parseInt(o3_aboveheight):over.offsetHeight);selEl=(olIe4)?o3_frame.document.all.tags("SELECT"):o3_frame.document.getElementsByTagName("SELECT");for(var i=0;i(sx+sw)||(py+ph)(sy+sh))continue;selEl[i].isHidden=1;selEl[i].style.visibility='hidden';}}}
+function showSelectBox(){if(olNs4||olOp||olIe55)return;var selEl,v;
+if(olIe4)v=0;else{v=navigator.userAgent.match(/Gecko\/(\d{8})/i);if(!v)return;v=parseInt(v[1]);}
+if(v<20030624){selEl=(olIe4)?o3_frame.document.all.tags("SELECT"):o3_frame.document.getElementsByTagName("SELECT");for(var i=0;i\n\n'+'script>');}
+f=capExtent.onmousemove.toString().match(/function[ ]+(\w*)\(/);if(f&&f[1]!='anonymous')capExtent.onmousemove=olMouseMove;}
+registerHook("createPopup",generatePopUp,FAFTER);registerHook("hideObject",showSelectBox,FAFTER);olHideForm=1;}
diff --git a/html/js/Mini/overlib_mini.js b/html/js/Mini/overlib_mini.js
new file mode 100644
index 0000000000..704d12351c
--- /dev/null
+++ b/html/js/Mini/overlib_mini.js
@@ -0,0 +1,322 @@
+//\/////
+//\ overLIB 4.21 - You may not remove or change this notice.
+//\ Copyright Erik Bosrup 1998-2004. All rights reserved.
+//\
+//\ Contributors are listed on the homepage.
+//\ This file might be old, always check for the latest version at:
+//\ http://www.bosrup.com/web/overlib/
+//\
+//\ Please read the license agreement (available through the link above)
+//\ before using overLIB. Direct any licensing questions to erik@bosrup.com.
+//\
+//\ Do not sell this as your own work or remove this copyright notice.
+//\ For full details on copying or changing this script please read the
+//\ license agreement at the link above. Please give credit on sites that
+//\ use overLIB and submit changes of the script so other people can use
+//\ them as well.
+//\/////
+//\ THIS IS A VERY MODIFIED VERSION. DO NOT EDIT OR PUBLISH. GET THE ORIGINAL!
+var olLoaded=0,pmStart=10000000,pmUpper=10001000,pmCount=pmStart+1,pmt='',pms=new Array(),olInfo=new Info('4.21',1),FREPLACE=0,FBEFORE=1,FAFTER=2,FALTERNATE=3,FCHAIN=4,olHideForm=0,olHautoFlag=0,olVautoFlag=0,hookPts=new Array(),postParse=new Array(),cmdLine=new Array(),runTime=new Array();
+registerCommands('donothing,inarray,caparray,sticky,background,noclose,caption,left,right,center,offsetx,offsety,fgcolor,bgcolor,textcolor,capcolor,closecolor,width,border,cellpad,status,autostatus,autostatuscap,height,closetext,snapx,snapy,fixx,fixy,relx,rely,fgbackground,bgbackground,padx,pady,fullhtml,above,below,capicon,textfont,captionfont,closefont,textsize,captionsize,closesize,timeout,function,delay,hauto,vauto,closeclick,wrap,followmouse,mouseoff,closetitle,cssoff,compatmode,cssclass,fgclass,bgclass,textfontclass,captionfontclass,closefontclass');
+if(typeof ol_fgcolor=='undefined')var ol_fgcolor="#CCCCFF";if(typeof ol_bgcolor=='undefined')var ol_bgcolor="#333399";if(typeof ol_textcolor=='undefined')var ol_textcolor="#000000";if(typeof ol_capcolor=='undefined')var ol_capcolor="#FFFFFF";if(typeof ol_closecolor=='undefined')var ol_closecolor="#9999FF";if(typeof ol_textfont=='undefined')var ol_textfont="Verdana,Arial,Helvetica";if(typeof ol_captionfont=='undefined')var ol_captionfont="Verdana,Arial,Helvetica";if(typeof ol_closefont=='undefined')var ol_closefont="Verdana,Arial,Helvetica";if(typeof ol_textsize=='undefined')var ol_textsize="1";if(typeof ol_captionsize=='undefined')var ol_captionsize="1";if(typeof ol_closesize=='undefined')var ol_closesize="1";if(typeof ol_width=='undefined')var ol_width="200";if(typeof ol_border=='undefined')var ol_border="1";if(typeof ol_cellpad=='undefined')var ol_cellpad=2;if(typeof ol_offsetx=='undefined')var ol_offsetx=10;if(typeof ol_offsety=='undefined')var ol_offsety=10;if(typeof ol_text=='undefined')var ol_text="Default Text";if(typeof ol_cap=='undefined')var ol_cap="";if(typeof ol_sticky=='undefined')var ol_sticky=0;if(typeof ol_background=='undefined')var ol_background="";if(typeof ol_close=='undefined')var ol_close="Close";if(typeof ol_hpos=='undefined')var ol_hpos=RIGHT;if(typeof ol_status=='undefined')var ol_status="";if(typeof ol_autostatus=='undefined')var ol_autostatus=0;if(typeof ol_height=='undefined')var ol_height=-1;if(typeof ol_snapx=='undefined')var ol_snapx=0;if(typeof ol_snapy=='undefined')var ol_snapy=0;if(typeof ol_fixx=='undefined')var ol_fixx=-1;if(typeof ol_fixy=='undefined')var ol_fixy=-1;if(typeof ol_relx=='undefined')var ol_relx=null;if(typeof ol_rely=='undefined')var ol_rely=null;if(typeof ol_fgbackground=='undefined')var ol_fgbackground="";if(typeof ol_bgbackground=='undefined')var ol_bgbackground="";if(typeof ol_padxl=='undefined')var ol_padxl=1;if(typeof ol_padxr=='undefined')var ol_padxr=1;if(typeof ol_padyt=='undefined')var ol_padyt=1;if(typeof ol_padyb=='undefined')var ol_padyb=1;if(typeof ol_fullhtml=='undefined')var ol_fullhtml=0;if(typeof ol_vpos=='undefined')var ol_vpos=BELOW;if(typeof ol_aboveheight=='undefined')var ol_aboveheight=0;if(typeof ol_capicon=='undefined')var ol_capicon="";if(typeof ol_frame=='undefined')var ol_frame=self;if(typeof ol_timeout=='undefined')var ol_timeout=0;if(typeof ol_function=='undefined')var ol_function=null;if(typeof ol_delay=='undefined')var ol_delay=0;if(typeof ol_hauto=='undefined')var ol_hauto=0;if(typeof ol_vauto=='undefined')var ol_vauto=0;if(typeof ol_closeclick=='undefined')var ol_closeclick=0;if(typeof ol_wrap=='undefined')var ol_wrap=0;if(typeof ol_followmouse=='undefined')var ol_followmouse=1;if(typeof ol_mouseoff=='undefined')var ol_mouseoff=0;if(typeof ol_closetitle=='undefined')var ol_closetitle='Close';if(typeof ol_compatmode=='undefined')var ol_compatmode=0;if(typeof ol_css=='undefined')var ol_css=CSSOFF;if(typeof ol_fgclass=='undefined')var ol_fgclass="";if(typeof ol_bgclass=='undefined')var ol_bgclass="";if(typeof ol_textfontclass=='undefined')var ol_textfontclass="";if(typeof ol_captionfontclass=='undefined')var ol_captionfontclass="";if(typeof ol_closefontclass=='undefined')var ol_closefontclass="";
+if(typeof ol_texts=='undefined')var ol_texts=new Array("Text 0","Text 1");if(typeof ol_caps=='undefined')var ol_caps=new Array("Caption 0","Caption 1");
+var o3_text="",o3_cap="",o3_sticky=0,o3_background="",o3_close="Close",o3_hpos=RIGHT,o3_offsetx=2,o3_offsety=2,o3_fgcolor="",o3_bgcolor="",o3_textcolor="",o3_capcolor="",o3_closecolor="",o3_width=100,o3_border=1,o3_cellpad=2,o3_status="",o3_autostatus=0,o3_height=-1,o3_snapx=0,o3_snapy=0,o3_fixx=-1,o3_fixy=-1,o3_relx=null,o3_rely=null,o3_fgbackground="",o3_bgbackground="",o3_padxl=0,o3_padxr=0,o3_padyt=0,o3_padyb=0,o3_fullhtml=0,o3_vpos=BELOW,o3_aboveheight=0,o3_capicon="",o3_textfont="Verdana,Arial,Helvetica",o3_captionfont="Verdana,Arial,Helvetica",o3_closefont="Verdana,Arial,Helvetica",o3_textsize="1",o3_captionsize="1",o3_closesize="1",o3_frame=self,o3_timeout=0,o3_timerid=0,o3_allowmove=0,o3_function=null,o3_delay=0,o3_delayid=0,o3_hauto=0,o3_vauto=0,o3_closeclick=0,o3_wrap=0,o3_followmouse=1,o3_mouseoff=0,o3_closetitle='',o3_compatmode=0,o3_css=CSSOFF,o3_fgclass="",o3_bgclass="",o3_textfontclass="",o3_captionfontclass="",o3_closefontclass="";
+var o3_x=0,o3_y=0,o3_showingsticky=0,o3_removecounter=0;
+var over=null,fnRef,hoveringSwitch=false,olHideDelay;
+var isMac=(navigator.userAgent.indexOf("Mac")!=-1),olOp=(navigator.userAgent.toLowerCase().indexOf('opera')>-1&&document.createTextNode),olNs4=(navigator.appName=='Netscape'&&parseInt(navigator.appVersion)==4),olNs6=(document.getElementById)?true:false,olKq=(olNs6&&/konqueror/i.test(navigator.userAgent)),olIe4=(document.all)?true:false,olIe5=false,olIe55=false,docRoot='document.body';
+if(olNs4){var oW=window.innerWidth;var oH=window.innerHeight;window.onresize=function(){if(oW!=window.innerWidth||oH!=window.innerHeight)location.reload();}}
+if(olIe4){var agent=navigator.userAgent;if(/MSIE/.test(agent)){var versNum=parseFloat(agent.match(/MSIE[ ](\d\.\d+)\.*/i)[1]);if(versNum>=5){olIe5=true;olIe55=(versNum>=5.5&&!olOp)?true:false;if(olNs6)olNs6=false;}}
+if(olNs6)olIe4=false;}
+if(document.compatMode&&document.compatMode=='CSS1Compat'){docRoot=((olIe4&&!olOp)?'document.documentElement':docRoot);}
+if(window.addEventListener)window.addEventListener("load",OLonLoad_handler,false);else if(window.attachEvent)window.attachEvent("onload",OLonLoad_handler);
+var capExtent;
+function overlib(){if(!olLoaded||isExclusive(overlib.arguments))return true;if(olCheckMouseCapture)olMouseCapture();if(over){over=(typeof over.id!='string')?o3_frame.document.all['overDiv']:over;cClick();}
+olHideDelay=0;o3_text=ol_text;o3_cap=ol_cap;o3_sticky=ol_sticky;o3_background=ol_background;o3_close=ol_close;o3_hpos=ol_hpos;o3_offsetx=ol_offsetx;o3_offsety=ol_offsety;o3_fgcolor=ol_fgcolor;o3_bgcolor=ol_bgcolor;o3_textcolor=ol_textcolor;o3_capcolor=ol_capcolor;o3_closecolor=ol_closecolor;o3_width=ol_width;o3_border=ol_border;o3_cellpad=ol_cellpad;o3_status=ol_status;o3_autostatus=ol_autostatus;o3_height=ol_height;o3_snapx=ol_snapx;o3_snapy=ol_snapy;o3_fixx=ol_fixx;o3_fixy=ol_fixy;o3_relx=ol_relx;o3_rely=ol_rely;o3_fgbackground=ol_fgbackground;o3_bgbackground=ol_bgbackground;o3_padxl=ol_padxl;o3_padxr=ol_padxr;o3_padyt=ol_padyt;o3_padyb=ol_padyb;o3_fullhtml=ol_fullhtml;o3_vpos=ol_vpos;o3_aboveheight=ol_aboveheight;o3_capicon=ol_capicon;o3_textfont=ol_textfont;o3_captionfont=ol_captionfont;o3_closefont=ol_closefont;o3_textsize=ol_textsize;o3_captionsize=ol_captionsize;o3_closesize=ol_closesize;o3_timeout=ol_timeout;o3_function=ol_function;o3_delay=ol_delay;o3_hauto=ol_hauto;o3_vauto=ol_vauto;o3_closeclick=ol_closeclick;o3_wrap=ol_wrap;o3_followmouse=ol_followmouse;o3_mouseoff=ol_mouseoff;o3_closetitle=ol_closetitle;o3_css=ol_css;o3_compatmode=ol_compatmode;o3_fgclass=ol_fgclass;o3_bgclass=ol_bgclass;o3_textfontclass=ol_textfontclass;o3_captionfontclass=ol_captionfontclass;o3_closefontclass=ol_closefontclass;
+setRunTimeVariables();
+fnRef='';
+o3_frame=ol_frame;
+if(!(over=createDivContainer()))return false;
+parseTokens('o3_',overlib.arguments);if(!postParseChecks())return false;
+if(o3_delay==0){return runHook("olMain",FREPLACE);}else{o3_delayid=setTimeout("runHook('olMain',FREPLACE)",o3_delay);return false;}}
+function nd(time){if(olLoaded&&!isExclusive()){hideDelay(time);
+if(o3_removecounter>=1){o3_showingsticky=0 };
+if(o3_showingsticky==0){o3_allowmove=0;if(over!=null&&o3_timerid==0)runHook("hideObject",FREPLACE,over);}else{o3_removecounter++;}}
+return true;}
+function cClick(){if(olLoaded){runHook("hideObject",FREPLACE,over);o3_showingsticky=0;}
+return false;}
+function overlib_pagedefaults(){parseTokens('ol_',overlib_pagedefaults.arguments);}
+function olMain(){var layerhtml,styleType;runHook("olMain",FBEFORE);
+if(o3_background!=""||o3_fullhtml){
+layerhtml=runHook('ol_content_background',FALTERNATE,o3_css,o3_text,o3_background,o3_fullhtml);}else{
+styleType=(pms[o3_css-1-pmStart]=="cssoff"||pms[o3_css-1-pmStart]=="cssclass");
+if(o3_fgbackground!="")o3_fgbackground="background=\""+o3_fgbackground+"\"";if(o3_bgbackground!="")o3_bgbackground=(styleType?"background=\""+o3_bgbackground+"\"":o3_bgbackground);
+if(o3_fgcolor!="")o3_fgcolor=(styleType?"bgcolor=\""+o3_fgcolor+"\"":o3_fgcolor);if(o3_bgcolor!="")o3_bgcolor=(styleType?"bgcolor=\""+o3_bgcolor+"\"":o3_bgcolor);
+if(o3_height>0)o3_height=(styleType?"height=\""+o3_height+"\"":o3_height);else o3_height="";
+if(o3_cap==""){
+layerhtml=runHook('ol_content_simple',FALTERNATE,o3_css,o3_text);}else{
+if(o3_sticky){
+layerhtml=runHook('ol_content_caption',FALTERNATE,o3_css,o3_text,o3_cap,o3_close);}else{
+layerhtml=runHook('ol_content_caption',FALTERNATE,o3_css,o3_text,o3_cap,"");}}}
+if(o3_sticky){if(o3_timerid>0){clearTimeout(o3_timerid);o3_timerid=0;}
+o3_showingsticky=1;o3_removecounter=0;}
+if(!runHook("createPopup",FREPLACE,layerhtml))return false;
+if(o3_autostatus>0){o3_status=o3_text;if(o3_autostatus>1)o3_status=o3_cap;}
+o3_allowmove=0;
+if(o3_timeout>0){if(o3_timerid>0)clearTimeout(o3_timerid);o3_timerid=setTimeout("cClick()",o3_timeout);}
+runHook("disp",FREPLACE,o3_status);runHook("olMain",FAFTER);
+return(olOp&&event&&event.type=='mouseover'&&!o3_status)?'':(o3_status!='');}
+function ol_content_simple(text){var cpIsMultiple=/,/.test(o3_cellpad);var txt='':((!olNs4&&cpIsMultiple)?' style="'+setCellPadStr(o3_cellpad)+'">':'>'))+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'
';
+set_background("");return txt;}
+function ol_content_caption(text,title,close){var nameId,txt,cpIsMultiple=/,/.test(o3_cellpad);var closing,closeevent;
+closing="";closeevent="onmouseover";if(o3_closeclick==1)closeevent=(o3_closetitle?"title='"+o3_closetitle+"'":"")+" onclick";if(o3_capicon!=""){nameId=' hspace=\"5\"'+' align=\"middle\" alt=\"\"';if(typeof o3_dragimg!='undefined'&&o3_dragimg)nameId=' hspace=\"5\"'+' name=\"'+o3_dragimg+'\" id=\"'+o3_dragimg+'\" align=\"middle\" alt=\"Drag Enabled\" title=\"Drag Enabled\"';o3_capicon=' ';}
+if(close!="")
+closing=''+(o3_closefontclass?'':wrapStr(0,o3_closesize,'close'))+close+(o3_closefontclass?'':wrapStr(1,o3_closesize,'close'))+' ';txt='':'>')+(o3_captionfontclass?'':''+wrapStr(0,o3_captionsize,'caption'))+o3_capicon+title+(o3_captionfontclass?'':wrapStr(1,o3_captionsize)+' ')+' '+closing+'
' :((!olNs4&&cpIsMultiple)?' style="'+setCellPadStr(o3_cellpad)+'">':'>'))+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'
';
+set_background("");return txt;}
+function ol_content_background(text,picture,hasfullhtml){if(hasfullhtml){txt=text;}else{txt=''+(o3_textfontclass?'':wrapStr(0,o3_textsize,'text'))+text+(o3_textfontclass?'':wrapStr(1,o3_textsize))+'
';}
+set_background(picture);return txt;}
+function set_background(pic){if(pic==""){if(olNs4){over.background.src=null;}else if(over.style){over.style.backgroundImage="none";}
+}else{if(olNs4){over.background.src=pic;}else if(over.style){over.style.width=o3_width+'px';over.style.backgroundImage="url("+pic+")";}}}
+var olShowId=-1;
+function disp(statustext){runHook("disp",FBEFORE);
+if(o3_allowmove==0){runHook("placeLayer",FREPLACE);(olNs6&&olShowId<0)?olShowId=setTimeout("runHook('showObject',FREPLACE,over)",1):runHook("showObject",FREPLACE,over);o3_allowmove=(o3_sticky||o3_followmouse==0)?0:1;}
+runHook("disp",FAFTER);
+if(statustext!="")self.status=statustext;}
+function createPopup(lyrContent){runHook("createPopup",FBEFORE);
+if(o3_wrap){var wd,ww,theObj=(olNs4?over:over.style);theObj.top=theObj.left=((olIe4&&!olOp)?0:-10000)+(!olNs4?'px':0);layerWrite(lyrContent);wd=(olNs4?over.clip.width:over.offsetWidth);if(wd>(ww=windowWidth())){lyrContent=lyrContent.replace(/\ /g,' ');o3_width=ww;o3_wrap=0;}}
+layerWrite(lyrContent);
+if(o3_wrap)o3_width=(olNs4?over.clip.width:over.offsetWidth);
+runHook("createPopup",FAFTER,lyrContent);
+return true;}
+function placeLayer(){var placeX,placeY,widthFix=0;
+if(o3_frame.innerWidth)widthFix=18;iwidth=windowWidth();
+winoffset=(olIe4)?eval('o3_frame.'+docRoot+'.scrollLeft'):o3_frame.pageXOffset;
+placeX=runHook('horizontalPlacement',FCHAIN,iwidth,winoffset,widthFix);
+if(o3_frame.innerHeight){iheight=o3_frame.innerHeight;}else if(eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientHeight=='number'")&&eval('o3_frame.'+docRoot+'.clientHeight')){iheight=eval('o3_frame.'+docRoot+'.clientHeight');}
+scrolloffset=(olIe4)?eval('o3_frame.'+docRoot+'.scrollTop'):o3_frame.pageYOffset;placeY=runHook('verticalPlacement',FCHAIN,iheight,scrolloffset);
+repositionTo(over,placeX,placeY);}
+function olMouseMove(e){var e=(e)?e:event;
+if(e.pageX){o3_x=e.pageX;o3_y=e.pageY;}else if(e.clientX){o3_x=eval('e.clientX+o3_frame.'+docRoot+'.scrollLeft');o3_y=eval('e.clientY+o3_frame.'+docRoot+'.scrollTop');}
+if(o3_allowmove==1)runHook("placeLayer",FREPLACE);
+if(hoveringSwitch&&!olNs4&&runHook("cursorOff",FREPLACE)){(olHideDelay?hideDelay(olHideDelay):cClick());hoveringSwitch=!hoveringSwitch;}}
+function no_overlib(){return ver3fix;}
+function olMouseCapture(){capExtent=document;var fN,str='',l,k,f,wMv,sS,mseHandler=olMouseMove;var re=/function[ ]*(\w*)\(/;
+wMv=(!olIe4&&window.onmousemove);if(document.onmousemove||wMv){if(wMv)capExtent=window;f=capExtent.onmousemove.toString();fN=f.match(re);if(fN==null){str=f+'(e);';}else if(fN[1]=='anonymous'||fN[1]=='olMouseMove'||(wMv&&fN[1]=='onmousemove')){if(!olOp&&wMv){l=f.indexOf('{')+1;k=f.lastIndexOf('}');sS=f.substring(l,k);if((l=sS.indexOf('('))!=-1){sS=sS.substring(0,l).replace(/^\s+/,'').replace(/\s+$/,'');if(eval("typeof "+sS+"=='undefined'"))window.onmousemove=null;else str=sS+'(e);';}}
+if(!str){olCheckMouseCapture=false;return;}
+}else{if(fN[1])str=fN[1]+'(e);';else{l=f.indexOf('{')+1;k=f.lastIndexOf('}');str=f.substring(l,k)+'\n';}}
+str+='olMouseMove(e);';mseHandler=new Function('e',str);}
+capExtent.onmousemove=mseHandler;if(olNs4)capExtent.captureEvents(Event.MOUSEMOVE);}
+function parseTokens(pf,ar){
+var v,i,mode=-1,par=(pf!='ol_'),fnMark=(par&&!ar.length?1:0);
+for(i=0;ipmStart&&ar[i]=pmCount||ar[i]==DONOTHING){continue;}
+if(ar[i]==INARRAY){fnMark=0;eval(pf+'text=ol_texts['+ar[++i]+'].toString()');continue;}
+if(ar[i]==CAPARRAY){eval(pf+'cap=ol_caps['+ar[++i]+'].toString()');continue;}
+if(ar[i]==STICKY){if(pf!='ol_')eval(pf+'sticky=1');continue;}
+if(ar[i]==BACKGROUND){eval(pf+'background="'+ar[++i]+'"');continue;}
+if(ar[i]==NOCLOSE){if(pf!='ol_')opt_NOCLOSE();continue;}
+if(ar[i]==CAPTION){eval(pf+"cap='"+escSglQuote(ar[++i])+"'");continue;}
+if(ar[i]==CENTER||ar[i]==LEFT||ar[i]==RIGHT){eval(pf+'hpos='+ar[i]);if(pf!='ol_')olHautoFlag=1;continue;}
+if(ar[i]==OFFSETX){eval(pf+'offsetx='+ar[++i]);continue;}
+if(ar[i]==OFFSETY){eval(pf+'offsety='+ar[++i]);continue;}
+if(ar[i]==FGCOLOR){eval(pf+'fgcolor="'+ar[++i]+'"');continue;}
+if(ar[i]==BGCOLOR){eval(pf+'bgcolor="'+ar[++i]+'"');continue;}
+if(ar[i]==TEXTCOLOR){eval(pf+'textcolor="'+ar[++i]+'"');continue;}
+if(ar[i]==CAPCOLOR){eval(pf+'capcolor="'+ar[++i]+'"');continue;}
+if(ar[i]==CLOSECOLOR){eval(pf+'closecolor="'+ar[++i]+'"');continue;}
+if(ar[i]==WIDTH){eval(pf+'width='+ar[++i]);continue;}
+if(ar[i]==BORDER){eval(pf+'border='+ar[++i]);continue;}
+if(ar[i]==CELLPAD){i=opt_MULTIPLEARGS(++i,ar,(pf+'cellpad'));continue;}
+if(ar[i]==STATUS){eval(pf+"status='"+escSglQuote(ar[++i])+"'");continue;}
+if(ar[i]==AUTOSTATUS){eval(pf+'autostatus=('+pf+'autostatus==1)?0:1');continue;}
+if(ar[i]==AUTOSTATUSCAP){eval(pf+'autostatus=('+pf+'autostatus==2)?0:2');continue;}
+if(ar[i]==HEIGHT){eval(pf+'height='+pf+'aboveheight='+ar[++i]);continue;}
+if(ar[i]==CLOSETEXT){eval(pf+"close='"+escSglQuote(ar[++i])+"'");continue;}
+if(ar[i]==SNAPX){eval(pf+'snapx='+ar[++i]);continue;}
+if(ar[i]==SNAPY){eval(pf+'snapy='+ar[++i]);continue;}
+if(ar[i]==FIXX){eval(pf+'fixx='+ar[++i]);continue;}
+if(ar[i]==FIXY){eval(pf+'fixy='+ar[++i]);continue;}
+if(ar[i]==RELX){eval(pf+'relx='+ar[++i]);continue;}
+if(ar[i]==RELY){eval(pf+'rely='+ar[++i]);continue;}
+if(ar[i]==FGBACKGROUND){eval(pf+'fgbackground="'+ar[++i]+'"');continue;}
+if(ar[i]==BGBACKGROUND){eval(pf+'bgbackground="'+ar[++i]+'"');continue;}
+if(ar[i]==PADX){eval(pf+'padxl='+ar[++i]);eval(pf+'padxr='+ar[++i]);continue;}
+if(ar[i]==PADY){eval(pf+'padyt='+ar[++i]);eval(pf+'padyb='+ar[++i]);continue;}
+if(ar[i]==FULLHTML){if(pf!='ol_')eval(pf+'fullhtml=1');continue;}
+if(ar[i]==BELOW||ar[i]==ABOVE){eval(pf+'vpos='+ar[i]);if(pf!='ol_')olVautoFlag=1;continue;}
+if(ar[i]==CAPICON){eval(pf+'capicon="'+ar[++i]+'"');continue;}
+if(ar[i]==TEXTFONT){eval(pf+"textfont='"+escSglQuote(ar[++i])+"'");continue;}
+if(ar[i]==CAPTIONFONT){eval(pf+"captionfont='"+escSglQuote(ar[++i])+"'");continue;}
+if(ar[i]==CLOSEFONT){eval(pf+"closefont='"+escSglQuote(ar[++i])+"'");continue;}
+if(ar[i]==TEXTSIZE){eval(pf+'textsize="'+ar[++i]+'"');continue;}
+if(ar[i]==CAPTIONSIZE){eval(pf+'captionsize="'+ar[++i]+'"');continue;}
+if(ar[i]==CLOSESIZE){eval(pf+'closesize="'+ar[++i]+'"');continue;}
+if(ar[i]==TIMEOUT){eval(pf+'timeout='+ar[++i]);continue;}
+if(ar[i]==FUNCTION){if(pf=='ol_'){if(typeof ar[i+1]!='number'){v=ar[++i];ol_function=(typeof v=='function'?v:null);}}else{fnMark=0;v=null;if(typeof ar[i+1]!='number')v=ar[++i]; opt_FUNCTION(v);} continue;}
+if(ar[i]==DELAY){eval(pf+'delay='+ar[++i]);continue;}
+if(ar[i]==HAUTO){eval(pf+'hauto=('+pf+'hauto==0)?1:0');continue;}
+if(ar[i]==VAUTO){eval(pf+'vauto=('+pf+'vauto==0)?1:0');continue;}
+if(ar[i]==CLOSECLICK){eval(pf+'closeclick=('+pf+'closeclick==0)?1:0');continue;}
+if(ar[i]==WRAP){eval(pf+'wrap=('+pf+'wrap==0)?1:0');continue;}
+if(ar[i]==FOLLOWMOUSE){eval(pf+'followmouse=('+pf+'followmouse==1)?0:1');continue;}
+if(ar[i]==MOUSEOFF){eval(pf+'mouseoff=('+pf+'mouseoff==0)?1:0');v=ar[i+1];if(pf!='ol_'&&eval(pf+'mouseoff')&&typeof v=='number'&&(vpmUpper))olHideDelay=ar[++i];continue;}
+if(ar[i]==CLOSETITLE){eval(pf+"closetitle='"+escSglQuote(ar[++i])+"'");continue;}
+if(ar[i]==CSSOFF||ar[i]==CSSCLASS){eval(pf+'css='+ar[i]);continue;}
+if(ar[i]==COMPATMODE){eval(pf+'compatmode=('+pf+'compatmode==0)?1:0');continue;}
+if(ar[i]==FGCLASS){eval(pf+'fgclass="'+ar[++i]+'"');continue;}
+if(ar[i]==BGCLASS){eval(pf+'bgclass="'+ar[++i]+'"');continue;}
+if(ar[i]==TEXTFONTCLASS){eval(pf+'textfontclass="'+ar[++i]+'"');continue;}
+if(ar[i]==CAPTIONFONTCLASS){eval(pf+'captionfontclass="'+ar[++i]+'"');continue;}
+if(ar[i]==CLOSEFONTCLASS){eval(pf+'closefontclass="'+ar[++i]+'"');continue;}
+i=parseCmdLine(pf,i,ar);}}
+if(fnMark&&o3_function)o3_text=o3_function();
+if((pf=='o3_')&&o3_wrap){o3_width=0;
+var tReg=/<.*\n*>/ig;if(!tReg.test(o3_text))o3_text=o3_text.replace(/[ ]+/g,' ');if(!tReg.test(o3_cap))o3_cap=o3_cap.replace(/[ ]+/g,' ');}
+if((pf=='o3_')&&o3_sticky){if(!o3_close&&(o3_frame!=ol_frame))o3_close=ol_close;if(o3_mouseoff&&(o3_frame==ol_frame))opt_NOCLOSE(' ');}}
+function layerWrite(txt){txt+="\n";if(olNs4){var lyr=o3_frame.document.layers['overDiv'].document
+lyr.write(txt)
+lyr.close()
+}else if(typeof over.innerHTML!='undefined'){if(olIe5&&isMac)over.innerHTML='';over.innerHTML=txt;}else{range=o3_frame.document.createRange();range.setStartAfter(over);domfrag=range.createContextualFragment(txt);
+while(over.hasChildNodes()){over.removeChild(over.lastChild);}
+over.appendChild(domfrag);}}
+function showObject(obj){runHook("showObject",FBEFORE);
+var theObj=(olNs4?obj:obj.style);theObj.visibility='visible';
+runHook("showObject",FAFTER);}
+function hideObject(obj){runHook("hideObject",FBEFORE);
+var theObj=(olNs4?obj:obj.style);if(olNs6&&olShowId>0){clearTimeout(olShowId);olShowId=0;}
+theObj.visibility='hidden';theObj.top=theObj.left=((olIe4&&!olOp)?0:-10000)+(!olNs4?'px':0);
+if(o3_timerid>0)clearTimeout(o3_timerid);if(o3_delayid>0)clearTimeout(o3_delayid);
+o3_timerid=0;o3_delayid=0;self.status="";
+if(obj.onmouseout||obj.onmouseover){if(olNs4)obj.releaseEvents(Event.MOUSEOUT||Event.MOUSEOVER);obj.onmouseout=obj.onmouseover=null;}
+runHook("hideObject",FAFTER);}
+function repositionTo(obj,xL,yL){var theObj=(olNs4?obj:obj.style);theObj.left=xL+(!olNs4?'px':0);theObj.top=yL+(!olNs4?'px':0);}
+function cursorOff(){var left=parseInt(over.style.left);var top=parseInt(over.style.top);var right=left+(over.offsetWidth>=parseInt(o3_width)?over.offsetWidth:parseInt(o3_width));var bottom=top+(over.offsetHeight>=o3_aboveheight?over.offsetHeight:o3_aboveheight);
+if(o3_xright||o3_ybottom)return true;
+return false;}
+function opt_FUNCTION(callme){o3_text=(callme?(typeof callme=='string'?(/.+\(.*\)/.test(callme)?eval(callme):callme):callme()):(o3_function?o3_function():'No Function'));
+return 0;}
+function opt_NOCLOSE(unused){if(!unused)o3_close="";
+if(olNs4){over.captureEvents(Event.MOUSEOUT||Event.MOUSEOVER);over.onmouseover=function(){if(o3_timerid>0){clearTimeout(o3_timerid);o3_timerid=0;} }
+over.onmouseout=function(e){if(olHideDelay)hideDelay(olHideDelay);else cClick(e);}
+}else{over.onmouseover=function(){hoveringSwitch=true;if(o3_timerid>0){clearTimeout(o3_timerid);o3_timerid=0;} }}
+return 0;}
+function opt_MULTIPLEARGS(i,args,parameter){var k=i,re,pV,str='';
+for(k=i;kpmStart)break;str+=args[k]+',';}
+if(str)str=str.substring(0,--str.length);
+k--;pV=(olNs4&&/cellpad/i.test(parameter))?str.split(',')[0]:str;eval(parameter+'="'+pV+'"');
+return k;}
+function nbspCleanup(){if(o3_wrap){o3_text=o3_text.replace(/\ /g,' ');o3_cap=o3_cap.replace(/\ /g,' ');}}
+function escSglQuote(str){return str.toString().replace(/'/g,"\\'");}
+function OLonLoad_handler(e){var re=/\w+\(.*\)[;\s]+/g,olre=/overlib\(|nd\(|cClick\(/,fn,l,i;
+if(!olLoaded)olLoaded=1;
+if(window.removeEventListener&&e.eventPhase==3)window.removeEventListener("load",OLonLoad_handler,false);else if(window.detachEvent){window.detachEvent("onload",OLonLoad_handler);var fN=document.body.getAttribute('onload');if(fN){fN=fN.toString().match(re);if(fN&&fN.length){for(i=0;i':''):'';else{fontStr='o3_'+whichString+'font';fontColor='o3_'+((whichString=='caption')? 'cap':whichString)+'color';return(hasDims&&!olNs4)?(isClose?'':''):'
';}}
+function quoteMultiNameFonts(theFont){var v,pM=theFont.split(',');for(var i=0;i0)clearTimeout(o3_timerid);
+o3_timerid=setTimeout("cClick()",(o3_timeout=time));}}
+function horizontalPlacement(browserWidth,horizontalScrollAmount,widthFix){var placeX,iwidth=browserWidth,winoffset=horizontalScrollAmount;var parsedWidth=parseInt(o3_width);
+if(o3_fixx>-1||o3_relx!=null){
+placeX=(o3_relx!=null?( o3_relx<0?winoffset+o3_relx+iwidth-parsedWidth-widthFix:winoffset+o3_relx):o3_fixx);}else{
+if(o3_hauto==1){if((o3_x-winoffset)>(iwidth/2)){o3_hpos=LEFT;}else{o3_hpos=RIGHT;}}
+if(o3_hpos==CENTER){placeX=o3_x+o3_offsetx-(parsedWidth/2);
+if(placeX(winoffset+iwidth-widthFix)){placeX=iwidth+winoffset-parsedWidth-widthFix;if(placeX<0)placeX=0;}}
+if(o3_hpos==LEFT){placeX=o3_x-o3_offsetx-parsedWidth;if(placeX1){var snapping=placeX % o3_snapx;
+if(o3_hpos==LEFT){placeX=placeX-(o3_snapx+snapping);}else{
+placeX=placeX+(o3_snapx-snapping);}
+if(placeX-1||o3_rely!=null){
+placeY=(o3_rely!=null?(o3_rely<0?scrolloffset+o3_rely+iheight-parsedHeight:scrolloffset+o3_rely):o3_fixy);}else{
+if(o3_vauto==1){if((o3_y-scrolloffset)>(iheight/2)&&o3_vpos==BELOW&&(o3_y+parsedHeight+o3_offsety-(scrolloffset+iheight)>0)){o3_vpos=ABOVE;}else if(o3_vpos==ABOVE&&(o3_y-(parsedHeight+o3_offsety)-scrolloffset<0)){o3_vpos=BELOW;}}
+if(o3_vpos==ABOVE){if(o3_aboveheight==0)o3_aboveheight=parsedHeight;
+placeY=o3_y-(o3_aboveheight+o3_offsety);if(placeY1){var snapping=placeY % o3_snapy;
+if(o3_aboveheight>0&&o3_vpos==ABOVE){placeY=placeY-(o3_snapy+snapping);}else{placeY=placeY+(o3_snapy-snapping);}
+if(placeY ');divContainer=layerReference(id);}else{divContainer=frm.document.createElement("DIV");divContainer.id=id;body.appendChild(divContainer);}
+objRef=divContainer.style;}
+objRef.position='absolute';objRef.visibility='hidden';objRef.zIndex=zValue;if(olIe4&&!olOp)objRef.left=objRef.top='0px';else objRef.left=objRef.top=-10000+(!olNs4?'px':0);}
+return divContainer;}
+function layerReference(id){return(olNs4?o3_frame.document.layers[id]:(document.all?o3_frame.document.all[id]:o3_frame.document.getElementById(id)));}
+function isFunction(fnRef){var rtn=true;
+if(typeof fnRef=='object'){for(var i=0;ijS){for(var k=jS;k-1){i=j;break;}}}
+return i;}
+function postParseChecks(pf,args){if(typeof postParse!='undefined'&&postParse.length){for(var k=0;k-1)hookPt.alt[pms[CSSOFF-1-pmStart]]=fnRef;
+}else if(hookType==FBEFORE||hookType==FAFTER){var hookPt=(hookType==1?hookPt.before:hookPt.after);
+if(typeof fnRef=='object'){hookPt=hookPt.concat(fnRef);}else{hookPt[hookPt.length++]=fnRef;}
+if(optPm)hookPt=reOrder(hookPt,fnRef,optPm);
+}else if(hookType==FALTERNATE){if(last=='number')hookPt.alt[pms[optPm-1-pmStart]]=fnRef;}else if(hookType==FCHAIN){hookPt=hookPt.chain;if(typeof fnRef=='object')hookPt=hookPt.concat(fnRef);else hookPt[hookPt.length++]=fnRef;}
+return;}}
+function registerRunTimeFunction(fn){if(isFunction(fn)){if(typeof fn=='object'){runTime=runTime.concat(fn);}else{runTime[runTime.length++]=fn;}}}
+function registerCmdLineFunction(fn){if(isFunction(fn)){if(typeof fn=='object'){cmdLine=cmdLine.concat(fn);}else{cmdLine[cmdLine.length++]=fn;}}}
+function registerPostParseFunction(fn){if(isFunction(fn)){if(typeof fn=='object'){postParse=postParse.concat(fn);}else{postParse[postParse.length++]=fn;}}}
+function runHook(fnHookTo,hookType){var l=hookPts[fnHookTo],k,rtnVal=null,optPm,arS,ar=runHook.arguments;
+if(hookType==FREPLACE){arS=argToString(ar,2);
+if(typeof l=='undefined'||!(l=l.ovload))rtnVal=eval(fnHookTo+'('+arS+')');else rtnVal=eval('l('+arS+')');
+}else if(hookType==FBEFORE||hookType==FAFTER){if(typeof l!='undefined'){l=(hookType==1?l.before:l.after);
+if(l.length){arS=argToString(ar,2);for(var k=0;k0;k--)if((rtnVal=eval('l[k-1]('+arS+')'))!=void(0))break;}
+return rtnVal;}
+function FunctionReference(){this.ovload=null;this.before=new Array();this.after=new Array();this.alt=new Array();this.chain=new Array();}
+function Info(version,prerelease){this.version=version;this.prerelease=prerelease;
+this.simpleversion=Math.round(this.version*100);this.major=parseInt(this.simpleversion/100);this.minor=parseInt(this.simpleversion/10)-this.major * 10;this.revision=parseInt(this.simpleversion)-this.major * 100-this.minor * 10;this.meets=meets;}
+function meets(reqdVersion){return(!reqdVersion)?false:this.simpleversion>=Math.round(100*parseFloat(reqdVersion));}
+registerHook("ol_content_simple",ol_content_simple,FALTERNATE,CSSOFF);registerHook("ol_content_caption",ol_content_caption,FALTERNATE,CSSOFF);registerHook("ol_content_background",ol_content_background,FALTERNATE,CSSOFF);registerHook("ol_content_simple",ol_content_simple,FALTERNATE,CSSCLASS);registerHook("ol_content_caption",ol_content_caption,FALTERNATE,CSSCLASS);registerHook("ol_content_background",ol_content_background,FALTERNATE,CSSCLASS);registerPostParseFunction(checkPositionFlags);registerHook("hideObject",nbspCleanup,FAFTER);registerHook("horizontalPlacement",horizontalPlacement,FCHAIN);registerHook("verticalPlacement",verticalPlacement,FCHAIN);if(olNs4||(olIe5&&isMac)||olKq)olLoaded=1;registerNoParameterCommands('sticky,autostatus,autostatuscap,fullhtml,hauto,vauto,closeclick,wrap,followmouse,mouseoff,compatmode');
+var olCheckMouseCapture=true;if((olNs4||olNs6||olIe4)){olMouseCapture();}else{overlib=no_overlib;nd=no_overlib;ver3fix=true;}
diff --git a/html/js/Mini/overlib_setonoff_mini.js b/html/js/Mini/overlib_setonoff_mini.js
new file mode 100644
index 0000000000..95659e8318
--- /dev/null
+++ b/html/js/Mini/overlib_setonoff_mini.js
@@ -0,0 +1,32 @@
+//\/////
+//\ overLIB Set On/Off Plugin
+//\ This file requires overLIB 4.10 or later.
+//\
+//\ overLIB 4.10 - You may not remove or change this notice.
+//\ Copyright Erik Bosrup 1998-2003. All rights reserved.
+//\ Contributors are listed on the homepage.
+//\ See http://www.bosrup.com/web/overlib/ for details.
+//\/////
+//\ THIS IS A VERY MODIFIED VERSION. DO NOT EDIT OR PUBLISH. GET THE ORIGINAL!
+if(typeof olInfo=='undefined'||typeof olInfo.meets=='undefined'||!olInfo.meets(4.10))alert('overLIB 4.10 or later is required for the Set On/Off Plugin.');else{registerCommands('seton,setoff');var olSetType;
+function setOnOffVariables(){olSetType=0;}
+function parseOnOffExtras(pf,i,ar){var k=i,v;
+if(k-1){je=opt_MULTICOMMANDS(k+1,args);for(j=k+1;j<(k+je);j++)setNoParamCommand(1,pf,args[j]);k+=(je-1);}
+k=-1;while((k=hasCommand(++k,args,SETOFF))-1){je=opt_MULTICOMMANDS(k+1,args);for(j=k+1;j<(k+je);j++)setNoParamCommand(0,pf,args[j]);k+=(je-1);}}
+return true;}
+var olRe;
+function setNoParamCommand(whichType,pf,COMMAND){var v=pms[COMMAND-1-pmStart];
+if(pmt&&!olRe)olRe=eval('/'+pmt.split(',').join('|')+'/');if(pf!='ol_'&& /capturefirst/.test(v))return;if(pf!='ol_'&& /wrap/.test(v)&& eval(pf+'wrap')&&(whichType==0)){nbspCleanup();o3_width=ol_width;}
+if(olRe.test(v))eval(pf+v+'='+((whichType&&COMMAND==AUTOSTATUSCAP)?whichType++:whichType));}
+function opt_MULTICOMMANDS(i,ar){var k=i;
+while(kpmStart){k++;if(ar[k-1]=='SETON'||ar[k-1]=='SETOFF')break;}
+k-=(kright||o3_ybottom)return true;return false;}
+function checkShadowPreHide(){if(o3_shadow&&o3_shadowopacity)cleanUpShadowEffects();if(o3_shadow&&(olIe4&&isMac) )over.style.pixelWidth=over.style.pixelHeight=0;}
+function generateShadow(content){var wd,ht,X=0,Y=0,zIdx=0,txt,dpObj,puObj,bS='',aPos,posStr=new Array();
+if(!o3_shadow||(o3_shadowx==0&&o3_shadowy==0))return;
+X=Math.abs(o3_shadowx);Y=Math.abs(o3_shadowy);wd=parseInt(o3_width);ht=(olNs4)?over.clip.height:over.offsetHeight;
+if(o3_shadowx==0){if(o3_shadowy<0){posStr[0]=' left:0;top: 0';posStr[1]=' left:0;top: '+Y+'px';}else if(o3_shadowy>0){posStr[0]=' left:0;top: '+Y+'px';posStr[1]=' left:0;top:0';}
+}else if(o3_shadowy==0){if(o3_shadowx<0){posStr[0]=' left:0;top: 0';posStr[1]=' left: '+X+'px';}else if(o3_shadowx>0){posStr[0]=' left: '+X+'px;top: 0';posStr[1]=' left:0;top:0';}
+}else if(o3_shadowx>0){if(o3_shadowy>0){posStr[0]=' left:'+X+'px;top:'+Y+'px';posStr[1]=' left:0;top:0';}else if(o3_shadowy<0){posStr[0]=' left:'+X+'px;top:0';posStr[1]=' left:0;top: '+Y+'px';}
+}else if(o3_shadowx<0){if(o3_shadowy>0){posStr[0]=' left:0;top:'+Y+'px';posStr[1]=' left:'+X+'px;top:0';}else if(o3_shadowy<0){posStr[0]=' left:0;top:0';posStr[1]=' left:'+X+'px;top:'+Y+'px';}}
+txt=(olNs4)?'
':((olIe55&&olHideForm)?backDropSource(wd+X,ht+Y,zIdx++):'')+''+content+'
';}else{txt+=bS+'">'+content+'
';}
+layerWrite(txt);
+if(olNs4&&bkSet){dpObj=over.document.layers['backdrop'];if(typeof dpObj=='undefined')return;
+puObj=over.document.layers['PUContent'];wd=puObj.clip.width;ht=puObj.clip.height;aPos=posStr[0].split(';');
+dpObj.clip.width=wd;dpObj.clip.height=ht;dpObj.left=parseInt(aPos[0].split(':')[1]);dpObj.top=parseInt(aPos[1].split(':')[1]);
+dpObj.bgColor=(bkSet==1)?null:o3_shadowcolor;dpObj.background.src=(bkSet==2)?null:o3_shadowimage;dpObj.zIndex=0;
+aPos=posStr[1].split(';');puObj.left=parseInt(aPos[0].split(':')[1]);puObj.top=parseInt(aPos[1].split(':')[1]);puObj.zIndex=1;
+}else{puObj=(olIe4?o3_frame.document.all['PUContent']:o3_frame.document.getElementById('PUContent'));dpObj=(olIe4?o3_frame.document.all['backdrop']:o3_frame.document.getElementById('backdrop'));ht=puObj.offsetHeight;dpObj.style.height=ht+'px';
+if(o3_shadowopacity){var op=o3_shadowopacity;op=(op<=100?op:100);
+setBrowserOpacity(op,dpObj);}}
+o3_width=wd+X;o3_aboveheight=ht+Y;}
+function cleanUpShadowEffects(){if(olNs4||olOp)return;var dpObj=(olIe4?o3_frame.document.all['backdrop']:o3_frame.document.getElementById('backdrop'));cleanUpBrowserOpacity(dpObj);}
+function setBrowserOpacity(op,lyr){if(olNs4||!op)return;lyr=(lyr)?lyr:over;if(olIe4&&typeof lyr.filters!='undefined'){lyr.style.filter='Alpha(Opacity='+op+')';lyr.filters.alpha.enabled=true;}else{var sOp=(typeof(lyr.style.MozOpacity)!='undefined')?'MozOpacity':(typeof(lyr.style.KhtmlOpacity)!='undefined'?'KhtmlOpacity':(typeof(lyr.style.opacity)!='undefined'?'opacity':''));if(sOp)eval('lyr.style.'+sOp+'=op/100');}}
+function cleanUpBrowserOpacity(lyr){if(olNs4)return;lyr=(lyr)?lyr:over;if(olIe4&&(typeof lyr.filters!='undefined'&&lyr.filters.alpha.enabled)){lyr.style.filter='Alpha(Opacity=100)';lyr.filters.alpha.enabled=false;}else{var sOp=(typeof(lyr.style.MozOpacity)!='undefined')?'MozOpacity':(typeof(lyr.style.KhtmlOpacity)!='undefined'?'KhtmlOpacity':(typeof(lyr.style.opacity)!='undefined'?'opacity':''));if(sOp)eval('lyr.style.'+sOp+'=1.0');}}
+function shadowAdjust(){if(!olNs4)return;var fac=ol_shadowadjust;if(olNs4){document.write('
+
+
+
+
+
+
diff --git a/html/menu/simple.css b/html/menu/simple.css
new file mode 100644
index 0000000000..9090934c26
--- /dev/null
+++ b/html/menu/simple.css
@@ -0,0 +1,161 @@
+/*
+
+//
+// Copyright (C) Julian I. Kamil
+// No warranty is provided. Use at your own risk.
+//
+// Commercial support is available through ESV Media Group
+// who can be reached at: http://www.ESV-i.com/.
+//
+// Name: simple.css
+// Author: Julian I. Kamil
+// Created: 2005-05-18
+// Description:
+// This is a simple skin for PmWiki. Please see:
+// http://www.madhckr.com/project/PmWiki/SimpleSkin
+// for a live example and doumentation.
+//
+// $Id: simple.css,v 1.3 2005/09/14 15:14:27 julian Exp $
+//
+// History:
+// 2005-05-18 jik Created.
+// 2005-08-16 jik Simplified and cleaned up.
+//
+
+*/
+
+body {
+ margin: 0px; padding: 0px 0px 0px 0px;
+ background-color: #fff; color: #666;
+ font: 10pt Verdana;
+ line-height: 20px;
+}
+
+table { border-collapse: collapse; margin: 0px; }
+table tr td { border: 0px solid #ddd; padding: 0px 10px; vertical-align: top; }
+form { margin: 0px; padding: 0px; }
+hr { border: 0px; height: 1px; background-color: #ccc; color: #ccc; }
+p { margin: 0px; padding: 0px; }
+
+ul { margin: 0px 24px; padding: 0px; list-style: disc outside; }
+ul ul { margin-top: 0px; padding-top: 0px; list-style: circle outside; }
+ul ul ul { margin-top: 0px; padding-top: 0px; list-style: square outside; }
+
+a { text-decoration:none; color: #00f; }
+a:visited { text-decoration:none; color: #00f; }
+a:hover { text-decoration:underline; color: #00f; }
+a:active { color: #00f; }
+
+.vspace { margin-top: 4px; margin-bottom: 4px; }
+p.vspace { padding-top: 3px; padding-bottom: 3px; }
+.content-mat { padding: 10px; margin: auto; background: none; }
+.clearer{ clear: both; display: block; margin: 0px; padding: 0px; height: 0px; line-height: 1px; font-size: 0px; }
+.borderless-table tr td { border: none }
+
+#header { width: 100%; height: 90px; margin: 0px; text-align: left; background-color: #000; }
+#header #page-title { color: #eeeeee; font: 18pt Arial; font-weight: bold; padding: 15px 8px 8px 15px; }
+#header #page-subtitle { color: #eeeeee; font: 12pt Arial; font-weight: bold; padding: 0px 8px 8px 15px; }
+#header a { color: #eeeeee; }
+
+#main {
+ width: 100%; margin: 0px 0px 0px 0px;
+ border-bottom: 1px solid transparent;
+}
+
+#main h1 { font-size: 12pt; margin: 0px; padding: 0px; }
+#main h2 { font-size: 11pt; margin: 0px; padding: 0px; }
+#main h3 { font-size: 10pt; margin: 0px; padding: 0px; }
+#main h4 { font-size: 9pt; margin: 0px; padding: 0px; }
+
+#content { margin: 0px; text-align: left; padding: 0px; }
+
+#footer {
+ width: 100%; height: 40px;
+ border: 1px none #ccc;
+ margin: 0px 0px 0px 0px; padding: 0px 0px 8px 0px;
+}
+
+#copyright { margin: 0px 12px 0px 11px; padding: 2px 0px; border-top: 1px solid #ddd; font-size: 8pt; }
+
+#topnav {
+ margin: 0px 0px 0px 0px;
+ padding: 0px 0px 0px 0px;
+ text-align: right;
+ font-size: 11px; font-weight: bold;
+}
+
+#topnav ul { margin: 15px 0px 0px 0px; padding: 0px; }
+#topnav ul li { list-style: none; display: text-indent: 0px; display: inline; padding-right: 10px; }
+#topnav a { color: #eee;}
+
+
+#menubar {
+ margin: 0px 0px 0px 0px;
+ padding: 3px 15px 3px 15px;
+ border-bottom: 1px solid #e8e8e8;
+ background-color: #e8e8e8;
+ text-align: left;
+ font-size: 10px; font-weight: bold;
+}
+
+#menubar ul { margin: 0px; padding: 0px; }
+#menubar ul li { list-style: none; display: inline; text-indent: 0px; text-align: left; padding-right: 15px; }
+#menubar a { color: #666; }
+
+#popupmenu a { color: #aaa; }
+#popupmenu a:hover { color: #fff; }
+#popupmenu li:hover { background: #444; color: #eec; }
+#popupmenu li:hover ul { display: block; }
+#popupmenu ul { padding: 0px; margin: 0px; list-style: none; }
+#popupmenu ul li { padding: 0px 8px; float: left; position: relative; }
+
+#popupmenu li ul {
+ display: none;
+ position: absolute;
+ top: 8px;
+ right: 0px;
+ width: 180px;
+ margin-top: 10px;
+ border-top: 1px solid #888;
+ border-bottom: 1px solid #888;
+ padding-top: 3px;
+ padding-bottom: 4px;
+ background: #444;
+}
+
+#popupmenu li ul li {
+ display: block;
+ clear: both;
+ color: #aaa;
+}
+
+#popupmenu li ul li:hover { color: #aaa; }
+
+#toext { margin-top: 12px; margin-bottom: 12px; font-family: monospace; }
+
+.graphcell, .ifcell, .datacell { margin: 5px; left; padding: 10px; border: 0px; background: #e8e8e8; float: left; }
+.ifcell { float: left; clear: right; background:none; }
+
+.nofloat { clear: left; }
+
+.servercell, .corecell, .othercell, .custcell, .unlabelledcell, .cpecell, .unknowncell {
+float: left; padding: 0px; margin: 3px; border: 1px; height: 100px; width: 140px;
+text-align: center;
+}
+
+.corecell, .servercell, .othercell {
+background: #ffa0a0;
+}
+
+.custcell, .cpecell {
+background: #ffe0e0;
+}
+
+.unknowncell {
+background: #ddd;
+}
+
+.unlabelledcell {
+background: #eee;
+}
+
diff --git a/html/netcmd.php b/html/netcmd.php
new file mode 100644
index 0000000000..106fc66e4a
--- /dev/null
+++ b/html/netcmd.php
@@ -0,0 +1,20 @@
+$output");
+
+?>
diff --git a/html/network/includes/.confirm_login.php.swp b/html/network/includes/.confirm_login.php.swp
new file mode 100644
index 0000000000..e542b03859
Binary files /dev/null and b/html/network/includes/.confirm_login.php.swp differ
diff --git a/html/network/includes/.login.inc.php.swo b/html/network/includes/.login.inc.php.swo
new file mode 100644
index 0000000000..e4331bcd51
Binary files /dev/null and b/html/network/includes/.login.inc.php.swo differ
diff --git a/html/network/includes/.login.inc.php.swp b/html/network/includes/.login.inc.php.swp
new file mode 100644
index 0000000000..f8e57a0a5e
Binary files /dev/null and b/html/network/includes/.login.inc.php.swp differ
diff --git a/html/network/includes/authenticate.inc b/html/network/includes/authenticate.inc
new file mode 100644
index 0000000000..1fb38e34b9
--- /dev/null
+++ b/html/network/includes/authenticate.inc
@@ -0,0 +1,40 @@
+
diff --git a/html/network/includes/hostbox.inc b/html/network/includes/hostbox.inc
new file mode 100644
index 0000000000..b6a037c5b1
--- /dev/null
+++ b/html/network/includes/hostbox.inc
@@ -0,0 +1,30 @@
+$device[hostname] ");
+ if($device[location] != "") { $locationhtml = $device[location]; }
+
+ $type = strtolower($device['os']);
+ if(file_exists("../images/os/$type" . ".gif")){ $image = " "; }
+
+ if ($device['os'] == "IOS") {
+ echo ("
+
$image
+ $device[hardware] $device[os] $device[version]
+ $device[features]
+ $locationhtml
+ Up " . formatUptime($device[uptime]) ."");
+ } else {
+ echo ("$image $device[os] $device[version] ($device[features])
+ $locationhtml
+ Up " . formatUptime($device[uptime]) ."
");
+ }
+
+ if($_GET['page'] == 'device') {
+ if($_GET['graphs'] == 'yes') {
+ echo(" Hide Graphs
");
+ } else {
+ echo(" Show Graphs
");
+ }
+ }
+
+?>
diff --git a/html/network/includes/ifbox.inc b/html/network/includes/ifbox.inc
new file mode 100644
index 0000000000..06fdc5c0d8
--- /dev/null
+++ b/html/network/includes/ifbox.inc
@@ -0,0 +1,23 @@
+$inf");
+ if($ifalias && $ifalias != "") { echo("$ifalias "); }
+ if($iftype && $iftype != "") { echo("$iftype ");
+ if($mac && $mac != "") { echo("$mac ");
+ } else { echo(" "); }
+ }
+
+ if($interface[ifType] != "softwareLoopback") {
+ if($speed == '0') { $speed = "0bps"; }
+ echo("$speed");
+ if($interface[ifDuplex] != unknown) { echo(" / $interface[ifDuplex]-duplex"); }
+ if($interface[ifMtu] && $interface[ifMtu] != "") { echo(" / $interface[ifMtu]MTU "); }
+ echo(" ");
+ }
+
+ echo ("$status ");
+
+
+?>
diff --git a/html/network/includes/print-interface.inc b/html/network/includes/print-interface.inc
new file mode 100644
index 0000000000..767dd7c70a
--- /dev/null
+++ b/html/network/includes/print-interface.inc
@@ -0,0 +1,95 @@
+";}
+ echo("
+
+
+ $i. $inf
+ $ifname ");
+ if($ifalias && $ifalias != "") { echo("$ifalias "); }
+ unset ($break);
+
+ $iftype = fixiftype($interface[ifType]);
+if($show_all) {
+ if($iftype && $iftype != "") { echo("$iftype ");
+ if($mac && $mac != "") { echo("$mac ");
+ } else { echo(" "); }
+ }
+
+ if($interface[ifType] != "softwareLoopback") {
+ if($speed == '0') { $speed = "0bps"; }
+ echo("$speed");
+ if($interface[ifDuplex] != unknown) { echo(" / $interface[ifDuplex]-duplex"); }
+ if($interface[ifMtu] && $interface[ifMtu] != "") { echo(" / $interface[ifMtu]MTU "); }
+ echo(" ");
+ }
+
+ echo ("$status ");
+}
+
+ $ipdata = mysql_query("SELECT * FROM `ipaddr` WHERE `interface_id` = '$interface[id]'");
+ while($ip = mysql_fetch_Array($ipdata)) {
+ echo("$break $ip[addr]/$ip[cidr] ");
+ $break = " ";
+ }
+ echo(" ");
+ echo("");
+
+ if ( strpos($inf, "oopback") === false ) {
+
+ $link_query = mysql_query("select I.if, D.hostname, D.id AS dev_id, I.id from links AS L, interfaces AS I, devices AS D WHERE L.src_if = '$if_id' AND L.dst_if = I.id AND I.host = D.id");
+ while($link = mysql_fetch_array($link_query)) {
+ $link_if = fixifName($link['if']);
+ echo("--> $link_if on $link[hostname] ");
+ $br = " ";
+ }
+ $adj_sql = "SELECT * FROM networks AS N, interfaces AS I, adjacencies AS A ";
+ $adj_sql = $adj_sql . "WHERE I.id = A.interface_id AND A.network_id = N.id ";
+ $adj_sql = $adj_sql . "AND I.id = '$if_id'";
+ $adj_query = mysql_query("$adj_sql");
+ while($adjs = mysql_fetch_array($adj_query)) {
+ $network_id = $adjs['network_id'];
+ $newsql = "SELECT *, I.id AS iid, D.id AS did FROM adjacencies AS A, networks as N, interfaces as I, devices as D ";
+ $newsql = $newsql . "WHERE N.id = '$network_id' AND A.network_id = N.id AND I.id = A.interface_id AND D.id = I.host ";
+ $newsql = $newsql . "AND D.id != '$device[id]' AND I.if NOT LIKE '%loopback%' GROUP BY D.id ORDER BY D.hostname";
+ $new_query = mysql_query($newsql);
+ while($new = mysql_fetch_array($new_query)) {
+ if ($new['status'] == '0') { $class = "red"; } else { $class = "blue"; }
+ if ($new['ignore'] == '1') {
+ $class = "list-device-ignored";
+ if ($new['status'] == '1') { $class = "green"; }
+ }
+ $this_ifid = $new['iid'];
+ $this_hostid = $new['did'];
+ $this_hostname = $new['hostname'];
+ $this_ifname = fixifName($new['if']);
+ $wq = mysql_query("select count(*) FROM links WHERE dst_if = '$this_ifid' AND src_if = $if_id;");
+ if (@mysql_result($wq, 0) == '0') {
+ echo("$br |- $this_ifname on $this_hostname ");
+ $br = " ";
+ }
+ }
+ }
+ }
+ echo(" ");
+
+ // If we're showing graphs, generate the graph and print the img tags
+ if($_GET[graphs] == 'yes' && is_file("rrd/" . $hostname . ".". $ifIndex . ".rrd")) {
+ $trafgraph = trafgraph ($hostname . ".". $ifIndex . ".rrd", $hostname . ".". $ifIndex . "-traf.png");
+ $trafgraphmonth = trafgraph ($hostname . ".". $ifIndex . ".rrd", $hostname . ".". $ifIndex . "-month-traf.png", "-1m");
+ if($trafgraph !== false) {
+ echo(" ");
+ }
+ }
+
+ $i++;
+ echo(" ");
+
+
+?>
diff --git a/html/network/includes/topnav.inc b/html/network/includes/topnav.inc
new file mode 100644
index 0000000000..9b4d7637b5
--- /dev/null
+++ b/html/network/includes/topnav.inc
@@ -0,0 +1,20 @@
+
diff --git a/html/pages/addhost.php b/html/pages/addhost.php
new file mode 100644
index 0000000000..4107e5d920
--- /dev/null
+++ b/html/pages/addhost.php
@@ -0,0 +1,40 @@
+ '5') {
+ $hostname = $_POST['hostname'];
+ $community = $_POST['community'];
+ $snmpver = $_POST['snmpver'];
+ echo("");
+ echo("Adding host $hostname community $community
");
+ addHost($hostname, $community, $snmpver);
+ echo("");
+ } else {
+ echo("Error: You don't have the necessary privileges to add hosts.
");
+ }
+} elseif ( $_POST['hostname'] && !$_POST['community'] ) {
+ echo("Error: A community string is required.
");
+} elseif ( !$_POST['hostname'] && $_POST['community'] ) {
+echo("Error: A hostname is required.
");
+}
+
+?>
+
+
+ Add Host
+
+ Hostname:
+
+
+ Community:
+
+
+ SNMP Version:
+ v1
+ v2c
+
+
+
+
+
+
diff --git a/html/pages/addsrv.php b/html/pages/addsrv.php
new file mode 100644
index 0000000000..43b2e6f6db
--- /dev/null
+++ b/html/pages/addsrv.php
@@ -0,0 +1,75 @@
+ "5") {
+ include("includes/add-srv.inc");
+ }
+}
+
+if ($handle = opendir($installdir . "/includes/services/")) {
+ while (false !== ($file = readdir($handle))) {
+ if ($file != "." && $file != "..") {
+ $servicesform .= "$file ";
+ }
+ }
+ closedir($handle);
+}
+
+$query = mysql_query("SELECT * FROM `devices` ORDER BY `hostname`");
+while($device = mysql_fetch_array($query)) {
+ $devicesform .= "" . $device['hostname'] . " ";
+}
+
+if($updated) { print_message("Device Settings Saved"); }
+
+echo("
+Add Service
+
+
+
+
+
+
+ ");
+
+
+}
+
diff --git a/html/pages/alerts.php b/html/pages/alerts.php
new file mode 100644
index 0000000000..2c96939d4e
--- /dev/null
+++ b/html/pages/alerts.php
@@ -0,0 +1,69 @@
+
+
+
+if($_GET['del']) {
+ $id = $_GET['del'];
+ $query = "DELETE FROM `alerts` WHERE `id` = '$id'";
+ mysql_query($query);
+}
+
+$sql = "select *,DATE_FORMAT(time_logged, '%D %M %Y %T') as time, A.id as id, D.id as device_id from alerts AS A, devices as D WHERE A.device_id = D.id ORDER BY time_logged DESC LIMIT 100";
+
+echo("
+
+");
+
+$query = mysql_query($sql);
+while($event = mysql_fetch_array($query))
+{
+
+if($bg == "#ffffff") { $bg = "#e5e5e5"; } else { $bg="#ffffff"; }
+
+$type = $event[importance];
+
+switch ($type) {
+case "9":
+ $type = " ";
+ break;
+case "7":
+ $type = " ";
+ break;
+case "2":
+ $type = " ";
+ break;
+case "0":
+ $type = " ";
+ break;
+}
+
+if(!$argh) {
+ echo ("
+
+
+
+ $event[time]
+
+
+ $event[hostname]
+
+
+ $type
+
+
+ $event[message]
+
+
+
+
+
+
+
+
+
+");
+}
+
+}
+
+?>
+
diff --git a/html/pages/customers.php b/html/pages/customers.php
new file mode 100644
index 0000000000..de76571603
--- /dev/null
+++ b/html/pages/customers.php
@@ -0,0 +1,61 @@
+");
+
+ while($data = mysql_fetch_array($query)) {
+ unset($class);
+ $iid = $data[iid];
+ $ifIndex = $data[ifIndex];
+ $did = $data[did];
+ $hostname = $data[hostname];
+ $up = $data[up];
+ $up_admin = $data[up_admin];
+ $ifname = fixifname($data[ifname]);
+ $ifalias = $data[ifalias];
+ $ifalias = str_replace("Cust: ", "", $ifalias);
+ $ifalias = str_replace("[PNI]", "Private", $ifalias);
+ $ifclass = ifclass($up, $up_admin);
+
+ $displayifalias = $ifalias;
+ $ifalias = str_replace(" [","|",$ifalias);
+ $ifalias = str_replace("] (","|",$ifalias);
+ $ifalias = str_replace(" (","||",$ifalias);
+ $ifalias = str_replace("]","|",$ifalias);
+ $ifalias = str_replace(")","|",$ifalias);
+ list($ifalias,$class,$notes) = explode("|", $ifalias);
+ $useifalias = $ifalias;
+ $used = '1';
+ if ($ifalias == $previfalias) { unset($useifalias );
+ } elseif ($previfalias) {
+ echo(" ");
+ if($bg == "#ffffff") { $bg = "#e5e5e5"; } else { $bg="#ffffff"; }
+ }
+ $previfalias = $ifalias;
+
+ $mouseoverint = "onmouseover=\"return overlib(' ');\"
+ onmouseout=\"return nd();\"";
+ $mouseoverhost = "onmouseover=\"return overlib(' ');\"
+ onmouseout=\"return nd();\"";
+
+
+ echo("
+
+
+ $useifalias
+ $hostname
+ $ifname
+ $notes
+
+ ");
+
+ }
+
+ echo("");
+
+?>
diff --git a/html/pages/default.php b/html/pages/default.php
new file mode 100644
index 0000000000..6821c10f78
--- /dev/null
+++ b/html/pages/default.php
@@ -0,0 +1,112 @@
+ '0' AND `uptime` < '86400'");
+while($device = mysql_fetch_array($sql)){
+ $rebooted[] = "$device[id]";
+}
+?>
+
+
+
+
+ Nodes with Outages
+ Host
Int
Srv
+$int[0] - $int[1]"; }
+ foreach ($intlist as $intname) { $intpop .= "$br $intname"; $br = " "; }
+ unset($br);
+ if($intpop) {$intpop = "onmouseover=\"return overlib('$intpop', WIDTH, 350);\" onmouseout=\"return nd();\""; }
+
+ $srvlist = array();
+ $sql = mysql_query("SELECT `service_type`, `service_message` FROM services WHERE `service_status` = '0' AND `service_host` = '$node'");
+ while($srv = mysql_fetch_row($sql)) { $srvlist[] = "$srv[0] - " . trim($srv[1]); }
+ foreach ($srvlist as $srvname) { $srvpop .= "$br " . truncate($srvname, 100); $br = " "; }
+ unset($br);
+ if($srvpop) {
+ $srvpop = "onmouseover=\"return overlib('$srvpop', WIDTH, 350);\" onmouseout=\"return nd();\"";
+ $srvpop = str_replace("\n", ". ", $srvpop);
+ }
+
+ $mouseover = "onmouseover=\"return overlib(' ');\"
+ onmouseout=\"return nd();\"";
+
+ if(hoststatus($node)) { $statimg = " "; }
+ else { $statimg = " ";}
+ if($bg == "#ffffff") { $bg = "#e5e5e5"; } else { $bg="#ffffff"; }
+ echo("
+ $host
+ $statimg
+ $ints
+ $services ");
+
+ unset($int, $ints, $intlist, $intpop, $srv, $srvlist, $srvname, $srvpop);
+
+}
+
+echo("
");
+
+?>
+
+
+ Network Infrastructure Diagram
+
+
+
+
diff --git a/html/pages/delhost.php b/html/pages/delhost.php
new file mode 100644
index 0000000000..d1d7f49af8
--- /dev/null
+++ b/html/pages/delhost.php
@@ -0,0 +1,31 @@
+ '9') {
+ delHost($id);
+} elseif ($_POST['id']) {
+echo("Error: You don't have the necessary privileges to remove hosts.
");
+}
+
+?>
+
+
+ Delete Host
+
+
+$data[hostname]");
+
+}
+
+?>
+
+
+
+
+
+
diff --git a/html/pages/device.php b/html/pages/device.php
new file mode 100644
index 0000000000..2bb13bfcab
--- /dev/null
+++ b/html/pages/device.php
@@ -0,0 +1,96 @@
+
+
+$selected[iface] = "selected";
+
+if(!$_GET[section]) {
+ $_GET[section] = "dev-overview";
+}
+$section = $_GET[section];
+$sectionx = str_replace("-", "", $section);
+$select[$sectionx] = "selected";
+
+
+$device_query = mysql_query("select * from devices WHERE id = '$_GET[id]'");
+while($device = mysql_fetch_array($device_query)) {
+ $hostname = $device[hostname];
+ #$bg="#ffffff";
+ echo("");
+ include("includes/device-header.inc");
+ echo("
");
+
+echo("");
+
+echo("
+
+
+
+ Overview
+
+ ");
+if(mysql_result(mysql_query("select count(id) from interfaces WHERE host = '$device[id]'"), 0) > '0') {
+ echo("
+
+
+ Port Details
+
+
+
+
+ Port Graphs
+
+ ");
+}
+echo("
+
+ Host Graphs
+
+
+");
+
+if(mysql_result(mysql_query("select count(service_id) from services WHERE service_host = '$device[id]'"), 0) > '0') {
+ echo("
+
+
+ Service Details
+
+
+");
+}
+
+echo("
+
+
+ Eventlog
+
+ ");
+
+echo("
+
+
+ Syslog
+
+
+");
+
+if($_SESSION[userlevel] > "5") {
+ echo("
+
+
+ Edit Device
+
+
+");
+}
+
+
+echo(" ");
+echo("
+
");
+
+include("includes/$section.inc");
+
+echo("
+");
+}
+?>
+
diff --git a/html/pages/devices.php b/html/pages/devices.php
new file mode 100644
index 0000000000..436724a079
--- /dev/null
+++ b/html/pages/devices.php
@@ -0,0 +1,33 @@
+");
+
+//echo("
+//
+//Hostname - Description
+//Operating System - Version
+//Hardware - Features
+//Uptime - Location
+//
+// ");
+
+while($device = mysql_fetch_array($device_query)) {
+
+ include("includes/hostbox.inc");
+
+}
+
+echo("");
+
+?>
diff --git a/html/pages/downhosts.php b/html/pages/downhosts.php
new file mode 100644
index 0000000000..e72520c5f3
--- /dev/null
+++ b/html/pages/downhosts.php
@@ -0,0 +1,52 @@
+
+$type");
+echo("
");
+
+$i = 1;
+
+while($data = mysql_fetch_array($query)) {
+
+ unset($class); unset($flags);
+ $id = $data[id];
+ $hostname = $data[hostname];
+ $os = $data[os];
+ $uptime = $data[uptime];
+ $hardware = $data[hardware];
+ $version = $data[version];
+ $location = $data[location];
+ $status = $data[status];
+ $hostname = str_replace(".enta.net","",$hostname);
+
+ if($status == '0') {
+ $flags = "Unreachable";
+ $class = "unreachable";
+ } elseif ($uptime < '3600') {
+ $flags = "Rebooted";
+ $class = "rebooted";
+ }
+
+ unset($colour);
+ $hostname = makeshorthost($hostname);
+
+ echo("
+ $hostname
+ $flags
+ $hardware $os $version
+ $location
+ ");
+ if ($i < 5) {
+ $i++;
+ } else {
+ $i=1;
+ echo(" ");
+ }
+ }
+
+echo("
");
+?>
diff --git a/html/pages/downinterfaces.php b/html/pages/downinterfaces.php
new file mode 100644
index 0000000000..350c487de6
--- /dev/null
+++ b/html/pages/downinterfaces.php
@@ -0,0 +1,117 @@
+
+$type");
+
+if($_GET['format'] == "rows") {
+echo("
");
+echo("
+ Last Changed
+
+ Hostname
+
+ Interface
+
+ Description
+
+ Type
+
+ Notes
+ ");
+} else {
+#echo("");
+}
+$i = 1;
+
+ while($data = mysql_fetch_array($query)) {
+ unset($class);
+ $iid = $data[iid];
+ $did = $data[did];
+ $hostname = $data[hostname];
+ $lastchange = $data[changed];
+ $up = $data[up];
+ $up_admin = $data[ip_admin];
+ $ifname = fixifname($data[ifname]);
+ $ifnamelong = $ifname;
+ $hostnamelong = $data[hostname];
+ $ifalias = $data[ifalias];
+
+ $hostname = str_replace(".enta.net","",$hostname);
+
+unset($colour);
+
+
+ if($ifalias == "") { $ifalias = "* Unlabelled *"; }
+
+ $ifalias = str_replace(" [","|",$ifalias);
+ $ifalias = str_replace("] (","|",$ifalias);
+ $ifalias = str_replace(" (","||",$ifalias);
+ $ifalias = str_replace("]","|",$ifalias);
+ $ifalias = str_replace(")","|",$ifalias);
+ list($ifalias,$type,$notes) = explode("|", $ifalias);
+
+ if( strpos($ifalias,': ')) {
+ list($class,$ifalias) = split(": ",$ifalias,2);
+ }
+ if($class == "") {
+ if($ifalias == "* Unlabelled *") {
+ $class = "unlabelled"; }
+ else {
+ $class = "unknown"; }
+ }
+ $class = $class . "cell";
+ $ifname = makeshortif($ifname);
+ $class = strtolower($class);
+
+ if($_GET['format'] == "rows") {
+
+ echo("
+ $lastchange
+
+ $hostnamelong
+
+ $ifnamelong
+
+ $ifalias
+
+ $type
+
+ $notes
+ ");
+
+ } else {
+
+
+ echo("");
+
+
+# echo("
+# $ifalias
+# $type $notes
+# $hostname
+# $ifname
+# ");
+# if ($i < 6) {
+# $i++;
+# } else {
+# $i=1;
+# echo("");
+# }
+ }
+
+ }
+
+echo("
");
+?>
diff --git a/html/pages/eventlog.php b/html/pages/eventlog.php
new file mode 100644
index 0000000000..ddbe8edf3e
--- /dev/null
+++ b/html/pages/eventlog.php
@@ -0,0 +1,15 @@
+
+
+$query = "SELECT *,DATE_FORMAT(datetime, '%D %b %Y %T') as humandate FROM `eventlog` ORDER BY `datetime` DESC LIMIT 0,250";
+$data = mysql_query($query);
+
+
+echo("");
+
+while($entry = mysql_fetch_array($data)) {
+ include("includes/print-event.inc");
+}
+
+echo("
");
+
+ ?>
diff --git a/html/pages/ifdown.php b/html/pages/ifdown.php
new file mode 100644
index 0000000000..e4684706a8
--- /dev/null
+++ b/html/pages/ifdown.php
@@ -0,0 +1,63 @@
+
+
+
+
+ $ifalias
+ $type $notes
+ $hostname
+ $ifname
+
+
+
+ ");
+
+ }
+
+?>
diff --git a/html/pages/iftype.php b/html/pages/iftype.php
new file mode 100644
index 0000000000..f0fc8917ec
--- /dev/null
+++ b/html/pages/iftype.php
@@ -0,0 +1,43 @@
+");
+
+if($_GET['id']) {
+ $type = $_GET['id'];
+ $sql = "select *, I.id as iid, I.ifIndex as ifIndex, D.id as did, D.hostname as hostname, I.if as ifname, I.name as ifalias ";
+ $sql .= "from interfaces as I, devices as D WHERE `name` like '$type: %' AND I.host = D.id ORDER BY I.name";
+ $query = mysql_query($sql);
+ while($data = mysql_fetch_array($query)) {
+ $done = "yes";
+ unset($class);
+ $iid = $data[iid];
+ $ifIndex = $data[ifIndex];
+ $did = $data[did];
+ $hostname = $data[hostname];
+ $up = $data[up];
+ $up_admin = $data[up_admin];
+ $ifname = fixifname($data[ifname]);
+ $ifalias = $data[ifalias];
+ $ifalias = str_replace($type . ": ", "", $ifalias);
+ $ifalias = str_replace("[PNI]", "Private", $ifalias);
+ $ifclass = ifclass($up, $up_admin);
+ if($bg == "#ffffff") { $bg = "#e5e5e5"; } else { $bg="#ffffff"; }
+ echo("
+ $ifalias
+ $hostname $ifname ");
+
+if(file_exists("rrd/" . $hostname . ".". $ifIndex . ".rrd")) {
+
+ $graph_type = "bits";
+ include("includes/print-interface-graphs.php");
+
+}
+ echo(" ");
+ }
+}
+
+echo("");
+
+if(!$done) { echo("None found."); }
+
+?>
diff --git a/html/pages/interface.php b/html/pages/interface.php
new file mode 100644
index 0000000000..68a636cb9e
--- /dev/null
+++ b/html/pages/interface.php
@@ -0,0 +1,77 @@
+
+
+$interface_query = mysql_query("select * from interfaces WHERE id = '$_GET[id]'");
+$interface = mysql_fetch_array($interface_query);
+
+ $device_query = mysql_query("select * from devices where id = '$interface[host]'");
+ $device = mysql_fetch_array($device_query);
+
+ $hostname = $device['hostname'];
+ $hostid = $device['id'];
+ $ifname = $interface['if'];
+ $up = $interface['up'];
+ $up_admin = $interface['up_admin'];
+ $ifIndex = $interface['ifIndex'];
+ $speed = humanspeed($interface['ifSpeed']);
+
+ $ifalias = $interface['name'];
+
+ if($interface['ifPhysAddress']) { $mac = "$interface[ifPhysAddress]"; }
+
+ $color = "black";
+ if ($up_admin == "down") { $status = "
Disabled "; }
+ if ($up_admin == "up" && $up == "down") { $status = "
Enabled / Disconnected "; }
+ if ($up_admin == "up" && $up == "up") { $status = "
Enabled / Connected "; }
+
+ $i = 1;
+ $inf = fixifName($ifname);
+
+# $bg="#ffffff";
+ echo("
");
+ include("includes/device-header.inc");
+ echo("
");
+
+ $show_all = 1;
+
+ echo("
");
+
+ include("includes/print-interface.inc");
+
+ echo("
");
+
+ $pos = strpos(strtolower($ifname), "vlan");
+ if( $pos !== false ) {
+ $broke = yes;
+ }
+ $pos = strpos(strtolower($ifname), "loopback");
+ if( $pos !== false ) {
+ $broke = yes;
+ }
+
+if( !$broke)
+{ }
+
+echo("
");
+
+if(file_exists("rrd/" . $hostname . ".". $ifIndex . ".rrd")) {
+
+ $iid = $id;
+ echo("
Interface Traffic
");
+ $graph_type = "bits";
+ include("includes/print-interface-graphs.php");
+
+ echo("
Interface Packets
");
+ $graph_type = "pkts";
+ include("includes/print-interface-graphs.php");
+
+ echo("
Interface Non Unicast
");
+ $graph_type = "nupkts";
+ include("includes/print-interface-graphs.php");
+
+ echo("
Interface Errors
");
+ $graph_type = "errors";
+ include("includes/print-interface-graphs.php");
+
+}
+
+?>
diff --git a/html/pages/interfaces.php b/html/pages/interfaces.php
new file mode 100644
index 0000000000..ff487b9851
--- /dev/null
+++ b/html/pages/interfaces.php
@@ -0,0 +1,31 @@
+");
+
+echo("
Device Interface Speed Media Description ");
+
+$row = 1;
+
+while($iface = mysql_fetch_array($query)) {
+
+ if(is_integer($row/2)) { $row_colour = $list_colour_a; } else { $row_colour = $list_colour_b; }
+
+ $speed = humanspeed($iface['ifSpeed']);
+ $if_link = generateiflink($iface);
+ $dev_link = generatedevicelink($iface);
+ $type = humanmedia($iface['ifType']);
+
+ echo("
$dev_link $if_link $speed $type $iface[name] \n");
+
+ $row++;
+
+}
+
+echo("");
+
+
+?>
+
diff --git a/html/pages/list.php b/html/pages/list.php
new file mode 100644
index 0000000000..0537c2d461
--- /dev/null
+++ b/html/pages/list.php
@@ -0,0 +1,31 @@
+");
+
+echo("
+
+Hostname - Description
+Operating System - Version
+Hardware - Features
+Uptime - Location
+
+ ");
+
+while($device = mysql_fetch_array($device_query)) {
+
+ include("includes/hostbox.inc");
+
+}
+
+echo("");
+
+?>
diff --git a/html/pages/locations.php b/html/pages/locations.php
new file mode 100644
index 0000000000..dcf0e8f7c9
--- /dev/null
+++ b/html/pages/locations.php
@@ -0,0 +1,37 @@
+
+echo("
");
+
+$device_query = mysql_query("select location from devices GROUP BY location ORDER BY location");
+while($device = mysql_fetch_array($device_query)) {
+
+ if($bg == "#ffffff") { $bg = "#eeeeee"; } else { $bg="#ffffff"; }
+
+ $num = mysql_result(mysql_query("SELECT COUNT(id) FROM devices WHERE location = '$device[location]'"),0);
+ $net = mysql_result(mysql_query("SELECT COUNT(id) FROM devices WHERE location = '$device[location]' AND type = 'network'"),0);
+ $srv = mysql_result(mysql_query("SELECT COUNT(id) FROM devices WHERE location = '$device[location]' AND type = 'server'"),0);
+ $fwl = mysql_result(mysql_query("SELECT COUNT(id) FROM devices WHERE location = '$device[location]' AND type = 'firewall'"),0);
+
+ $hostalerts = mysql_result(mysql_query("SELECT COUNT(id) FROM devices WHERE location = '$device[location]' AND status = '0'"),0);
+ if($hostalerts) { $alert = " "; }
+
+ $loc = $device[location];
+
+ if($loc != "") {
+ echo("
+
+ $loc
+ $alert
+ $num devices
+ $net network
+ $srv servers
+ $fwl firewalls
+
+ ");
+
+ $done = "yes";
+ }
+}
+
+echo("
");
+
+?>
diff --git a/html/pages/logon.inc b/html/pages/logon.inc
new file mode 100644
index 0000000000..d4d74061e9
--- /dev/null
+++ b/html/pages/logon.inc
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ Please log in:
+
+
+
+
+
+
+");
+
+?>
diff --git a/html/pages/services.php b/html/pages/services.php
new file mode 100644
index 0000000000..56d4abd54e
--- /dev/null
+++ b/html/pages/services.php
@@ -0,0 +1,24 @@
+");
+//echo("Device Service Status Changed Checked Message ");
+
+
+ $host_sql = "SELECT D.id, D.hostname FROM devices AS D, services AS S WHERE D.id = S.service_host GROUP BY D.hostname ORDER BY D.hostname";
+ $host_query = mysql_query($host_sql);
+ while($host_data = mysql_fetch_array($host_query)) {
+ $device_id = $host_data[id];
+ $device_hostname = $host_data[hostname];
+ $service_query = mysql_query("SELECT * FROM `services` WHERE `service_host` = '$host_data[id]' $where");
+ while($service = mysql_fetch_array($service_query)) {
+ include("includes/print-service.inc");
+ $samehost = 1;
+ }
+ unset ($samehost);
+ }
+
+ echo("
");
+
+?>
diff --git a/html/pages/syslog.php b/html/pages/syslog.php
new file mode 100644
index 0000000000..70c82fb528
--- /dev/null
+++ b/html/pages/syslog.php
@@ -0,0 +1,121 @@
+
+
+
+$sql = "select *,DATE_FORMAT(datetime, '%D %M %Y %T') as humandate from logs ORDER BY datetime DESC LIMIT 1000";
+
+echo("
+
+
+
+
+
+ Time
+
+
+
+
+ Hostname
+
+
+
+
+ Type
+
+
+
+
+ Message
+
+
+
+ ");
+
+$query = mysql_query($sql);
+while($event = mysql_fetch_array($query))
+{
+ unset($class);
+ unset($argh);
+
+ $event[msg] = preg_replace("/.*%/", "", $event[msg]);
+ $event[msg] = preg_replace("/[0-9]+:\ /", "", $event[msg]);
+
+ $prefix = preg_replace ("/(.+):\ .*/", "\\1", $event[msg]);
+
+ $event[msg] = preg_replace ("/.+:\ /", "", $event[msg]);
+
+ if($prefix == $event[msg]) { unset ($prefix); }
+
+ $prefix = str_replace("CRYPTO-4-RECVD_PKT_INV_SPI: decaps", "Crypto Invalid SPI", $prefix);
+ $prefix = str_replace("LINEPROTO-5-UPDOWN", "Lineproto Up/Down", $prefix);
+ $prefix = str_replace("LINK-3-UPDOWN", "Link Up/Down", $prefix);
+ $prefix = str_replace("LINEPROTO-SP-5-UPDOWN", "Lineproto Up/Down", $prefix);
+ $prefix = str_replace("LINK-SP-3-UPDOWN", "Link Up/Down", $prefix);
+
+ $prefix = str_replace("PIM-6-INVALID_RP_JOIN", "PIM Invalid RP Join", $prefix);
+ $prefix = str_replace("BGP-3-NOTIFICATION", "BGP Notification", $prefix);
+ $prefix = str_replace("LINK-3-UPDOWN", "Link Up/Down", $prefix);
+ $prefix = str_replace("DIALER-6-UNBIND", "Dialer Unbound", $prefix);
+ $prefix = str_replace("DIALER-6-BIND", "Dialer Bound", $prefix);
+ $prefix = str_replace("SYS-5-CONFIG_I", "System Configured", $prefix);
+ $prefix = str_replace("VPDN-6-CLOSED", "VPDN Closed", $prefix);
+ $prefix = str_replace("DIALER-6-BIND", "Dialer Bound", $prefix);
+ $prefix = str_replace("PCMCIAFS-5-DIBERR", "PCMCIA FS Error", $prefix);
+ $prefix = str_replace("BGP-5-ADJCHANGE", "BGP Adj Change", $prefix);
+ $prefix = str_replace("MSDP-5-PEER_UPDOWN", "MSDP Peer UP/Down", $prefix);
+ $prefix = str_replace("SYS-5-CONFIG_I", "System Configured", $prefix);
+
+ $prefix = preg_replace("/.*ETHER-3-UNDERFLO/", "Ethernet Underflow", $prefix);
+
+ if(strstr($event[msg], "BGP authentication failure") !== false) { $class = "pinkbg"; }
+ if(strstr($event[msg], "Down BGP Notification received") !== false) { $class = "redbg"; }
+ if(strstr($event[msg], "DOWN on interface") !== false) { $class = "redbg"; }
+ if(strstr($event[msg], "from FULL to DOWN") !== false) { $class = "redbg"; }
+ if(strstr($event[msg], "changed state to down") !== false) { $class = "redbg"; }
+ if(strstr($event[msg], "(cease)") !== false) { $class = "redbg"; }
+ if(strstr($event[msg], "(hold time expired)") !== false) { $class = "redbg"; }
+ if(strstr($event[msg], "Configured from console") !== false) { $class = "bluebg"; }
+ if(strstr($event[msg], "DR change ") !== false) { $class = "bluebg"; }
+ if(strstr($event[msg], "Up") !== false) { $class = "greenbg"; }
+ if(strstr($event[msg], "from LOADING to FULL") !== false) { $class = "greenbg"; }
+ if(strstr($event[msg], "UP on interface ") !== false) { $class = "greenbg"; }
+ if(strstr($event[msg], "changed state to up") !== false) { $class = "greenbg"; }
+ if(strstr($event[msg], "A format in this router is required") !== false) { $class = "greybg"; }
+ if(strstr($event[msg], "bytes failed from") !== false) { $class = "greybg"; }
+ if($event[msg] == "Attempted to connect to RSHELL from 195.74.96.24" ) { $argh = 1; }
+
+ $event[msg] = str_replace("PCMCIA disk 0 is formatted from a different router or PC. A format in this router is required before an image can be booted from this device", "PCMCIA diak 0 is incorrectly formatted", $event[msg]);
+
+if(!$argh) {
+ echo ("
+
+
+
+
+ $event[humandate]
+
+
+
+
+ $event[host]
+
+
+
+
+ $prefix
+
+
+
+
+ $event[msg]
+
+
+
+
+
+");
+}
+
+}
+
+?>
+
diff --git a/html/phones/config.php b/html/phones/config.php
new file mode 100644
index 0000000000..64387dd72b
--- /dev/null
+++ b/html/phones/config.php
@@ -0,0 +1,5 @@
+
diff --git a/html/rrd b/html/rrd
new file mode 120000
index 0000000000..70c6b9ed64
--- /dev/null
+++ b/html/rrd
@@ -0,0 +1 @@
+../rrd/
\ No newline at end of file
diff --git a/html/whois.php b/html/whois.php
new file mode 100644
index 0000000000..bf6b104cf2
--- /dev/null
+++ b/html/whois.php
@@ -0,0 +1,10 @@
+$output");
+
+?>
diff --git a/includes/cdp.php b/includes/cdp.php
new file mode 100644
index 0000000000..560867a7e6
--- /dev/null
+++ b/includes/cdp.php
@@ -0,0 +1,180 @@
+host=$host;
+ $this->community=$community;
+ }
+
+ /**
+ * Identify
+ * Determines if the queried device is made by Cisco or not.
+ * $type = $snmp->identify();
+ * @return string
+ */
+ function identify() {
+ $ret=snmpget($this->host,$this->community,"SNMPv2-MIB::sysDescr.0");
+ if (substr_count($ret,"Cisco") > 0) {
+ return "cisco";
+ } else {
+ return "unknown";
+ }
+ }
+
+ /**
+ * Location
+ * Returns the location string configured on the device.
+ * $location = $snmp->location();
+ * @return string
+ */
+ function location() {
+ return snmpget($this->host,$this->community,"SNMPv2-MIB::sysLocation.0");
+ }
+
+ /**
+ * Function to determine if port is up or down from returned SNMP string.
+ * @access private
+ */
+ function _isitup($text) {
+ $x = substr($text,9);
+ switch($x) {
+ case "up(1)": return true; break;
+ case "down(2)": return false; break;
+ }
+ }
+
+ /**
+ * Returns the type of port depending on the returned SNMP string.
+ * @access private
+ */
+ function _porttype($text) {
+ $x = substr($text,9);
+ switch($x) {
+ case "ethernetCsmacd(6)": return "ethernet"; break;
+ case "propVirtual(53)": return "virtual"; break;
+ case "propPointToPointSerial(22)": return "serial"; break;
+ default: return $text; break;
+ }
+ }
+
+ /**
+ * Get Port List
+ * Returns an array forming a list of the ports on the device, including name, alias and type.
+ * The returned array is indexed by the port index in the SNMP tree.
+ *
+ * $snmp->getports();
+ *
+ * An example of the output:
+ * Array
+ * (
+ * [2] => Array
+ * (
+ * [desc] => GigabitEthernet0/1
+ * [alias] =>
+ * [type] => ethernet
+ * )
+ * )
+ * @return array
+ */
+ function getports() {
+ $nosint = @snmpget($this->host,$this->community,"IF-MIB::ifNumber.0");
+ $ports = @snmpwalk($this->host,$this->community,"IF-MIB::ifIndex");
+ $results=array();
+ foreach($ports as $port) {
+ $x = substr($port,9);
+ $admin = snmpget($this->host,$this->community,"IF-MIB::ifAdminStatus.$x");
+ if ($this->_isitup($admin)==true) {
+ $desc = substr(snmpget($this->host,$this->community,"IF-MIB::ifDescr.$x"),8);
+ $alias = substr(snmpget($this->host,$this->community,"IF-MIB::ifAlias.$x"),8);
+ $type = $this->_porttype(snmpget($this->host,$this->community,"IF-MIB::ifType.$x"));
+ $results["$x"]=array("desc"=>$desc,"alias"=>$alias,"type"=>$type);
+ }
+ }
+ return $results;
+ }
+
+ /**
+ * Port Status
+ * Returns the status of an individual port. Takes the SNMP index as the parameter.
+ * if ($snmp->portstatus(2)==true) {
+ * echo "Port is up!";
+ * }
+ * @var integer $id
+ * @return bool
+ */
+ function portstatus($id) {
+ $adminStatus = @snmpget($this->host,$this->community,"IF-MIB::ifAdminStatus.$id");
+ if ($this->_isitup($adminStatus)==true) {
+ $operStatus = @snmpget($this->host,$this->community,"IF-MIB::ifOperStatus.$id");
+ if ($this->_isitup($operStatus)==true) {
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _walkget($oid) {
+ $ret = snmpwalk($this->host,$this->community,$oid);
+ if (sizeof($ret) > 0) {
+ return $ret[0];
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Explore CDP
+ * When supplied with the current port list from the device, it will determine each ports CDP status.
+ * Returns an array containing the device name and port of the remote SNMP device detected via CDP,
+ * assuming that it has the same community string as the initial device. The returned array is indexed
+ * by the SNMP ports of the initial device.
+ *
+ * $ports = $snmp->getports();
+ * $cdp = $snmp->explore_cdp($ports);
+ *
+ * An example of the output will look like:
+ * Array
+ * (
+ * [2] => Array
+ * (
+ * [host] => second.device.hostname
+ * [port] => FastEthernet0/1
+ * )
+ * )
+ * @var array ports
+ * @return array
+ */
+ function explore_cdp($ports) {
+ $cdpports=array();
+ foreach($ports as $id => $port) {
+ if ($ret = $this->_walkget("SNMPv2-SMI::enterprises.9.9.23.1.2.1.1.6.$id")) {
+ // this port is connected to another cisco!
+ $remote_id = substr($ret,9,strlen($ret)-10);
+ if ($ret = $this->_walkget("SNMPv2-SMI::enterprises.9.9.23.1.2.1.1.7.$id")) {
+ $remote_port = substr($ret,9,strlen($ret)-10);
+ }
+ #echo "$this->host($port[desc]) is connected to $remote_id($remote_port)\n";
+ $cdpports[$id]=array('host'=>$remote_id,'port'=>$remote_port);
+ }
+ }
+ return $cdpports;
+ }
+
+}
+
+?>
diff --git a/includes/functions.php b/includes/functions.php
new file mode 100755
index 0000000000..4ad2ae5021
--- /dev/null
+++ b/includes/functions.php
@@ -0,0 +1,1046 @@
+
+
+include("generic.php");
+include("ios.php");
+include("unix.php");
+include("windows.php");
+include("procurve.php");
+include("snom.php");
+include("graphing.php");
+
+function print_error($text){
+
+echo(" $text
");
+
+}
+
+function print_message($text){
+
+echo(" $text
");
+
+}
+
+function truncate($substring, $max = 50, $rep = '...') {
+ if(strlen($substring) < 1){
+ $string = $rep;
+ }else{
+ $string = $substring;
+ }
+
+ $leave = $max - strlen ($rep);
+
+ if(strlen($string) > $max){
+ return substr_replace($string, $rep, $leave);
+ }else{
+ return $string;
+ }
+}
+
+function geteventicon ($message) {
+ if($message == "Device status changed to Down") { $icon = "server_connect.png"; }
+ if($message == "Device status changed to Up") { $icon = "server_go.png"; }
+ if($message == "Interface went down" || $message == "Interface changed state to Down" ) { $icon = "if-disconnect.png"; }
+ if($message == "Interface went up" || $message == "Interface changed state to Up" ) { $icon = "if-connect.png"; }
+ if($message == "Interface disabled") { $icon = "if-disable.png"; }
+ if($message == "Interface enabled") { $icon = "if-enable.png"; }
+ if($icon) { return $icon; } else { return false; }
+}
+
+
+function generateiflink($iface, $text=0) {
+ global $twoday;
+ global $now;
+ if(!$text) { $text = fixIfName($iface['if']); }
+ $class = ifclass($iface['up'], $iface['up_admin']);
+ $graph_url = "graph.php?if=$iface[id]&from=$twoday&to=$now&width=400&height=120&type=bits";
+ $link = "');\" onmouseout=\"return nd();\">$text ";
+ return $link;
+}
+
+function generatedevicelink($device, $text=0) {
+ global $twoday;
+ global $now;
+ if($device['dev_id']) { $id = $device['dev_id']; } else { $id = $device['id']; }
+ $class = devclass($device);
+ if(!$text) { $text = $device[hostname]; }
+ $graph_url = "graph.php?host=$id&from=$twoday&to=$now&width=400&height=120&type=cpu";
+ $link = "');\" onmouseout=\"return nd();\">$text ";
+ return $link;
+}
+
+function devclass($device) {
+ if ($device['status'] == '0') { $class = "list-device-down"; } else { $class = "list-device"; }
+ if ($device['ignore'] == '1') {
+ $class = "list-device-ignored";
+ if ($device['status'] == '1') { $class = "list-device-ignored-up"; }
+ }
+ return $class;
+}
+
+
+function getImage($host) {
+
+$sql = "SELECT * FROM `devices` WHERE `id` = '$host'";
+$data = mysql_fetch_array(mysql_query($sql));
+
+$type = strtolower($data['os']);
+
+ if(file_exists("images/os/$type" . ".png")){ $image = " ";
+ } elseif(file_exists("images/os/$type" . ".gif")){ $image = " "; }
+ if($device['monowall']) {$image = " ";}
+
+ if($type == "linux") {
+ $features = strtolower(trim($data[features]));
+ list($distro) = split(" ", $features);
+ if(file_exists("images/os/$distro" . ".png")){ $image = " ";
+ } elseif(file_exists("images/os/$distro" . ".gif")){ $image = " "; }
+ }
+
+ return $image;
+
+}
+
+
+function delHost($id) {
+
+ $host = mysql_result(mysql_query("SELECT hostname FROM devices WHERE id = '$id'"), 0);
+ mysql_query("DELETE FROM `devices` WHERE `id` = '$id'");
+ $int_query = mysql_query("SELECT * FROM `interfaces` WHERE `host` = '$id'");
+ while($int_data = mysql_fetch_array($int_query)) {
+ $int_if = $int_data['if'];
+ $int_id = $int_data['id'];
+ mysql_query("DELETE from `adjacencies` WHERE `interface_id` = '$int_id'");
+ mysql_query("DELETE from `links` WHERE `src_if` = '$int_id'");
+ mysql_query("DELETE from `links` WHERE `dst_if` = '$int_id'");
+ mysql_query("DELETE from `ipaddr` WHERE `interface_id` = '$int_id'");
+ echo("Removed interface $int_id ($int_if) ");
+ }
+ mysql_query("DELETE FROM `storage` WHERE `host_id` = '$id'");
+ mysql_query("DELETE FROM `alerts` WHERE `device_id` = '$id'");
+ mysql_query("DELETE FROM `eventlog` WHERE `host` = '$id'");
+ mysql_query("DELETE FROM `interfaces` WHERE `host` = '$id'");
+ mysql_query("DELETE FROM `services` WHERE `service_host` = '$id'");
+ `rm -f rrd/$host-*.rrd`;
+ echo("Removed device $host ");
+}
+
+
+function addHost($host, $community, $snmpver) {
+ list($hostshort) = explode(".", $host);
+ if ( isDomainResolves($host)){
+ if ( isPingable($host)) {
+ if ( mysql_result(mysql_query("SELECT COUNT(*) FROM `devices` WHERE `hostname` = '$host'"), 0) == '0' ) {
+ $snmphost = trim(`snmpwalk -Oqv -$snmpver -c $community $host sysname | sed s/\"//g`);
+ if ($snmphost == $host || $hostshort = $host) {
+ createHost ($host, $community, $snmpver);
+ } else { echo("Given hostname does not match SNMP-read hostname!\n"); }
+ } else { echo("Already got host $host\n"); }
+ } else { echo("Could not ping $host\n"); }
+ } else { echo("Could not resolve $host\n"); }
+}
+
+function overlibprint($text) {
+ return "onmouseover=\"return overlib('" . $text . "');\" onmouseout=\"return nd();\"";
+}
+
+function scanUDP ($host, $port, $timeout) {
+ $handle = fsockopen($host, $port, &$errno, &$errstr, 2);
+ if (!$handle) {
+ }
+
+ socket_set_timeout ($handle, $timeout);
+ $write = fwrite($handle,"\x00");
+ if (!$write) {
+ next;
+ }
+
+ $startTime = time();
+ $header = fread($handle, 1);
+ $endTime = time();
+ $timeDiff = $endTime - $startTime;
+
+ if ($timeDiff >= $timeout) {
+ fclose($handle);
+ return 1;
+ } else {
+ fclose($handle);
+ return 0;
+ }
+}
+
+function humanmedia($media) {
+ $media = preg_replace("/^ethernetCsmacd$/", "Ethernet", $media);
+ $media = preg_replace("/^softwareLoopback$/", "Software Loopback", $media);
+ $media = preg_replace("/^tunnel$/", "Tunnel", $media);
+ $media = preg_replace("/^propVirtual$/", "Ethernet VLAN", $media);
+ $media = preg_replace("/^ppp$/", "PPP", $media);
+ $media = preg_replace("/^slip$/", "SLIP", $media);
+ return $media;
+}
+
+
+function humanspeed($speed) {
+ $speed = preg_replace("/^0$/", "-", $speed);
+ $speed = preg_replace("/^9000$/", "9Kbps", $speed);
+ $speed = preg_replace("/^48000$/", "48Kbps", $speed);
+ $speed = preg_replace("/^64000$/", "64Kbps", $speed);
+ $speed = preg_replace("/^128000$/", "128Kbps", $speed);
+ $speed = preg_replace("/^256000$/", "256Kbps", $speed);
+ $speed = preg_replace("/^512000$/", "512Kbps", $speed);
+ $speed = preg_replace("/^768000$/", "768Kbps", $speed);
+ $speed = preg_replace("/^1024000$/", "1Mbps", $speed);
+ $speed = preg_replace("/^2048000$/", "2Mbps", $speed);
+ $speed = preg_replace("/^4192000$/", "4Mbps", $speed);
+ $speed = preg_replace("/^10000000$/", "10Mbps", $speed);
+ $speed = preg_replace("/^34000000$/", "34Mbps", $speed);
+ $speed = preg_replace("/^100000000$/", "100Mbps", $speed);
+ $speed = preg_replace("/^155000000$/", "155Mbps", $speed);
+ $speed = preg_replace("/^622000000$/", "622Mbps", $speed);
+ $speed = preg_replace("/^1000000000$/", "1Gbps", $speed);
+ $speed = preg_replace("/^10000000000$/", "10Gbps", $speed);
+ $speed = preg_replace("/^4294967295$/", "", $speed);
+ if($speed == "") { $speed = "-"; }
+ return $speed;
+}
+
+
+function netmask2cidr($netmask) {
+
+ list ($network, $cidr) = explode("/", trim(`ipcalc $address/$mask | grep Network | cut -d" " -f 4`));
+ return $cidr;
+
+}
+
+function cidr2netmask() {
+ return (long2ip(ip2long("255.255.255.255")
+ << (32-$netmask)));
+}
+
+function formatUptime($diff) {
+ $daysDiff = floor($diff/86400);
+ $diff -= $daysDiff*86400;
+ $hrsDiff = floor($diff/60/60);
+ $diff -= $hrsDiff*60*60;
+ $minsDiff = floor($diff/60);
+ $diff -= $minsDiff*60;
+ $secsDiff = $diff;
+ if($daysDiff > '0'){ $uptime .= "$daysDiff days, "; }
+ if($hrsDiff > '0'){ $uptime .= $hrsDiff . "h "; }
+ if($minsDiff > '0'){ $uptime .= $minsDiff . "m "; }
+ if($secsDiff > '0'){ $uptime .= $secsDiff . "s "; }
+ return "$uptime";
+}
+
+function isSNMPable($hostname, $community, $snmpver) {
+ $pos = `snmpget -$snmpver -c $community -t 1 $hostname sysDescr.0`;
+ if($pos == '') {
+ $status='0';
+ $posb = `snmpget -$snmpver -c $community -t 1 $hostname 1.3.6.1.2.1.7526.2.4`;
+ if($posb == '') { } else { $status='1'; }
+ } else {
+ $status='1';
+ }
+ return $status;
+}
+
+function isPingable($hostname) {
+ global $fping;
+ $status = `$fping $hostname | cut -d " " -f 3`;
+ $status = trim($status);
+
+ if($status == "alive") {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+
+function is_odd($number) {
+ return $number & 1; // 0 = even, 1 = odd
+}
+
+function isValidInterface($if) {
+ $if = strtolower($if);
+ $bif = array("null", "virtual-", "unrouted", "eobc", "mpls", "aal5", "-atm layer", "dialer", "-shdsl", "-adsl", "async", "sit0", "sit1");
+ $nullintf = 0;
+ foreach($bif as $bi) {
+ $pos = strpos($if, $bi);
+ if ($pos !== FALSE) {
+ $nullintf = 1;
+ echo("$if matched $bi \n");
+ }
+ }
+ if (preg_match('/serial[0-9]:/', $if)) { $nullintf = '1'; }
+ if ($nullintf != '1') {
+ return 1;
+ } else { return 0; }
+}
+
+function ifclass($up, $up_admin) {
+ $ifclass = "interface-upup";
+
+ if ($up_admin == "down") { $ifclass = "interface-admindown"; }
+ if ($up_admin == "up" && $up == "down") { $ifclass = "interface-updown"; }
+ if ($up_admin == "up" && $up == "up") { $ifclass = "interface-upup"; }
+ return $ifclass;
+}
+
+function makeshortif($if) {
+ $if = strtolower($if);
+ $if = str_replace("tengigabitethernet","Te", $if);
+ $if = str_replace("gigabitethernet","Gi", $if);
+ $if = str_replace("fastethernet","Fa", $if);
+ $if = str_replace("ethernet","Et", $if);
+ $if = str_replace("serial","Se", $if);
+ $if = str_replace("pos","Pos", $if);
+ $if = str_replace("port-channel","Po", $if);
+ $if = str_replace("atm","Atm", $if);
+ $if = str_replace("loopback","Lo", $if);
+ $if = str_replace("dialer","Di", $if);
+ $if = str_replace("vlan","Vlan", $if);
+ return $if;
+}
+
+function utime() {
+ $time = explode( " ", microtime());
+ $usec = (double)$time[0];
+ $sec = (double)$time[1];
+ return $sec + $usec;
+}
+
+function fixiftype ($type) {
+
+ $type = str_replace("ethernetCsmacd", "Ethernet", $type);
+ $type = str_replace("tunnel", "Tunnel", $type);
+ $type = str_replace("softwareLoopback", "Software Loopback", $type);
+ $type = str_replace("propVirtual", "Ethernet VLAN", $type);
+ $type = str_replace("ethernetCsmacd", "Ethernet", $type);
+ $type = str_replace("l2vlan", "Ethernet VLAN", $type);
+
+ return ($type);
+
+}
+
+function fixifName ($inf) {
+ $inf = str_replace("ether", "Ether", $inf);
+ $inf = str_replace("gig", "Gig", $inf);
+ $inf = str_replace("fast", "Fast", $inf);
+ $inf = str_replace("ten", "Ten", $inf);
+ $inf = str_replace("vlan", "Vlan", $inf);
+ $inf = str_replace("ether", "Ether", $inf);
+ $inf = str_replace("loop", "Loop", $inf);
+ $inf = str_replace("-802.1q Vlan subif", "", $inf);
+ $inf = str_replace("serial", "Serial", $inf);
+ $inf = str_replace("-aal5 layer", " aal5", $inf);
+ $inf = str_replace("atm", "ATM", $inf);
+ $inf = str_replace("port-channel", "Port-Channel", $inf);
+ $inf = str_replace("dial", "Dial", $inf);
+ $inf = str_replace("hp procurve switch software Loopback interface", "Loopback Interface", $inf);
+ $inf = str_replace("control plane interface", "Control Plane", $inf);
+ return $inf;
+}
+
+function trafgraph ($rrd, $graph, $from, $to, $width, $height)
+{
+ global $rrdtool; global $installdir;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $optsa = array( "--alt-autoscale-max",
+ "-E",
+ "--start", $from, "--end", $to,
+ "--width", $width, "--height", $height,
+ "DEF:inoctets=$database:INOCTETS:AVERAGE",
+ "DEF:outoctets=$database:OUTOCTETS:AVERAGE",
+ "CDEF:doutoctets=outoctets,-1,*",
+ "CDEF:inbits=inoctets,8,*",
+ "CDEF:outbits=outoctets,8,*",
+ "CDEF:doutbits=doutoctets,8,*",
+ "VDEF:95thin=inbits,95,PERCENT",
+ "VDEF:95thout=outbits,95,PERCENT",
+ "VDEF:d95thout=doutbits,5,PERCENT",
+ "AREA:inbits#CDEB8B:",
+ "COMMENT:BPS Current Average Max 95th %\\n",
+ "LINE1.25:inbits#006600:In ",
+ "GPRINT:inbits:LAST:%6.2lf%s",
+ "GPRINT:inbits:AVERAGE:%6.2lf%s",
+ "GPRINT:inbits:MAX:%6.2lf%s",
+ "GPRINT:95thin:%6.2lf%s\\n",
+ "AREA:doutbits#C3D9FF:",
+ "LINE1.25:doutbits#000099:Out",
+ "GPRINT:outbits:LAST:%6.2lf%s",
+ "GPRINT:outbits:AVERAGE:%6.2lf%s",
+ "GPRINT:outbits:MAX:%6.2lf%s",
+ "GPRINT:95thout:%6.2lf%s",
+ "LINE1:95thin#aa0000",
+ "LINE1:d95thout#aa0000:" );
+
+
+ if($width <= "300") {$optsb = array("--font", "LEGEND:7:$installdir/DejaVuSansMono.ttf",
+ "--font", "AXIS:6:$installdir/DejaVuSansMono.ttf",
+ "--font-render-mode", "normal");}
+
+ $opts = array_merge($optsa, $optsb);
+
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+
+ if( !is_array($ret) )
+ {
+ $err = rrd_error();
+ # echo "rrd_graph() ERROR: $err\n";
+ return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+function pktsgraph ($rrd, $graph, $from, $to, $width, $height) {
+ global $rrdtool; global $installdir;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $optsa = array( "--alt-autoscale-max",
+ "-l 0",
+ "-E",
+ "--start", $from, "--end", $to,
+ "--width", $width, "--height", $height,
+ "DEF:in=$database:INUCASTPKTS:AVERAGE",
+ "DEF:out=$database:OUTUCASTPKTS:AVERAGE",
+ "CDEF:dout=out,-1,*",
+ "AREA:in#aa66aa:",
+ "COMMENT:Packets Current Average Maximum\\n",
+ "LINE1.25:in#330033:In ",
+ "GPRINT:in:LAST:%6.2lf%spps",
+ "GPRINT:in:AVERAGE:%6.2lf%spps",
+ "GPRINT:in:MAX:%6.2lf%spps\\n",
+ "AREA:dout#FFDD88:",
+ "LINE1.25:dout#FF6600:Out ",
+ "GPRINT:out:LAST:%6.2lf%spps",
+ "GPRINT:out:AVERAGE:%6.2lf%spps",
+ "GPRINT:out:MAX:%6.2lf%spps\\n");
+ if($width <= "300") {$optsb = array("--font", "LEGEND:7:$installdir/DejaVuSansMono.ttf",
+ "--font", "AXIS:6:$installdir/DejaVuSansMono.ttf",
+ "--font-render-mode", "normal");}
+
+ $opts = array_merge($optsa, $optsb);
+
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+
+ if( !is_array($ret) ) {
+ $err = rrd_error();
+# echo "rrd_graph() ERROR: $err\n";
+ return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+function errorgraph ($rrd, $graph, $from, $to, $width, $height)
+{
+ global $rrdtool; global $installdir;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+
+ $optsa = array(
+ "--alt-autoscale-max",
+ "-E",
+ "-l 0",
+ "--start", $from, "--end", $to,
+ "--width", $width, "--height", $height,
+ "DEF:in=$database:INERRORS:AVERAGE",
+ "DEF:out=$database:OUTERRORS:AVERAGE",
+ "CDEF:dout=out,-1,*",
+ "AREA:in#ff3300:",
+ "COMMENT:Errors Current Average Maximum\\n",
+ "LINE1.25:in#ff0000:In ",
+ "GPRINT:in:LAST:%6.2lf%spps",
+ "GPRINT:in:AVERAGE:%6.2lf%spps",
+ "GPRINT:in:MAX:%6.2lf%spps\\n",
+ "AREA:dout#ff6633:",
+ "LINE1.25:out#cc3300:Out",
+ "GPRINT:out:LAST:%6.2lf%spps",
+ "GPRINT:out:AVERAGE:%6.2lf%spps",
+ "GPRINT:out:MAX:%6.2lf%spps\\n",
+ );
+ if($width <= "300") {$optsb = array("--font", "LEGEND:7:$installdir/DejaVuSansMono.ttf",
+ "--font", "AXIS:6:$installdir/DejaVuSansMono.ttf",
+ "--font-render-mode", "normal");}
+
+ $opts = array_merge($optsa, $optsb);
+
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+ if( !is_array($ret) ) {
+ $err = rrd_error();
+ # echo "rrd_graph() ERROR: $err\n";
+ return FALSE;
+ } else {
+ return $imgfile;
+ }
+
+}
+
+function nucastgraph ($rrd, $graph, $from, $to, $width, $height)
+{
+ global $rrdtool; global $installdir;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $optsa = array( "--start", $from, "--end", $to,
+ "--width", $width, "--height", $height,
+ "--alt-autoscale-max",
+ "-E",
+ "-l 0",
+ "DEF:in=$database:INNUCASTPKTS:AVERAGE",
+ "DEF:out=$database:OUTNUCASTPKTS:AVERAGE",
+ "CDEF:dout=out,-1,*",
+ "AREA:in#aa66aa:",
+ "COMMENT:Packets Current Average Maximum\\n",
+ "LINE1.25:in#330033:In ",
+ "GPRINT:in:LAST:%6.2lf%spps",
+ "GPRINT:in:AVERAGE:%6.2lf%spps",
+ "GPRINT:in:MAX:%6.2lf%spps\\n",
+ "AREA:dout#FFDD88:",
+ "LINE1.25:dout#FF6600:Out ",
+ "GPRINT:out:LAST:%6.2lf%spps",
+ "GPRINT:out:AVERAGE:%6.2lf%spps",
+ "GPRINT:out:MAX:%6.2lf%spps\\n");
+ if($width <= "300") {$optsb = array("--font", "LEGEND:7:$installdir/DejaVuSansMono.ttf",
+ "--font", "AXIS:6:$installdir/DejaVuSansMono.ttf",
+ "--font-render-mode", "normal");}
+
+ $opts = array_merge($optsa, $optsb);
+
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+
+ if( !is_array($ret) ) {
+ $err = rrd_error();
+ echo "rrd_graph() ERROR: $err\n";
+ return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+function cpugraph ($rrd, $graph , $from, $to, $width, $height)
+{
+ global $rrdtool; global $installdir;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $optsa = array( "--start", $from, "--width", $width, "--height", $height, "--vertical-label", $vertical, "--alt-autoscale-max",
+ "-l 0",
+ "-E",
+ "--title", $title,
+ "DEF:5s=$database:LOAD5S:AVERAGE",
+ "DEF:5m=$database:LOAD5M:AVERAGE",
+ "AREA:5s#FAFDCE:5sec",
+ "LINE1.25:5s#dd8800:",
+ "GPRINT:5s:LAST:Cur\:%6.2lf",
+ "GPRINT:5s:AVERAGE:Avg\: %6.2lf",
+ "GPRINT:5s:MIN:Min\:%6.2lf",
+ "GPRINT:5s:MAX:Max\:%6.2lf\\n",
+ "LINE1.25:5m#aa2200:5min",
+ "GPRINT:5m:LAST:Cur\:%6.2lf",
+ "GPRINT:5m:AVERAGE:Avg\: %6.2lf",
+ "GPRINT:5m:MIN:Min\:%6.2lf",
+ "GPRINT:5m:MAX:Max\:%6.2lf\\n");
+
+ if($width <= "300") {$optsb = array("--font", "LEGEND:7:$installdir/DejaVuSansMono.ttf",
+ "--font", "AXIS:6:$installdir/DejaVuSansMono.ttf",
+ "--font-render-mode", "normal");}
+ $opts = array_merge($optsa, $optsb);
+
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+
+ if( !is_array($ret) ) {
+ $err = rrd_error();
+ #echo "rrd_graph() ERROR: $err\n";
+ return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+function tempgraph ($rrd, $graph, $from, $to, $width, $height, $title, $vertical)
+{
+ global $rrdtool; global $installdir;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+
+ $optsa = array( "--start", $from, "--width", $width, "--height", $height, "--vertical-label", $vertical, "--alt-autoscale-max",
+ "-E", "-l 0", "--title", $title,
+ "DEF:in=$database:TEMPIN1:AVERAGE",
+ "DEF:out=$database:TEMPOUT1:AVERAGE",
+ "LINE1.5:in#cc0000:Inlet ",
+ "GPRINT:in:LAST: Cur\:%6.2lf",
+ "GPRINT:in:AVERAGE:Avg\: %6.2lf",
+ "GPRINT:in:MIN:Min\:%6.2lf",
+ "GPRINT:in:MAX:Max\:%6.2lf\\n",
+ "LINE1.25:out#009900:Outlet ",
+ "GPRINT:out:LAST:Cur\:%6.2lf",
+ "GPRINT:out:AVERAGE:Avg\: %6.2lf",
+ "GPRINT:out:MIN:Min\:%6.2lf",
+ "GPRINT:out:MAX:Max\:%6.2lf\\n");
+
+ if($width <= "300") {$optsb = array("--font", "LEGEND:7:$installdir/DejaVuSansMono.ttf",
+ "--font", "AXIS:6:$installdir/DejaVuSansMono.ttf",
+ "--font-render-mode", "normal");}
+ $opts = array_merge($optsa, $optsb);
+
+
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+
+ if( !is_array($ret) ) {
+ $err = rrd_error();
+# echo "rrd_graph() ERROR: $err\n";
+ return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+function uptimegraph ($rrd, $graph , $from, $to, $width, $height, $title, $vertical)
+{
+ global $rrdtool; global $installdir;
+ $rrd = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $optsa = array( "--start", $from, "--width", $width, "--height", $height, "--alt-autoscale-max",
+ "-E", "-l 0",
+ "DEF:uptime=$rrd:uptime:AVERAGE",
+ "CDEF:cuptime=uptime,86400,/",
+ "AREA:cuptime#EEEEEE:Uptime",
+ "LINE1.25:cuptime#36393D:",
+ "GPRINT:cuptime:LAST:Cur\:%6.2lf",
+ "GPRINT:cuptime:AVERAGE:Avg\: %6.2lf",
+ "GPRINT:cuptime:MAX:Max\:%6.2lf\\n");
+ if($width <= "300") {$optsb = array("--font", "LEGEND:7:$installdir/DejaVuSansMono.ttf",
+ "--font", "AXIS:6:$installdir/DejaVuSansMono.ttf",
+ "--font-render-mode", "normal");}
+
+ $opts = array_merge($optsa, $optsb);
+
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+
+ if( !is_array($ret) ) {
+ $err = rrd_error();
+ # echo "rrd_graph() ERROR: $err\n";
+ return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+
+function memgraph ($rrd, $graph , $from, $to, $width, $height, $title, $vertical)
+{
+ global $rrdtool; global $installdir;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $memrrd = $database;
+ $opts = "--start $from \
+ --alt-autoscale-max \
+ --width $width --height $height \
+ -l 0 -E \
+ -b 1024 \
+ DEF:MEMTOTAL=$memrrd:MEMTOTAL:AVERAGE \
+ DEF:IOFREE=$memrrd:IOFREE:AVERAGE \
+ DEF:IOUSED=$memrrd:IOUSED:AVERAGE \
+ DEF:PROCFREE=$memrrd:PROCFREE:AVERAGE \
+ DEF:PROCUSED=$memrrd:PROCUSED:AVERAGE \
+ CDEF:FREE=IOFREE,PROCFREE,+ \
+ CDEF:USED=IOUSED,PROCUSED,+ \
+ AREA:USED#ee9900:Used \
+ AREA:FREE#FAFDCE:Free:STACK \
+ LINE1.5:MEMTOTAL#cc0000:";
+
+ if($width <= "300") {$opts .= "\
+ --font LEGEND:7:$installdir/DejaVuSansMono.ttf \
+ --font AXIS:6:$installdir/DejaVuSansMono.ttf \
+ --font-render-mode normal";}
+
+
+ `$rrdtool graph $imgfile $opts`;
+ return $imgfile;
+}
+
+function ip_graph ($rrd, $graph, $from, $to, $width, $height) {
+ global $rrdtool; global $installdir;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $optsa = array( "--start", $from, "--end", $to, "--width", $width, "--height", $height, "--alt-autoscale-max", "-E", "-l 0",
+ "DEF:ipForwDatagrams=$database:ipForwDatagrams:AVERAGE",
+ "DEF:ipInDelivers=$database:ipInDelivers:AVERAGE",
+ "DEF:ipInReceives=$database:ipInReceives:AVERAGE",
+ "DEF:ipOutRequests=$database:ipOutRequests:AVERAGE",
+ "DEF:ipInDiscards=$database:ipInDiscards:AVERAGE",
+ "DEF:ipOutDiscards=$database:ipOutDiscards:AVERAGE",
+ "DEF:ipOutNoRoutes=$database:ipInDiscards:AVERAGE",
+ "COMMENT:Packets/sec Current Average Maximum\\n",
+ "LINE1.25:ipForwDatagrams#cc0000:ForwDgrams ",
+ "GPRINT:ipForwDatagrams:LAST:%6.2lf%s",
+ "GPRINT:ipForwDatagrams:AVERAGE: %6.2lf%s",
+ "GPRINT:ipForwDatagrams:MAX: %6.2lf%s\\n",
+ "LINE1.25:ipInDelivers#00cc00:InDelivers ",
+ "GPRINT:ipInDelivers:LAST:%6.2lf%s",
+ "GPRINT:ipInDelivers:AVERAGE: %6.2lf%s",
+ "GPRINT:ipInDelivers:MAX: %6.2lf%s\\n",
+ "LINE1.25:ipInReceives#006600:InReceives ",
+ "GPRINT:ipInReceives:LAST:%6.2lf%s",
+ "GPRINT:ipInReceives:AVERAGE: %6.2lf%s",
+ "GPRINT:ipInReceives:MAX: %6.2lf%s\\n",
+ "LINE1.25:ipOutRequests#0000cc:OutRequests",
+ "GPRINT:ipOutRequests:LAST:%6.2lf%s",
+ "GPRINT:ipOutRequests:AVERAGE: %6.2lf%s",
+ "GPRINT:ipOutRequests:MAX: %6.2lf%s\\n",
+ "LINE1.25:ipInDiscards#cccc00:InDiscards ",
+ "GPRINT:ipInDiscards:LAST:%6.2lf%s",
+ "GPRINT:ipInDiscards:AVERAGE: %6.2lf%s",
+ "GPRINT:ipInDiscards:MAX: %6.2lf%s\\n",
+ "LINE1.25:ipOutDiscards#330033:OutDiscards",
+ "GPRINT:ipOutDiscards:LAST:%6.2lf%s",
+ "GPRINT:ipOutDiscards:AVERAGE: %6.2lf%s",
+ "GPRINT:ipOutDiscards:MAX: %6.2lf%s\\n",
+ "LINE1.25:ipOutNoRoutes#660000:OutNoRoutes",
+ "GPRINT:ipOutNoRoutes:LAST:%6.2lf%s",
+ "GPRINT:ipOutNoRoutes:AVERAGE: %6.2lf%s",
+ "GPRINT:ipOutNoRoutes:MAX: %6.2lf%s\\n"
+ );
+ if($width <= "300") {$optsb = array("--font", "LEGEND:7:$installdir/DejaVuSansMono.ttf", "--font", "AXIS:6:$installdir/DejaVuSansMono.ttf", "--font-render-mode", "normal");}
+ $opts = array_merge($optsa, $optsb);
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+ if( !is_array($ret) ) {
+ $err = rrd_error(); echo "rrd_graph() ERROR: $err\n"; return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+function icmp_graph ($rrd, $graph, $from, $to, $width, $height) {
+ global $rrdtool; global $installdir;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $optsa = array( "--start", $from, "--end", $to, "--width", $width, "--height", $height, "--alt-autoscale-max", "-E", "-l 0",
+ "DEF:icmpInMsgs=$database:icmpInMsgs:AVERAGE",
+ "DEF:icmpOutMsgs=$database:icmpOutMsgs:AVERAGE",
+ "DEF:icmpInErrors=$database:icmpInErrors:AVERAGE",
+ "DEF:icmpOutErrors=$database:icmpOutErrors:AVERAGE",
+ "DEF:icmpInEchos=$database:icmpInEchos:AVERAGE",
+ "DEF:icmpOutEchos=$database:icmpOutEchos:AVERAGE",
+ "DEF:icmpInEchoReps=$database:icmpInEchoReps:AVERAGE",
+ "DEF:icmpOutEchoReps=$database:icmpOutEchoReps:AVERAGE",
+ "COMMENT:Packets/sec Current Average Maximum\\n",
+ "LINE1.25:icmpInMsgs#00cc00:InMsgs ",
+ "GPRINT:icmpInMsgs:LAST:%6.2lf%s",
+ "GPRINT:icmpInMsgs:AVERAGE: %6.2lf%s",
+ "GPRINT:icmpInMsgs:MAX: %6.2lf%s\\n",
+ "LINE1.25:icmpOutMsgs#006600:OutMsgs ",
+ "GPRINT:icmpOutMsgs:LAST:%6.2lf%s",
+ "GPRINT:icmpOutMsgs:AVERAGE: %6.2lf%s",
+ "GPRINT:icmpOutMsgs:MAX: %6.2lf%s\\n",
+ "LINE1.25:icmpInErrors#cc0000:InErrors ",
+ "GPRINT:icmpInErrors:LAST:%6.2lf%s",
+ "GPRINT:icmpInErrors:AVERAGE: %6.2lf%s",
+ "GPRINT:icmpInErrors:MAX: %6.2lf%s\\n",
+ "LINE1.25:icmpOutErrors#660000:OutErrors ",
+ "GPRINT:icmpOutErrors:LAST:%6.2lf%s",
+ "GPRINT:icmpOutErrors:AVERAGE: %6.2lf%s",
+ "GPRINT:icmpOutErrors:MAX: %6.2lf%s\\n",
+ "LINE1.25:icmpInEchos#0066cc:InEchos ",
+ "GPRINT:icmpInEchos:LAST:%6.2lf%s",
+ "GPRINT:icmpInEchos:AVERAGE: %6.2lf%s",
+ "GPRINT:icmpInEchos:MAX: %6.2lf%s\\n",
+ "LINE1.25:icmpOutEchos#003399:OutEchos ",
+ "GPRINT:icmpOutEchos:LAST:%6.2lf%s",
+ "GPRINT:icmpOutEchos:AVERAGE: %6.2lf%s",
+ "GPRINT:icmpOutEchos:MAX: %6.2lf%s\\n",
+ "LINE1.25:icmpInEchoReps#cc00cc:InEchoReps ",
+ "GPRINT:icmpInEchoReps:LAST:%6.2lf%s",
+ "GPRINT:icmpInEchoReps:AVERAGE: %6.2lf%s",
+ "GPRINT:icmpInEchoReps:MAX: %6.2lf%s\\n",
+ "LINE1.25:icmpOutEchoReps#990099:OutEchoReps",
+ "GPRINT:icmpOutEchoReps:LAST:%6.2lf%s",
+ "GPRINT:icmpOutEchoReps:AVERAGE: %6.2lf%s",
+ "GPRINT:icmpOutEchoReps:MAX: %6.2lf%s\\n"
+ );
+ if($width <= "300") {$optsb = array("--font", "LEGEND:7:$installdir/DejaVuSansMono.ttf", "--font", "AXIS:6:$installdir/DejaVuSansMono.ttf", "--font-render-mode", "normal");}
+ $opts = array_merge($optsa, $optsb);
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+ if( !is_array($ret) ) {
+ $err = rrd_error(); echo "rrd_graph() ERROR: $err\n"; return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+function tcp_graph ($rrd, $graph, $from, $to, $width, $height) {
+ global $rrdtool; global $installdir;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $optsa = array( "--start", $from, "--end", $to, "--width", $width, "--height", $height, "--alt-autoscale-max", "-E", "-l 0",
+ "DEF:tcpActiveOpens=$database:tcpActiveOpens:AVERAGE",
+ "DEF:tcpPassiveOpens=$database:tcpPassiveOpens:AVERAGE",
+ "DEF:tcpAttemptFails=$database:tcpAttemptFails:AVERAGE",
+ "DEF:tcpEstabResets=$database:tcpEstabResets:AVERAGE",
+ "DEF:tcpInSegs=$database:tcpInSegs:AVERAGE",
+ "DEF:tcpOutSegs=$database:tcpOutSegs:AVERAGE",
+ "DEF:tcpRetransSegs=$database:tcpRetransSegs:AVERAGE",
+ "COMMENT:Packets/sec Current Average Maximum\\n",
+ "LINE1.25:tcpActiveOpens#00cc00:ActiveOpens ",
+ "GPRINT:tcpActiveOpens:LAST:%6.2lf%s",
+ "GPRINT:tcpActiveOpens:AVERAGE: %6.2lf%s",
+ "GPRINT:tcpActiveOpens:MAX: %6.2lf%s\\n",
+ "LINE1.25:tcpPassiveOpens#006600:PassiveOpens",
+ "GPRINT:tcpPassiveOpens:LAST:%6.2lf%s",
+ "GPRINT:tcpPassiveOpens:AVERAGE: %6.2lf%s",
+ "GPRINT:tcpPassiveOpens:MAX: %6.2lf%s\\n",
+ "LINE1.25:tcpAttemptFails#cc0000:AttemptFails",
+ "GPRINT:tcpAttemptFails:LAST:%6.2lf%s",
+ "GPRINT:tcpAttemptFails:AVERAGE: %6.2lf%s",
+ "GPRINT:tcpAttemptFails:MAX: %6.2lf%s\\n",
+ "LINE1.25:tcpEstabResets#660000:EstabResets ",
+ "GPRINT:tcpEstabResets:LAST:%6.2lf%s",
+ "GPRINT:tcpEstabResets:AVERAGE: %6.2lf%s",
+ "GPRINT:tcpEstabResets:MAX: %6.2lf%s\\n",
+ "LINE1.25:tcpInSegs#0066cc:InSegs ",
+ "GPRINT:tcpInSegs:LAST:%6.2lf%s",
+ "GPRINT:tcpInSegs:AVERAGE: %6.2lf%s",
+ "GPRINT:tcpInSegs:MAX: %6.2lf%s\\n",
+ "LINE1.25:tcpOutSegs#003399:OutSegs ",
+ "GPRINT:tcpOutSegs:LAST:%6.2lf%s",
+ "GPRINT:tcpOutSegs:AVERAGE: %6.2lf%s",
+ "GPRINT:tcpOutSegs:MAX: %6.2lf%s\\n",
+ "LINE1.25:tcpRetransSegs#cc00cc:RetransSegs ",
+ "GPRINT:tcpRetransSegs:LAST:%6.2lf%s",
+ "GPRINT:tcpRetransSegs:AVERAGE: %6.2lf%s",
+ "GPRINT:tcpRetransSegs:MAX: %6.2lf%s\\n",
+ );
+ if($width <= "300") {$optsb = array("--font", "LEGEND:7:$installdir/DejaVuSansMono.ttf", "--font", "AXIS:6:$installdir/DejaVuSansMono.ttf", "--font-render-mode", "normal");}
+ $opts = array_merge($optsa, $optsb);
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+ if( !is_array($ret) ) {
+ $err = rrd_error(); echo "rrd_graph() ERROR: $err\n"; return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+function udp_graph ($rrd, $graph, $from, $to, $width, $height) {
+ global $rrdtool; global $installdir;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $optsa = array( "--start", $from, "--end", $to, "--width", $width, "--height", $height, "--alt-autoscale-max", "-E", "-l 0",
+ "DEF:udpInDatagrams=$database:udpInDatagrams:AVERAGE",
+ "DEF:udpOutDatagrams=$database:udpOutDatagrams:AVERAGE",
+ "DEF:udpInErrors=$database:udpInErrors:AVERAGE",
+ "DEF:udpNoPorts=$database:udpNoPorts:AVERAGE",
+ "COMMENT:Packets/sec Current Average Maximum\\n",
+ "LINE1.25:udpInDatagrams#00cc00:InDatagrams ",
+ "GPRINT:udpInDatagrams:LAST:%6.2lf%s",
+ "GPRINT:udpInDatagrams:AVERAGE: %6.2lf%s",
+ "GPRINT:udpInDatagrams:MAX: %6.2lf%s\\n",
+ "LINE1.25:udpOutDatagrams#006600:OutDatagrams",
+ "GPRINT:udpOutDatagrams:LAST:%6.2lf%s",
+ "GPRINT:udpOutDatagrams:AVERAGE: %6.2lf%s",
+ "GPRINT:udpOutDatagrams:MAX: %6.2lf%s\\n",
+ "LINE1.25:udpInErrors#cc0000:InErrors ",
+ "GPRINT:udpInErrors:LAST:%6.2lf%s",
+ "GPRINT:udpInErrors:AVERAGE: %6.2lf%s",
+ "GPRINT:udpInErrors:MAX: %6.2lf%s\\n",
+ "LINE1.25:udpNoPorts#660000:NoPorts ",
+ "GPRINT:udpNoPorts:LAST:%6.2lf%s",
+ "GPRINT:udpNoPorts:AVERAGE: %6.2lf%s",
+ "GPRINT:udpNoPorts:MAX: %6.2lf%s\\n",
+ );
+ if($width <= "300") {$optsb = array("--font", "LEGEND:7:$installdir/DejaVuSansMono.ttf", "--font", "AXIS:6:$installdir/DejaVuSansMono.ttf", "--font-render-mode", "normal");}
+ $opts = array_merge($optsa, $optsb);
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+ if( !is_array($ret) ) {
+ $err = rrd_error(); echo "rrd_graph() ERROR: $err\n"; return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+
+function fixIOSFeatures($features){
+ $features = str_replace("ADVSECURITYK9", "Advanced Security Crypto", $features);
+ $features = str_replace("K91P", "Provider Crypto", $features);
+ $features = str_replace("K4P", "Provider Crypto", $features);
+ $features = str_replace("ADVIPSERVICESK9_WAN", "Adv IP Services Crypto + WAN", $features);
+ $features = str_replace("ADVIPSERVICESK9", "Adv IP Services Crypto", $features);
+ $features = str_replace("ADVIPSERVICES", "Adv IP Services", $features);
+ $features = str_replace("IK9P", "IP Plus Crypto", $features);
+ $features = str_replace("SPSERVICESK9", "SP Services Crypto", $features);
+ $features = str_replace("PK9SV", "Provider Crypto", $features);
+ $features = str_replace("IS", "IP Plus", $features);
+ $features = str_replace("IPSERVICESK9", "IP Services Crypto", $features);
+ $features = str_replace("BROADBAND", "Broadband", $features);
+ $features = str_replace("IPBASE", "IP Base", $features);
+ $features = str_replace("IPSERVICE", "IP Services", $features);
+ $features = preg_replace("/^P$/", "Service Provider", $features);
+ $features = str_replace("IK9S", "IP Plus Crypto", $features);
+ $features = str_replace("I6Q4L2", "Layer 2", $features);
+ $features = str_replace("I6K2L2Q4", "Layer 2 Crypto", $features);
+ $features = str_replace("C3H2S", "Layer 2 SI/EI", $features);
+ return $features;
+}
+
+function fixIOSHardware($hardware){
+
+ $hardware = preg_replace("/C([0-9]+)/", "Cisco \\1", $hardware);
+ $hardware = str_replace("cat4000","Catalyst 4000", $hardware);
+ $hardware = str_replace("s3223_rp","Cisco Catalyst 6500 SUP32", $hardware);
+ $hardware = str_replace("s222_rp","Cisco Catalyst 6500 SUP2", $hardware);
+ $hardware = str_replace("c6sup2_rp","Cisco Catalyst 6500 SUP2", $hardware);
+ $hardware = str_replace("s72033_rp","Cisco Catalyst 6500 SUP720 ", $hardware);
+ $hardware = str_replace("RSP","Cisco 7500", $hardware);
+ $hardware = str_replace("C3200XL", "Cisco Catalyst 3200XL", $hardware);
+ $hardware = str_replace("C3550", "Cisco Catalyst 3550", $hardware);
+ $hardware = str_replace("C2950", "Cisco Catalyst 2950", $hardware);
+
+ return $hardware;
+
+}
+
+function updateHost ($host, $community, $snmpver)
+{
+# $soft = `snmpget -O vq -$snmpver -c $community $host sysDescr.0 | grep IOS | sed s/Cisco\ IOS\ Software\,// | sed s/\"\ //g | sed s/IOS\ \(tm\)\ // | sed s/\,\ RELEASE\ SOFTWARE.*// | sed s/.*\ Software\ // | sed s/\,\ /\|\|/ | sed s/\Version\ // | sed s/,\ EARLY\ DEPLOYMENT\ RELEASE\ SOFTWARE\ .*//`;
+ $sysdescr = `snmpget -O vq -$snmpver -c $community $host sysDescr.0`;
+ $sysdecr = str_replace("\"","", $sysdescr);
+ $location = str_replace("\"","", `snmpget -O vq -v2c -c $community $host sysLocation.0`);
+ list ($features, $version) = explode('||', $soft);
+ $features = str_replace("(","", $features);
+ $features = str_replace(")","", $features);
+ $version = str_replace("\n","", $version);
+ $version = trim($version);
+ $location = trim($location);
+ list ($hardware, $features) = explode("-", $features);
+ $hardware = fixIOSHardware($hardware);
+ $features = fixIOSFeatures($features);
+ $sql = "UPDATE `devices` SET `hardware` = '$hardware', `features` = '$features', `version` = '$version', `sysdesc` = '$sysdescr', `location` = '$location' WHERE `hostname` = '$host'";
+# echo("$sql \n");
+# mysql_query($sql);
+}
+
+function getHostOS($host, $community, $snmpver) {
+ $sysDescr = trim(`snmpget -O qv -$snmpver -c $community $host sysDescr.0`);
+ if ($sysDescr == "") {$sysDescr = trim(`snmpget -O qv -$snmpver -c $community $host 1.3.6.1.2.1.7526.2.4`);}
+ echo("\nsnmpget -O qv -$snmpver -c $community $host sysDescr.0\n$sysDescr\n");
+ if (strstr($sysDescr, "IOS") !== false) { $os = "IOS"; }
+ if (strstr($sysDescr, "FreeBSD") !== false) { $os = "FreeBSD"; }
+ if (strstr($sysDescr, "DragonFly")) { $os = "DragonFly"; }
+ if (strstr($sysDescr, "NetBSD") !== false) { $os = "NetBSD"; }
+ if (strstr($sysDescr, "OpenBSD") !== false) { $os = "OpenBSD"; }
+ if (strstr($sysDescr, "Linux") !== false) { $os = "Linux"; }
+ if (strstr($sysDescr, "Windows")) { $os = "Windows"; }
+ if (strstr($sysDescr, "ProCurve")) { $os = "ProCurve"; }
+ if (strstr($sysDescr, "m0n0wall")) { $os = "m0n0wall"; }
+ if (strstr($sysDescr, "Voswall")) { $os = "Voswall"; }
+ if (strstr($sysDescr, "snom")) { $os = "Snom"; }
+ return $os;
+}
+
+
+function createHost ($host, $community, $snmpver){
+ $host = trim(strtolower($host));
+ $host_os = getHostOS($host, $community, $snmpver);
+ global $valid_os;
+ $nullhost = 1;
+ echo("$host -> $host_os ");
+ foreach($valid_os as $os) {
+ if ($os == $host_os) {
+ $nullhost = '0';
+ }
+ }
+ if($nullhost == '0') {
+ $sql = mysql_query("INSERT INTO `devices` (`hostname`, `community`, `os`, `status`) VALUES ('$host', '$community', '$host_os', '1')");
+ echo("Created host : $host\n");
+ } else {
+ echo("Not added bad host : $host\n");
+ }
+}
+
+function createInterface ($host, $if, $ifIndex, $up,$up_admin,$speed,$duplex,$mac,$name){
+ $sql = "INSERT INTO `interfaces` (`host`,`if`,`ifIndex`, `up`,`up_admin`,`speed`,`duplex`,`mac`,`name`)";
+ $sql = $sql . " VALUES ('$host', '$if','$ifIndex','$up','$up_admin','$speed','$duplex','$mac',\"$name\")";
+ mysql_query($sql);
+}
+
+function updateInterfaceStatus ($id,$ifOperStatus,$ifAdminStatus,$speed,$duplex,$mac,$ifAlias) {
+ $sql = "UPDATE `interfaces` SET `up` = '$ifOperStatus', `up_admin` = '$ifAdminStatus', `speed` = '$speed', ";
+ $sql .= "`duplex` = '$duplex', `mac` = '$mac', `name` = \"$ifAlias\" WHERE `id` = '$id'";
+ mysql_query($sql);
+ echo("$sql\n");
+}
+
+function updateInterface ($host, $if, $ifIndex, $up, $up_admin, $speed, $duplex, $mac, $name){
+ $sql = "UPDATE `interfaces` SET `up` = '$up',`up_admin` = '$up_admin',`speed` = '$speed',`duplex` = '$duplex',`mac` = '$mac',`name` = \"$name\"";
+ $sql .= " WHERE `host` = '$host' AND `if` = '$if'";
+ mysql_query($sql);
+}
+
+function isDomainResolves($domain){
+ return gethostbyname($domain) != $domain;
+}
+
+function hoststatus($id) {
+ $sql = mysql_query("SELECT `status` FROM `devices` WHERE `id` = '$id'");
+ $result = @mysql_result($sql, 0);
+ return $result;
+}
+
+function gethostbyid($id) {
+ $sql = mysql_query("SELECT `hostname` FROM `devices` WHERE `id` = '$id'");
+ $result = @mysql_result($sql, 0);
+ return $result;
+}
+
+function getifhost($id) {
+ $sql = mysql_query("SELECT `host` from `interfaces` WHERE `id` = '$id'");
+ $result = @mysql_result($sql, 0);
+ return $result;
+}
+
+function getifindexbyid($id) {
+ $sql = mysql_query("SELECT `ifIndex` FROM `interfaces` WHERE `id` = '$id'");
+ $result = @mysql_result($sql, 0);
+ return $result;
+}
+
+function getifbyid($id) {
+ $sql = mysql_query("SELECT `if` FROM `interfaces` WHERE `id` = '$id'");
+ $result = @mysql_result($sql, 0);
+ return $result;
+}
+
+function getidbyname($domain){
+ $sql = mysql_query("SELECT `id` FROM `devices` WHERE `hostname` = '$domain'");
+ $result = @mysql_result($sql, 0);
+ return $result;
+}
+
+function gethostosbyid($id) {
+ $sql = mysql_query("SELECT `os` FROM `devices` WHERE `id` = '$id'");
+ $result = @mysql_result($sql, 0);
+ return $result;
+}
+
+function match_network ($nets, $ip, $first=false) {
+ $return = false;
+ if (!is_array ($nets)) $nets = array ($nets);
+ foreach ($nets as $net) {
+ $rev = (preg_match ("/^\!/", $net)) ? true : false;
+ $net = preg_replace ("/^\!/", "", $net);
+ $ip_arr = explode('/', $net);
+ $net_long = ip2long($ip_arr[0]);
+ $x = ip2long($ip_arr[1]);
+ $mask = long2ip($x) == $ip_arr[1] ? $x : 0xffffffff << (32 - $ip_arr[1]);
+ $ip_long = ip2long($ip);
+ if ($rev) {
+ if (($ip_long & $mask) == ($net_long & $mask)) return false;
+ } else {
+ if (($ip_long & $mask) == ($net_long & $mask)) $return = true;
+ if ($first && $return) return true;
+ }
+ }
+ return $return;
+}
+
+?>
diff --git a/includes/generic.php b/includes/generic.php
new file mode 100755
index 0000000000..d03d2a226d
--- /dev/null
+++ b/includes/generic.php
@@ -0,0 +1,48 @@
+
+
+function pollDevice() {
+
+ global $device;
+ global $community;
+ $id = $device['id'];
+ $hostname = $device['hostname'];
+ $hardware = $device['hardware'];
+ $version = $device['version'];
+ $features = $device['features'];
+ $location = $device['location'];
+ $os = $device['location'];
+
+ $temprrd = "rrd/" . $hostname . "-temp.rrd";
+ $tempgraph = "public_html/graphs/" . $hostname . "-temp.png";
+ $cpurrd = "rrd/" . $hostname . "-cpu.rrd";
+ $cpugraph = "public_html/graphs/" . $hostname . "-cpu.png";
+ $memrrd = "rrd/" . $hostname . "-mem.rrd";
+ $memgraph = "public_html/graphs/" . $hostname . "-mem.png";
+ list ($cpu5m, $cpu5s) = explode("\n", `snmpget -O qv -v2c -c $community $hostname 1.3.6.1.4.1.9.2.1.58.0 1.3.6.1.4.1.9.2.1.56.0`);
+ $cpu5m = $cpu5m + 0;
+ $cpu5s = $cpu5s + 0;
+ list ($tempin1, $tempout1) = explode("\n", `snmpget -O qv -v2c -c $community $hostname .1.3.6.1.4.1.9.9.13.1.3.1.3.1 .1.3.6.1.4.1.9.9.13.1.3.1.3.2`);
+ $tempin1 = $tempin1 +0;
+ $tempout1 = $tempout1 + 0;
+ list ($memfreeio, $memfreeproc, $memusedio, $memusedproc) = explode("\n", `snmpget -O qv -v2c -c $community $hostname .1.3.6.1.4.1.9.9.48.1.1.1.6.2 .1.3.6.1.4.1.9.9.48.1.1.1.6.1 .1.3.6.1.4.1.9.9.48.1.1.1.5.2 .1.3.6.1.4.1.9.9.48.1.1.1.5.1`);
+ echo("$hostname\n");
+ $memfreeio = $memfreeio + 0;
+ $memfreeproc = $memfreeproc + 0;
+ $memusedio = $memusedio + 0;
+ $memusedproc = $memusedproc + 0;
+ $memtotal = $memfreeio + $memfreeproc + $memusedio + $memusedproc;
+ if (!is_file($cpurrd)) {
+ $rrdcreate = `rrdtool create $cpurrd --step 300 DS:LOAD5S:GAUGE:600:-1:100 DS:LOAD5M:GAUGE:600:-1:100 RRA:AVERAGE:0.5:1:1200`;
+ }
+ if (!is_file($temprrd)) {
+ $rrdcreate = `rrdtool create $temprrd --step 300 DS:TEMPIN1:GAUGE:600:-1:100 DS:TEMPOUT1:GAUGE:600:-1:100 RRA:AVERAGE:0.5:1:1200`;
+ }
+ if (!is_file($memrrd)) {
+ $rrdcreate = `rrdtool create $memrrd --step 300 DS:IOFREE:GAUGE:600:0:500000000 DS:IOUSED:GAUGE:600:-1:500000000 DS:PROCFREE:GAUGE:600:0:500000000 DS:PROCUSED:GAUGE:600:-1:500000000 DS:MEMTOTAL:GAUGE:600:-1:500000000 RRA:AVERAGE:0.5:1:1200`;
+ }
+ `rrdtool update $temprrd N:$tempin1:$tempout1`;
+ `rrdtool update $cpurrd N:$cpu5s:$cpu5m`;
+ `rrdtool update $memrrd N:$$memfreeio:$memusedio:$memfreeproc:$memusedproc:$memtotal`;
+}
+
+?>
diff --git a/includes/graphing.php b/includes/graphing.php
new file mode 100644
index 0000000000..190ae4fcc5
--- /dev/null
+++ b/includes/graphing.php
@@ -0,0 +1,43 @@
+
diff --git a/includes/ios.php b/includes/ios.php
new file mode 100755
index 0000000000..854c5d1ff0
--- /dev/null
+++ b/includes/ios.php
@@ -0,0 +1,88 @@
+
+
+function pollDeviceIOS() {
+
+ global $device;
+ global $community;
+ $id = $device['id'];
+ $hostname = $device['hostname'];
+ $hardware = $device['hardware'];
+ $version = $device['version'];
+ $features = $device['features'];
+ $location = $device['location'];
+ $os = $device['location'];
+
+ $temprrd = "rrd/" . $hostname . "-temp.rrd";
+ $tempgraph = "public_html/graphs/" . $hostname . "-temp.png";
+ $cpurrd = "rrd/" . $hostname . "-cpu.rrd";
+ $cpugraph = "public_html/graphs/" . $hostname . "-cpu.png";
+ $memrrd = "rrd/" . $hostname . "-mem.rrd";
+ $memgraph = "public_html/graphs/" . $hostname . "-mem.png";
+ list ($cpu5m, $cpu5s) = explode("\n", `snmpget -O qv -v2c -c $community $hostname 1.3.6.1.4.1.9.2.1.58.0 1.3.6.1.4.1.9.2.1.56.0`);
+ $cpu5m = $cpu5m + 0;
+ $cpu5s = $cpu5s + 0;
+ list ($tempin1, $tempout1) = explode("\n", `snmpget -O qv -v2c -c $community $hostname .1.3.6.1.4.1.9.9.13.1.3.1.3.1 .1.3.6.1.4.1.9.9.13.1.3.1.3.2`);
+ $tempin1 = $tempin1 +0;
+ $tempout1 = $tempout1 + 0;
+ $mem_get = ".1.3.6.1.4.1.9.9.48.1.1.1.6.2 .1.3.6.1.4.1.9.9.48.1.1.1.6.1 .1.3.6.1.4.1.9.9.48.1.1.1.6.3";
+ $mem_get .= ".1.3.6.1.4.1.9.9.48.1.1.1.5.2 .1.3.6.1.4.1.9.9.48.1.1.1.5.1 .1.3.6.1.4.1.9.9.48.1.1.1.5.3";
+ $mem_raw = `snmpget -O qv -v2c -c $community $hostname $mem_get`;
+ $mem_raw = str_replace("No Such Instance currently exists at this OID", "0", $mem_raw);
+ list ($memfreeio, $memfreeproc, $memfreeprocb, $memusedio, $memusedproc, $memusedprocb) = explode("\n", $mem_raw);
+ echo("$hostname\n");
+ $memfreeproc = $memfreeproc + $memfreeprocb;
+ $memusedproc = $memusedproc + $memusedprocb;
+ $memfreeio = $memfreeio + 0;
+ $memfreeproc = $memfreeproc + 0;
+ $memusedio = $memusedio + 0;
+ $memusedproc = $memusedproc + 0;
+ $memtotal = $memfreeio + $memfreeproc + $memusedio + $memusedproc;
+ if (!is_file($cpurrd)) {
+ $rrdcreate = `rrdtool create $cpurrd --step 300 \
+ DS:LOAD5S:GAUGE:600:-1:100 \
+ DS:LOAD5M:GAUGE:600:-1:100 \
+ RRA:AVERAGE:0.5:1:2000 \
+ RRA:AVERAGE:0.5:6:2000 \
+ RRA:AVERAGE:0.5:24:2000 \
+ RRA:AVERAGE:0.5:288:2000 \
+ RRA:MAX:0.5:1:2000 \
+ RRA:MAX:0.5:6:2000 \
+ RRA:MAX:0.5:24:2000 \
+ RRA:MAX:0.5:288:2000`;
+ }
+ if (!is_file($temprrd)) {
+ $rrdcreate = `rrdtool create $temprrd --step 300 \
+ DS:TEMPIN1:GAUGE:600:-25:100 \
+ DS:TEMPOUT1:GAUGE:600:-25:100 \
+ RRA:AVERAGE:0.5:1:2000 \
+ RRA:AVERAGE:0.5:6:2000 \
+ RRA:AVERAGE:0.5:24:2000 \
+ RRA:AVERAGE:0.5:288:2000 \
+ RRA:MAX:0.5:1:2000 \
+ RRA:MAX:0.5:6:2000 \
+ RRA:MAX:0.5:24:2000 \
+ RRA:MAX:0.5:288:2000`;
+ }
+ if (!is_file($memrrd)) {
+ $rrdcreate = `rrdtool create $memrrd --step 300 \
+ DS:IOFREE:GAUGE:600:0:U \
+ DS:IOUSED:GAUGE:600:-1:U \
+ DS:PROCFREE:GAUGE:600:0:U \
+ DS:PROCUSED:GAUGE:600:-1:U \
+ DS:MEMTOTAL:GAUGE:600:-1:U \
+ RRA:AVERAGE:0.5:1:2000 \
+ RRA:AVERAGE:0.5:6:2000 \
+ RRA:AVERAGE:0.5:24:2000 \
+ RRA:AVERAGE:0.5:288:2000 \
+ RRA:MAX:0.5:1:2000 \
+ RRA:MAX:0.5:6:2000 \
+ RRA:MAX:0.5:24:2000 \
+ RRA:MAX:0.5:288:2000`;
+
+ }
+ `rrdtool update $temprrd N:$tempin1:$tempout1`;
+ `rrdtool update $cpurrd N:$cpu5s:$cpu5m`;
+ `rrdtool update $memrrd N:$memfreeio:$memusedio:$memfreeproc:$memusedproc:$memtotal`;
+}
+
+?>
diff --git a/includes/procurve-graphing.php b/includes/procurve-graphing.php
new file mode 100755
index 0000000000..948faeda1c
--- /dev/null
+++ b/includes/procurve-graphing.php
@@ -0,0 +1,64 @@
+
diff --git a/includes/services/dns/check.inc b/includes/services/dns/check.inc
new file mode 100644
index 0000000000..04663fafec
--- /dev/null
+++ b/includes/services/dns/check.inc
@@ -0,0 +1,13 @@
+
diff --git a/includes/services/ftp/check.inc b/includes/services/ftp/check.inc
new file mode 100644
index 0000000000..3d0558c2d7
--- /dev/null
+++ b/includes/services/ftp/check.inc
@@ -0,0 +1,13 @@
+
diff --git a/includes/services/http/check.inc b/includes/services/http/check.inc
new file mode 100644
index 0000000000..dee474273b
--- /dev/null
+++ b/includes/services/http/check.inc
@@ -0,0 +1,13 @@
+
diff --git a/includes/services/imap/check.inc b/includes/services/imap/check.inc
new file mode 100644
index 0000000000..9837d7694c
--- /dev/null
+++ b/includes/services/imap/check.inc
@@ -0,0 +1,13 @@
+
diff --git a/includes/services/mysql/check.inc b/includes/services/mysql/check.inc
new file mode 100644
index 0000000000..44338c5a05
--- /dev/null
+++ b/includes/services/mysql/check.inc
@@ -0,0 +1,15 @@
+
diff --git a/includes/services/pop/check.inc b/includes/services/pop/check.inc
new file mode 100644
index 0000000000..285523d7a3
--- /dev/null
+++ b/includes/services/pop/check.inc
@@ -0,0 +1,13 @@
+
diff --git a/includes/services/simap/check.inc b/includes/services/simap/check.inc
new file mode 100644
index 0000000000..baf08d8037
--- /dev/null
+++ b/includes/services/simap/check.inc
@@ -0,0 +1,13 @@
+
diff --git a/includes/services/smtp/check.inc b/includes/services/smtp/check.inc
new file mode 100644
index 0000000000..b5dd39ccae
--- /dev/null
+++ b/includes/services/smtp/check.inc
@@ -0,0 +1,13 @@
+
diff --git a/includes/services/spop/check.inc b/includes/services/spop/check.inc
new file mode 100644
index 0000000000..97dabc7054
--- /dev/null
+++ b/includes/services/spop/check.inc
@@ -0,0 +1,13 @@
+
diff --git a/includes/services/ssh/check.inc b/includes/services/ssh/check.inc
new file mode 100644
index 0000000000..9bf618c0e6
--- /dev/null
+++ b/includes/services/ssh/check.inc
@@ -0,0 +1,13 @@
+
diff --git a/includes/services/telnet/check.inc b/includes/services/telnet/check.inc
new file mode 100644
index 0000000000..cddba2da96
--- /dev/null
+++ b/includes/services/telnet/check.inc
@@ -0,0 +1,16 @@
+
diff --git a/includes/snom-graphing.php b/includes/snom-graphing.php
new file mode 100644
index 0000000000..06152a2e7e
--- /dev/null
+++ b/includes/snom-graphing.php
@@ -0,0 +1,36 @@
+
diff --git a/includes/snom.php b/includes/snom.php
new file mode 100755
index 0000000000..727d1d7a29
--- /dev/null
+++ b/includes/snom.php
@@ -0,0 +1,49 @@
+
+
+include("snom-graphing.php");
+
+function pollDeviceSNOM() {
+
+ global $device;
+ global $community;
+ $snmpver = $device['snmpver'];
+ $id = $device['id'];
+ $hostname = $device['hostname'];
+ $hardware = $device['hardware'];
+ $version = $device['version'];
+ $features = $device['features'];
+ $location = $device['location'];
+
+ $snmpdata = `snmpget -Ovq -$snmpver -c $community $hostname 1.3.6.1.2.1.7526.2.1.1 1.3.6.1.2.1.7526.2.1.2 1.3.6.1.2.1.7526.2.2.1 1.3.6.1.2.1.7526.2.2.2`;
+ $snmpdatab = `snmpget -Oqv -$snmpver -c $community $hostname 1.3.6.1.2.1.7526.2.5 1.3.6.1.2.1.7526.2.6`;
+ list($rxbytes, $rxpkts, $txbytes, $txpkts) = explode("\n", $snmpdata);
+ list($calls, $registrations) = explode("\n", $snmpdatab);
+ $txbytes = 0 - $txbytes * 8;
+ $rxbytes = 0 - $rxbytes * 8;
+ echo("$rxbytes, $rxpkts, $txbytes, $txpkts, $calls, $registrations");
+
+ $rrdfile = "rrd/" . $hostname . "-data.rrd";
+ if(!is_file($rrdfile)) {
+ $woo = `rrdtool create $rrdfile \
+ DS:INOCTETS:COUNTER:600:U:100000000000 \
+ DS:OUTOCTETS:COUNTER:600:U:10000000000 \
+ DS:INPKTS:COUNTER:600:U:10000000000 \
+ DS:OUTPKTS:COUNTER:600:U:10000000000 \
+ DS:CALLS:COUNTER:600:U:10000000000 \
+ DS:REGISTRATIONS:COUNTER:600:U:10000000000 \
+ RRA:AVERAGE:0.5:1:600 \
+ RRA:AVERAGE:0.5:6:700 \
+ RRA:AVERAGE:0.5:24:775 \
+ RRA:AVERAGE:0.5:288:797 \
+ RRA:MAX:0.5:1:600 \
+ RRA:MAX:0.5:6:700 \
+ RRA:MAX:0.5:24:775 \
+ RRA:MAX:0.5:288:797`;
+ }
+
+ $rrdupdate = "N:$rxbytes:$txbytes:$rxpkts:$rxbytes:$calls:$registrations";
+ $ret = rrd_update("$rrdfile", $rrdupdate);
+
+}
+
+?>
diff --git a/includes/unix-graphing.php b/includes/unix-graphing.php
new file mode 100755
index 0000000000..555badadc6
--- /dev/null
+++ b/includes/unix-graphing.php
@@ -0,0 +1,627 @@
+
diff --git a/includes/unix.php b/includes/unix.php
new file mode 100755
index 0000000000..cfa8bb7b1e
--- /dev/null
+++ b/includes/unix.php
@@ -0,0 +1,195 @@
+
+
+include("unix-graphing.php");
+
+function pollDeviceUnix() {
+ global $device;
+ global $community;
+ global $rrdtool;
+ $id = $device['id'];
+ $hostname = $device['hostname'];
+ $hardware = $device['hardware'];
+ $version = $device['version'];
+ $features = $device['features'];
+ if($device['apache'] == "1") { $apache = "yes"; }
+ $loadrrd = "rrd/" . $hostname . "-load.rrd";
+ $loadgraph = "public_html/graphs/" . $hostname . "-load.png";
+ $cpurrd = "rrd/" . $hostname . "-cpu.rrd";
+ $cpugraph = "public_html/graphs/" . $hostname . "-cpu.png";
+ $memrrd = "rrd/" . $hostname . "-mem.rrd";
+ $memgraph = "public_html/graphs/" . $hostname . "-mem.png";
+ $sysrrd = "rrd/" . $hostname . "-sys.rrd";
+ $sysgraph = "public_html/graphs/" . $hostname . "-sys.png";
+
+ ## Check Disks
+ $dq = mysql_query("SELECT * FROM storage WHERE host_id = '$id'");
+ while ($dr = mysql_fetch_array($dq)) {
+ $hrStorageIndex = $dr['hrStorageIndex'];
+ $hrStorageAllocationUnits = $dr['hrStorageAllocationUnits'];
+ $hrStorageSize = $dr['hrStorageAllocationUnits'] * $dr['hrStorageSize'];
+ $hrStorageDescr = $dr['hrStorageDescr'];
+ $used = `snmpget -O qv -v2c -c $community $hostname hrStorageUsed.$hrStorageIndex`;
+ $used = $used * $hrStorageAllocationUnits;
+ $perc = $used / $hrStorageSize * 100;
+
+ $filedesc = str_replace("\"", "", str_replace("/", "_", $hrStorageDescr));
+ $storerrd = "rrd/" . $hostname . "-storage-" . $filedesc . ".rrd";
+ if (!is_file($storerrd)) {
+ `rrdtool create $storerrd \
+ --step 300 \
+ DS:size:GAUGE:600:0:U \
+ DS:used:GAUGE:600:0:U \
+ DS:perc:GAUGE:600:0:U \
+ RRA:AVERAGE:0.5:1:800 \
+ RRA:AVERAGE:0.5:6:800 \
+ RRA:AVERAGE:0.5:24:800 \
+ RRA:AVERAGE:0.5:288:800 \
+ RRA:MAX:0.5:1:800 \
+ RRA:MAX:0.5:6:800 \
+ RRA:MAX:0.5:24:800 \
+ RRA:MAX:0.5:288:800`;
+ }
+ rrd_update($storerrd, "N:$hrStorageSize:$used:$perc");
+ }
+
+ ## Set OIDs
+ $oid_ssCpuRawUser = ".1.3.6.1.4.1.2021.11.50.0";
+ $oid_ssCpuRawNice = ".1.3.6.1.4.1.2021.11.51.0";
+ $oid_ssCpuRawSystem = ".1.3.6.1.4.1.2021.11.52.0";
+ $oid_ssCpuRawIdle = ".1.3.6.1.4.1.2021.11.53.0";
+ $oid_hrSystemProcesses = ".1.3.6.1.2.1.25.1.6.0";
+ $oid_hrSystemNumUsers = ".1.3.6.1.2.1.25.1.5.0";
+
+ $s = `snmpget -O qv -v2c -c $community $hostname $oid_ssCpuRawUser $oid_ssCpuRawSystem $oid_ssCpuRawNice $oid_ssCpuRawIdle $oid_hrSystemProcesses $oid_hrSystemNumUsers .1.3.6.1.4.1.2021.1.101.1`;
+ list ($cpuUser, $cpuSystem, $cpuNice, $cpuIdle, $procs, $users, $cputemp) = explode("\n", $s);
+
+ ## Create CPU RRD if it doesn't already exist
+ if (!is_file($cpurrd)) {
+ `rrdtool create $cpurrd \
+ --step 300 \
+ DS:user:COUNTER:600:0:U \
+ DS:system:COUNTER:600:0:U \
+ DS:nice:COUNTER:600:0:U \
+ DS:idle:COUNTER:600:0:U \
+ RRA:AVERAGE:0.5:1:800 \
+ RRA:AVERAGE:0.5:6:800 \
+ RRA:AVERAGE:0.5:24:800 \
+ RRA:AVERAGE:0.5:288:800 \
+ RRA:MAX:0.5:1:800 \
+ RRA:MAX:0.5:6:800 \
+ RRA:MAX:0.5:24:800 \
+ RRA:MAX:0.5:288:800`;
+ }
+ rrd_update($cpurrd, "N:$cpuUser:$cpuSystem:$cpuNice:$cpuIdle");
+
+
+ ## If the device isn't monowall or pfsense, monitor all the pretty things
+ if($device[os] != "m0n0wall" && $device[os] != "Voswall" && $device[os] != "pfSense" ) {
+ if (!is_file($sysrrd)) {
+ `rrdtool create $sysrrd \
+ --step 300 \
+ DS:users:GAUGE:600:0:U \
+ DS:procs:GAUGE:600:0:U \
+ RRA:AVERAGE:0.5:1:800 \
+ RRA:AVERAGE:0.5:6:800 \
+ RRA:AVERAGE:0.5:24:800 \
+ RRA:AVERAGE:0.5:288:800 \
+ RRA:MAX:0.5:1:800 \
+ RRA:MAX:0.5:6:800 \
+ RRA:MAX:0.5:24:800 \
+ RRA:MAX:0.5:288:800`;
+ }
+
+ if (!is_file($memrrd)) {
+ `rrdtool create $memrrd \
+ --step 300 \
+ DS:totalswap:GAUGE:600:0:10000000000 \
+ DS:availswap:GAUGE:600:0:10000000000 \
+ DS:totalreal:GAUGE:600:0:10000000000 \
+ DS:availreal:GAUGE:600:0:10000000000 \
+ DS:totalfree:GAUGE:600:0:10000000000 \
+ DS:shared:GAUGE:600:0:10000000000 \
+ DS:buffered:GAUGE:600:0:10000000000 \
+ DS:cached:GAUGE:600:0:10000000000 \
+ RRA:AVERAGE:0.5:1:800 \
+ RRA:AVERAGE:0.5:6:800 \
+ RRA:AVERAGE:0.5:24:800 \
+ RRA:AVERAGE:0.5:288:800 \
+ RRA:MAX:0.5:1:800 \
+ RRA:MAX:0.5:6:800 \
+ RRA:MAX:0.5:24:800 \
+ RRA:MAX:0.5:288:800`;
+ }
+
+ if(!is_file($loadrrd)) {
+ `$rrdtool create $loadrrd \
+ --step 300 \
+ DS:1min:GAUGE:600:0:5000 \
+ DS:5min:GAUGE:600:0:5000 \
+ DS:15min:GAUGE:600:0:5000 \
+ RRA:AVERAGE:0.5:1:800 \
+ RRA:AVERAGE:0.5:6:800 \
+ RRA:AVERAGE:0.5:24:800 \
+ RRA:AVERAGE:0.5:288:800 \
+ RRA:MAX:0.5:1:800 \
+ RRA:MAX:0.5:6:800 \
+ RRA:MAX:0.5:24:800 \
+ RRA:MAX:0.5:288:800`;
+ }
+
+ $mem_get = "memTotalSwap.0 memAvailSwap.0 memTotalReal.0 memAvailReal.0 memTotalFree.0 memShared.0 memBuffer.0 memCached.0";
+ $mem_raw = `snmpget -O qv -v2c -c $community $hostname $mem_get`;
+ list($memTotalSwap, $memAvailSwap, $memTotalReal, $memAvailReal, $memTotalFree, $memShared, $memBuffer, $memCached) = explode("\n", $mem_raw);
+
+ $load_get = "laLoadInt.1 laLoadInt.2 laLoadInt.3";
+ $load_raw = `snmpget -O qv -v2c -c $community $hostname $load_get`;
+ list ($load1, $load5, $load10) = explode ("\n", $load_raw);
+
+ rrd_update($sysrrd, "N:$users:$procs");
+ rrd_update($loadrrd, "N:$load1:$load5:$load10");
+ rrd_update($memrrd, "N:$memTotalSwap:$memAvailSwap:$memTotalReal:$memAvailReal:$memTotalFree:$memShared:$memBuffer:$memCached");
+
+ if($device['temp'] = 1) {
+ $temprrd = "rrd/" . $hostname . "-temp.rrd";
+ $cputemp = str_replace("\"", "", $cputemp);
+ if (!is_file($temprrd)) {
+ $rrdcreate = `rrdtool create $temprrd --step 300 \
+ DS:cputemp:GAUGE:600:-25:125 \
+ DS:systemp:GAUGE:600:-25:125 \
+ RRA:AVERAGE:0.5:1:2000 \
+ RRA:AVERAGE:0.5:6:2000 \
+ RRA:AVERAGE:0.5:24:2000 \
+ RRA:AVERAGE:0.5:288:2000 \
+ RRA:MAX:0.5:1:2000 \
+ RRA:MAX:0.5:6:2000 \
+ RRA:MAX:0.5:24:2000 \
+ RRA:MAX:0.5:288:2000`;
+ }
+ rrd_update($temprrd, "N:$cputemp:0");
+ }
+
+
+ if($apache) {
+ $apacherrd = "rrd/" . $hostname . "-apache.rrd";
+ if(!is_file($apacherrd)) {
+ $woo= `rrdtool create $apacherrd \
+ DS:bits:COUNTER:600:U:10000000 \
+ DS:hits:COUNTER:600:U:10000000 \
+ RRA:AVERAGE:0.5:1:800 \
+ RRA:AVERAGE:0.5:6:700 \
+ RRA:AVERAGE:0.5:24:775 \
+ RRA:AVERAGE:0.5:288:797 \
+ RRA:MAX:0.5:1:800 \
+ RRA:MAX:0.5:6:700 \
+ RRA:MAX:0.5:24:775 \
+ RRA:MAX:0.5:288:797`;
+ }
+
+ list($ahits,$abits) = explode("\n", `./get-apache.sh $hostname`);
+ $abits = $abits * 8;
+
+ rrd_update($apacherrd,"N:$abits:$ahits");
+ }
+} // End Monowall Test
+
+}
diff --git a/includes/windows.php b/includes/windows.php
new file mode 100755
index 0000000000..df5d6eb0cb
--- /dev/null
+++ b/includes/windows.php
@@ -0,0 +1,363 @@
+
+
+function pollDeviceWin() {
+
+ global $device;
+ global $community;
+ global $rrdtool;
+ $id = $device['id'];
+ $hostname = $device['hostname'];
+ $hardware = $device['hardware'];
+ $version = $device['version'];
+ $features = $device['features'];
+
+ $loadrrd = "rrd/" . $hostname . "-load.rrd";
+ $cpurrd = "rrd/" . $hostname . "-cpu.rrd";
+ $memrrd = "rrd/" . $hostname . "-mem.rrd";
+ $sysrrd = "rrd/" . $hostname . "-sys.rrd";
+
+ $oid_ssCpuRawUser = ".1.3.6.1.4.1.2021.11.50.0";
+ $oid_ssCpuRawSystem = ".1.3.6.1.4.1.2021.11.51.0";
+ $oid_ssCpuRawNice = ".1.3.6.1.4.1.2021.11.52.0";
+ $oid_ssCpuRawIdle = ".1.3.6.1.4.1.2021.11.53.0";
+ $oid_hrSystemProcesses = ".1.3.6.1.2.1.25.1.6.0";
+ $oid_hrSystemNumUsers = ".1.3.6.1.2.1.25.1.5.0";
+
+ $s = `snmpget -O qv -v2c -c $community $hostname $oid_ssCpuRawUser $oid_ssCpuRawSystem $oid_ssCpuRawNice $oid_ssCpuRawIdle $oid_hrSystemProcesses $oid_hrSystemNumUsers`;
+ list ($cpuUser, $cpuSystem, $cpuNice, $cpuIdle, $procs, $users) = explode("\n", $s);
+
+ if (!is_file($cpurrd)) {
+ `rrdtool create $cpurrd \
+ --step 300 \
+ DS:user:COUNTER:600:0:U \
+ DS:system:COUNTER:600:0:U \
+ DS:nice:COUNTER:600:0:U \
+ DS:idle:COUNTER:600:0:U \
+ RRA:AVERAGE:0.5:1:800 \
+ RRA:AVERAGE:0.5:6:800 \
+ RRA:AVERAGE:0.5:24:800 \
+ RRA:AVERAGE:0.5:288:800 \
+ RRA:MAX:0.5:1:800 \
+ RRA:MAX:0.5:6:800 \
+ RRA:MAX:0.5:24:800 \
+ RRA:MAX:0.5:288:800`;
+ }
+
+ if (!is_file($sysrrd)) {
+ `rrdtool create $sysrrd \
+ --step 300 \
+ DS:users:GAUGE:600:0:U \
+ DS:procs:GAUGE:600:0:U \
+ RRA:AVERAGE:0.5:1:800 \
+ RRA:AVERAGE:0.5:6:800 \
+ RRA:AVERAGE:0.5:24:800 \
+ RRA:AVERAGE:0.5:288:800 \
+ RRA:MAX:0.5:1:800 \
+ RRA:MAX:0.5:6:800 \
+ RRA:MAX:0.5:24:800 \
+ RRA:MAX:0.5:288:800`;
+ }
+
+ if (!is_file($memrrd)) {
+ `rrdtool create $memrrd \
+ --step 300 \
+ DS:totalswap:GAUGE:600:0:10000000000 \
+ DS:availswap:GAUGE:600:0:10000000000 \
+ DS:totalreal:GAUGE:600:0:10000000000 \
+ DS:availreal:GAUGE:600:0:10000000000 \
+ DS:totalfree:GAUGE:600:0:10000000000 \
+ DS:shared:GAUGE:600:0:10000000000 \
+ DS:buffered:GAUGE:600:0:10000000000 \
+ DS:cached:GAUGE:600:0:10000000000 \
+ RRA:AVERAGE:0.5:1:800 \
+ RRA:AVERAGE:0.5:6:800 \
+ RRA:AVERAGE:0.5:24:800 \
+ RRA:AVERAGE:0.5:288:800 \
+ RRA:MAX:0.5:1:800 \
+ RRA:MAX:0.5:6:800 \
+ RRA:MAX:0.5:24:800 \
+ RRA:MAX:0.5:288:800`;
+ }
+
+ if(!is_file($loadrrd)) {
+ `$rrdtool create $loadrrd \
+ --step 300 \
+ DS:1min:GAUGE:600:0:5000 \
+ DS:5min:GAUGE:600:0:5000 \
+ DS:15min:GAUGE:600:0:5000 \
+ RRA:AVERAGE:0.5:1:800 \
+ RRA:AVERAGE:0.5:6:800 \
+ RRA:AVERAGE:0.5:24:800 \
+ RRA:AVERAGE:0.5:288:800 \
+ RRA:MAX:0.5:1:800 \
+ RRA:MAX:0.5:6:800 \
+ RRA:MAX:0.5:24:800 \
+ RRA:MAX:0.5:288:800`;
+ }
+
+ $mem_get = "memTotalSwap.0 memAvailSwap.0 memTotalReal.0 memAvailReal.0 memTotalFree.0 memShared.0 memBuffer.0 memCached.0";
+ $mem_raw = `snmpget -O qv -v2c -c $community $hostname $mem_get`;
+ list($memTotalSwap, $memAvailSwap, $memTotalReal, $memAvailReal, $memTotalFree, $memShared, $memBuffer, $memCached) = explode("\n", $mem_raw);
+
+ $load_get = "laLoadInt.1 laLoadInt.2 laLoadInt.3";
+ $load_raw = `snmpget -O qv -v2c -c $community $hostname $load_get`;
+ list ($load1, $load5, $load10) = explode ("\n", $load_raw);
+
+ rrd_update($sysrrd, "N:$users:$procs");
+ rrd_update($loadrrd, "N:$load1:$load5:$load10");
+ rrd_update($memrrd, "N:$memTotalSwap:$memAvailSwap:$memTotalReal:$memAvailReal:$memTotalFree:$memShared:$memBuffer:$memCached");
+ rrd_update($cpurrd, "N:$cpuUser:$cpuSystem:$cpuNice:$cpuIdle");
+}
+
+function memgraphWin ($rrd, $graph, $from="-2d")
+{
+ global $rrdtool;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $opts = array (
+ "--start",
+ $from,
+ "-v MB",
+ "-b 1000",
+ "--rigid",
+ "--title", "Memory Usage",
+ "--alt-autoscale-max",
+ "-l 0",
+ "--width", "335", "--height", "100",
+ "DEF:totalswap=$database:totalswap:AVERAGE",
+ "DEF:availswap=$database:availswap:AVERAGE",
+ "DEF:totalreal=$database:totalreal:AVERAGE",
+ "DEF:availreal=$database:availreal:AVERAGE",
+ "DEF:totalfree=$database:totalfree:AVERAGE",
+ "DEF:shared=$database:shared:AVERAGE",
+ "DEF:buffered=$database:buffered:AVERAGE",
+ "DEF:cached=$database:cached:AVERAGE",
+ "CDEF:usedreal=totalreal,availreal,-",
+ "CDEF:usedswap=totalswap,availswap,-",
+ "CDEF:cdeftot=availreal,shared,buffered,usedreal,cached,usedswap,+,+,+,+,+",
+ "AREA:usedreal#ee8000:used",
+ "GPRINT:usedreal:LAST: Cur\:%8.2lf %s",
+ "GPRINT:usedreal:AVERAGE: Avg\:%8.2lf %s",
+ "GPRINT:usedreal:MAX: Max\:%8.2lf %s\\n",
+ "STACK:shared#ec9900:shared",
+ "GPRINT:shared:LAST: Cur\:%8.2lf %s",
+ "GPRINT:shared:AVERAGE: Avg\:%8.2lf %s",
+ "GPRINT:shared:MAX: Max\:%8.2lf %s\\n",
+ "STACK:availreal#eacc00:free",
+ "GPRINT:availreal:LAST: Cur\:%8.2lf %s",
+ "GPRINT:availreal:AVERAGE: Avg\:%8.2lf %s",
+ "GPRINT:availreal:MAX: Max\:%8.2lf %s\\n",
+ "STACK:buffered#cc0000:buffers",
+ "GPRINT:buffered:LAST:Cur\:%8.2lf %s",
+ "GPRINT:buffered:AVERAGE: Avg\:%8.2lf %s",
+ "GPRINT:buffered:MAX: Max\:%8.2lf %s\\n",
+ "STACK:cached#9fa4ee:cached",
+ "GPRINT:cached:LAST: Cur\:%8.2lf %s",
+ "GPRINT:cached:AVERAGE: Avg\:%8.2lf %s",
+ "GPRINT:cached:MAX: Max\:%8.2lf %s\\n",
+ "STACK:usedswap#afeced:swap",
+ "GPRINT:usedswap:LAST: Cur\:%8.2lf %s",
+ "GPRINT:usedswap:AVERAGE: Avg\:%8.2lf %s",
+ "GPRINT:usedswap:MAX: Max\:%8.2lf %s",
+ "LINE1:totalreal#050505:total");
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+ if( !is_array($ret) ) {
+ $err = rrd_error();
+ echo "rrd_graph() ERROR: $err\n";
+ return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+function loadgraphWin ($rrd, $graph, $from="-2d") {
+ global $rrdtool;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $opts = array(
+ "--title", "Load Averages",
+ "--start",
+ $from,
+ "-v Load",
+ "--rigid",
+ "--alt-autoscale-max",
+ "-l 0",
+ "--width", "335", "--height", "100",
+ "DEF:1min=$database:1min:AVERAGE",
+ "DEF:5min=$database:5min:AVERAGE",
+ "DEF:15min=$database:15min:AVERAGE",
+ "CDEF:a=1min,100,/",
+ "CDEF:b=5min,100,/",
+ "CDEF:c=15min,100,/",
+ "CDEF:cdefd=a,b,c,+,+",
+ "AREA:a#eacc00:1 Minute:",
+ "LINE1:a#c5aa00:",
+ "GPRINT:a:LAST: Cur\:%8.2lf %s",
+ "GPRINT:a:AVERAGE: Ave\:%8.2lf %s",
+ "GPRINT:a:MAX: Max\:%8.2lf %s\\n",
+ "LINE1.5:b#ea8f00:5 Minute:",
+ "GPRINT:b:LAST: Cur\:%8.2lf %s",
+ "GPRINT:b:AVERAGE: Ave\:%8.2lf %s",
+ "GPRINT:b:MAX: Max\:%8.2lf %s\\n",
+ "LINE1.5:c#cc0000:15 Minute",
+ "GPRINT:c:LAST:Cur\:%8.2lf %s",
+ "GPRINT:c:AVERAGE: Ave\:%8.2lf %s",
+ "GPRINT:c:MAX: Max\:%8.2lf %s\\n");
+
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+ if( !is_array($ret) ) {
+ $err = rrd_error();
+ echo "rrd_graph() ERROR: $err\n";
+ return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+function usersgraphWin ($rrd, $graph, $from="-2d") {
+ global $rrdtool;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $opts = array(
+ "--title", "Logged on Users",
+ "--vertical-label", "Users",
+ "-l 0",
+ "--width", "335", "--height", "100",
+ "--start",
+ $from,
+ "DEF:users=$database:users:AVERAGE",
+ "AREA:users#eacc00:users",
+ "LINE1.5:users#cc0000:",
+ "GPRINT:users:LAST: Cur\:%3.0lf %s",
+ "GPRINT:users:AVERAGE: Avg\:%3.0lf %s",
+ "GPRINT:users:MIN: Min\:%3.0lf %s",
+ "GPRINT:users:MAX: Max\:%3.0lf %s\\n");
+
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+ if( !is_array($ret) ) {
+ $err = rrd_error();
+ echo "rrd_graph() ERROR: $err\n";
+ return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+function procsgraphWin ($rrd, $graph, $from="-2d") {
+ global $rrdtool;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $opts = array(
+ "-v # Processes",
+ "--title", "Running Processes",
+ "--vertical-label", "procs",
+ "-l 0",
+ "--width", "335", "--height", "100",
+ "--start",
+ $from,
+ "DEF:procs=$database:procs:AVERAGE",
+ "AREA:procs#eacc00:Processes",
+ "LINE1.5:procs#cc0000:",
+ "GPRINT:procs:LAST: Cur\:%3.0lf %s",
+ "GPRINT:procs:AVERAGE: Avg\:%3.0lf %s",
+ "GPRINT:procs:MIN: Min\:%3.0lf %s",
+ "GPRINT:procs:MAX: Max\:%3.0lf %s\\n");
+
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+ if( !is_array($ret) ) {
+ $err = rrd_error();
+ echo "rrd_graph() ERROR: $err\n";
+ return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+function cpugraphWin ($rrd, $graph, $from="-2d") {
+ global $rrdtool;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $opts = array(
+ "-v CPU Utilization",
+ "--title", "Processor Usage",
+ "-u 100",
+ "--rigid",
+ "--vertical-label", "Load (%)",
+ "-l 0",
+ "--width", "335", "--height", "100",
+ "--start",
+ $from,
+ "DEF:user=$database:user:AVERAGE",
+ "DEF:nice=$database:nice:AVERAGE",
+ "DEF:system=$database:system:AVERAGE",
+ "DEF:idle=$database:idle:AVERAGE",
+ "CDEF:total=user,nice,system,idle,+,+,+",
+ "CDEF:user_perc=user,total,/,100,*",
+ "CDEF:nice_perc=nice,total,/,100,*",
+ "CDEF:system_perc=system,total,/,100,*",
+ "CDEF:idle_perc=idle,total,/,100,*",
+ "AREA:user_perc#eacc00:user",
+ "GPRINT:user_perc:LAST: Cur\:%3.0lf%%",
+ "GPRINT:user_perc:AVERAGE: Avg\:%3.0lf%%",
+ "GPRINT:user_perc:MAX: Max\:%3.0lf%%\\n",
+ "AREA:nice_perc#ea8f00:system:STACK",
+ "GPRINT:nice_perc:LAST:Cur\:%3.0lf%%",
+ "GPRINT:nice_perc:AVERAGE: Avg\:%3.0lf%%",
+ "GPRINT:nice_perc:MAX: Max\:%3.0lf%%\\n",
+ "AREA:system_perc#ff3932:nice:STACK",
+ "GPRINT:system_perc:LAST: Cur\:%3.0lf%%",
+ "GPRINT:system_perc:AVERAGE: Avg\:%3.0lf%%",
+ "GPRINT:system_perc:MAX: Max\:%3.0lf%%\\n",
+ "AREA:idle_perc#fafdce:idle:STACK",
+ "GPRINT:idle_perc:LAST: Cur\:%3.0lf%%",
+ "GPRINT:idle_perc:AVERAGE: Avg\:%3.0lf%%",
+ "GPRINT:idle_perc:MAX: Max\:%3.0lf%%\\n");
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+ if( !is_array($ret) ) {
+ $err = rrd_error();
+ return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+function storagegraphWin ($rrd, $graph, $from="-2d", $descr)
+{
+ global $rrdtool;
+ $database = "rrd/" . $rrd;
+ $imgfile = "graphs/" . "$graph";
+ $opts = array (
+ "--start",
+ $from,
+ "-v MB",
+ "-b 1024",
+ "--rigid",
+ "--title", $descr,
+ "--alt-autoscale-max",
+ "-l 0",
+ "--width", "335", "--height", "100",
+ "DEF:size=$database:size:AVERAGE",
+ "DEF:used=$database:used:AVERAGE",
+ "AREA:size#80ee80:Total",
+ "GPRINT:size:LAST:Cur\:%8.2lf %s",
+ "GPRINT:size:AVERAGE: Avg\:%8.2lf %s",
+ "GPRINT:size:MAX: Max\:%8.2lf %s\\n",
+ "AREA:used#ec9900:Used",
+ "GPRINT:used:LAST: Cur\:%8.2lf %s",
+ "GPRINT:used:AVERAGE: Avg\:%8.2lf %s",
+ "GPRINT:used:MAX: Max\:%8.2lf %s\\n",
+ "LINE1:size#000000:");
+ $ret = rrd_graph("$imgfile", $opts, count($opts));
+ if( !is_array($ret) ) {
+ $err = rrd_error();
+ echo "rrd_graph() ERROR: $err\n";
+ return FALSE;
+ } else {
+ return $imgfile;
+ }
+}
+
+
+
+
+?>
diff --git a/interface-ips.php b/interface-ips.php
new file mode 100755
index 0000000000..324acd5b9c
--- /dev/null
+++ b/interface-ips.php
@@ -0,0 +1,39 @@
+#!/usr/bin/php
+
diff --git a/interface-ips.sh b/interface-ips.sh
new file mode 100755
index 0000000000..5d369ec0e0
--- /dev/null
+++ b/interface-ips.sh
@@ -0,0 +1,11 @@
+./interface-ips.php 1 &
+./interface-ips.php 2 &
+./interface-ips.php 3 &
+./interface-ips.php 4 &
+./interface-ips.php 5 &
+./interface-ips.php 6 &
+./interface-ips.php 7 &
+./interface-ips.php 8 &
+./interface-ips.php 9 &
+./interface-ips.php 0 &
+
diff --git a/ips.php b/ips.php
new file mode 100755
index 0000000000..0e467ef584
--- /dev/null
+++ b/ips.php
@@ -0,0 +1,45 @@
+#!/usr/bin/php
+
diff --git a/ips.sh b/ips.sh
new file mode 100755
index 0000000000..6fbbe834ee
--- /dev/null
+++ b/ips.sh
@@ -0,0 +1,11 @@
+./ips.php 1 &
+./ips.php 2 &
+./ips.php 3 &
+./ips.php 4 &
+./ips.php 5 &
+./ips.php 6 &
+./ips.php 7 &
+./ips.php 8 &
+./ips.php 9 &
+./ips.php 0 &
+
diff --git a/map.php b/map.php
new file mode 100755
index 0000000000..209402f8e1
--- /dev/null
+++ b/map.php
@@ -0,0 +1,91 @@
+#!/usr/bin/php
+
+
+include("config.php");
+include("includes/functions.php");
+
+echo("digraph G { sep=0.5; size=\"50,50\"; pack=15; bgcolor=transparent;
+ node [ fontname=\"times roman\" fontsize=18 fontstyle=bold ]; edge [ labelfontsize=12 labelfontname=\"times roman\" ];
+ graph [bgcolor=transparent]; ");
+
+$x = 1;
+
+$dev_sql = "SELECT * FROM links AS L, interfaces AS I, interfaces AS X, devices as D
+ WHERE I.host = D.id AND L.src_if = I.id GROUP BY D.hostname ORDER BY hostname DESC";
+$dev_result = mysql_query($dev_sql);
+while($dev_data = mysql_fetch_array($dev_result)) {
+ $host = $dev_data['hostname'];
+ unset($hostinfo);
+ if(strpos($host, "cust." . $mydomain)) { $hostinfo = "shape=egg style=filled fillcolor=pink"; }
+ elseif(strpos($host, $mydomain)) {
+ if(strpos($host, "-sw")) { $hostinfo = "shape=rectangle style=filled fillcolor=skyblue"; }
+ if(strpos($host, "-gw")) { $hostinfo = "shape=rectangle style=filled fillcolor=yellow"; }
+ } else { $hostinfo = "style=filled shape=rectangle fillcolor=lightgray"; }
+
+ $host = $dev_data[hostname];
+ $host = str_replace("." . $mydomain,"", $host);
+ echo("\"$host\" [$hostinfo]
+");
+
+}
+
+$linkdone = array();
+
+$links_sql = "SELECT *, X.if AS sif, I.if AS dif FROM links AS L, interfaces AS I, interfaces AS X, devices as D where I.host = D.id AND L.src_if = I.id AND X.id = L.dst_if ORDER BY D.hostname";
+$links_result = mysql_query($links_sql);
+while($link_data = mysql_fetch_array($links_result)) {
+
+ $src_if = $link_data['src_if'];
+ $dst_if = $link_data['dst_if'];
+
+ $sq = mysql_fetch_row(mysql_query("SELECT `hostname`,`ifSpeed` FROM interfaces AS I, devices as D where I.host = D.id and I.id = '$src_if'"));
+ $dq = mysql_fetch_row(mysql_query("SELECT `hostname`,`ifSpeed` FROM interfaces AS I, devices as D where I.host = D.id and I.id = '$dst_if'"));
+
+ $src = $sq[0];
+ $dst = $dq[0];
+
+ $src_speed = $sq[1];
+ $dst_speed = $dq[1];
+
+ $src = str_replace("." . $mydomain, "", $src);
+ $dst = str_replace("." . $mydomain, "", $dst);
+
+ $info = "";
+
+# if($src_speed == "10 Gbps") {
+# $info .= "color=red weight=5";
+# } elseif ($src_speed == "1.0 Gbps") {
+# $info .= "color=blue weight=10";
+# } elseif ($src_speed == "100 Gbps") {
+# $info .= "color=green weight=1";
+# } elseif ($src_speed == "10 mbps") {
+# $info .= "";
+# }
+
+ unset($die);
+
+ $i = 0;
+ while ($i < count($linkdone)) {
+ $thislink = "$dst $link_data[dif] $src $link_data[sif]";
+ if ($linkdone[$i] == $thislink) { $die = "yes"; }
+ $i++;
+ }
+
+ $sif = makeshortif($link_data[sif]);
+ $dif = makeshortif($link_data[dif]);
+
+# $sif = $link_data[sif];
+# $dif = $link_data[dif];
+
+
+ if(!$die){
+# echo("\"$src\" -> \"$dst\" [taillabel=\"$dif\" headlabel=\"$sif\" arrowhead=none arrowtail=none $info];\n");
+ echo("\"$src\" -> \"$dst\" [ arrowhead=none arrowtail=none $info];\n");
+ $linkdone[] = "$src $link_data[sif] $dst $link_data[dif]";
+ $x++;
+ }
+}
+
+echo("}");
+
+?>
diff --git a/mysql-schema.sql b/mysql-schema.sql
new file mode 100644
index 0000000000..786d69c46b
--- /dev/null
+++ b/mysql-schema.sql
@@ -0,0 +1,348 @@
+-- MySQL dump 10.9
+--
+-- Host: localhost Database: observer-dev
+-- ------------------------------------------------------
+-- Server version 4.1.15-Debian_1ubuntu5-log
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `adjacencies`
+--
+
+DROP TABLE IF EXISTS `adjacencies`;
+CREATE TABLE `adjacencies` (
+ `adj_id` int(11) NOT NULL auto_increment,
+ `network_id` int(11) NOT NULL default '0',
+ `interface_id` int(11) NOT NULL default '0',
+ PRIMARY KEY (`adj_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `adjacencies`
+--
+
+
+/*!40000 ALTER TABLE `adjacencies` DISABLE KEYS */;
+LOCK TABLES `adjacencies` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `adjacencies` ENABLE KEYS */;
+
+--
+-- Table structure for table `alerts`
+--
+
+DROP TABLE IF EXISTS `alerts`;
+CREATE TABLE `alerts` (
+ `id` int(11) NOT NULL auto_increment,
+ `importance` int(11) NOT NULL default '0',
+ `device_id` int(11) NOT NULL default '0',
+ `message` text NOT NULL,
+ `time_logged` timestamp NOT NULL default CURRENT_TIMESTAMP,
+ `alerted` smallint(6) NOT NULL default '0',
+ KEY `id` (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `alerts`
+--
+
+
+/*!40000 ALTER TABLE `alerts` DISABLE KEYS */;
+LOCK TABLES `alerts` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `alerts` ENABLE KEYS */;
+
+--
+-- Table structure for table `customers`
+--
+
+DROP TABLE IF EXISTS `customers`;
+CREATE TABLE `customers` (
+ `username` char(64) NOT NULL default '',
+ `password` char(32) NOT NULL default '',
+ `string` char(64) NOT NULL default '',
+ `level` tinyint(4) NOT NULL default '0',
+ UNIQUE KEY `username` (`username`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `customers`
+--
+
+
+/*!40000 ALTER TABLE `customers` DISABLE KEYS */;
+LOCK TABLES `customers` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `customers` ENABLE KEYS */;
+
+--
+-- Table structure for table `devices`
+--
+
+DROP TABLE IF EXISTS `devices`;
+CREATE TABLE `devices` (
+ `id` int(11) NOT NULL auto_increment,
+ `hostname` varchar(64) NOT NULL default '',
+ `ip` varchar(16) NOT NULL default '',
+ `community` varchar(32) NOT NULL default 'public',
+ `snmpver` char(3) NOT NULL default 'v2c',
+ `monowall` tinyint(4) NOT NULL default '0',
+ `version` text NOT NULL,
+ `hardware` text NOT NULL,
+ `features` text NOT NULL,
+ `sysdesc` text,
+ `location` text,
+ `os` varchar(16) NOT NULL default '',
+ `status` tinyint(4) NOT NULL default '0',
+ `ignore` tinyint(4) NOT NULL default '0',
+ `uptime` int(11) NOT NULL default '0',
+ `lastchange` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ `purpose` text NOT NULL,
+ `apache` tinyint(4) NOT NULL default '0',
+ `courier` tinyint(4) NOT NULL default '0',
+ `postfix` tinyint(4) NOT NULL default '0',
+ `temp` tinyint(4) NOT NULL default '0',
+ `type` varchar(16) default NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `hostname` (`hostname`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `devices`
+--
+
+
+/*!40000 ALTER TABLE `devices` DISABLE KEYS */;
+LOCK TABLES `devices` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `devices` ENABLE KEYS */;
+
+--
+-- Table structure for table `eventlog`
+--
+
+DROP TABLE IF EXISTS `eventlog`;
+CREATE TABLE `eventlog` (
+ `id` int(11) NOT NULL default '0',
+ `host` int(11) NOT NULL default '0',
+ `interface` int(11) default NULL,
+ `datetime` datetime NOT NULL default '0000-00-00 00:00:00',
+ `message` text NOT NULL,
+ `type` int(11) NOT NULL default '0'
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `eventlog`
+--
+
+
+/*!40000 ALTER TABLE `eventlog` DISABLE KEYS */;
+LOCK TABLES `eventlog` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `eventlog` ENABLE KEYS */;
+
+--
+-- Table structure for table `interfaces`
+--
+
+DROP TABLE IF EXISTS `interfaces`;
+CREATE TABLE `interfaces` (
+ `id` int(11) NOT NULL auto_increment,
+ `host` int(11) NOT NULL default '0',
+ `if` varchar(64) NOT NULL default '',
+ `ifIndex` int(11) NOT NULL default '0',
+ `ifSpeed` text,
+ `up` varchar(12) NOT NULL default '',
+ `up_admin` varchar(12) default NULL,
+ `ifDuplex` varchar(12) default NULL,
+ `ifMtu` int(11) default NULL,
+ `ifType` text,
+ `name` text,
+ `ifPhysAddress` text,
+ `lastchange` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ PRIMARY KEY (`id`),
+ KEY `host` (`host`),
+ KEY `snmpid` (`ifIndex`),
+ KEY `if_2` (`if`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `interfaces`
+--
+
+
+/*!40000 ALTER TABLE `interfaces` DISABLE KEYS */;
+LOCK TABLES `interfaces` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `interfaces` ENABLE KEYS */;
+
+--
+-- Table structure for table `ipaddr`
+--
+
+DROP TABLE IF EXISTS `ipaddr`;
+CREATE TABLE `ipaddr` (
+ `id` int(11) NOT NULL auto_increment,
+ `addr` varchar(32) NOT NULL default '',
+ `cidr` smallint(6) NOT NULL default '0',
+ `network` varchar(64) NOT NULL default '',
+ `interface_id` int(11) NOT NULL default '0',
+ PRIMARY KEY (`id`),
+ KEY `addr` (`addr`,`cidr`,`interface_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `ipaddr`
+--
+
+
+/*!40000 ALTER TABLE `ipaddr` DISABLE KEYS */;
+LOCK TABLES `ipaddr` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `ipaddr` ENABLE KEYS */;
+
+--
+-- Table structure for table `links`
+--
+
+DROP TABLE IF EXISTS `links`;
+CREATE TABLE `links` (
+ `id` int(11) NOT NULL auto_increment,
+ `src_if` int(11) default NULL,
+ `dst_if` int(11) default NULL,
+ `active` tinyint(4) NOT NULL default '1',
+ `cdp` int(11) default NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `links`
+--
+
+
+/*!40000 ALTER TABLE `links` DISABLE KEYS */;
+LOCK TABLES `links` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `links` ENABLE KEYS */;
+
+--
+-- Table structure for table `networks`
+--
+
+DROP TABLE IF EXISTS `networks`;
+CREATE TABLE `networks` (
+ `id` int(11) NOT NULL auto_increment,
+ `cidr` varchar(32) NOT NULL default '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `cidr_2` (`cidr`),
+ FULLTEXT KEY `cidr` (`cidr`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `networks`
+--
+
+
+/*!40000 ALTER TABLE `networks` DISABLE KEYS */;
+LOCK TABLES `networks` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `networks` ENABLE KEYS */;
+
+--
+-- Table structure for table `services`
+--
+
+DROP TABLE IF EXISTS `services`;
+CREATE TABLE `services` (
+ `service_id` int(11) NOT NULL auto_increment,
+ `service_host` int(11) NOT NULL default '0',
+ `service_ip` text,
+ `service_type` text NOT NULL,
+ `service_desc` text NOT NULL,
+ `service_param` text NOT NULL,
+ `service_port` text,
+ `service_hostname` text,
+ `service_status` tinyint(4) NOT NULL default '2',
+ `service_message` text NOT NULL,
+ `service_changed` int(11) NOT NULL default '0',
+ `service_checked` int(11) NOT NULL default '0',
+ `service_ignore` tinyint(4) NOT NULL default '0',
+ PRIMARY KEY (`service_id`),
+ KEY `service_host` (`service_host`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `services`
+--
+
+
+/*!40000 ALTER TABLE `services` DISABLE KEYS */;
+LOCK TABLES `services` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `services` ENABLE KEYS */;
+
+--
+-- Table structure for table `storage`
+--
+
+DROP TABLE IF EXISTS `storage`;
+CREATE TABLE `storage` (
+ `storage_id` int(11) NOT NULL auto_increment,
+ `host_id` int(11) NOT NULL default '0',
+ `hrStorageIndex` int(11) NOT NULL default '0',
+ `hrStorageDescr` text NOT NULL,
+ `hrStorageSize` int(11) NOT NULL default '0',
+ `hrStorageAllocationUnits` int(11) NOT NULL default '0',
+ PRIMARY KEY (`storage_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `storage`
+--
+
+
+/*!40000 ALTER TABLE `storage` DISABLE KEYS */;
+LOCK TABLES `storage` WRITE;
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `storage` ENABLE KEYS */;
+
+--
+-- Table structure for table `users`
+--
+
+DROP TABLE IF EXISTS `users`;
+CREATE TABLE `users` (
+ `username` char(30) NOT NULL default '',
+ `password` char(32) NOT NULL default '',
+ `descr` char(30) NOT NULL default '',
+ `level` tinyint(4) NOT NULL default '0',
+ UNIQUE KEY `username` (`username`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+--
+-- Dumping data for table `users`
+--
+
+
+/*!40000 ALTER TABLE `users` DISABLE KEYS */;
+LOCK TABLES `users` WRITE;
+INSERT INTO `users` VALUES ('admin','6033c66e583283ac','Default User',10);
+UNLOCK TABLES;
+/*!40000 ALTER TABLE `users` ENABLE KEYS */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
diff --git a/poll-device-netstats.php b/poll-device-netstats.php
new file mode 100755
index 0000000000..67fa7cdeb1
--- /dev/null
+++ b/poll-device-netstats.php
@@ -0,0 +1,40 @@
+
diff --git a/poll-device.php b/poll-device.php
new file mode 100755
index 0000000000..98315c28e3
--- /dev/null
+++ b/poll-device.php
@@ -0,0 +1,220 @@
+#!/usr/bin/php
+
+
+include("config.php");
+include("includes/functions.php");
+
+$device_query = mysql_query("SELECT * FROM `devices` WHERE `id` like '%$argv[1]' AND `ignore` = '0' ORDER BY `id` ASC");
+while ($device = mysql_fetch_array($device_query)) {
+ $hostname = $device['hostname'];
+ $id = $device['id'];
+ $status = $device['status'];
+ $community = $device['community'];
+ $snmpver = $device['snmpver'];
+ unset($update); unset($update_query); unset($seperator); unset($newversion); unset($newuptime); unset($newfeatures);
+ unset($newlocation); unset($newhardware);
+ $pingable = isPingable($hostname);
+ $snmpable = FALSE;
+ if($pingable) {
+ $snmpable = isSNMPable($hostname, $community, $snmpver);
+ }
+ if ($pingable !== FALSE && $snmpable !== FALSE ) {
+ $newstatus = '1';
+ $hardware = $device['hardware'];
+ $version = $device['version'];
+ $old_rebooted = $device['rebooted'];
+ $features = $device['features'];
+ $location = $device['location'];
+ $old_sysDescr = $device['sysDescr'];
+ $uptime = $device['uptime'];
+ $os = $device['os'];
+ if($os == "FreeBSD" || $os == "OpenBSD" || $os == "Linux" || $os == "Windows") { $uptimeoid = ".1.3.6.1.2.1.25.1.1.0"; } else { $uptimeoid = "1.3.6.1.2.1.1.3.0"; }
+ if($device['monowall']) { $uptimeoid = ".1.3.6.1.2.1.1.3.0"; }
+ $snmp = "$uptimeoid sysLocation.0 .1.3.6.1.2.1.47.1.1.1.1.13.1 sysDescr.0";
+ $snmpdata = `snmpget -O qv -$snmpver -c $community $hostname $snmp | grep -v "Cisco Internetwork Operating System Software"`;
+ $snmpdata = preg_replace("/^.*IOS/","", $snmpdata);
+ $snmpdata = trim($snmpdata);
+ list($sysUptime, $sysLocation, $ciscomodel, $sysDescr) = explode("\n", $snmpdata);
+ $sysUptime = str_replace("(", "", $sysUptime);
+ $sysUptime = str_replace(")", "", $sysUptime);
+ list($days, $hours, $mins, $secs) = explode(":", $sysUptime);
+ list($secs, $microsecs) = explode(".", $secs);
+ $timeticks = mktime(0, $secs, $mins, $hours, $days, 0);
+ $hours = $hours + ($days * 24);
+ $mins = $mins + ($hours * 60);
+ $secs = $secs + ($mins * 60);
+ $newuptime = $secs;
+
+ include("poll-device-netstats.php");
+
+ switch ($os) {
+ case "FreeBSD":
+ case "DragonFly":
+ case "OpenBSD":
+ case "Linux":
+ case "m0n0wall":
+ case "Voswall":
+ case "NetBSD":
+ case "pfSense":
+ if($os == "FreeBSD") {
+ $sysDescr = str_replace(" 0 ", " ", $sysDescr);
+ list(,,$newversion) = explode (" ", $sysDescr);
+ $newhardware = "i386";
+ $newfeatures = "GENERIC";
+ } elseif($os == "DragonFly") {
+ list(,,$newversion,,,$newfeatures,,$newhardware) = explode (" ", $sysDescr);
+ } elseif($os == "NetBSD") {
+ list(,,$newversion,,,$newfeatures) = explode (" ", $sysDescr);
+ $newfeatures = str_replace("(", "", $newfeatures);
+ $newfeatures = str_replace(")", "", $newfeatures);
+ list(,,$newhardware) = explode ("$newfeatures", $sysDescr);
+ } elseif($os == "OpenBSD") {
+ list(,,$newversion,$newfeatures,$newhardware) = explode (" ", $sysDescr);
+ $newfeatures = str_replace("(", "", $newfeatures);
+ $newfeatures = str_replace(")", "", $newfeatures);
+ } elseif($os == "m0n0wall" || $os == "Voswall") {
+ list(,,$newversion,$newhardware,$freebsda, $freebsdb, $arch) = split(" ", $sysDescr);
+ $newfeatures = $freebsda . " " . $freebsdb;
+ $newhardware = "$newhardware ($arch)";
+ $newhardware = str_replace("\"", "", $newhardware);
+ } elseif ($os == "Linux") {
+ list(,,$newversion) = explode (" ", $sysDescr);
+ if(strstr($sysDescr, "386")|| strstr($sysDescr, "486")||strstr($sysDescr, "586")||strstr($sysDescr, "686")) { $newhardware = "Generic x86"; }
+# list($newversion,$newfeatures,$newfeaturesb) = explode("-", $newversion);
+ $newfeatures = `snmpget -O qv -$snmpver -c $community $hostname .1.3.6.1.4.1.2021.7890.1.101.1`;
+ $newfeatures = str_replace("No Such Object available on this agent at this OID", "", $newfeatures);
+ $newfeatures = str_replace("\"", "", $newfeatures);
+ }
+ pollDeviceUnix();
+ break;
+ case "Windows":
+ if($os == "Windows") {
+ if(strstr($sysDescr, "x86")) { $newhardware = "Generic x86"; }
+ if(strstr($sysDescr, "Windows Version 5.2")) { $newversion = "2003 Server"; }
+ if(strstr($sysDescr, "Uniprocessor Free")) { $newfeatures = "Uniprocessor"; }
+ if(strstr($sysDescr, "Multiprocessor Free")) { $newfeatures = "Multiprocessor"; }
+ }
+ pollDeviceWin();
+ break;
+ case "IOS":
+ if ($os == "IOS") {
+ $newversion = str_replace("Cisco IOS Software,", "", $sysDescr);
+ $newversion = str_replace("IOS (tm) ", "", $newversion);
+ $newversion = str_replace(",RELEASE SOFTWARE", "", $newversion);
+ $newversion = str_replace(",MAINTENANCE INTERIM SOFTWARE", "", $newversion);
+ $newversion = str_replace("Version ","", $newversion);
+ $newversion = str_replace("Cisco Internetwork Operating System Software", "", $newversion);
+ $newversion = trim($newversion);
+ list($newversion) = explode("\n", $newversion);
+ $newversion = preg_replace("/^[A-Za-z0-9\ \_]*\(([A-Za-z0-9\-\_]*)\), (.+), .*/", "\\1|\\2", $newversion);
+ $newversion = str_replace("-M|", "|", $newversion);
+ $newversion = str_replace("-", "|", $newversion);
+ list($newhardware, $newfeatures, $newversion) = explode("|", $newversion);
+ $newfeatures = fixIOSFeatures($newfeatures);
+ #$newhardware = fixIOSHardware($newhardware);
+ $ciscomodel = str_replace("\"", "", $ciscomodel);
+ if(strstr($ciscomodel, "OID")){ unset($ciscomodel); }
+ echo("\n|$ciscomodel|$newhardware\n");
+ if(!strstr($ciscomodel, " ") && strlen($ciscomodel) >= '3') {
+ echo("$ciscomodel");
+ $newhardware = $ciscomodel;
+ }
+
+ }
+ pollDeviceIOS();
+ break;
+ case "ProCurve":
+ $sysDescr = str_replace(", ", ",", $sysDescr);
+ list($newhardware, $newfeatures, $newversion) = explode(",", $sysDescr);
+ list($newversion) = explode("(", $newversion);
+ if(!strstr($ciscomodel, " ")) {
+ echo("$ciscomodel");
+ $newhardware = str_replace("\"", "", $ciscomodel);
+ }
+ pollDeviceHP();
+ break;
+ case "Snom":
+ $sysDescr = `snmpget -Oqv -$snmpver -c $community $hostname 1.3.6.1.2.1.7526.2.4`;
+ $sysDescr = str_replace("-", " ", $sysDescr);
+ $sysDescr = str_replace("\"", "", $sysDescr);
+ list($newhardware, $newfeatures, $newversion) = explode(" ", $sysDescr);
+ pollDeviceSnom();
+ break;
+ default:
+ pollDevice();
+ }
+ $newlocation = str_replace("\"","", $sysLocation);
+ } else {
+ $newstatus = '0';
+ }
+
+ $uptimerrd = "rrd/" . $hostname . "-uptime.rrd";
+ if(!is_file($uptimerrd)) {
+ $woo = `rrdtool create $uptimerrd \
+ DS:uptime:GAUGE:600:0:U \
+ RRA:AVERAGE:0.5:1:600 \
+ RRA:AVERAGE:0.5:6:700 \
+ RRA:AVERAGE:0.5:24:775 \
+ RRA:AVERAGE:0.5:288:797`;
+ }
+ rrd_update($uptimerrd, "N:$newuptime");
+
+ if ( $sysDescr && $sysDescr != $old_sysDescr ) {
+ $update = "`sysDescr` = '$sysDescr'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) VALUES ('$id', NULL, NOW(), 'New sysDescr - $sysDescr')");
+ }
+ if ( $newlocation && $location != $newlocation ) {
+ $update = "`location` = '$newlocation'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) VALUES ('$id', NULL, NOW(), 'Changed location from $location to $newlocation')");
+ }
+ if ( $newversion && $version != $newversion ) {
+ $update .= $seperator . "`version` = '$newversion'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) VALUES ('$id', NULL, NOW(), 'Changed version from $version to $newversion')");
+ }
+ if ( $newfeatures && $newfeatures != $features ) {
+ $update .= $seperator . "`features` = '$newfeatures'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) VALUES ('$id', NULL, NOW(), 'Changed features from $features to $newfeatures')");
+ }
+ if ( $newhardware && $newhardware != $hardware ) {
+ $update .= $seperator . "`hardware` = '$newhardware'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) VALUES ('$id', NULL, NOW(), 'Changed hardware from $hardware to $newhardware')");
+ }
+ if ( $newuptime && $uptime != $newuptime ) {
+ $update .= $seperator . "`uptime` = '$newuptime'";
+ $seperator = ", ";
+ }
+ if ( $newuptime && $newuptime < $uptime ) {
+ $update .= $seperator . "`lastchange` = NOW()";
+ $seperator = ", ";
+ } elseif($status != $newstatus) {
+ $update .= $seperator . "`lastchange` = NOW()";
+ $seperator = ", ";
+ }
+ if( $status != $newstatus ) {
+ $update .= $seperator . "`status` = '$newstatus'";
+ $seperator = ", ";
+ if ($newstatus == '1') { $stat = "Up";
+ mysql_query("INSERT INTO alerts (importance, device_id, message) VALUES ('0', '$id', 'Device is up\n')");
+ } else {
+ $stat = "Down";
+ mysql_query("INSERT INTO alerts (importance, device_id, message) VALUES ('9', '$id', 'Device is down\n')");
+ }
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) VALUES ('$id', NULL, NOW(), 'Device status changed to $stat')");
+ }
+ if ($update) {
+ $update_query = "UPDATE `devices` SET ";
+ $update_query .= $update;
+ $update_query .= " WHERE `id` = '$id'";
+ echo("Updating $hostname\n$update_query\n\n");
+ $update_result = mysql_query($update_query);
+ } else {
+ echo("No Changes to $hostname \n\n");
+ }
+}
+
+?>
diff --git a/poll-ifstatus.php b/poll-ifstatus.php
new file mode 100755
index 0000000000..dd50f1c7c0
--- /dev/null
+++ b/poll-ifstatus.php
@@ -0,0 +1,75 @@
+#!/usr/local/bin/php
+
diff --git a/poll-ifstatus.sh b/poll-ifstatus.sh
new file mode 100755
index 0000000000..b468cfec05
--- /dev/null
+++ b/poll-ifstatus.sh
@@ -0,0 +1,14 @@
+#!/usr/local/bin/bash
+
+cd /usr/local/network
+./poll-ifstatus.php 1 &
+./poll-ifstatus.php 2 &
+./poll-ifstatus.php 3 &
+./poll-ifstatus.php 4 &
+./poll-ifstatus.php 5 &
+./poll-ifstatus.php 6 &
+./poll-ifstatus.php 7 &
+./poll-ifstatus.php 8 &
+./poll-ifstatus.php 9 &
+./poll-ifstatus.php 0 &
+
diff --git a/poll-interface.php b/poll-interface.php
new file mode 100755
index 0000000000..0d2a106add
--- /dev/null
+++ b/poll-interface.php
@@ -0,0 +1,148 @@
+#!/usr/bin/php
+
+
+include("config.php");
+include("includes/functions.php");
+
+$interface_query = mysql_query("SELECT *, I.id AS sqlid FROM `interfaces` AS I, `devices` AS D where I.host = D.id AND D.id LIKE '%" . $argv[1]. "' AND D.status = '1'");
+while ($interface = mysql_fetch_array($interface_query)) {
+
+ $hostname = $interface['hostname'];
+ $host = $interface['host'];
+ $old_if = $interface['if'];
+ $ifIndex = $interface['ifIndex'];
+ $old_alias = $interface['name'];
+ $id = $interface['sqlid'];
+ $old_up = $interface['up'];
+ $old_speed = $interface['ifSpeed'];
+ $old_duplex = $interface['ifDuplex'];
+ $old_physaddress = $interface['ifPhysAddress'];
+ $old_type = $interface['ifType'];
+ $old_mtu = $interface['ifMtu'];
+ $old_up_admin = $interface['up_admin'];
+ $community = $interface['community'];
+ $os = $interface['os'];
+ $snmp_cmd = "snmpget -O qv -v2c -c $community $hostname ifName.$ifIndex ifDescr.$ifIndex ifAdminStatus.$ifIndex ifOperStatus.$ifIndex ";
+ $snmp_cmd .= "ifAlias.$ifIndex ifSpeed.$ifIndex 1.3.6.1.2.1.10.7.2.1.$ifIndex ifType.$ifIndex ifMtu.$ifIndex ifPhysAddress.$ifIndex";
+ $snmp_output = `$snmp_cmd`;
+ $snmp_output = trim($snmp_output);
+ $snmp_output = str_replace("No Such Object available on this agent at this OID", "", $snmp_output);
+ $snmp_output = str_replace("No Such Instance currently exists at this OID", "", $snmp_output);
+
+ $ifPhysAddress = strtolower(str_replace("\"", "", $ifPhysAddress));
+ $ifPhysAddress = str_replace(" ", ":", $ifPhysAddress);
+ echo("Looking at $old_if on $hostname \n");
+ list($ifName, $ifDescr, $ifAdminStatus, $ifOperStatus, $ifAlias, $ifSpeed, $ifDuplex, $ifType, $ifMtu, $ifPhysAddress) = explode("\n", $snmp_output);
+ $ifDescr = trim(str_replace("\"", "", $ifDescr));
+ if ($ifDuplex == 3) { $ifDuplex = "half"; } elseif ($ifDuplex == 2) { $ifDuplex = "full"; } else { $ifDuplex = "unknown"; }
+ $ifDescr = strtolower($ifDescr);
+ if ($ifAlias == " ") { $ifAlias = str_replace(" ", "", $ifAlias); }
+ $ifAlias = trim(str_replace("\"", "", $ifAlias));
+ $ifAlias = trim($ifAlias);
+
+ $rrdfile = "rrd/" . $hostname . ".". $ifIndex . ".rrd";
+ if(!is_file($rrdfile)) {
+ $woo = `rrdtool create $rrdfile \
+ DS:INOCTETS:COUNTER:600:U:100000000000 \
+ DS:OUTOCTETS:COUNTER:600:U:10000000000 \
+ DS:INERRORS:COUNTER:600:U:10000000000 \
+ DS:OUTERRORS:COUNTER:600:U:10000000000 \
+ DS:INUCASTPKTS:COUNTER:600:U:10000000000 \
+ DS:OUTUCASTPKTS:COUNTER:600:U:10000000000 \
+ DS:INNUCASTPKTS:COUNTER:600:U:10000000000 \
+ DS:OUTNUCASTPKTS:COUNTER:600:U:10000000000 \
+ RRA:AVERAGE:0.5:1:600 \
+ RRA:AVERAGE:0.5:6:700 \
+ RRA:AVERAGE:0.5:24:775 \
+ RRA:AVERAGE:0.5:288:797 \
+ RRA:MAX:0.5:1:600 \
+ RRA:MAX:0.5:6:700 \
+ RRA:MAX:0.5:24:775 \
+ RRA:MAX:0.5:288:797`;
+ }
+
+ unset($update);
+ unset($update_query);
+ unset($seperator);
+
+ if ( $old_if != $ifDescr && $ifDescr != "" ) {
+ $update = "`if` = '$ifDescr'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) values ($interface[host], $interface[sqlid], NOW(), 'Name: $old_if -> $ifDescr')");
+ }
+
+ if ( $old_alias != $ifAlias ) {
+ $update .= $seperator . "`name` = \"$ifAlias\"";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) values ($interface[host], $interface[sqlid], NOW(), 'Desc: $old_alias -> $ifAlias')");
+ }
+ if ( $old_up != $ifOperStatus && $ifOperStatus != "" ) {
+ $update .= $seperator . "`up` = '$ifOperStatus'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) values ($interface[host], $interface[sqlid], NOW(), 'Interface went $ifOperStatus')");
+ }
+ if ( $old_up_admin != $ifAdminStatus && $ifAdminStatus != "" ) {
+ $update .= $seperator . "`up_admin` = '$ifAdminStatus'";
+ $seperator = ", ";
+ if($ifAdminStatus == "up") { $admin = "enabled"; } else { $admin = "disabled"; }
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) values ($interface[host], $interface[sqlid], NOW(), 'Interface $admin')");
+ }
+ if ( $old_duplex != $ifDuplex && $ifDuplex != "" ) {
+ $update .= $seperator . "`ifDuplex` = '$ifDuplex'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) values ($interface[host], $interface[sqlid], NOW(), 'Duplex changed to $ifDuplex')");
+ }
+ if ( $old_type != $ifType && $ifType != "" ) {
+ $update .= $seperator . "`ifType` = '$ifType'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) values ($interface[host], $interface[sqlid], NOW(), 'Type changed to $ifType')");
+ }
+ if ( $old_mtu != $ifMtu && $ifMtu != "" ) {
+ $update .= $seperator . "`ifMtu` = '$ifMtu'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) values ($interface[host], $interface[sqlid], NOW(), 'MTU changed to $ifMtu')");
+ }
+ if ( $old_physaddress != $ifPhysAddress && $ifPhysAddress != "" ) {
+ $update .= $seperator . "`ifPhysAddress` = '$ifPhysAddress'";
+ $seperator = ", ";
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) values ($interface[host], $interface[sqlid], NOW(), 'MAC changed to $ifPhysAddress')");
+ }
+
+ if ( $old_speed != $ifSpeed && $ifSpeed != "" ) {
+ $update .= $seperator . "`ifSpeed` = '$ifSpeed'";
+ $seperator = ", ";
+ $prev = humanspeed($old_speed);
+ $now = humanspeed($ifSpeed);
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) values ($interface[host], $interface[sqlid], NOW(), 'Speed changed from $prev -> $now')");
+ }
+
+ if ($update) {
+ $update_query = "UPDATE `interfaces` SET ";
+ $update_query .= $update;
+ $update_query .= " WHERE `id` = '$id'";
+ echo("Updating : $hostname $ifDescr\n$update_query\n\n");
+ $update_result = mysql_query($update_query);
+ } else {
+ echo("Not Updating : $hostname $ifDescr ( $old_if )\n\n");
+ }
+
+ if($ifOperStatus == "up") {
+ $snmp_data = `snmpget -O qv -v2c -c $community $hostname ifHCInOctets.$ifIndex ifHCOutOctets.$ifIndex ifInErrors.$ifIndex ifOutErrors.$ifIndex \
+ ifInUcastPkts.$ifIndex ifOutUcastPkts.$ifIndex ifInNUcastPkts.$ifIndex ifOutNUcastPkts.$ifIndex`;
+ $snmp_data = str_replace("Wrong Type (should be Counter32): ","", $snmp_data);
+ $snmp_data = str_replace("No Such Instance currently exists at this OID","", $snmp_data);
+ list($ifHCInOctets, $ifHCOutOctets, $ifInErrors, $ifOutErrors, $ifInUcastPkts, $ifOutUcastPkts, $ifInNUcastPkts, $ifOutNUcastPkts) = explode("\n", $snmp_data);
+ if($ifHCInOctets == "" || strpos($ifHCInOctets, "No") !== FALSE ) {
+ $fixit = `snmpget -O qv -v2c -c $community $hostname ifInOctets.$ifIndex ifOutOctets.$ifIndex`;
+ list ($ifHCInOctets, $ifHCOutOctets) = explode("\n", $fixit);
+ }
+ $woo = "N:$ifHCInOctets:$ifHCOutOctets:$ifInErrors:$ifOutErrors:$ifInUcastPkts:$ifOutUcastPkts:$ifInNUcastPkts:$ifOutNUcastPkts";
+ $ret = rrd_update("$rrdfile", $woo);
+ } else {
+ echo("Interface $hostname $old_if is down\n");
+ }
+}
+
+mysql_query("UPDATE interfaces set ifPhysAddress = '' WHERE ifPhysAddress = 'No Such Instance currently exists at this OID'");
+
+?>
diff --git a/poll-os.php b/poll-os.php
new file mode 100755
index 0000000000..78acabfc7d
--- /dev/null
+++ b/poll-os.php
@@ -0,0 +1,28 @@
+#!/usr/bin/php
+
+#
+# Statistics Polling Script
+#
+
+include("config.php");
+include("includes/functions.php");
+
+#
+# Poll Device Statistics
+#
+
+$device_query = mysql_query("SELECT id,hostname,os,community,snmpver FROM `devices` WHERE `id` LIKE '%" . $argv[1] . "' AND status = '1' ORDER BY id DESC");
+while ($device = mysql_fetch_array($device_query)) {
+
+ $id = $device['id'];
+ $hostname = $device['hostname'];
+ $old_os = $device['os'];
+ $community = $device['community'];
+ $host = trim(strtolower($hostname));
+ $host_os = getHostOS($host, $community, $device[snmpver]);
+ if($old_os != $host_os) {
+ $sql = mysql_query("UPDATE `devices` SET `os` = '$host_os' WHERE `id` = '$id'");
+ echo("Updated host : $host ($host_os)\n");
+ } else echo("Not Updated host : $host ($host_os)\n");
+}
+?>
diff --git a/poll-reachability.php b/poll-reachability.php
new file mode 100755
index 0000000000..ac674607c8
--- /dev/null
+++ b/poll-reachability.php
@@ -0,0 +1,53 @@
+#!/usr/bin/php
+
+#
+# Test Reachability
+#
+
+include("config.php");
+include("includes/functions.php");
+
+$device_query = mysql_query("SELECT id,hostname,status,community,snmpver FROM `devices` WHERE `id` LIKE '%" . $argv[1] . "' ORDER BY `id` DESC");
+while ($device = mysql_fetch_array($device_query)) {
+
+ $id = $device['id'];
+ $hostname = $device['hostname'];
+ $old_status = $device['status'];
+ $community = $device['community'];
+ $snmpver = $device['snmpver'];
+
+ echo("- > $hostname\n");
+
+ $status = `$fping $hostname | cut -d " " -f 3`;
+ $status = trim($status);
+
+ if($status == "alive") {
+ $pos = `snmpget -$snmpver -c $community -t 1 $hostname sysDescr.0`;
+ if($pos == '') {
+ $status='0';
+ $posb = `snmpget -$snmpver -c $community -t 1 $hostname 1.3.6.1.2.1.7526.2.4`;
+ if($posb == '') { } else { $status='1'; }
+ } else {
+ $status='1';
+ }
+ } else {
+ $status='0';
+ }
+
+ echo("$old_status => $status \n");
+
+
+ if($status != $old_status) {
+ mysql_query("UPDATE `devices` SET `status`= '$status' WHERE `id` = '$id'");
+ if ($status == '1') {
+ $stat = "Up";
+ mysql_query("INSERT INTO alerts (importance, device_id, message) VALUES ('0', '$id', 'Device is up\n')");
+ } else {
+ $stat = "Down";
+ mysql_query("INSERT INTO alerts (importance, device_id, message) VALUES ('9', '$id', 'Device is down\n')");
+ }
+ mysql_query("INSERT INTO eventlog (host, interface, datetime, message) VALUES ('$id', NULL, NOW(), 'Device status changed to $stat')");
+ echo("Status Changed!\n");
+ }
+}
+?>
diff --git a/poll-temperatures.php b/poll-temperatures.php
new file mode 100755
index 0000000000..494c6742dd
--- /dev/null
+++ b/poll-temperatures.php
@@ -0,0 +1,36 @@
+#!/usr/bin/php
+
+
+include("config.php");
+
+$query = "SELECT * FROM temperature AS T, devices AS D WHERE T.temp_host = D.id AND D.status = '1'";
+$data = mysql_query($query);
+while($entry = mysql_fetch_array($data)) {
+
+ $community = $entry[community];
+ $hostname = $entry[hostname];
+ $snmpver = $entry[snmpver];
+
+ $temp = `snmpget -O qv -$snmpver -c $community $hostname $entry[temp_oid]`;
+
+ $temprrd = "rrd/" . $entry[hostname] . "-temp" . $entry[temp_id] . ".rrd";
+ if (!is_file($temprrd)) {
+ `rrdtool create $temprrd \
+ --step 300 \
+ DS:temp:GAUGE:600:-273:1000 \
+ RRA:AVERAGE:0.5:1:1200 \
+ RRA:MIN:0.5:12:2400 \
+ RRA:MAX:0.5:12:2400 \
+ RRA:AVERAGE:0.5:12:2400`;
+ }
+
+ $temp = str_replace("\"", "", $temp);
+ echo("$temprrd, N:$temp");
+
+ `rrdtool update $temprrd N:$temp`;
+
+ mysql_query("UPDATE temperature SET temp_current = '$temp' WHERE temp_id = '$entry[temp_id]'");
+
+}
+
+?>
diff --git a/process-syslog.php b/process-syslog.php
new file mode 100755
index 0000000000..9dc4185784
--- /dev/null
+++ b/process-syslog.php
@@ -0,0 +1,60 @@
+#!/usr/bin/php
+
diff --git a/scan-snmp.php b/scan-snmp.php
new file mode 100755
index 0000000000..52c9602cf3
--- /dev/null
+++ b/scan-snmp.php
@@ -0,0 +1,21 @@
+#!/usr/bin/php
+
+
+include("config.php");
+include("includes/functions.php");
+
+$search = $argv[1] . "$";
+
+$data = trim(`cat ips-scanned.txt | grep alive | cut -d" " -f 1 | egrep $search`);
+
+foreach( explode("\n", $data) as $ip) {
+ $snmp = `snmpget -t 0.1 -v2c -c $community $ip sysName.0`;
+ if(strstr($snmp, "STRING")) {
+ $hostname = trim(str_replace("SNMPv2-MIB::sysName.0 = STRING: ","", $snmp));
+ if(mysql_result(mysql_query("SELECT COUNT(id) FROM devices WHERE hostname = '$hostname'"),0) == '0') {
+ `./add-host.php $hostname $community v2c`;
+ echo("Adding $hostname \n");
+ }
+ }
+}
+?>
diff --git a/scan-snmp.sh b/scan-snmp.sh
new file mode 100755
index 0000000000..e0cd0ec78c
--- /dev/null
+++ b/scan-snmp.sh
@@ -0,0 +1,11 @@
+./scan-snmp.php 0 &
+./scan-snmp.php 1 &
+./scan-snmp.php 2 &
+./scan-snmp.php 3 &
+./scan-snmp.php 4 &
+./scan-snmp.php 5 &
+./scan-snmp.php 6 &
+./scan-snmp.php 7 &
+./scan-snmp.php 8 &
+./scan-snmp.php 9 &
+
diff --git a/scripts/distro b/scripts/distro
new file mode 100755
index 0000000000..5596ed7e3a
--- /dev/null
+++ b/scripts/distro
@@ -0,0 +1,47 @@
+#!/bin/sh
+# Detects which OS and if it is Linux then it will detect which Linux Distribution.
+
+OS=`uname -s`
+REV=`uname -r`
+MACH=`uname -m`
+
+GetVersionFromFile()
+{
+ VERSION=`cat $1 | tr "\n" ' ' | sed s/.*VERSION.*=\ // `
+ }
+
+ if [ "${OS}" = "SunOS" ] ; then
+ OS=Solaris
+ ARCH=`uname -p`
+ OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
+ elif [ "${OS}" = "AIX" ] ; then
+ OSSTR="${OS} `oslevel` (`oslevel -r`)"
+ elif [ "${OS}" = "Linux" ] ; then
+ KERNEL=`uname -r`
+ if [ -f /etc/redhat-release ] ; then
+ DIST='RedHat'
+ PSUEDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
+ REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
+ elif [ -f /etc/SuSE-release ] ; then
+ DIST=`cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//`
+ REV=`cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //`
+ elif [ -f /etc/mandrake-release ] ; then
+ DIST='Mandrake'
+ PSUEDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
+ REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
+ elif [ -f /etc/debian_version ] ; then
+ DIST="Debian `cat /etc/debian_version`"
+ REV=""
+ fi
+ if [ -f /etc/UnitedLinux-release ] ; then
+ DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
+ fi
+ if [ -f /etc/lsb-release ] ; then
+ DIST="`cat /etc/lsb-release | grep DISTRIB_ID | cut -d "=" -f2`"
+ REV="`cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d "=" -f2`"
+ fi
+# OSSTR="${OS} ${DIST} ${REV}(${PSUEDONAME} ${KERNEL} ${MACH})"
+ OSSTR="${DIST} ${REV}"
+ fi
+ echo ${OSSTR}
+
diff --git a/test.php b/test.php
new file mode 100755
index 0000000000..e798b841bb
--- /dev/null
+++ b/test.php
@@ -0,0 +1,18 @@
+#!/usr/bin/php
+
+