#!/usr/bin/perl -w # # # #filelist my @filelist = (); $filelist[0]="dhcpd.conf"; $filelist[1]="rc.local"; $filelist[2]="rc.node.local"; $filelist[3]="resolv.conf"; $filelist[4]="named.conf"; $filelist[5]="snmpd.local.conf"; $filelist[6]="txtconfig"; #(inter)net env my $hostname=`hostname`; chomp($hostname); my $cgi_dir="http://$hostname/cgi-bin"; my $source="$cgi_dir/g_list.pl"; #path variablen my $home="/home/genesis"; my $ndir="$home/nodes"; my $toolfile="$home/tools/wleiden.pl"; #exec vars my $svn="/usr/local/bin/svn"; ######################## END OF CONFIG ########################## my $HTML=1; #laden van tool file do($toolfile) || die("Cann't open $toolfile"); #gebruik van simple subje om ervoor te zorgen dat de print netjes in het #programma gestopt kan worden sub printline { print "$_[0] \n"; }; #REQUEST parsen $request=$ENV{'REQUEST_URI'}; if( $request=~/cgi-bin\/g_list.pl\/(.*)$/) { ($node,$file)=split(/\//,$1); $title="$node $file"; } else { $title="listing"; }; #controleer wat de browser is #en zorgen dan er de nodige tags geprint worden $browser=$ENV{'HTTP_USER_AGENT'}; if( $browser=~/curl|wget|fetch/i) { $HTML=0; printline("Content-type: text/html\n\n"); } else { $HTML=1; printline("Content-type: text/html\n\n"); printline(""); printline("Genesis $title"); printline(""); }; #als geen node gespecificeerd dan kijken of svn geupdate is gevraagd if( $node eq '') { if( $ENV{"QUERY_STRING"}=~/update/i) { select(STDERR); $| = 1; # make unbuffered select(STDOUT); $| = 1; # make unbuffered printline("

Please wait while updating svn...

");
      system("$svn update $home");
      close(SVN);
    printline("
"); printline("

Done.

"); printline("Click here"); printline("if you're not forwarded automaticly in 5 seconds.

"); printline(""); } else { g_list( ); }; } else { if( $file eq '') { foreach $file ( sort @filelist) { if( $HTML) { print "$file
\n"; } else { print "$file\n"; }; }; } elsif( $file eq 'config') { g_print($hostname); } else { foreach my $tmpFile ( sort @filelist) { if( $file eq $tmpFile ) { g_generate($file); }; }; }; }; #plaats de sluit HTML tags if( $HTML) { print < EOF } #Het opbouwen van het begin scherm sub g_list { if( $HTML) { my $svn_version=svn_version("$ndir"); if( $svn_version=~/Last Changed Rev: (\d+)/) { $revision=$1; }; printline("

Genesis config (revision: $revision):

\n

");
    printline("$svn_version");
    printline("
"); printline("
"); printline(''); printline("
"); printline(""); }; opendir(DIR, $ndir) || die "can't opendir $home: $!"; @dirs = grep { /^[^\.]/ && -d "$ndir/$_" } readdir(DIR); closedir DIR; foreach $dir (sort @dirs) { if( $dir=~/attic/ ) { next; }; my $node = $dir; if( ! $HTML ) { print "$node\n"; } else { printline(""); foreach $file (sort @filelist) { printline("\n"); }; }; }; if( $HTML ) { printline("
$node$file

"); }; }; #ophalen svn versie sub svn_version { local($file,$char)=@_; local($svn_version); $svn_version=`$svn info $file`; if( $char ne '' ) { $svn_version=~s/^([^$char].*)/$char $1/mgi; }; return($svn_version); }; #netjes de configuratie printen sub g_print { my $config="$ndir/$node/wleiden.conf"; parse_config($config); printline("

Genesis configuratie voor: $node

"); printline("

" . svn_version($config) . "

"); my $TP=''; if( $tproxy !~ m/no/i ) { $TP .= "\n"; $TP .= "Tproxy on cidr range $tproxy"; $TP .= "WARNING - specification propably wrong - should be a cidr" unless $tproxy =~ m/\d+\.\d+\.\d+\.\d+\/\d+/; }; printline(""); foreach $if( sort keys %config) { if( $if=~/^(.*):\d+/ ) { $subs{$1}++; }; }; foreach $if( sort keys %config) { if( $if=~/^([^:]+)/ ) { $mymain=$1; } else { $mymain=''; }; if( $if!~/:\d+/ ) { $main=1;$cc='66' } else { $main=0; $cc='cc'; }; if(! ($ip=$IP{$if}) ) { $ip='dhcp?'; }; if( $TYPE{$if}=~/wireless/ ) { $color="#${cc}FFFF"; }; if( $TYPE{$if}=~/ethernet/) { $color="#FFFF${cc}"; }; $cfg=$config{$if}; $cfg=~s/(.*KEY.*=).*/${1}***********/; $cfg=~s/(.*PWD.*=).*/${1}***********/; $cfg=~s/(.*CODE.*=).*/${1}***********/; $cfg=~s/(.*PASS.*=).*/${1}***********/; if( $main) { printf "\n",(1+$subs{$if})*3,$subs{$if}; $c=4; } else { $c=3; print ""; }; $cfg=~s//>/gi; printline(""); printline(""); printline(""); }; printline("
");
 printline("master_ip=$master_ip");
 printline("AGGREGATE=$AGGREGATE");
 printline("");
 printline("gw_open=$gw_open");
 printline("nodetype=$nodetype");
 printline("nodename=$nodename");
 printline("");
 printline("NS_forward=$NS_forward");
 printline("NS_resolv=$NS_resolv");
 printline("");
 printline("location=$location");
 printline("DISK=$DISK");
 printline("");
 printline("X=$X");
 printline("Y=$Y");
 printline("");
 printline("OS=$OS");
 printline("");
 printline("$TP");
 printline("
$if
$if$ip$DESC{$if}($SDESC{$if})
");
   printline("$cfg");
   printline("
 
"); }; #Generen config sub g_generate { my $file=$_[0]; $config="$ndir/$node/wleiden.conf"; $svn_versiont=svn_version($toolfile,$char); $svn_versionc=svn_version($config,$char); if( $svn_versiont=~/Last Changed Rev: (\d+)/ ) { $tool_rev=$1; }; if( $svn_versionc=~/Last Changed Rev: (\d+)/ ) { $config_rev=$1; }; if( $tool_rev >= $config_rev) { $svn_version=$svn_versiont . $svn_versionc; } else { $svn_version=$svn_versionc; }; if( $HTML) { printline("

Genesis $file voor: $hostname

"); }; parse_config($config); $pr=do_it($file); if( $HTML ) { $pr=~s/$pr"); } else { print $pr; }; };