#!/usr/bin/perl # # Copyright 2005 Stichting Wireless Leiden # Rick van der Zwet # use File::Basename; # Config located at other file my $conf_file = dirname(__FILE__) . "/genesis.conf"; do($conf_file) || die("Cann't open $conf_file"); my $HTML=1; my @HTTP_BODY = (); #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 { push(@HTTP_BODY, "$_[0]\n"); }; sub filelist { foreach $file ( sort @filelist) { if( $HTML) { printline("$file
"); } else { printline($file); }; }; } sub listnodes { opendir(DIR, $ndir) || die "can't opendir $ndir: $!"; @tmpdirs = grep { /^[^\.]/ && -d "$ndir/$_" } readdir(DIR); closedir DIR; foreach $dir (sort @tmpdirs) { no warnings "once"; if( not exists($removefromnodelist{$dir}) ) { push(@nodelist, $dir); } else { if ( $debug ) { print "'$dir' removed from list\n"; } } use warnings "once"; }; return @nodelist; } sub nodelist { foreach $node (listnodes( )) { if( $HTML) { printline("$node
"); } else { printline("$node\n"); }; }; } #REQUEST parsen $request=$ENV{'REQUEST_URI'}; if( $request =~ /$uri(.*)$/) { ($node,$file)=split(/\//,$1); $title="$node $file"; if ( $debug ) { print "Node: $node\n"; } if ( $debug ) { print "File: $file\n"; } } #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; } else { $HTML=1; printline(""); printline("Genesis $title"); printline(""); printline(""); }; #als geen node gespecificeerd dan kijken of svn geupdate is gevraagd if( $ENV{"QUERY_STRING"}=~/update/i) { printline("
");
  #select(STDERR); $| = 1;     # make unbuffered
  #select(STDOUT); $| = 1;     # make unbuffered
  printline(`$svn --config-option servers:global:http-proxy-host=172.19.128.68 --config-option servers:global:http-proxy-port=3128 update $ndir`);
  printline("
"); printline("

Done.

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

"); printline(""); } elsif( !$node ) { g_list( ); } elsif( $node eq 'filelist' ) { filelist( ); } elsif( $node eq 'nodelist' ) { nodelist( ); } else { if( $file eq '') { filelist( ); } 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) { printline(""); } $output = join('',@HTTP_BODY); print "Content-Length: " . length($output) . " \n"; print "Content-type: text/html\n\n"; print $output; #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 - last changed rev $revision

\n

");
    printline("$svn_version");
    printline("
"); printline("
"); printline(''); printline("
"); printline(""); }; @dirs = listnodes( ); foreach $dir (sort @dirs) { if( $dir=~/attic/ ) { next; }; my $node = $dir; if( ! $HTML ) { printline("$node"); } else { printline(""); foreach $file (sort @filelist) { printline("\n"); }; }; }; if( $HTML ) { printline("
$node$file

"); }; }; #ophalen svn versie sub svn_version { local($file)=@_; local($svn_version); $svn_version=`$svn info $file`; return($svn_version); }; #netjes de configuratie printen sub g_print { my $config="$ndir/$node/$configfile"; parse_config($config); printline("

Genesis configuratie voor: $node

"); printline("

" . svn_version($config) . "

"); no warnings "once"; 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) { printline("\n",(1+$subs{$if})*3,$subs{$if}); $c=4; } else { $c=3; printline(""); }; $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("
 
"); no warnings "once"; }; #Generen config sub g_generate { my $file=$_[0]; $config="$ndir/$node/$configfile"; $svn_versiont=svn_version($toolfile); $svn_versionc=svn_version($config); 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: $node

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