diff --git a/COPYRIGHT b/COPYRIGHT new file mode 100644 index 000000000..cf4dcc2f1 --- /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 000000000..e58bd15bd Binary files /dev/null and b/DejaVuSansCondensed.ttf differ diff --git a/DejaVuSansMono.ttf b/DejaVuSansMono.ttf new file mode 100644 index 000000000..bf798a860 Binary files /dev/null and b/DejaVuSansMono.ttf differ diff --git a/INSTALL b/INSTALL new file mode 100644 index 000000000..39e87326f --- /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 000000000..8377aa61a --- /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 000000000..6dc00e668 --- /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 000000000..748089c33 --- /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 000000000..73cd98965 --- /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 000000000..a6166314a --- /dev/null +++ b/check-device.php @@ -0,0 +1,150 @@ +#!/usr/bin/php + diff --git a/check-services.php b/check-services.php new file mode 100755 index 000000000..76dd73584 --- /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 000000000..f0632d27e --- /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 000000000..990e98163 --- /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 000000000..9d3d1e5b1 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 000000000..9a4e4a3ef 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 000000000..cd9af25c8 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 000000000..26f20d852 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 000000000..80b3e2d93 --- /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 000000000..02e164e79 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 000000000..e1d131971 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 000000000..a1ed17ceb --- /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 000000000..f77478a37 --- /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 000000000..27f4bf817 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 000000000..e838da97e --- /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 000000000..f1b47bb4e 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 000000000..e59a7c1f8 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 000000000..a0520d4e6 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 000000000..aba7da457 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 000000000..91c9b333c --- /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 000000000..3f3d70234 --- /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 000000000..e838da97e --- /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 000000000..8900b8aee --- /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 000000000..e838da97e --- /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 000000000..d7afad1d5 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 000000000..d7afad1d5 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 000000000..4430d49cd 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 000000000..8f55865af --- /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 000000000..a455665d6 --- /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 000000000..b5e0198b4 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 000000000..05670a29b 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 000000000..7a15d4377 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 000000000..30b2d0cc2 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 000000000..e838da97e --- /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 000000000..e838da97e --- /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 000000000..907e3e19f 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 000000000..f8a503cea --- /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 000000000..3e82019dd 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 000000000..5bf9066c7 --- /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 000000000..8850dbee3 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 000000000..184720351 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 000000000..59ee1f0d6 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 000000000..e838da97e --- /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 000000000..73df901cb 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 000000000..f07273eac 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 000000000..8e1e98f52 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 000000000..cf3eb87e8 --- /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 000000000..66d264ad9 --- /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 000000000..e838da97e --- /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 000000000..3c24434b3 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 000000000..9d20a2576 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 000000000..e838da97e --- /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 000000000..dcdc18e3d 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 000000000..e838da97e --- /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 000000000..765e17aac 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 000000000..c334ed1df 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 000000000..976f730c2 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 000000000..d9a4d2234 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 000000000..e838da97e --- /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 000000000..4f64f99be 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 000000000..7795f2029 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 000000000..0f03c4885 --- /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 000000000..d81c47876 Binary files /dev/null and b/checkers/negate differ diff --git a/checkers/urlize b/checkers/urlize new file mode 100755 index 000000000..df17d2a52 Binary files /dev/null and b/checkers/urlize differ diff --git a/checkers/utils.pm b/checkers/utils.pm new file mode 100644 index 000000000..0556ec49b --- /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 000000000..313b61816 --- /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 000000000..8e045fa6f --- /dev/null +++ b/cleanup.php @@ -0,0 +1,78 @@ +#!/usr/bin/php + +### Clean up the database removing old IPs and links + + diff --git a/config.php.default b/config.php.default new file mode 100755 index 000000000..a45ca8250 --- /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 000000000..c21f5f152 --- /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 000000000..ff20a181c --- /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 000000000..495c7e4db --- /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 000000000..c85315b84 --- /dev/null +++ b/discover-cisco-temp.php @@ -0,0 +1,35 @@ +#!/usr/bin/php + $descr : $temp\n"); + mysql_query($query); + } + } + } +} +?> diff --git a/discover-ifs.php b/discover-ifs.php new file mode 100755 index 000000000..982174f15 --- /dev/null +++ b/discover-ifs.php @@ -0,0 +1,45 @@ +#!/usr/bin/php + diff --git a/discover-ifs.sh b/discover-ifs.sh new file mode 100755 index 000000000..89c9fe9ff --- /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 000000000..b84fbb608 --- /dev/null +++ b/discover-storage.php @@ -0,0 +1,31 @@ +#!/usr/bin/php + '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 000000000..1d887aefe --- /dev/null +++ b/discover-temperatures.php @@ -0,0 +1,34 @@ +#!/usr/bin/php + + diff --git a/generate-iplist.php b/generate-iplist.php new file mode 100755 index 000000000..461fdbb9d --- /dev/null +++ b/generate-iplist.php @@ -0,0 +1,30 @@ +#!/usr/bin/php + '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 000000000..3bec69ec4 --- /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 000000000..46ef75d58 --- /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 000000000..3bcb68984 --- /dev/null +++ b/host-add.php @@ -0,0 +1,22 @@ +#!/usr/bin/php + "); } + +?> diff --git a/host-del.php b/host-del.php new file mode 100755 index 000000000..152a7e889 --- /dev/null +++ b/host-del.php @@ -0,0 +1,20 @@ +#!/usr/bin/php + diff --git a/html/.htaccess b/html/.htaccess new file mode 100644 index 000000000..716530c27 --- /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 000000000..f8a46e9c2 --- /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 000000000..f32cdf05b --- /dev/null +++ b/html/graph.php @@ -0,0 +1,158 @@ + diff --git a/html/graphs b/html/graphs new file mode 120000 index 000000000..f37cb17ed --- /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 000000000..e464d402c 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 000000000..89c8129a4 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 000000000..6332fefea 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 000000000..9b3422c61 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 000000000..1dee9e366 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 000000000..2e945076c 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 000000000..da5c622ea 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 000000000..0a335acf6 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 000000000..647592f2e 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 000000000..fb2efb877 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 000000000..b35fa5717 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 000000000..807b862cf 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 000000000..28c2175e6 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 000000000..cd305ec83 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 000000000..af486c940 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 000000000..7b7fbd17e 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 000000000..28e41ea2b 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 000000000..5cc2b0dd3 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 000000000..b60d0c85a 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 000000000..998d65c69 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 000000000..7e91545c7 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 000000000..f8fbb3ed9 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 000000000..9f022ece8 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 000000000..b3d8ce01e 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 000000000..c30cf5989 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 000000000..efbf3c4f8 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 000000000..3585f94d6 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 000000000..030cf7c37 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 000000000..248eaf1ac 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 000000000..f04a52b3d 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 000000000..a91c78a5c 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 000000000..8a1191c38 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 000000000..1d40383d3 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 000000000..dc2e9d5f5 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 000000000..aba044bbc 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 000000000..851950db7 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 000000000..6a93cdaa7 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 000000000..acc30b853 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 000000000..3bc0bd32f 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 000000000..d22860a31 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 000000000..c28dd6381 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 000000000..7542db1d1 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 000000000..61a7b1d99 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 000000000..2c4e27937 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 000000000..745c65134 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 000000000..1b763672a 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 000000000..a128413d8 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 000000000..5dc696781 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 000000000..7502dbb33 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 000000000..2e9bc42be 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 000000000..fdc394c7c 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 000000000..0de26566d 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 000000000..d3087dfc9 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 000000000..b1a181923 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 000000000..46c75aa85 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 000000000..aa65210eb 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 000000000..258c16c63 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 000000000..a3d6c9e39 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 000000000..629f20d62 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 000000000..6972c5e59 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 000000000..1ebb19324 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 000000000..1ebebde54 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 000000000..bab7cc9bc 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 000000000..ea897cc9f 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 000000000..9c4be9be2 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 000000000..658c7117b 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 000000000..e47babd7b 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 000000000..396e4b3a2 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 000000000..4721b152a 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 000000000..97a22b72e 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 000000000..0eaa57175 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 000000000..124c9914f 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 000000000..028a54626 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 000000000..e487c3a19 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 000000000..1d72d4724 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 000000000..b0686d787 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 000000000..355436823 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 000000000..1349974f6 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 000000000..8138bbdf0 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 000000000..3978b2923 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 000000000..ed8b9a576 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 000000000..be62faaaa 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 000000000..04dd7fd3b 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 000000000..6e0015df4 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 000000000..7db01d627 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 000000000..23907bbba 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 000000000..a0ddc0028 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 000000000..b89bb3434 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 000000000..b8c64af1e 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 000000000..ebad933c8 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 000000000..afe22ba99 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 000000000..375b8bf6a 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 000000000..1be37974a 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 000000000..b0f4dd792 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 000000000..e2f084727 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 000000000..b73419ba8 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 000000000..d9a6340d7 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 000000000..6e756cc85 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 000000000..f3fbed0dc 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 000000000..cd4e1964c 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 000000000..d8e23ec93 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 000000000..dd0820e86 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 000000000..ff2ea1ab9 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 000000000..7d863f949 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 000000000..2e53c6980 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 000000000..8443c23eb 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 000000000..7851cf34c 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 000000000..fac186bfb 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 000000000..3a8c37348 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 000000000..eb06df3bb 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 000000000..18ab01eb2 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 000000000..fe0d33567 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 000000000..9ebf013a2 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 000000000..0905f933b 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 000000000..05c564912 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 000000000..2d5fb90ec 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 000000000..ced781747 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 000000000..e81d7571a 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 000000000..e5c7dc057 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 000000000..c4e8c2809 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 000000000..4e4ae99db 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 000000000..30e25abac 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 000000000..11a017cfa 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 000000000..d88e2b9ab 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 000000000..db6455d2d 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 000000000..646db36bf 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 000000000..a342eefc6 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 000000000..cdcbcb381 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 000000000..8b79e30ed 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 000000000..a340629ac 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 000000000..41ff8335b 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 000000000..1a28d8250 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 000000000..9b23c06d7 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 000000000..0ce86d2b2 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 000000000..24df0f421 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 000000000..57619706d 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 000000000..a7651ec8a 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 000000000..bd6271b24 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 000000000..209c6a786 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 000000000..bca2b491f 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 000000000..1a0e0f18f 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 000000000..bc4faa709 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 000000000..058ad261f 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 000000000..3d37f2ea4 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 000000000..fa63024e5 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 000000000..386cb302f 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 000000000..0c9f73e3f 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 000000000..52ba5036b 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 000000000..0cd803115 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 000000000..fab774a32 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 000000000..b47ce55f6 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 000000000..9ab4a8966 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 000000000..a9af8d44b 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 000000000..67817e6e5 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 000000000..6469cea7e 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 000000000..4ef151aee 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 000000000..701a60a5a 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 000000000..fd377bde3 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 000000000..ac96170ec 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 000000000..63b06b987 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 000000000..0bc4288a4 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 000000000..a2a8fe69f 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 000000000..658913852 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 000000000..17679db6b 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 000000000..69a3b10ad 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 000000000..d1d2d6e68 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 000000000..6b106b942 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 000000000..9740f76ee 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 000000000..6cff76c1d 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 000000000..8fe695f51 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 000000000..8536d1a79 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 000000000..08b5da989 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 000000000..3846d74cd 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 000000000..b5015b103 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 000000000..3c1bc95c9 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 000000000..94ce2b255 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 000000000..d2ac9f935 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 000000000..454b0b019 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 000000000..c149c2bc0 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 000000000..4f3a770f0 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 000000000..1215a51a4 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 000000000..2803b5678 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 000000000..1baf7b9fd 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 000000000..45c290008 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 000000000..ac5bce5c8 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 000000000..b94ff88e6 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 000000000..144c8353a 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 000000000..20ee0584f 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 000000000..3aec353e0 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 000000000..360217b52 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 000000000..ef4322357 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 000000000..b0254effa 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 000000000..157cb0ba9 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 000000000..7d7b3d525 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 000000000..b0dc194b0 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 000000000..762932f6b 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 000000000..13e04991c 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 000000000..9051fbc60 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 000000000..d283e846a 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 000000000..259f68687 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 000000000..df64d97e6 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 000000000..bdacea5e5 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 000000000..bf18aed48 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 000000000..01e933a61 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 000000000..f9e205046 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 000000000..b411391c4 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 000000000..bd07673b5 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 000000000..906dd0383 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 000000000..ac9eda51a 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 000000000..144eafe08 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 000000000..85020f320 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 000000000..5571a5ebc 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 000000000..5b0aa9012 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 000000000..9cf660733 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 000000000..ff23c03a8 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 000000000..f3727d22e 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 000000000..c32d25c16 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 000000000..f0dba4ac4 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 000000000..7dc8dcac2 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 000000000..fe00fa050 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 000000000..bf0822ee1 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 000000000..5ab9efd55 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 000000000..3debc12d5 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 000000000..7344174fe 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 000000000..c072f8e05 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 000000000..e2672c206 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 000000000..598b839b8 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 000000000..8bf9efe4b 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 000000000..7d3571887 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 000000000..a7c461ba9 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 000000000..a1a24d3f3 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 000000000..481cf04c1 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 000000000..ba7472585 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 000000000..fb4ebc850 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 000000000..2842cc338 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 000000000..6fe8a6f95 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 000000000..67de2c6cc 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 000000000..04f22badc 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 000000000..8ce71c475 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 000000000..30539d97e 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 000000000..47b75a456 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 000000000..47667430a 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 000000000..3262767cd 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 000000000..0ca9074d6 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 000000000..cdff5d3d4 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 000000000..18e0c0fd9 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 000000000..6e6e85212 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 000000000..809fb00e5 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 000000000..7bc9233ea 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 000000000..75e78dede 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 000000000..643fdbe8d 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 000000000..73db110df 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 000000000..39433cf78 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 000000000..b32563442 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 000000000..6df7376d0 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 000000000..8606ff0fd 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 000000000..9bc37dce3 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 000000000..db604ee3b 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 000000000..5e9b26836 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 000000000..34c72fe52 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 000000000..b2c3ed578 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 000000000..0b26144d8 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 000000000..eca543017 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 000000000..3859db214 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 000000000..024138eb3 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 000000000..adcc0046f 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 000000000..0155bf5c0 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 000000000..d87c8cbb7 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 000000000..a3e7f5200 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 000000000..dc9f4b100 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 000000000..924d817bb 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 000000000..2bd496383 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 000000000..036e04dcd 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 000000000..720793576 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 000000000..46060872c 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 000000000..1b2e6a374 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 000000000..31f7fd3ad 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 000000000..4a2f9d4e4 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 000000000..2d9ce9c4e 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 000000000..ec61099b0 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 000000000..0846555d0 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 000000000..f8c8ec683 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 000000000..1c4f57a16 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 000000000..406ec333b 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 000000000..c02944771 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 000000000..15d1584bd 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 000000000..7dd1c07fb 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 000000000..6f11fcb08 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 000000000..893bb60e5 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 000000000..e6f75d232 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 000000000..5cf76ed02 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 000000000..efecb3871 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 000000000..3d83bc7b9 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 000000000..7f17c0cb7 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 000000000..4eae583e1 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 000000000..1514d51a3 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 000000000..23f310181 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 000000000..e8ea10fcd 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 000000000..326aba440 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 000000000..6cdf38c36 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 000000000..4c72ca5a4 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 000000000..b7bfcd15f 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 000000000..4ecaece29 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 000000000..59a6d9c61 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 000000000..0b8f1e1ef 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 000000000..68798748d 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 000000000..9527efbe4 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 000000000..7ae160ce2 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 000000000..41d1ace1a 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 000000000..532f532d8 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 000000000..f215d6f6b 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 000000000..85bb2f0fd 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 000000000..3d09261a2 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 000000000..802bd6cde 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 000000000..3a111977c 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 000000000..cce652e84 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 000000000..e501b668c 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 000000000..578221aaa 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 000000000..7c0ab2b4c 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 000000000..61a8556c4 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 000000000..333414767 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 000000000..d9eefc225 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 000000000..4c8204af1 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 000000000..ff803be12 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 000000000..44c06dddf 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 000000000..693709cbc 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 000000000..783c83357 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 000000000..6a7ae025f 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 000000000..969a6b723 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 000000000..e68106503 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 000000000..442cd97d0 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 000000000..52dd9f3ae 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 000000000..9f0aada71 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 000000000..cd05f1906 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 000000000..48d740abf 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 000000000..e117a8374 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 000000000..08f249365 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 000000000..b335cb11c 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 000000000..99d532e8b 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 000000000..fc5a52f5e 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 000000000..369fc46ed 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 000000000..41676a0a5 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 000000000..64bab57dd 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 000000000..2541d2bcb 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 000000000..d98359c2a 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 000000000..a40211ed4 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 000000000..37b7c9b27 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 000000000..29a35d5aa 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 000000000..80fd79f98 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 000000000..1850b701c 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 000000000..8df38d9e6 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 000000000..e6eb18665 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 000000000..5a51e8198 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 000000000..7923fada4 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 000000000..309f63962 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 000000000..fc53379ef 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 000000000..d0b3c673a 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 000000000..8679c4b5c 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 000000000..0f0f4446b 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 000000000..63d2d5d5b 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 000000000..2a9f38b44 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 000000000..0b4751ce4 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 000000000..8850a8355 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 000000000..9d94de5df 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 000000000..517d11215 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 000000000..87bed2219 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 000000000..d6330aa99 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 000000000..8f6d4bee3 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 000000000..ef6959f7b 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 000000000..da9307f66 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 000000000..caad7263a 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 000000000..7348aed77 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 000000000..6c933681f 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 000000000..1f994851c 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 000000000..a9932b1ad 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 000000000..244f04ae1 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 000000000..8bdd3304d 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 000000000..4a6c5d396 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 000000000..2c49f78a6 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 000000000..7b6f9813d 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 000000000..e588e2fb2 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 000000000..817bd509b 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 000000000..fc60c5e1c 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 000000000..6b7336e17 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 000000000..ade431851 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 000000000..4520cfc55 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 000000000..ecafd2ffc 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 000000000..fd5d030ef 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 000000000..458f93611 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 000000000..a631949b5 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 000000000..628cf2dae 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 000000000..4c974840e 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 000000000..7f78bcc8e 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 000000000..caa1838d7 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 000000000..c37bd062e 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 000000000..564a1a971 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 000000000..315c4f4fa 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 000000000..e77d46e8a 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 000000000..5e332b4cc 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 000000000..a158c998d 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 000000000..f1fde7a9c 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 000000000..c0a801c7f 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 000000000..f2eed1ecf 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 000000000..156bfa971 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 000000000..c45a53459 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 000000000..3023695d8 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 000000000..f92958e6a 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 000000000..b0ce7bb19 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 000000000..40d681feb 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 000000000..23a2508c5 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 000000000..af66b73f2 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 000000000..88f3d69bc 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 000000000..dd0168ea9 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 000000000..58921624e 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 000000000..0f24e86e4 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 000000000..bc8c0d353 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 000000000..154747964 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 000000000..003924f5e 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 000000000..e4bc611f8 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 000000000..e63202420 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 000000000..5f15e526c 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 000000000..d06986644 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 000000000..e8a602da7 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 000000000..14c89a543 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 000000000..784e8fa48 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 000000000..529fe8fe0 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 000000000..d04dd7f51 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 000000000..5dea9769a 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 000000000..4f791b684 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 000000000..c9519416d 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 000000000..5193e2eff 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 000000000..112b01638 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 000000000..ad669cc78 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 000000000..1af880951 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 000000000..0ba939184 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 000000000..d06ee51e4 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 000000000..c64e2ee67 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 000000000..34a736f70 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 000000000..56d7da1d6 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 000000000..d5df75bb6 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 000000000..fb9b4c2bb 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 000000000..f367a5117 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 000000000..b9b75f6c3 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 000000000..0a3e7985c 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 000000000..1ef6e1143 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 000000000..14d6b6181 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 000000000..ba12fe8ac 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 000000000..052b33638 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 000000000..448e46fd5 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 000000000..473cee355 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 000000000..f021c3e12 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 000000000..ea3404e03 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 000000000..b7960db9d 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 000000000..b709ebaef 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 000000000..1d6124d6e 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 000000000..75eba80d6 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 000000000..7fb4e1f1e 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 000000000..06c5350cb 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 000000000..4489ca238 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 000000000..c88b945b0 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 000000000..7364a13cb 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 000000000..2544f2e63 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 000000000..1f5233308 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 000000000..257f111ca 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 000000000..c77ed8812 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 000000000..d9ee53e59 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 000000000..d4195ff80 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 000000000..ce523e343 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 000000000..5c870176d 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 000000000..57b03ce7a 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 000000000..170dfff1e 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 000000000..4b1337be8 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 000000000..b2d3a98bc 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 000000000..ecc59b0ab 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 000000000..fed62219f 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 000000000..5457dbd3c 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 000000000..be2c2719e 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 000000000..55d1072ea 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 000000000..f1c08b7d6 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 000000000..1bd28489e 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 000000000..a95cede1e 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 000000000..71cec9249 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 000000000..b493035b6 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 000000000..08645998b 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 000000000..e3a81fe94 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 000000000..b335cb11c 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 000000000..fc3c393ca 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 000000000..fc5d6139e 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 000000000..c260e1d96 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 000000000..0aa4cc651 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 000000000..4bdb3541e 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 000000000..184860d1e 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 000000000..12cd1aef9 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 000000000..3f768da50 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 000000000..6f6d3406c 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 000000000..c3257f5f1 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 000000000..377ab6950 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 000000000..fef6e8bad 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 000000000..62168f56f 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 000000000..77e710772 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 000000000..5d44b5925 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 000000000..b32149e27 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 000000000..4ec1a9281 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 000000000..d40740396 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 000000000..00dec80d8 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 000000000..30b0dc316 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 000000000..898d402d7 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 000000000..26938dd0c 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 000000000..1786ed5be 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 000000000..928fc17b4 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 000000000..00818f636 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 000000000..ea086b042 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 000000000..62037221c 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 000000000..b4aaad9a4 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 000000000..4bd45f131 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 000000000..ab3100b5c 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 000000000..5b5acea92 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 000000000..c6ea7f230 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 000000000..3445d4206 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 000000000..3be27bb9b 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 000000000..d22fde8ba 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 000000000..0dd848bd6 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 000000000..f4781daa8 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 000000000..e95b8c5b1 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 000000000..9680afd12 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 000000000..dac3c9050 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 000000000..dfe277050 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 000000000..29039e6a8 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 000000000..25eacb7c2 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 000000000..00be352c5 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 000000000..523575306 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 000000000..f66e2974e 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 000000000..5b3aed090 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 000000000..ab694b1ac 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 000000000..ae8cae806 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 000000000..2ebc4f6f9 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 000000000..a7b566b1f 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 000000000..13578ab5a 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 000000000..ecb50a93f 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 000000000..116aa5b7f 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 000000000..8c7c89b26 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 000000000..a471765ff 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 000000000..8f95f5a5d 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 000000000..a2c512499 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 000000000..66217f526 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 000000000..3619ead96 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 000000000..8b20f5503 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 000000000..1c296a6aa 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 000000000..5e6663e5c 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 000000000..81f28199a 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 000000000..cf3d97f75 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 000000000..af4fe0747 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 000000000..25d6ea91d 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 000000000..f90ef25ec 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 000000000..2b72da06a 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 000000000..e74402f9c 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 000000000..93d4d7e5f 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 000000000..11eab26db 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 000000000..7184c9ddf 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 000000000..5f8a6d65d 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 000000000..623d68c5d 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 000000000..ed3f43eb0 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 000000000..8487b2c19 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 000000000..d32aed727 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 000000000..87584dc95 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 000000000..fa3a15dd6 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 000000000..ef1b08b92 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 000000000..dcade0d8d 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 000000000..84b06d5bf 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 000000000..75a64da32 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 000000000..2e0fe75c9 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 000000000..e385b5467 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 000000000..b0633fa0e 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 000000000..06cab4679 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 000000000..42c52d05f 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 000000000..588fa9d07 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 000000000..eae2c524b 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 000000000..59af16382 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 000000000..b322ba929 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 000000000..b71136463 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 000000000..228a6778b 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 000000000..d040bd022 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 000000000..a81806640 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 000000000..37332563f 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 000000000..f772c562f 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 000000000..270c5018d 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 000000000..8af3eda9f 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 000000000..06e53a9d1 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 000000000..a014b025a 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 000000000..63a92fa91 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 000000000..65bcab520 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 000000000..72865668c 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 000000000..bcc156238 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 000000000..a8b3ede3d 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 000000000..6a9bf0370 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 000000000..6a2ecce1b 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 000000000..8140e8c10 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 000000000..bde96ce19 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 000000000..fd6142871 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 000000000..99e57cba8 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 000000000..244e6ca04 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 000000000..abdad91eb 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 000000000..8a1f0ff56 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 000000000..291bfc764 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 000000000..896dadfd1 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 000000000..49e54fd87 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 000000000..ab3100b5c 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 000000000..da3c2a2d7 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 000000000..9c8a9da4a 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 000000000..86f7fbc29 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 000000000..aace63ad6 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 000000000..25b28bb6a 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 000000000..48e7ab55f 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 000000000..03ddd799f 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 000000000..d5bfa0719 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 000000000..89ee2da07 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 000000000..f7ea90419 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 000000000..195dc6d6c 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 000000000..3141467c6 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 000000000..046811ed7 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 000000000..f07f449a4 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 000000000..eb6158eb5 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 000000000..2f193889f 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 000000000..8e83281c5 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 000000000..80fe1ed0c 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 000000000..de8e003f9 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 000000000..d6626cb09 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 000000000..7e568703d 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 000000000..312eab091 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 000000000..246a2f0b4 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 000000000..968f073fd 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 000000000..0b18247da 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 000000000..cf347c7d4 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 000000000..caea546af 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 000000000..8b8b1ca00 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 000000000..8f8095e46 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 000000000..159b24075 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 000000000..aa23dde37 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 000000000..34a05cccf 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 000000000..f501a593a 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 000000000..848bdaf3f 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 000000000..0c76bd129 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 000000000..87a691450 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 000000000..c66011fb0 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 000000000..2b6b1007f 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 000000000..a9f31a278 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 000000000..a87cf847c 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 000000000..ffb8fc932 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 000000000..0a7d6f4a6 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 000000000..bddba1f98 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 000000000..af1ecaf29 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 000000000..4cc537af0 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 000000000..b93e77600 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 000000000..9fc5a0a10 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 000000000..b977d7e52 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 000000000..581843637 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 000000000..5769120b1 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 000000000..8d719df52 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 000000000..106f5aa36 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 000000000..e4a1ecba1 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 000000000..7e62a924b 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 000000000..e902abb07 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 000000000..1d2d0a498 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 000000000..d61648452 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 000000000..7215d1e8b 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 000000000..bf7bd1c9b 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 000000000..f6b74cc40 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 000000000..d3fffb6d9 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 000000000..a65bcb3e1 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 000000000..23a37b891 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 000000000..f907e44b3 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 000000000..5b2cbb3fd 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 000000000..7868a2594 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 000000000..134b66936 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 000000000..c4eff0387 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 000000000..884ffd6f0 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 000000000..f59b7c436 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 000000000..44084add7 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 000000000..3a1441c9a 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 000000000..e7708292a 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 000000000..813f712f7 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 000000000..d9cf13256 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 000000000..52699bfee 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 000000000..4a05955b3 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 000000000..a0a433dfb 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 000000000..1eb880947 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 000000000..ae8ecbf47 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 000000000..6ed2490ed 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 000000000..fecadd08a 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 000000000..fd4bbccdf 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 000000000..834cdfaf4 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 000000000..b8895ddec 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 000000000..a3ecf8778 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 000000000..f82a8865a 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 000000000..73c5b3f24 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 000000000..c0490eb79 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 000000000..f6b87f82c 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 000000000..0bfecd50e 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 000000000..902bbe61b 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 000000000..d8944e6ea 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 000000000..937bded9d 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 000000000..c39f162f8 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 000000000..d3555e024 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 000000000..bbe4f8aba 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 000000000..7fdf1c58c 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 000000000..6c2aaaaaf 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 000000000..63cc355cb 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 000000000..18b67df43 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 000000000..e6bb35fbf 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 000000000..8836fe6c0 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 000000000..4a158fef7 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 000000000..d6d3f8564 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 000000000..cca9f535d 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 000000000..9a70c3499 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 000000000..abd2b9bb4 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 000000000..d41d90d64 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 000000000..27c63c5af 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 000000000..667086c0d 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 000000000..42dca7440 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 000000000..777fb5d2e 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 000000000..d9591c13f 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 000000000..95704fbab 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 000000000..f2bdef6be 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 000000000..ac9c2df6a 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 000000000..c61592e8d 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 000000000..e5c07d415 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 000000000..6187b15ae 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 000000000..ae43690ec 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 000000000..d9c3376d4 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 000000000..f4f6be59c 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 000000000..b6cb0ecf7 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 000000000..cff65d7fe 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 000000000..41da9913d 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 000000000..445c18868 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 000000000..a350d1871 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 000000000..d228d0580 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 000000000..1d8605f2f 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 000000000..94e8c1618 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 000000000..279ebb0e5 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 000000000..5ede989a4 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 000000000..779ad58ef 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 000000000..d5eac9bcc 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 000000000..dcce0b64d 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 000000000..1c856cd61 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 000000000..c61a6d847 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 000000000..f35a97938 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 000000000..90b758e8f 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 000000000..23f2611e9 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 000000000..aeaa88953 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 000000000..3a9a7e5eb 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 000000000..7766edd74 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 000000000..995134248 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 000000000..b03eaf8b5 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 000000000..8ec894784 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 000000000..e252606d3 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 000000000..18f9cc109 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 000000000..f233bc770 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 000000000..1dc6ff30b 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 000000000..b590beb73 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 000000000..9deb738de 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 000000000..43a86bff6 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 000000000..a6d0b0e87 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 000000000..f763a1688 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 000000000..a2cd648f6 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 000000000..30022630d 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 000000000..4a10590b4 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 000000000..f5203c7e9 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 000000000..d8d276e3c 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 000000000..451cfebe2 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 000000000..bf4be526f 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 000000000..e026323c2 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 000000000..0f9ed4d48 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 000000000..d650552d9 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 000000000..63fe6ceff 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 000000000..8fcf0f09a 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 000000000..e6500ced7 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 000000000..b4d31ce28 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 000000000..04919548e 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 000000000..56fcf84a8 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 000000000..8e154e231 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 000000000..49bb24d71 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 000000000..b3fa18ce2 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 000000000..bdeb9852b 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 000000000..6d46962dc 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 000000000..36216d827 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 000000000..720a237c7 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 000000000..3f10a3a9f 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 000000000..1128d3f33 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 000000000..bf49fad9d 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 000000000..49b269145 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 000000000..b24e826c7 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 000000000..61e740fe1 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 000000000..dc7625371 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 000000000..f64025639 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 000000000..540c8e268 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 000000000..ecd517425 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 000000000..b0f4e46cd 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 000000000..e8821dfd8 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 000000000..86e8325b9 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 000000000..09275f9c0 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 000000000..55d269400 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 000000000..efe9a98e5 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 000000000..aaedc41b5 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 000000000..d350dd88f 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 000000000..ff556b6a9 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 000000000..1181b43fb 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 000000000..8667c81f8 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 000000000..0bd66d19b 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 000000000..bb2ff516d 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 000000000..ce27fe3a0 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 000000000..a216ffd36 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 000000000..ee3f9b27a 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 000000000..cfe44932c 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 000000000..b4a4e3b78 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 000000000..07a30206c 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 000000000..b99db7d70 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 000000000..33af04609 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 000000000..31edfce59 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 000000000..ede912de0 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 000000000..d28dc6b1a 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 000000000..0d0dcfa9a 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 000000000..5a2ad9019 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 000000000..c34b982a0 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 000000000..b885fcc60 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 000000000..3a6f369a5 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 000000000..3cb4e2578 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 000000000..e20a1b4ab 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 000000000..22823a70d 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 000000000..e9bd85224 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 000000000..ca779f323 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 000000000..c64582bcd 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 000000000..6056d234a 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 000000000..965c503c6 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 000000000..ab9577aa1 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 000000000..4d918633f 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 000000000..b652d2a71 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 000000000..b497ebd54 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 000000000..ebc632d9b 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 000000000..4f627b768 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 000000000..f7a000b9a 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 000000000..199f0f7f1 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 000000000..e21fa44c5 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 000000000..f5e0f0c2c 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 000000000..917287fa0 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 000000000..3eb1828b1 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 000000000..e88a6efa1 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 000000000..b88c85789 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 000000000..70bcbccaa 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 000000000..987c806ff 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 000000000..a88261a65 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 000000000..947bd4b62 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 000000000..0cfd58596 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 000000000..81e41de7d 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 000000000..e0369c6be 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 000000000..640f187ec 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 000000000..25bb5b677 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 000000000..25d6181ac 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 000000000..fd7b32e43 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 000000000..3d8207fd7 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 000000000..d3b99364a 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 000000000..100da2f1a 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 000000000..4c09c0fd7 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 000000000..844ce04bd 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 000000000..abcd93689 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 000000000..2a3e5c4df 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 000000000..b85916d92 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 000000000..bfcb0249a 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 000000000..589e92b55 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 000000000..cfc2702ac 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 000000000..0528dfa24 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 000000000..34e23e24e 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 000000000..612612b5e 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 000000000..decac8a62 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 000000000..d76448e34 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 000000000..ab92010c2 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 000000000..28b8505c0 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 000000000..54c69691e 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 000000000..ff5925efd 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 000000000..25b74d18f 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 000000000..ed6785a6a 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 000000000..e093032a7 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 000000000..9757fc6ed 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 000000000..f135248f8 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 000000000..9fbae6725 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 000000000..2a9f6266e 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 000000000..83ec984bd 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 000000000..454a59f30 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 000000000..76e2296cc 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 000000000..ebaf0e874 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 000000000..6ebb37d25 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 000000000..83d12924f 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 000000000..cecc436fb 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 000000000..5591cfc4a 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 000000000..0013268e9 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 000000000..bcf6d7ec1 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 000000000..d3ec3a110 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 000000000..395c8fbf5 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 000000000..cef5dec4e 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 000000000..ef1ee5dd7 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 000000000..1738a4f10 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 000000000..2baaad99e 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 000000000..b9a586025 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 000000000..57beb3813 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 000000000..2fbdd6920 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 000000000..6c8fcc116 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 000000000..a1502571c 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 000000000..280fd442b 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 000000000..889ae80e3 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 000000000..97b2e0353 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 000000000..dd65786a7 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 000000000..9c122e91e 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 000000000..fbd87657f 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 000000000..c7836cf09 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 000000000..4e929eaf5 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 000000000..30cabebf7 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 000000000..058170a20 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 000000000..8dd1da1c1 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 000000000..936453234 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 000000000..1651b074e 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 000000000..8482ac8cb 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 000000000..377def645 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 000000000..5075ec6b8 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 000000000..41390f549 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 000000000..1a91cbdd5 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 000000000..4a8672bde 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 000000000..33b0b8df3 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 000000000..382a102e3 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 000000000..4880c43a1 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 000000000..b55482eee 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 000000000..106edae52 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 000000000..c5c45b2d6 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 000000000..877f82fea 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 000000000..c72fd8088 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 000000000..5b98a6e13 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 000000000..612058a78 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 000000000..1a2b01017 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 000000000..2fb2a7c74 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 000000000..90d0df286 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 000000000..8dcc2dbbb 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 000000000..d37e7304e 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 000000000..204de7231 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 000000000..c7bd58b21 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 000000000..a9d5e4f8c 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 000000000..4e3688edc 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 000000000..3c832d4c8 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 000000000..2bd16ccf2 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 000000000..a9925a06a 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 000000000..911da3f1d 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 000000000..dcc45cb22 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 000000000..5bf8313c6 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 000000000..d451ee061 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 000000000..a3fbddf88 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 000000000..f54bf736c 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 000000000..b7fd4e685 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 000000000..7b1142fc7 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 000000000..3d72be2a3 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 000000000..eb9a3dd59 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 000000000..fd1d4499a 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 000000000..10137e55c 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 000000000..bbefe2ec4 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 000000000..79f35ccbd 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 000000000..deae99bcf 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 000000000..e54ebebaf 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 000000000..acbb5630e 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 000000000..c1974cda7 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 000000000..7c71de03b 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 000000000..0468cf08f 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 000000000..8fd539e9c 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 000000000..30383c2de 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 000000000..b818127df 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 000000000..c6f66e8b3 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 000000000..b3454e15f 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 000000000..c02f315d2 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 000000000..2a6845381 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 000000000..b194b971b 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 000000000..ab0f6e73d 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 000000000..a1291c2df 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 000000000..988770f40 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 000000000..ca139e0f3 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 000000000..44ccbf812 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 000000000..3f73eaa14 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 000000000..5856e1d05 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 000000000..1d42b3673 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 000000000..cb3d54d06 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 000000000..45bbdf19c 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 000000000..0156c266e 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 000000000..af71c3061 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 000000000..f02fcfa99 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 000000000..bd6277f51 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 000000000..2faa70679 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 000000000..68f21d301 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 000000000..6d0d7f74c 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 000000000..ffcd1156f 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 000000000..00794d408 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 000000000..aee9c97f8 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 000000000..b8edc1265 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 000000000..5c8213fef 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 000000000..565a9330e 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 000000000..da5dbf200 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 000000000..bbaf784f2 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 000000000..157b5201d 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 000000000..43cf81448 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 000000000..d2e1cfbe3 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 000000000..908612e39 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 000000000..cdf0a52fe 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 000000000..07bf98a79 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 000000000..ac790e0bc 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 000000000..f315cb68b 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 000000000..0e0e064a5 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 000000000..5f1597daf 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 000000000..cd8f063fa 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 000000000..bdf25cc01 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 000000000..590578280 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 000000000..eeca93544 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 000000000..b8768a26c 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 000000000..00c9d57ba 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 000000000..86e38ee57 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 000000000..7168eb2e0 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 000000000..18c70f9dd 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 000000000..eddabd71c 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 000000000..6cf01365e 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 000000000..ef5b336b2 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 000000000..1bec2e487 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 000000000..2e0479eb3 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 000000000..e993f584f 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 000000000..c823df186 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 000000000..a738b7f9b 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 000000000..6b636fe2a 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 000000000..4c85a940d 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 000000000..5cb384148 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 000000000..51a68d58b 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 000000000..72103e6dc 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 000000000..2c1fa65ed 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 000000000..d01edb2a4 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 000000000..b2c29fa79 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 000000000..a653bfec7 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 000000000..4564a31bd 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 000000000..bdea2cd36 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 000000000..b98e34870 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 000000000..a3c476546 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 000000000..6de563b16 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 000000000..621fe3cd1 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 000000000..99ab40a67 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 000000000..e440a5a1c 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 000000000..292f7017c 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 000000000..ef882022a 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 000000000..b62cb68eb 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 000000000..3cf136184 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 000000000..450a80cb3 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 000000000..256ce9a81 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 000000000..f30e54810 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 000000000..0815d3f3a 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 000000000..d74aec27e 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 000000000..bd5aebeab 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 000000000..79f7b90df 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 000000000..e795ffc7d 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 000000000..426460b1a 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 000000000..73b692031 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 000000000..cfa6d279b 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 000000000..35f61aeba 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 000000000..49f7290ff 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 000000000..91906b684 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 000000000..f68082158 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 000000000..27f22aea1 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 000000000..2bdf6e5b5 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 000000000..0d5c19e99 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 000000000..00519ad37 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 000000000..68387b4d6 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 000000000..bb0920f31 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 000000000..c8e48f053 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 000000000..5af6d830c 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 000000000..b545571a9 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 000000000..228abbf98 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 000000000..98ec329bf 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 000000000..cf9f46f06 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 000000000..4f50fbbf6 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 000000000..f9e223c4a 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 000000000..600dc4e55 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 000000000..c2ab19a19 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 000000000..82822d10f 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 000000000..2945f1c85 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 000000000..6bb89bc80 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 000000000..1cc4919d8 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 000000000..690534f83 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 000000000..e0ed0be04 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 000000000..917bab466 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 000000000..2b1a99b18 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 000000000..25b352b6b 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 000000000..65b48309a 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 000000000..8bda6f1c6 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 000000000..5e17dfcfc 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 000000000..5b39b7167 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 000000000..3885c869f 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 000000000..3852c6dd5 --- /dev/null +++ b/html/images/readme.html @@ -0,0 +1,1495 @@ + + + + + + + famfamfam.com: Silk Icons + + + + + + + + + + + + + + + + + +
+
+
+ +

