#! /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~

Cisco Port Manager ~; if ( $form{subnet} ){ print " - $subnet"; } print qq~
Buena Vista Datacasting
Search a Port:
~; ### ### DISPLAY Switches ### $fade=""; if ( -s "$DATA" && ! "$subnet" && ! "$form{search}") { print qq~ ~; open (IN, "$DATA"); while () { ($sub, $desc, $vlan) = split(/\t/, $_); if ( $fade ) { $bgc="bgcolor=e8e8e8"; $fade=""; } else { $bgc="bgcolor=fffffff"; $fade="1"; } print qq~ ~; } close(IN); print "
Switches

Description

Location

$sub $desc $vlan
"; } 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~
Port $form{ip}
Network Name
Hardware (MAC) Address
Host / User Name
Comment

~; } # # 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~
Port $IP
Network Name$HST
Host / User Name$USR
Hardware (MAC) Address$MAC
Comment$COM

~; } } 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