#! /usr/bin/perl
###
### IP Manager (c)09/02 - Kirk Waingrow
###
### Just create the DATA file and it will do the rest...
### DATA FILE SYNTAX: (Seperate by tabs)
### VLAN Description IPaddress /Size
###
$VER="1.0 - Kirk Waingrow - 09/02"; # VERSION NUMBER
$DPATH="/httpd/data/ipm";
$DATA="$DPATH/ipm.txt";
$PROG="/cgi-bin/ipm";
if ( ! -d "$DPATH" ) { `mkdir -p $DPATH`; }
if ( ! -f "$DATA" ) { `touch $DATA`; }
print "Content-type: text/html\n\n";
print qq~
MySpace Operations IP Manager
~;
$buffer = "$QUERY_STRING";
$buffer = $ENV{'QUERY_STRING'};
# Split the Variables by the &
#
@pairs = split (/&/, $buffer);
# 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~
Unix Operations IP Manager
~;
if ( $form{subnet} )
{
open (IN, "$DATA");
while ()
{
($sub, $desc, $vlan, $ssize) = split(/\t/, $_);
if ( "$sub" eq "$form{subnet}" )
{
print " - ";
print "$desc";
}
}
close(IN);
}
print qq~
Myspace
|
|
~;
###
### DISPLAY Subnets
###
$fade="";
if ( -s "$DATA" && ! "$subnet" && ! "$form{search}")
{
print qq~
VLAN
|
Network Name
|
Subnet
|
/Size
|
~;
open (IN, "$DATA");
while ()
{
($sub, $desc, $vlan, $ssize) = split(/\t/, $_);
if ( $fade ) { $bgc="bgcolor=e8e8e8"; $fade=""; }
else { $bgc="bgcolor=fffffff"; $fade="1"; }
print qq~
$sub |
$desc |
$vlan |
$ssize |
~;
}
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 < 254 )
{
$x++;
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 ( /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
#
sub display_search
{
($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 ( /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 |
~;
}
if ( $form{search})
{
&header_info;
$FNO="";
$FNC="";
$fade="";
if ( $subnet ) { open(IN, "$DPATH/$subnet.txt"); }
else { open(IN, "cat $DPATH/[0123456789MN]*.txt|"); }
while ()
{
if ( $form{search} eq "showall" )
{
if ( ! /OPEN/ && ! /RESERVED/ && ! /DHCP/ ) { &display_search; }
}
else
{
if ( /$form{search}/i ) { &display_search; }
}
}
close(IN);
}
sub header_info
{
print qq~
Legend: |
Open |
Unknown |
Reserved |
DHCP |
Allocated |
Action
|
IP Address
|
Host
|
MAC Address
|
User/Location
|
Comment
|
~;
}