Silk Icons

+

http://www.famfamfam.com/lab/icons/silk/

+

+ “Silk” is a smooth icon set, containing 1000 16-by-16 pixel icons in + strokably-soft PNG format. Containing a large variety of icons, you're sure to find something + that tickles your fancy. And all for a low low price of $0.00. You can't say fairer than that. + +
+
+ + + + Current version: 1.3

+ +

License

+

+ + I also love to hear of my work being used, feel encouraged to send an email + with a link or screenshot of the icons in their new home to + mjames  gmail  com. + This work is licensed under a Creative Commons Attribution 2.5 License. + 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 http://www.famfamfam.com/lab/icons/silk/ in your credits (contact me to discuss licencing further). + + + + +

+ +

Sightings

+ +

+ Do you use this set? Contact me!. +

+ + +

Icons

+ + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
accept accept.pngadd add.pnganchor anchor.pngapplication application.pngapplication add application_add.pngapplication cascade application_cascade.pngapplication delete application_delete.pngapplication double application_double.pngapplication edit application_edit.pngapplication error application_error.pngapplication form application_form.pngapplication form add application_form_add.png
application form delete application_form_delete.pngapplication form edit application_form_edit.pngapplication form magnify application_form_magnify.pngapplication get application_get.pngapplication go application_go.pngapplication home application_home.pngapplication key application_key.pngapplication lightning application_lightning.pngapplication link application_link.pngapplication osx application_osx.pngapplication osx terminal application_osx_terminal.pngapplication put application_put.png
application side boxes application_side_boxes.pngapplication side contract application_side_contract.pngapplication side expand application_side_expand.pngapplication side list application_side_list.pngapplication side tree application_side_tree.pngapplication split application_split.pngapplication tile horizontal application_tile_horizontal.pngapplication tile vertical application_tile_vertical.pngapplication view columns application_view_columns.pngapplication view detail application_view_detail.pngapplication view gallery application_view_gallery.pngapplication view icons application_view_icons.png
application view list application_view_list.pngapplication view tile application_view_tile.pngapplication xp application_xp.pngapplication xp terminal application_xp_terminal.pngarrow branch arrow_branch.pngarrow divide arrow_divide.pngarrow down arrow_down.pngarrow in arrow_in.pngarrow inout arrow_inout.pngarrow join arrow_join.pngarrow left arrow_left.pngarrow merge arrow_merge.png
arrow out arrow_out.pngarrow redo arrow_redo.pngarrow refresh arrow_refresh.pngarrow refresh small arrow_refresh_small.pngarrow right arrow_right.pngarrow rotate anticlockwise arrow_rotate_anticlockwise.pngarrow rotate clockwise arrow_rotate_clockwise.pngarrow switch arrow_switch.pngarrow turn left arrow_turn_left.pngarrow turn right arrow_turn_right.pngarrow undo arrow_undo.pngarrow up arrow_up.png
asterisk orange asterisk_orange.pngasterisk yellow asterisk_yellow.pngattach attach.pngaward star add award_star_add.pngaward star bronze 1 award_star_bronze_1.pngaward star bronze 2 award_star_bronze_2.pngaward star bronze 3 award_star_bronze_3.pngaward star delete award_star_delete.pngaward star gold 1 award_star_gold_1.pngaward star gold 2 award_star_gold_2.pngaward star gold 3 award_star_gold_3.pngaward star silver 1 award_star_silver_1.png
award star silver 2 award_star_silver_2.pngaward star silver 3 award_star_silver_3.pngbasket basket.pngbasket add basket_add.pngbasket delete basket_delete.pngbasket edit basket_edit.pngbasket error basket_error.pngbasket go basket_go.pngbasket put basket_put.pngbasket remove basket_remove.pngbell bell.pngbell add bell_add.png
bell delete bell_delete.pngbell error bell_error.pngbell go bell_go.pngbell link bell_link.pngbin bin.pngbin closed bin_closed.pngbin empty bin_empty.pngbomb bomb.pngbook book.pngbook add book_add.pngbook addresses book_addresses.pngbook delete book_delete.png
book edit book_edit.pngbook error book_error.pngbook go book_go.pngbook key book_key.pngbook link book_link.pngbook next book_next.pngbook open book_open.pngbook previous book_previous.pngbox box.pngbrick brick.pngbrick add brick_add.pngbrick delete brick_delete.png
brick edit brick_edit.pngbrick error brick_error.pngbrick go brick_go.pngbrick link brick_link.pngbricks bricks.pngbriefcase briefcase.pngbug bug.pngbug add bug_add.pngbug delete bug_delete.pngbug edit bug_edit.pngbug error bug_error.pngbug go bug_go.png
bug link bug_link.pngbuilding building.pngbuilding add building_add.pngbuilding delete building_delete.pngbuilding edit building_edit.pngbuilding error building_error.pngbuilding go building_go.pngbuilding key building_key.pngbuilding link building_link.pngbullet add bullet_add.pngbullet arrow bottom bullet_arrow_bottom.pngbullet arrow down bullet_arrow_down.png
bullet arrow top bullet_arrow_top.pngbullet arrow up bullet_arrow_up.pngbullet black bullet_black.pngbullet blue bullet_blue.pngbullet delete bullet_delete.pngbullet disk bullet_disk.pngbullet error bullet_error.pngbullet feed bullet_feed.pngbullet go bullet_go.pngbullet green bullet_green.pngbullet key bullet_key.pngbullet orange bullet_orange.png
bullet picture bullet_picture.pngbullet pink bullet_pink.pngbullet purple bullet_purple.pngbullet red bullet_red.pngbullet star bullet_star.pngbullet toggle minus bullet_toggle_minus.pngbullet toggle plus bullet_toggle_plus.pngbullet white bullet_white.pngbullet wrench bullet_wrench.pngbullet yellow bullet_yellow.pngcake cake.pngcalculator calculator.png
calculator add calculator_add.pngcalculator delete calculator_delete.pngcalculator edit calculator_edit.pngcalculator error calculator_error.pngcalculator link calculator_link.pngcalendar calendar.pngcalendar add calendar_add.pngcalendar delete calendar_delete.pngcalendar edit calendar_edit.pngcalendar link calendar_link.pngcalendar view day calendar_view_day.pngcalendar view month calendar_view_month.png
calendar view week calendar_view_week.pngcamera camera.pngcamera add camera_add.pngcamera delete camera_delete.pngcamera edit camera_edit.pngcamera error camera_error.pngcamera go camera_go.pngcamera link camera_link.pngcamera small camera_small.pngcancel cancel.pngcar car.pngcar add car_add.png
car delete car_delete.pngcart cart.pngcart add cart_add.pngcart delete cart_delete.pngcart edit cart_edit.pngcart error cart_error.pngcart go cart_go.pngcart put cart_put.pngcart remove cart_remove.pngcd cd.pngcd add cd_add.pngcd burn cd_burn.png
cd delete cd_delete.pngcd edit cd_edit.pngcd eject cd_eject.pngcd go cd_go.pngchart bar chart_bar.pngchart bar add chart_bar_add.pngchart bar delete chart_bar_delete.pngchart bar edit chart_bar_edit.pngchart bar error chart_bar_error.pngchart bar link chart_bar_link.pngchart curve chart_curve.pngchart curve add chart_curve_add.png
chart curve delete chart_curve_delete.pngchart curve edit chart_curve_edit.pngchart curve error chart_curve_error.pngchart curve go chart_curve_go.pngchart curve link chart_curve_link.pngchart line chart_line.pngchart line add chart_line_add.pngchart line delete chart_line_delete.pngchart line edit chart_line_edit.pngchart line error chart_line_error.pngchart line link chart_line_link.pngchart organisation chart_organisation.png
chart organisation add chart_organisation_add.pngchart organisation delete chart_organisation_delete.pngchart pie chart_pie.pngchart pie add chart_pie_add.pngchart pie delete chart_pie_delete.pngchart pie edit chart_pie_edit.pngchart pie error chart_pie_error.pngchart pie link chart_pie_link.pngclock clock.pngclock add clock_add.pngclock delete clock_delete.pngclock edit clock_edit.png
clock error clock_error.pngclock go clock_go.pngclock link clock_link.pngclock pause clock_pause.pngclock play clock_play.pngclock red clock_red.pngclock stop clock_stop.pngcog cog.pngcog add cog_add.pngcog delete cog_delete.pngcog edit cog_edit.pngcog error cog_error.png
cog go cog_go.pngcoins coins.pngcoins add coins_add.pngcoins delete coins_delete.pngcolor swatch color_swatch.pngcolor wheel color_wheel.pngcomment comment.pngcomment add comment_add.pngcomment delete comment_delete.pngcomment edit comment_edit.pngcomments comments.pngcomments add comments_add.png
comments delete comments_delete.pngcompress compress.pngcomputer computer.pngcomputer add computer_add.pngcomputer delete computer_delete.pngcomputer edit computer_edit.pngcomputer error computer_error.pngcomputer go computer_go.pngcomputer key computer_key.pngcomputer link computer_link.pngconnect connect.pngcontrast contrast.png
contrast decrease contrast_decrease.pngcontrast high contrast_high.pngcontrast increase contrast_increase.pngcontrast low contrast_low.pngcontrol eject control_eject.pngcontrol eject blue control_eject_blue.pngcontrol end control_end.pngcontrol end blue control_end_blue.pngcontrol equalizer control_equalizer.pngcontrol equalizer blue control_equalizer_blue.pngcontrol fastforward control_fastforward.pngcontrol fastforward blue control_fastforward_blue.png
control pause control_pause.pngcontrol pause blue control_pause_blue.pngcontrol play control_play.pngcontrol play blue control_play_blue.pngcontrol repeat control_repeat.pngcontrol repeat blue control_repeat_blue.pngcontrol rewind control_rewind.pngcontrol rewind blue control_rewind_blue.pngcontrol start control_start.pngcontrol start blue control_start_blue.pngcontrol stop control_stop.pngcontrol stop blue control_stop_blue.png
controller controller.pngcontroller add controller_add.pngcontroller delete controller_delete.pngcontroller error controller_error.pngcreditcards creditcards.pngcross cross.pngcss css.pngcss add css_add.pngcss delete css_delete.pngcss go css_go.pngcss valid css_valid.pngcup cup.png
cup add cup_add.pngcup delete cup_delete.pngcup edit cup_edit.pngcup error cup_error.pngcup go cup_go.pngcup key cup_key.pngcup link cup_link.pngcursor cursor.pngcut cut.pngcut red cut_red.pngdatabase database.pngdatabase add database_add.png
database connect database_connect.pngdatabase delete database_delete.pngdatabase edit database_edit.pngdatabase error database_error.pngdatabase gear database_gear.pngdatabase go database_go.pngdatabase key database_key.pngdatabase lightning database_lightning.pngdatabase link database_link.pngdatabase refresh database_refresh.pngdatabase save database_save.pngdatabase table database_table.png
date date.pngdate add date_add.pngdate delete date_delete.pngdate edit date_edit.pngdate error date_error.pngdate go date_go.pngdate link date_link.pngdate magnify date_magnify.pngdate next date_next.pngdate previous date_previous.pngdelete delete.pngdisconnect disconnect.png
disk disk.pngdisk multiple disk_multiple.pngdoor door.pngdoor in door_in.pngdoor open door_open.pngdoor out door_out.pngdrink drink.pngdrink empty drink_empty.pngdrive drive.pngdrive add drive_add.pngdrive burn drive_burn.pngdrive cd drive_cd.png
drive cd empty drive_cd_empty.pngdrive delete drive_delete.pngdrive disk drive_disk.pngdrive edit drive_edit.pngdrive error drive_error.pngdrive go drive_go.pngdrive key drive_key.pngdrive link drive_link.pngdrive magnify drive_magnify.pngdrive network drive_network.pngdrive rename drive_rename.pngdrive user drive_user.png
drive web drive_web.pngdvd dvd.pngdvd add dvd_add.pngdvd delete dvd_delete.pngdvd edit dvd_edit.pngdvd error dvd_error.pngdvd go dvd_go.pngdvd key dvd_key.pngdvd link dvd_link.pngemail email.pngemail add email_add.pngemail attach email_attach.png
email delete email_delete.pngemail edit email_edit.pngemail error email_error.pngemail go email_go.pngemail link email_link.pngemail open email_open.pngemail open image email_open_image.pngemoticon evilgrin emoticon_evilgrin.pngemoticon grin emoticon_grin.pngemoticon happy emoticon_happy.pngemoticon smile emoticon_smile.pngemoticon surprised emoticon_surprised.png
emoticon tongue emoticon_tongue.pngemoticon unhappy emoticon_unhappy.pngemoticon waii emoticon_waii.pngemoticon wink emoticon_wink.pngerror error.pngerror add error_add.pngerror delete error_delete.pngerror go error_go.pngexclamation exclamation.pngeye eye.pngfeed feed.pngfeed add feed_add.png
feed delete feed_delete.pngfeed disk feed_disk.pngfeed edit feed_edit.pngfeed error feed_error.pngfeed go feed_go.pngfeed key feed_key.pngfeed link feed_link.pngfeed magnify feed_magnify.pngfemale female.pngfilm film.pngfilm add film_add.pngfilm delete film_delete.png
film edit film_edit.pngfilm error film_error.pngfilm go film_go.pngfilm key film_key.pngfilm link film_link.pngfilm save film_save.pngfind find.pngflag blue flag_blue.pngflag green flag_green.pngflag orange flag_orange.pngflag pink flag_pink.pngflag purple flag_purple.png
flag red flag_red.pngflag yellow flag_yellow.pngfolder folder.pngfolder add folder_add.pngfolder bell folder_bell.pngfolder brick folder_brick.pngfolder bug folder_bug.pngfolder camera folder_camera.pngfolder database folder_database.pngfolder delete folder_delete.pngfolder edit folder_edit.pngfolder error folder_error.png
folder explore folder_explore.pngfolder feed folder_feed.pngfolder find folder_find.pngfolder go folder_go.pngfolder heart folder_heart.pngfolder image folder_image.pngfolder key folder_key.pngfolder lightbulb folder_lightbulb.pngfolder link folder_link.pngfolder magnify folder_magnify.pngfolder page folder_page.pngfolder page white folder_page_white.png
folder palette folder_palette.pngfolder picture folder_picture.pngfolder star folder_star.pngfolder table folder_table.pngfolder user folder_user.pngfolder wrench folder_wrench.pngfont font.pngfont add font_add.pngfont delete font_delete.pngfont go font_go.pnggroup group.pnggroup add group_add.png
group delete group_delete.pnggroup edit group_edit.pnggroup error group_error.pnggroup gear group_gear.pnggroup go group_go.pnggroup key group_key.pnggroup link group_link.pngheart heart.pngheart add heart_add.pngheart delete heart_delete.pnghelp help.pnghourglass hourglass.png
hourglass add hourglass_add.pnghourglass delete hourglass_delete.pnghourglass go hourglass_go.pnghourglass link hourglass_link.pnghouse house.pnghouse go house_go.pnghouse link house_link.pnghtml html.pnghtml add html_add.pnghtml delete html_delete.pnghtml go html_go.pnghtml valid html_valid.png
image image.pngimage add image_add.pngimage delete image_delete.pngimage edit image_edit.pngimage link image_link.pngimages images.pnginformation information.pngipod ipod.pngipod cast ipod_cast.pngipod cast add ipod_cast_add.pngipod cast delete ipod_cast_delete.pngipod sound ipod_sound.png
joystick joystick.pngjoystick add joystick_add.pngjoystick delete joystick_delete.pngjoystick error joystick_error.pngkey key.pngkey add key_add.pngkey delete key_delete.pngkey go key_go.pngkeyboard keyboard.pngkeyboard add keyboard_add.pngkeyboard delete keyboard_delete.pngkeyboard magnify keyboard_magnify.png
layers layers.pnglayout layout.pnglayout add layout_add.pnglayout content layout_content.pnglayout delete layout_delete.pnglayout edit layout_edit.pnglayout error layout_error.pnglayout header layout_header.pnglayout link layout_link.pnglayout sidebar layout_sidebar.pnglightbulb lightbulb.pnglightbulb add lightbulb_add.png
lightbulb delete lightbulb_delete.pnglightbulb off lightbulb_off.pnglightning lightning.pnglightning add lightning_add.pnglightning delete lightning_delete.pnglightning go lightning_go.pnglink link.pnglink add link_add.pnglink break link_break.pnglink delete link_delete.pnglink edit link_edit.pnglink error link_error.png
link go link_go.pnglock lock.pnglock add lock_add.pnglock break lock_break.pnglock delete lock_delete.pnglock edit lock_edit.pnglock go lock_go.pnglock open lock_open.pnglorry lorry.pnglorry add lorry_add.pnglorry delete lorry_delete.pnglorry error lorry_error.png
lorry flatbed lorry_flatbed.pnglorry go lorry_go.pnglorry link lorry_link.pngmagifier zoom out magifier_zoom_out.pngmagnifier magnifier.pngmagnifier zoom in magnifier_zoom_in.pngmale male.pngmap map.pngmap add map_add.pngmap delete map_delete.pngmap edit map_edit.pngmap go map_go.png
map magnify map_magnify.pngmedal bronze 1 medal_bronze_1.pngmedal bronze 2 medal_bronze_2.pngmedal bronze 3 medal_bronze_3.pngmedal bronze add medal_bronze_add.pngmedal bronze delete medal_bronze_delete.pngmedal gold 1 medal_gold_1.pngmedal gold 2 medal_gold_2.pngmedal gold 3 medal_gold_3.pngmedal gold add medal_gold_add.pngmedal gold delete medal_gold_delete.pngmedal silver 1 medal_silver_1.png
medal silver 2 medal_silver_2.pngmedal silver 3 medal_silver_3.pngmedal silver add medal_silver_add.pngmedal silver delete medal_silver_delete.pngmoney money.pngmoney add money_add.pngmoney delete money_delete.pngmoney dollar money_dollar.pngmoney euro money_euro.pngmoney pound money_pound.pngmoney yen money_yen.pngmonitor monitor.png
monitor add monitor_add.pngmonitor delete monitor_delete.pngmonitor edit monitor_edit.pngmonitor error monitor_error.pngmonitor go monitor_go.pngmonitor lightning monitor_lightning.pngmonitor link monitor_link.pngmouse mouse.pngmouse add mouse_add.pngmouse delete mouse_delete.pngmouse error mouse_error.pngmusic music.png
new new.pngnewspaper newspaper.pngnewspaper add newspaper_add.pngnewspaper delete newspaper_delete.pngnewspaper go newspaper_go.pngnewspaper link newspaper_link.pngnote note.pngnote add note_add.pngnote delete note_delete.pngnote edit note_edit.pngnote error note_error.pngnote go note_go.png
overlays overlays.pngpackage package.pngpackage add package_add.pngpackage delete package_delete.pngpackage go package_go.pngpackage green package_green.pngpackage link package_link.pngpage page.pngpage add page_add.pngpage attach page_attach.pngpage code page_code.pngpage copy page_copy.png
page delete page_delete.pngpage edit page_edit.pngpage error page_error.pngpage excel page_excel.pngpage find page_find.pngpage gear page_gear.pngpage go page_go.pngpage green page_green.pngpage key page_key.pngpage lightning page_lightning.pngpage link page_link.pngpage paintbrush page_paintbrush.png
page paste page_paste.pngpage red page_red.pngpage refresh page_refresh.pngpage save page_save.pngpage white page_white.pngpage white acrobat page_white_acrobat.pngpage white actionscript page_white_actionscript.pngpage white add page_white_add.pngpage white c page_white_c.pngpage white camera page_white_camera.pngpage white cd page_white_cd.pngpage white code page_white_code.png
page white code red page_white_code_red.pngpage white coldfusion page_white_coldfusion.pngpage white compressed page_white_compressed.pngpage white copy page_white_copy.pngpage white cplusplus page_white_cplusplus.pngpage white csharp page_white_csharp.pngpage white cup page_white_cup.pngpage white database page_white_database.pngpage white delete page_white_delete.pngpage white dvd page_white_dvd.pngpage white edit page_white_edit.pngpage white error page_white_error.png
page white excel page_white_excel.pngpage white find page_white_find.pngpage white flash page_white_flash.pngpage white freehand page_white_freehand.pngpage white gear page_white_gear.pngpage white get page_white_get.pngpage white go page_white_go.pngpage white h page_white_h.pngpage white horizontal page_white_horizontal.pngpage white key page_white_key.pngpage white lightning page_white_lightning.pngpage white link page_white_link.png
page white magnify page_white_magnify.pngpage white medal page_white_medal.pngpage white office page_white_office.pngpage white paint page_white_paint.pngpage white paintbrush page_white_paintbrush.pngpage white paste page_white_paste.pngpage white php page_white_php.pngpage white picture page_white_picture.pngpage white powerpoint page_white_powerpoint.pngpage white put page_white_put.pngpage white ruby page_white_ruby.pngpage white stack page_white_stack.png
page white star page_white_star.pngpage white swoosh page_white_swoosh.pngpage white text page_white_text.pngpage white text width page_white_text_width.pngpage white tux page_white_tux.pngpage white vector page_white_vector.pngpage white visualstudio page_white_visualstudio.pngpage white width page_white_width.pngpage white word page_white_word.pngpage white world page_white_world.pngpage white wrench page_white_wrench.pngpage white zip page_white_zip.png
page word page_word.pngpage world page_world.pngpaintbrush paintbrush.pngpaintcan paintcan.pngpalette palette.pngpaste plain paste_plain.pngpaste word paste_word.pngpencil pencil.pngpencil add pencil_add.pngpencil delete pencil_delete.pngpencil go pencil_go.pngphone phone.png
phone add phone_add.pngphone delete phone_delete.pngphone sound phone_sound.pngphoto photo.pngphoto add photo_add.pngphoto delete photo_delete.pngphoto link photo_link.pngphotos photos.pngpicture picture.pngpicture add picture_add.pngpicture delete picture_delete.pngpicture edit picture_edit.png
picture empty picture_empty.pngpicture error picture_error.pngpicture go picture_go.pngpicture key picture_key.pngpicture link picture_link.pngpicture save picture_save.pngpictures pictures.pngpilcrow pilcrow.pngpill pill.pngpill add pill_add.pngpill delete pill_delete.pngpill go pill_go.png
plugin plugin.pngplugin add plugin_add.pngplugin delete plugin_delete.pngplugin disabled plugin_disabled.pngplugin edit plugin_edit.pngplugin error plugin_error.pngplugin go plugin_go.pngplugin link plugin_link.pngprinter printer.pngprinter add printer_add.pngprinter delete printer_delete.pngprinter empty printer_empty.png
printer error printer_error.pngrainbow rainbow.pngreport report.pngreport add report_add.pngreport delete report_delete.pngreport disk report_disk.pngreport edit report_edit.pngreport go report_go.pngreport key report_key.pngreport link report_link.pngreport magnify report_magnify.pngreport picture report_picture.png
report user report_user.pngreport word report_word.pngresultset first resultset_first.pngresultset last resultset_last.pngresultset next resultset_next.pngresultset previous resultset_previous.pngrosette rosette.pngrss rss.pngrss add rss_add.pngrss delete rss_delete.pngrss go rss_go.pngrss valid rss_valid.png
ruby ruby.pngruby add ruby_add.pngruby delete ruby_delete.pngruby gear ruby_gear.pngruby get ruby_get.pngruby go ruby_go.pngruby key ruby_key.pngruby link ruby_link.pngruby put ruby_put.pngscript script.pngscript add script_add.pngscript code script_code.png
script code red script_code_red.pngscript delete script_delete.pngscript edit script_edit.pngscript error script_error.pngscript gear script_gear.pngscript go script_go.pngscript key script_key.pngscript lightning script_lightning.pngscript link script_link.pngscript palette script_palette.pngscript save script_save.pngserver server.png
server add server_add.pngserver chart server_chart.pngserver compressed server_compressed.pngserver connect server_connect.pngserver database server_database.pngserver delete server_delete.pngserver edit server_edit.pngserver error server_error.pngserver go server_go.pngserver key server_key.pngserver lightning server_lightning.pngserver link server_link.png
server uncompressed server_uncompressed.pngshading shading.pngshape align bottom shape_align_bottom.pngshape align center shape_align_center.pngshape align left shape_align_left.pngshape align middle shape_align_middle.pngshape align right shape_align_right.pngshape align top shape_align_top.pngshape flip horizontal shape_flip_horizontal.pngshape flip vertical shape_flip_vertical.pngshape group shape_group.pngshape handles shape_handles.png
shape move back shape_move_back.pngshape move backwards shape_move_backwards.pngshape move forwards shape_move_forwards.pngshape move front shape_move_front.pngshape rotate anticlockwise shape_rotate_anticlockwise.pngshape rotate clockwise shape_rotate_clockwise.pngshape square shape_square.pngshape square add shape_square_add.pngshape square delete shape_square_delete.pngshape square edit shape_square_edit.pngshape square error shape_square_error.pngshape square go shape_square_go.png
shape square key shape_square_key.pngshape square link shape_square_link.pngshape ungroup shape_ungroup.pngshield shield.pngshield add shield_add.pngshield delete shield_delete.pngshield go shield_go.pngsitemap sitemap.pngsitemap color sitemap_color.pngsound sound.pngsound add sound_add.pngsound delete sound_delete.png
sound low sound_low.pngsound mute sound_mute.pngsound none sound_none.pngspellcheck spellcheck.pngsport 8ball sport_8ball.pngsport basketball sport_basketball.pngsport football sport_football.pngsport golf sport_golf.pngsport raquet sport_raquet.pngsport shuttlecock sport_shuttlecock.pngsport soccer sport_soccer.pngsport tennis sport_tennis.png
star star.pngstatus away status_away.pngstatus busy status_busy.pngstatus offline status_offline.pngstatus online status_online.pngstop stop.pngstyle style.pngstyle add style_add.pngstyle delete style_delete.pngstyle edit style_edit.pngstyle go style_go.pngsum sum.png
tab tab.pngtab add tab_add.pngtab delete tab_delete.pngtab edit tab_edit.pngtab go tab_go.pngtable table.pngtable add table_add.pngtable delete table_delete.pngtable edit table_edit.pngtable error table_error.pngtable gear table_gear.pngtable go table_go.png
table key table_key.pngtable lightning table_lightning.pngtable link table_link.pngtable multiple table_multiple.pngtable refresh table_refresh.pngtable relationship table_relationship.pngtable row delete table_row_delete.pngtable row insert table_row_insert.pngtable save table_save.pngtable sort table_sort.pngtag tag.pngtag blue tag_blue.png
tag blue add tag_blue_add.pngtag blue delete tag_blue_delete.pngtag blue edit tag_blue_edit.pngtag green tag_green.pngtag orange tag_orange.pngtag pink tag_pink.pngtag purple tag_purple.pngtag red tag_red.pngtag yellow tag_yellow.pngtelephone telephone.pngtelephone add telephone_add.pngtelephone delete telephone_delete.png
telephone edit telephone_edit.pngtelephone error telephone_error.pngtelephone go telephone_go.pngtelephone key telephone_key.pngtelephone link telephone_link.pngtelevision television.pngtelevision add television_add.pngtelevision delete television_delete.pngtext align center text_align_center.pngtext align justify text_align_justify.pngtext align left text_align_left.pngtext align right text_align_right.png
text allcaps text_allcaps.pngtext bold text_bold.pngtext columns text_columns.pngtext dropcaps text_dropcaps.pngtext heading 1 text_heading_1.pngtext heading 2 text_heading_2.pngtext heading 3 text_heading_3.pngtext heading 4 text_heading_4.pngtext heading 5 text_heading_5.pngtext heading 6 text_heading_6.pngtext horizontalrule text_horizontalrule.pngtext indent text_indent.png
text indent remove text_indent_remove.pngtext italic text_italic.pngtext kerning text_kerning.pngtext letter omega text_letter_omega.pngtext letterspacing text_letterspacing.pngtext linespacing text_linespacing.pngtext list bullets text_list_bullets.pngtext list numbers text_list_numbers.pngtext lowercase text_lowercase.pngtext padding bottom text_padding_bottom.pngtext padding left text_padding_left.pngtext padding right text_padding_right.png
text padding top text_padding_top.pngtext replace text_replace.pngtext signature text_signature.pngtext smallcaps text_smallcaps.pngtext strikethrough text_strikethrough.pngtext subscript text_subscript.pngtext superscript text_superscript.pngtext underline text_underline.pngtext uppercase text_uppercase.pngtextfield textfield.pngtextfield add textfield_add.pngtextfield delete textfield_delete.png
textfield key textfield_key.pngtextfield rename textfield_rename.pngthumb down thumb_down.pngthumb up thumb_up.pngtick tick.pngtime time.pngtime add time_add.pngtime delete time_delete.pngtime go time_go.pngtimeline marker timeline_marker.pngtransmit transmit.pngtransmit add transmit_add.png
transmit blue transmit_blue.pngtransmit delete transmit_delete.pngtransmit edit transmit_edit.pngtransmit error transmit_error.pngtransmit go transmit_go.pngtux tux.pnguser user.pnguser add user_add.pnguser comment user_comment.pnguser delete user_delete.pnguser edit user_edit.pnguser female user_female.png
user go user_go.pnguser gray user_gray.pnguser green user_green.pnguser orange user_orange.pnguser red user_red.pnguser suit user_suit.pngvcard vcard.pngvcard add vcard_add.pngvcard delete vcard_delete.pngvcard edit vcard_edit.pngvector vector.pngvector add vector_add.png
vector delete vector_delete.pngwand wand.pngweather clouds weather_clouds.pngweather cloudy weather_cloudy.pngweather lightning weather_lightning.pngweather rain weather_rain.pngweather snow weather_snow.pngweather sun weather_sun.pngwebcam webcam.pngwebcam add webcam_add.pngwebcam delete webcam_delete.pngwebcam error webcam_error.png
world world.pngworld add world_add.pngworld delete world_delete.pngworld edit world_edit.pngworld go world_go.pngworld link world_link.pngwrench wrench.pngwrench orange wrench_orange.pngxhtml xhtml.pngxhtml add xhtml_add.pngxhtml delete xhtml_delete.pngxhtml go xhtml_go.png
xhtml valid xhtml_valid.pngzoom zoom.pngzoom in zoom_in.pngzoom out zoom_out.png        
+

