#! /usr/bin/perl
###
### Port Manager [adapted from ipm] (c)09/02 - Kirk Waingrow
###
### Just create the DATA file and it will do the rest...
### DATA FILE SYNTAX: (Seperate by tabs)
### IPaddress Description VLAN
###
$VER="1.0 - Kirk Waingrow - 09/02"; # VERSION NUMBER
$DPATH="/httpd/data/portmgr";
$DATA="$DPATH/portmgr.txt";
$PROG="/cgi-bin/portmgr";
if ( ! -d "$DPATH" ) { `mkdir -p $DPATH`; }
if ( ! -f "$DATA" ) { `touch $DATA`; }
print "Content-type: text/html\n\n";
print qq~
Cisco Port Manager
~;
$buffer = "$QUERY_STRING";
$buffer = $ENV{'QUERY_STRING'};
# Split the Variables by the &
#
@pairs = split (/&/, $buffer);
#Port Create the array
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$form{$name} = $value;
#print "$form{$name}";
}
if ($form{subnet}) { $subnet="$form{subnet}"; }
else { $subnet=""; }
###
### TITLE BAR
###
$TOTALUID=`cat $DATA | wc -l | awk '{ print $1}'`;
print qq~
~;
###
### DISPLAY Switches
###
$fade="";
if ( -s "$DATA" && ! "$subnet" && ! "$form{search}")
{
print qq~
Switches
|
Description
|
Location
|
~;
open (IN, "$DATA");
while ()
{
($sub, $desc, $vlan) = split(/\t/, $_);
if ( $fade ) { $bgc="bgcolor=e8e8e8"; $fade=""; }
else { $bgc="bgcolor=fffffff"; $fade="1"; }
print qq~
$sub |
$desc |
$vlan |
~;
}
close(IN);
print "
";
}
if ( "$subnet" && ! "$form{search}" )
{
if ( "$form{ip}" )
{
if ( $form{action} eq "edit" )
{
open(IN, "$DPATH/$subnet.txt");
while ()
{
chomp;
#if ( "$IP" eq "$form{ip}" )
if ( /^$form{ip}\t/ )
{ ($IP,$HST,$MAC,$USR,$COM) = split(/\t/, $_); }
}
close(IN);
print qq~
~;
}
#
# WRITE OUT CHANGES
#
if ( $form{action} eq "write" )
{
open(OUT, "> $DPATH/$subnet.tmp");
open(IN, "$DPATH/$subnet.txt");
while ()
{
chomp;
($IP,$HST,$MAC,$USR,$COM) = split(/\t/, $_);
if ( "$IP" eq "$form{ip}" )
{
print OUT "$form{ip} $form{hst} $form{mac} $form{usr} $form{com}\n";
}
else
{ print OUT "$_\n"; }
}
close(IN);
close(OUT);
`mv $DPATH/$subnet.tmp $DPATH/$subnet.txt`;
}
#
# CLEAR AN ENTRY
#
if ( $form{action} eq "clear" )
{
open(IN, "$DPATH/$subnet.txt");
while ()
{
chomp;
($IP,$HST,$MAC,$USR,$COM) = split(/\t/, $_);
if ( "$IP" eq "$form{ip}" )
{
print qq~
~;
}
}
close(IN);
}
#
# CONFIRM CLEAR AN ENTRY
#
if ( $form{action} eq "clearall" )
{
open(OUT, "> $DPATH/$subnet.tmp");
open(IN, "$DPATH/$subnet.txt");
while ()
{
chomp;
($IP,$HST,$MAC,$USR,$COM) = split(/\t/, $_);
if ( "$IP" eq "$form{ip}" )
{
print OUT "$form{ip} OPEN \n";
}
else
{ print OUT "$_\n"; }
}
close(IN);
close(OUT);
`mv $DPATH/$subnet.tmp $DPATH/$subnet.txt`;
}
}
if ( "$form{action}" ne "edit" && "$form{action}" ne "clear" )
{
&header_info;
#
# Create file and all the nodes if the subnet file doesnt exist
#
if ( ! -f "$DPATH/$subnet.txt" )
{
$x=0;
open (OUT, "> $DPATH/$subnet.txt");
while ( $x < 48 )
{
$x++;
#print OUT "$subnet.$x OPEN \n";
print OUT "$x OPEN \n";
}
close(OUT);
}
$FNO="";
$FNC="";
$fade="";
if ( -f "$DPATH/$subnet.txt" )
{
open(IN, "$DPATH/$subnet.txt");
while ()
{
($IP,$HST,$MAC,$USR,$COM) = split(/\t/, $_);
if ( $fade ) { $bgc="bgcolor=e8e8e8"; $fade=""; }
else { $bgc="bgcolor=fffffff"; $fade="1"; }
#if ( "$HST" eq "OPEN" ) { $bgc="bgcolor=#a0c8c8"; }
if ( /OPEN/i ) { $bgc="bgcolor=#a0c8c8"; }
if ( /undefined/i ) { $bgc="bgcolor=aaccaa"; }
if ( /unknown/i ) { $bgc="bgcolor=ff9999"; }
if ( /reserved/i ) { $bgc="bgcolor=ffff99"; }
#if ( /dhcp/i ) { $bgc="bgcolor=99ff99"; }
print qq~
$FNO edit..clear $FNO
| $FNO $IP $FNC |
$FNO $HST $FNC |
$FNO $MAC $FNC |
$FNO $USR $FNC |
$FNO $COM $FNC |
~;
}
close(IN);
}
}
}
#
# SEARCH
#
if ( $form{search})
{
&header_info;
$FNO="";
$FNC="";
$fade="";
if ( $subnet ) { open(IN, "$DPATH/$subnet.txt"); }
else { open(IN, "cat $DPATH/[0123456789]*.txt|"); }
while ()
{
if ( /$form{search}/i )
{
($IP,$HST,$MAC,$USR,$COM) = split(/\t/, $_);
($n1,$n2,$n3,$n4) = split (/\./, $IP);
$subnet="$n1.$n2.$n3";
if ( $fade ) { $bgc="bgcolor=e8e8e8"; $fade=""; }
else { $bgc="bgcolor=fffffff"; $fade="1"; }
if ( "$HST" eq "OPEN" ) { $bgc="bgcolor=#a0c8c8"; }
if ( /undefined/i ) { $bgc="bgcolor=aaccaa"; }
if ( /unknown/i ) { $bgc="bgcolor=ff9999"; }
if ( /reserved/i ) { $bgc="bgcolor=ffff99"; }
if ( /dhcp/i ) { $bgc="bgcolor=99ff99"; }
print qq~
$FNOedit ...
clear$FNO
| $FNO $IP $FNC |
$FNO $HST $FNC |
$FNO $MAC $FNC |
$FNO $USR $FNC |
$FNO $COM $FNC |
~;
}
}
close(IN);
}
sub header_info
{
print qq~
Legend: |
Undefined |
OPEN |
Unknown |
Reserved |
Allocated |
Action
|
Blade-Port
|
Network
|
MAC Address
|
Host / User
|
Comment
|
~;
}