+ + + +
+ + + + + + + + + \ No newline at end of file diff --git a/html/images/readme.txt b/html/images/readme.txt new file mode 100755 index 000000000..400a64d78 --- /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 000000000..2dd62496a 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 000000000..a329e6381 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 000000000..426ea907e 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 000000000..d3e570d0f 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 000000000..a2aa786fd 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 000000000..85dbfe46b 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 000000000..587192060 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 000000000..f914d0d29 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 000000000..e72800a1d 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 000000000..1e3bbb311 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 000000000..8d10a1693 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 000000000..d2ee2389a 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 000000000..bf9cf90d4 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 000000000..3235e7256 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 000000000..cd7b11f6b 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 000000000..5c442fa35 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 000000000..0bdf79717 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 000000000..e12717eff 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 000000000..07a756888 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 000000000..3b9c725ed 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 000000000..2de1089ab 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 000000000..f3e3679a1 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 000000000..f9952e86c 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 000000000..4b27fc361 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 000000000..fc8ac15a1 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 000000000..368df2f01 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 000000000..f67d54f7b 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 000000000..82ff76609 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 000000000..e542b0385 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 000000000..e4331bcd5 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 000000000..f8e57a0a5 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 000000000..e6943e56c --- /dev/null +++ b/html/includes/add-srv.inc @@ -0,0 +1,16 @@ +" + + +?> diff --git a/html/includes/ajaxtabs.inc b/html/includes/ajaxtabs.inc new file mode 100644 index 000000000..051c428d6 --- /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 000000000..02db0f818 --- /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 000000000..7ee3c14ab --- /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 000000000..4dd7eb2fe --- /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(" +
+ +

Edit Device

+ +
+ + + + + + + + + + + + + + + + + + + + + + +
Description
+ Type + + +
Disable
Ignore
Apache
Temp
+ + +
"); + +$srvdir = $installdir . "/includes/services/"; + +if ($handle = opendir($srvdir)) { + while (false !== ($file = readdir($handle))) { + if ($file != "." && $file != "..") { + $services[] = $file; + $servicesform .= ""; + } + } + closedir($handle); +} + +echo(" + +

Add Service

+ +
+ + + + + + + + + + + + + + + + + + +
+ Type + + +
Description
IP Address
Parameters
+ + +
"); + +echo("
"); + +} + diff --git a/html/includes/dev-events.inc b/html/includes/dev-events.inc new file mode 100644 index 000000000..81818272a --- /dev/null +++ b/html/includes/dev-events.inc @@ -0,0 +1,15 @@ +"); + +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 000000000..9a7f7c2df --- /dev/null +++ b/html/includes/dev-graphs.inc @@ -0,0 +1,189 @@ +"); + + 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 000000000..ca12154d5 --- /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 000000000..ba0f2cf85 --- /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 000000000..c6b71620e --- /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 000000000..507a78ebd --- /dev/null +++ b/html/includes/dev-srv.inc @@ -0,0 +1,24 @@ + '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 000000000..ea740df5c --- /dev/null +++ b/html/includes/dev-syslog.inc @@ -0,0 +1,15 @@ +"); + +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 000000000..e7f627ca3 --- /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 000000000..0b65bede2 --- /dev/null +++ b/html/includes/edit-host.inc @@ -0,0 +1,16 @@ + diff --git a/html/includes/hostbox-old.inc b/html/includes/hostbox-old.inc new file mode 100644 index 000000000..63dba2eba --- /dev/null +++ b/html/includes/hostbox-old.inc @@ -0,0 +1,32 @@ +"; } + + echo(""); + 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("
"); + +?> diff --git a/html/includes/hostbox.inc b/html/includes/hostbox.inc new file mode 100644 index 000000000..41ca28b54 --- /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 000000000..2b06ec185 --- /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 000000000..5a6d1b3c2 --- /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 000000000..ad5f0d173 --- /dev/null +++ b/html/includes/print-event-short.inc @@ -0,0 +1,35 @@ + +"; } + + + 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 000000000..c3f76890a --- /dev/null +++ b/html/includes/print-event.inc @@ -0,0 +1,43 @@ + +"; } + + + 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 000000000..3d84aa81a --- /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 000000000..105505b3d --- /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("Directly Connected " . 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  Same Subnet" . 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 000000000..6e5947512 --- /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 000000000..f6b955f9d --- /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 000000000..e9cf49f50 --- /dev/null +++ b/html/includes/print-syslog.inc @@ -0,0 +1,35 @@ + +"; } + + + 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 000000000..e69de29bb diff --git a/html/includes/topnav.inc b/html/includes/topnav.inc new file mode 100644 index 000000000..1a8a7da02 --- /dev/null +++ b/html/includes/topnav.inc @@ -0,0 +1,58 @@ + + + + + + "); + echo(""); + echo(""); + echo(""); + echo(""); + echo(""); + ?> + + + + + +
Devices : + $devices[count] + ( $devices[up] up + $devices[down] down + $devices[disabled] ignored ) +
Interfaces : + $interfaces[count] + ( $interfaces[up] up + $interfaces[down] down + $interfaces[disabled] disabled ) +
Services : + $services[count] + ( $services[up] up + $services[down] down + $services[disabled] ignored ) +
+
diff --git a/html/index.php b/html/index.php new file mode 100755 index 000000000..0e3543b47 --- /dev/null +++ b/html/index.php @@ -0,0 +1,114 @@ + + + + + + <?php echo("$page_title"); ?> + + + + + + + + +
+
+ + + + +
+ $_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 000000000..c12a034df --- /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 000000000..595385f22 --- /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 000000000..b69000e7c --- /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
'+text+'
';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='
'+closing+'
'+o3_capicon+title+'
'+text+'
';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='
'+text+'
';} +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 000000000..ec88637a6 --- /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+='';txt+='';for(var i=istrt;i';txt+='
'+theDiv+'X
ItemValue
'+args[++i]+'
'+(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 000000000..f51d89d11 --- /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 000000000..09e7db823 --- /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 000000000..4a4ffca76 --- /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');} +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 000000000..704d12351 --- /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 000000000..95659e831 --- /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 000000000..9090934c2 --- /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 000000000..106fc66e4 --- /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 000000000..e542b0385 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 000000000..e4331bcd5 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 000000000..f8e57a0a5 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 000000000..1fb38e34b --- /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 000000000..b6a037c5b --- /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 000000000..06fdc5c0d --- /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 000000000..767dd7c70 --- /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 000000000..9b4d7637b --- /dev/null +++ b/html/network/includes/topnav.inc @@ -0,0 +1,20 @@ + + + + + + + + + + + +
+ Network + + Wiki +
+ Support + + DNS Admin +
diff --git a/html/pages/addhost.php b/html/pages/addhost.php new file mode 100644 index 000000000..4107e5d92 --- /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: +

+

+ +

+
diff --git a/html/pages/addsrv.php b/html/pages/addsrv.php new file mode 100644 index 000000000..43b2e6f6d --- /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 .= ""; + } + } + closedir($handle); +} + +$query = mysql_query("SELECT * FROM `devices` ORDER BY `hostname`"); +while($device = mysql_fetch_array($query)) { + $devicesform .= ""; +} + +if($updated) { print_message("Device Settings Saved"); } + +echo(" +

Add Service

+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ Device + + +
+ Type + + +
Description
IP Address
Parameters
+ + +
"); + + +} + diff --git a/html/pages/alerts.php b/html/pages/alerts.php new file mode 100644 index 000000000..2c96939d4 --- /dev/null +++ b/html/pages/alerts.php @@ -0,0 +1,69 @@ + + +"); + +$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 000000000..de7657160 --- /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 000000000..6821c10f7 --- /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
+ +$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 = "Host Up"; } + else { $statimg = "Host Down";} + if($bg == "#ffffff") { $bg = "#e5e5e5"; } else { $bg="#ffffff"; } + echo(" + + + + "); + + unset($int, $ints, $intlist, $intpop, $srv, $srvlist, $srvname, $srvpop); + +} + +echo("
Host
Int
Srv
$host$statimg$ints$services
"); + +?> +
+
Network Infrastructure Diagram
+ Auto-generated network diagram +
diff --git a/html/pages/delhost.php b/html/pages/delhost.php new file mode 100644 index 000000000..d1d7f49af --- /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

+
+

+ + +

+
+ diff --git a/html/pages/device.php b/html/pages/device.php new file mode 100644 index 000000000..2bb13bfca --- /dev/null +++ b/html/pages/device.php @@ -0,0 +1,96 @@ +"); + include("includes/device-header.inc"); + echo("
"); + +echo("
"); + +echo(" +"); +echo(" +
"); + +include("includes/$section.inc"); + +echo("
+"); +} +?> + diff --git a/html/pages/devices.php b/html/pages/devices.php new file mode 100644 index 000000000..436724a07 --- /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 000000000..e72520c5f --- /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(""); + } + } + +echo("
+ $hostname
+ $flags
+ $hardware $os $version +
$location
+ "); + if ($i < 5) { + $i++; + } else { + $i=1; + echo("
"); +?> diff --git a/html/pages/downinterfaces.php b/html/pages/downinterfaces.php new file mode 100644 index 000000000..350c487de --- /dev/null +++ b/html/pages/downinterfaces.php @@ -0,0 +1,117 @@ + +$type

"); + +if($_GET['format'] == "rows") { +echo(""); +echo(" + + + + + + + + + + + + "); +} else { +#echo("
Last ChangedHostnameInterfaceDescriptionTypeNotes
"); +} +$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(" + + + + + + + + + + + + "); + + } else { + + + echo("
+ $hostname
+ $ifname
+ $ifalias
+ $type
+ $notes +
"); + + +# echo(" +# "); +# if ($i < 6) { +# $i++; +# } else { +# $i=1; +# echo(""); +# } + } + + } + +echo("
$lastchange$hostnamelong$ifnamelong$ifalias$type$notes
+# $ifalias
+# $type $notes

+# $hostname
+# $ifname
"); +?> diff --git a/html/pages/eventlog.php b/html/pages/eventlog.php new file mode 100644 index 000000000..ddbe8edf3 --- /dev/null +++ b/html/pages/eventlog.php @@ -0,0 +1,15 @@ +"); + +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 000000000..e4684706a --- /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 000000000..f0fc8917e --- /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 000000000..68a636cb9 --- /dev/null +++ b/html/pages/interface.php @@ -0,0 +1,77 @@ +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 000000000..ff487b985 --- /dev/null +++ b/html/pages/interfaces.php @@ -0,0 +1,31 @@ +"); + +echo("DeviceInterfaceSpeedMediaDescription"); + +$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 000000000..0537c2d46 --- /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 000000000..dcf0e8f7c --- /dev/null +++ b/html/pages/locations.php @@ -0,0 +1,37 @@ +"); + +$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(" + + + + + + + + + "); + + $done = "yes"; + } +} + +echo("
$loc$alert$num devices$net network$srv servers$fwl firewalls
"); + +?> diff --git a/html/pages/logon.inc b/html/pages/logon.inc new file mode 100644 index 000000000..d4d74061e --- /dev/null +++ b/html/pages/logon.inc @@ -0,0 +1,35 @@ +
+ + + + + +
+
+

Please log in:

+ +
+ + + + + + + + + + + + + + + + +
Username
Password
Demo login : demo/demo
+
+
"); + +?> diff --git a/html/pages/services.php b/html/pages/services.php new file mode 100644 index 000000000..56d4abd54 --- /dev/null +++ b/html/pages/services.php @@ -0,0 +1,24 @@ +"); +//echo(""); + + + $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("
DeviceServiceStatusChangedCheckedMessage
"); + +?> diff --git a/html/pages/syslog.php b/html/pages/syslog.php new file mode 100644 index 000000000..70c82fb52 --- /dev/null +++ b/html/pages/syslog.php @@ -0,0 +1,121 @@ + + + + + + + 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 000000000..64387dd72 --- /dev/null +++ b/html/phones/config.php @@ -0,0 +1,5 @@ + diff --git a/html/rrd b/html/rrd new file mode 120000 index 000000000..70c6b9ed6 --- /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 000000000..bf6b104cf --- /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 000000000..560867a7e --- /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 000000000..4ad2ae502 --- /dev/null +++ b/includes/functions.php @@ -0,0 +1,1046 @@ + $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 000000000..d03d2a226 --- /dev/null +++ b/includes/generic.php @@ -0,0 +1,48 @@ + diff --git a/includes/graphing.php b/includes/graphing.php new file mode 100644 index 000000000..190ae4fcc --- /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 000000000..854c5d1ff --- /dev/null +++ b/includes/ios.php @@ -0,0 +1,88 @@ + diff --git a/includes/procurve-graphing.php b/includes/procurve-graphing.php new file mode 100755 index 000000000..948faeda1 --- /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 000000000..04663fafe --- /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 000000000..3d0558c2d --- /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 000000000..dee474273 --- /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 000000000..9837d7694 --- /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 000000000..44338c5a0 --- /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 000000000..285523d7a --- /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 000000000..baf08d803 --- /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 000000000..b5dd39cca --- /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 000000000..97dabc705 --- /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 000000000..9bf618c0e --- /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 000000000..cddba2da9 --- /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 000000000..06152a2e7 --- /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 000000000..727d1d7a2 --- /dev/null +++ b/includes/snom.php @@ -0,0 +1,49 @@ + diff --git a/includes/unix-graphing.php b/includes/unix-graphing.php new file mode 100755 index 000000000..555badadc --- /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 000000000..cfa8bb7b1 --- /dev/null +++ b/includes/unix.php @@ -0,0 +1,195 @@ + diff --git a/interface-ips.php b/interface-ips.php new file mode 100755 index 000000000..324acd5b9 --- /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 000000000..5d369ec0e --- /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 000000000..0e467ef58 --- /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 000000000..6fbbe834e --- /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 000000000..209402f8e --- /dev/null +++ b/map.php @@ -0,0 +1,91 @@ +#!/usr/bin/php + \"$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 000000000..786d69c46 --- /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 000000000..67fa7cdeb --- /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 000000000..98315c28e --- /dev/null +++ b/poll-device.php @@ -0,0 +1,220 @@ +#!/usr/bin/php += '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 000000000..dd50f1c7c --- /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 000000000..b468cfec0 --- /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 000000000..0d2a106ad --- /dev/null +++ b/poll-interface.php @@ -0,0 +1,148 @@ +#!/usr/bin/php + $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 000000000..78acabfc7 --- /dev/null +++ b/poll-os.php @@ -0,0 +1,28 @@ +#!/usr/bin/php + diff --git a/poll-reachability.php b/poll-reachability.php new file mode 100755 index 000000000..ac674607c --- /dev/null +++ b/poll-reachability.php @@ -0,0 +1,53 @@ +#!/usr/bin/php + $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 000000000..494c6742d --- /dev/null +++ b/poll-temperatures.php @@ -0,0 +1,36 @@ +#!/usr/bin/php + diff --git a/process-syslog.php b/process-syslog.php new file mode 100755 index 000000000..9dc418578 --- /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 000000000..52c9602cf --- /dev/null +++ b/scan-snmp.php @@ -0,0 +1,21 @@ +#!/usr/bin/php + diff --git a/scan-snmp.sh b/scan-snmp.sh new file mode 100755 index 000000000..e0cd0ec78 --- /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 000000000..5596ed7e3 --- /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 000000000..e798b841b --- /dev/null +++ b/test.php @@ -0,0 +1,18 @@ +#!/usr/bin/php + +