X-Git-Url: http://git.ipfire.org/?p=people%2Fteissler%2Fipfire-2.x.git;a=blobdiff_plain;f=html%2Fcgi-bin%2Fupdatexlrator.cgi;h=df77a86afdb2e690464d0b3d23b96821a7631bca;hp=35bf948d01a030ae32b904d57db1141db96828e5;hb=6233483ba7d92b83a80e5a4759f83248198eb2f2;hpb=41f00bf25525d0ad7a0c5f4f01a434a4182ad555 diff --git a/html/cgi-bin/updatexlrator.cgi b/html/cgi-bin/updatexlrator.cgi index 35bf948d0..df77a86af 100644 --- a/html/cgi-bin/updatexlrator.cgi +++ b/html/cgi-bin/updatexlrator.cgi @@ -1,8 +1,17 @@ #!/usr/bin/perl +# +# This code is distributed under the terms of the GPL +# +# (c) 2006-2008 marco.s - http://update-accelerator.advproxy.net +# +# Portions (c) 2008 by dotzball - http://www.blockouttraffic.de +# +# $Id: updatexlrator.cgi,v 2.1.0 2008/07/16 00:00:00 marco.s Exp $ +# ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007 Michael Tremer & Christian Schmidt # +# Copyright (C) 2005-2010 IPFire Team # # # # This program is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # @@ -18,11 +27,16 @@ # along with this program. If not, see . # # # ############################################################################### +# +# Changelog: +# 2012-10-27: nightshift - Bugfix regarding showing wrong vendor icon while Download of new Updates +# 2012-10-27: nightshift - Optimizing logic of check for vendor icons +# use strict; # enable only the following on debugging purpose -#use warnings; +#use warnings; no warnings 'once';# 'redefine', 'uninitialized'; #use CGI::Carp 'fatalsToBrowser'; use IO::Socket; @@ -38,6 +52,7 @@ my %netsettings=(); my %mainsettings=(); my %proxysettings=(); my %xlratorsettings=(); +my %dlinfo=(); my $id=0; my @dfdata=(); my $dfstr=''; @@ -65,6 +80,7 @@ my @vendors=(); my %vendorstats=(); my $repository = "/var/updatecache/"; +my $webhome = "/srv/web/ipfire/html"; my $hintcolour = '#FFFFCC'; my $colourgray = '#808080'; @@ -79,13 +95,11 @@ my $errormessage=''; my @repositorylist=(); my @repositoryfiles=(); +my @downloadlist=(); +my @downloadfiles=(); my @metadata=(); -my $chk_cron_dly = "${General::swroot}/updatexlrator/autocheck/cron.daily"; -my $chk_cron_wly = "${General::swroot}/updatexlrator/autocheck/cron.weekly"; -my $chk_cron_mly = "${General::swroot}/updatexlrator/autocheck/cron.monthly"; - &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); &General::readhash("${General::swroot}/main/settings", \%mainsettings); &General::readhash("${General::swroot}/proxy/settings", \%proxysettings); @@ -100,6 +114,9 @@ $xlratorsettings{'MAX_DOWNLOAD_RATE'} = ''; $xlratorsettings{'ENABLE_AUTOCHECK'} = 'off'; $xlratorsettings{'FULL_AUTOSYNC'} = 'off'; $xlratorsettings{'NOT_ACCESSED_LAST'} = 'month1'; +$xlratorsettings{'REMOVE_NOSOURCE'} = 'off'; +$xlratorsettings{'REMOVE_OUTDATED'} = 'off'; +$xlratorsettings{'REMOVE_OBSOLETE'} = 'off'; &Header::getcgihash(\%xlratorsettings); @@ -258,22 +275,53 @@ if ($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr remove file'}) $updatefile = $xlratorsettings{'ID'}; - if ($updatefile =~ /^download\//) + unless ($updatefile =~ /^download\//) { - ($uuid,$vendorid,$updatefile) = split('/',$updatefile); - if (-e "$repository/download/$vendorid/$updatefile") { system("rm $repository/download/$vendorid/$updatefile"); } - } else { ($vendorid,$uuid,$updatefile) = split('/',$updatefile); if (-e "$repository/$vendorid/$uuid/$updatefile") { system("rm -r $repository/$vendorid/$uuid"); } } } +if (($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr cancel download'}) || ($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr remove file'})) +{ + $updatefile = $xlratorsettings{'ID'}; + + if ($updatefile =~ /^download\//) + { + ($uuid,$vendorid,$updatefile) = split('/',$updatefile); + + if (-e "$repository/download/$vendorid/$updatefile.info") + { + &General::readhash("$repository/download/$vendorid/$updatefile.info", \%dlinfo); + + $id = &getPID("\\s${General::swroot}/updatexlrator/bin/download\\s.*\\s".quotemeta($dlinfo{'SRCURL'})."\\s\\d\\s\\d\$"); + if ($id) { system("/bin/kill -9 $id"); } + $id = &getPID("\\s/usr/bin/wget\\s.*\\s".quotemeta($dlinfo{'SRCURL'})."\$"); + if ($id) { system("/bin/kill -9 $id"); } + + system("rm $repository/download/$vendorid/$updatefile.info"); + } + + if (-e "$repository/download/$vendorid/$updatefile") + { + system("rm $repository/download/$vendorid/$updatefile"); + } + } + +} + $not_accessed_last = $xlratorsettings{'NOT_ACCESSED_LAST'}; undef($xlratorsettings{'NOT_ACCESSED_LAST'}); -if (-e "${General::swroot}/updatexlrator/settings") { &General::readhash("${General::swroot}/updatexlrator/settings", \%xlratorsettings); } +if (-e "${General::swroot}/updatexlrator/settings") +{ + &General::readhash("${General::swroot}/updatexlrator/settings", \%xlratorsettings); +} -if ($xlratorsettings{'NOT_ACCESSED_LAST'} eq '') { $xlratorsettings{'NOT_ACCESSED_LAST'} = $not_accessed_last; } ; +if ($xlratorsettings{'NOT_ACCESSED_LAST'} eq '') +{ + $xlratorsettings{'NOT_ACCESSED_LAST'} = $not_accessed_last; +} ERROR: @@ -292,8 +340,27 @@ $checked{'ENABLE_AUTOCHECK'}{$xlratorsettings{'ENABLE_AUTOCHECK'}} = "checked='c $checked{'FULL_AUTOSYNC'}{'off'} = ''; $checked{'FULL_AUTOSYNC'}{'on'} = ''; $checked{'FULL_AUTOSYNC'}{$xlratorsettings{'FULL_AUTOSYNC'}} = "checked='checked'"; - +$checked{'REMOVE_NOSOURCE'}{'off'} = ''; +$checked{'REMOVE_NOSOURCE'}{'on'} = ''; +$checked{'REMOVE_NOSOURCE'}{$xlratorsettings{'REMOVE_NOSOURCE'}} = "checked='checked'"; +$checked{'REMOVE_OUTDATED'}{'off'} = ''; +$checked{'REMOVE_OUTDATED'}{'on'} = ''; +$checked{'REMOVE_OUTDATED'}{$xlratorsettings{'REMOVE_OUTDATED'}} = "checked='checked'"; +$checked{'REMOVE_OBSOLETE'}{'off'} = ''; +$checked{'REMOVE_OBSOLETE'}{'on'} = ''; +$checked{'REMOVE_OBSOLETE'}{$xlratorsettings{'REMOVE_OBSOLETE'}} = "checked='checked'"; + + +$selected{'AUTOCHECK_SCHEDULE'}{'daily'} = ''; +$selected{'AUTOCHECK_SCHEDULE'}{'weekly'} = ''; +$selected{'AUTOCHECK_SCHEDULE'}{'monthly'} = ''; $selected{'AUTOCHECK_SCHEDULE'}{$xlratorsettings{'AUTOCHECK_SCHEDULE'}} = "selected='selected'"; + +$selected{'NOT_ACCESSED_LAST'}{'week'} = ''; +$selected{'NOT_ACCESSED_LAST'}{'month1'} = ''; +$selected{'NOT_ACCESSED_LAST'}{'month3'} = ''; +$selected{'NOT_ACCESSED_LAST'}{'month6'} = ''; +$selected{'NOT_ACCESSED_LAST'}{'year'} = ''; $selected{'NOT_ACCESSED_LAST'}{$xlratorsettings{'NOT_ACCESSED_LAST'}} = "selected='selected'"; # ---------------------------------------------------- @@ -397,6 +464,148 @@ END print "\n"; +# ---------------------------------------------------- +# List pending downloads - if any +# ---------------------------------------------------- + +if (($xlratorsettings{'EXTENDED_GUI'} ne 'statistics') && ($xlratorsettings{'EXTENDED_GUI'} ne 'maintenance')) +{ + @downloadlist = <$repository/download/*>; + + undef(@downloadfiles); + foreach (@downloadlist) + { + if (-d) + { + my @filelist = <$_/*>; + $vendorid = substr($_,rindex($_,"/")+1); + foreach(@filelist) + { + next if(/\.info$/); + $updatefile = substr($_,rindex($_,"/")+1); + $updatefile .= ":download/$vendorid/$updatefile"; + $updatefile = " ".$updatefile; + push(@downloadfiles, $updatefile); + } + } + } + + if (@downloadfiles) + { + &Header::openbox('100%', 'left', "$Lang::tr{'updxlrtr pending downloads'}"); + + print < + $Lang::tr{'updxlrtr current downloads'} + + + + + + + + + + + + + + + +END +; + $id = 0; + foreach $updatefile (@downloadfiles) + { + $updatefile =~ s/.*://; + my $size_updatefile = 0; + my $mtime = 0; + if(-e "$repository/$updatefile") { + $size_updatefile = (-s "$repository/$updatefile"); + $mtime = &getmtime("$repository/$updatefile"); + } + if (-e "$repository/$updatefile.info") { + &General::readhash("$repository/$updatefile.info", \%dlinfo); + } else { + undef(%dlinfo); + } + + $id++; + if ($id % 2) { + print "\n"; } + else { + print "\n"; } + + $filesize = $size_updatefile; + 1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/; + + my ($SECdt,$MINdt,$HOURdt,$DAYdt,$MONTHdt,$YEARdt) = localtime($mtime); + $DAYdt = sprintf ("%.02d",$DAYdt); + $MONTHdt = sprintf ("%.02d",$MONTHdt+1); + $YEARdt = sprintf ("%.04d",$YEARdt+1900); + $filedate = $YEARdt."-".$MONTHdt."-".$DAYdt; + + ($uuid,$vendorid,$shortname) = split('/',$updatefile); + + print "\t\t\n"; + } else { + print "$Lang::tr{ \n"; + } + + print "\t\t\n"; + } else { + print "" . ucfirst $vendorid . " \n"; + } + + $shortname = substr($updatefile,rindex($updatefile,"/")+1); + $shortname =~ s/(.*)_[\da-f]*(\.(exe|cab|psf)$)/$1_*$2/i; + + $filesize = $dlinfo{'REMOTESIZE'}; + 1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/; + $dlinfo{'VENDORID'} = ucfirst $vendorid; + + print < $dlinfo{'VENDORID'}  + + + + + +END +; + } + + print "
 $Lang::tr{'updxlrtr source'}$Lang::tr{'updxlrtr filename'}$Lang::tr{'updxlrtr filesize'}$Lang::tr{'date'}$Lang::tr{'updxlrtr progress'} 
 "; + if (&getPID("\\s/usr/bin/wget\\s.*\\s".quotemeta($dlinfo{'SRCURL'})."\$")) + { + print "$Lang::tr{  "; + + if (($vendorid ne '') && (-e "$webhome/images/updbooster/updxl-src-$vendorid.gif")) + { + print "" . ucfirst $vendorid . " $shortname $filesize  $filedate  +END +; + my $percent="0%"; + if ($dlinfo{'REMOTESIZE'} && $size_updatefile) + { + $percent=int(100 / ($dlinfo{'REMOTESIZE'} / $size_updatefile))."%"; + } + print $percent; &percentbar($percent); + print < + +
+ + + +
+
\n
\n\n"; + &printlegenddownload(); + print "
\n"; + + &Header::closebox(); + } +} # ===================================================================================== # CACHE STATISTICS # ===================================================================================== @@ -422,6 +631,14 @@ foreach (@sources) { $vendorid=substr($_,rindex($_,'/')+1,length($_)); push(@vendors,$vendorid); + $vendorstats{$vendorid."_filesize"} = 0; + $vendorstats{$vendorid."_requests"} = 0; + $vendorstats{$vendorid."_files"} = 0; + $vendorstats{$vendorid."_cachehits"} = 0; + $vendorstats{$vendorid."_0"} = 0; + $vendorstats{$vendorid."_1"} = 0; + $vendorstats{$vendorid."_2"} = 0; + $vendorstats{$vendorid."_3"} = 0; @updatelist=<$_/*>; foreach $data (@updatelist) { @@ -432,14 +649,24 @@ foreach (@sources) close FILE; chomp($sourceurl); $updatefile = substr($sourceurl,rindex($sourceurl,'/')+1,length($sourceurl)); + + my $size_updatefile = 0; + if(-e "$data/$updatefile") { + $size_updatefile = (-s "$data/$updatefile"); + } + else + { + # DEBUG + #die "file not found: $data/$updatefile\n"; + } # # Total file size # - $filesize += (-s "$data/$updatefile"); + $filesize += $size_updatefile; # # File size for this source # - $vendorstats{$vendorid."_filesize"} += (-s "$data/$updatefile"); + $vendorstats{$vendorid."_filesize"} += $size_updatefile; # # Number of requests from cache for this source # @@ -470,11 +697,11 @@ foreach (@sources) # # Calculate cached traffic for this source # - $vendorstats{$vendorid."_cachehits"} += $counts * (-s "$data/$updatefile"); + $vendorstats{$vendorid."_cachehits"} += $counts * $size_updatefile; # # Calculate total cached traffic # - $cachedtraffic += $counts * (-s "$data/$updatefile"); + $cachedtraffic += $counts * $size_updatefile; } } @@ -742,6 +969,7 @@ foreach (@sources) $vendorid = substr($_,rindex($_,"/")+1); foreach(@updatelist) { + next if(/\.info$/); $updatefile = substr($_,rindex($_,"/")+1); $updatefile .= ":download/$vendorid/$updatefile"; $updatefile = " ".$updatefile; @@ -833,29 +1061,67 @@ if (@repositoryfiles) - - + - + - +
 $Lang::tr{'updxlrtr all files'} $Lang::tr{'updxlrtr not accessed'} + +  $Lang::tr{'updxlrtr not accessed'} + +
 $Lang::tr{'updxlrtr marked as'} +  $Lang::tr{'updxlrtr marked as'} + $Lang::tr{ [$Lang::tr{'updxlrtr condition nosource'}] $Lang::tr{'updxlrtr marked as'} +  $Lang::tr{'updxlrtr marked as'} + $Lang::tr{ [$Lang::tr{'updxlrtr condition outdated'}]

+END +; + + &printcurrentfiles($Lang::tr{'updxlrtr current files'}, @repositoryfiles); + print "
\n\n"; + &printlegendicons(); + &printlegendspacer(); + &printlegendstatus(); + &printlegendspacer(); + &printlegendsource(); + print "
\n"; +} + +&Header::closebox(); + +} + +# ===================================================================================== + +&Header::closebigbox(); + +&Header::closepage(); + +# ------------------------------------------------------------------- + +sub printcurrentfiles +{ + my $title = shift; + my @files = @_; + + print < $Lang::tr{'updxlrtr current files'} @@ -867,9 +1133,9 @@ if (@repositoryfiles)     - $Lang::tr{'updxlrtr filename'} - $Lang::tr{'updxlrtr filesize'} - $Lang::tr{'date'} + $Lang::tr{'updxlrtr filename'} + $Lang::tr{'updxlrtr filesize'} + $Lang::tr{'date'} $Lang::tr{ $Lang::tr{   @@ -877,19 +1143,26 @@ if (@repositoryfiles) END ; $id = 0; - foreach $updatefile (@repositoryfiles) + foreach $updatefile (@files) { $updatefile =~ s/.*://; + my $size_updatefile = 0; + my $mtime = 0; + if(-e "$repository/$updatefile") { + $size_updatefile = (-s "$repository/$updatefile"); + $mtime = &getmtime("$repository/$updatefile"); + } $id++; if ($id % 2) { print "\n"; } else { print "\n"; } - $filesize = (-s "$repository/$updatefile"); + + $filesize = $size_updatefile; 1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/; - my ($SECdt,$MINdt,$HOURdt,$DAYdt,$MONTHdt,$YEARdt) = localtime(&getmtime("$repository/$updatefile")); + my ($SECdt,$MINdt,$HOURdt,$DAYdt,$MONTHdt,$YEARdt) = localtime($mtime); $DAYdt = sprintf ("%.02d",$DAYdt); $MONTHdt = sprintf ("%.02d",$MONTHdt+1); $YEARdt = sprintf ("%.04d",$YEARdt+1900); @@ -1008,7 +1281,7 @@ END } $shortname = substr($updatefile,rindex($updatefile,"/")+1); - $shortname =~ s/(.*)_[\da-f]*(\.(exe|cab|psf)$)/\1_*\2/i; + $shortname =~ s/(.*)_[\da-f]*(\.(exe|cab|psf)$)/$1_*$2/i; print <$shortname @@ -1028,10 +1301,41 @@ END ; } -print < -
- + print "
\n"; + +} + +# ------------------------------------------------------------------- + +sub printlegenddownload +{ + print < +   $Lang::tr{'legend'}: +   + $Lang::tr{ + $Lang::tr{'updxlrtr condition download'} +   +   + $Lang::tr{ + $Lang::tr{'updxlrtr condition suspended'} +   +   + $Lang::tr{ + $Lang::tr{'updxlrtr cancel download'} + +END +; +} + +# ------------------------------------------------------------------- + +sub printlegendicons +{ + print <   $Lang::tr{'legend'}:   @@ -1047,9 +1351,15 @@ print <    - -
- +END +; +} + +# ------------------------------------------------------------------- + +sub printlegendstatus +{ + print <   $Lang::tr{'status'}:   @@ -1062,7 +1372,8 @@ print <$Lang::tr{ $Lang::tr{'updxlrtr condition outdated'}   -   +   +   @@ -1074,16 +1385,26 @@ print <$Lang::tr{ $Lang::tr{'updxlrtr condition unknown'}   -       -   +   +   +   +END +; +} + +# ------------------------------------------------------------------- + +sub printlegendsource +{ + print < -  
- - + + +   $Lang::tr{'updxlrtr source'}:   Adobe @@ -1131,51 +1452,49 @@ print <   - + END ; } -&Header::closebox(); +# ------------------------------------------------------------------- +sub printlegendspacer +{ + print < +  
+ +END +; } -# ===================================================================================== - -# ---------------------------------------------------- - -&Header::closebigbox(); - -&Header::closepage(); - # ------------------------------------------------------------------- sub savesettings { - if (-e $chk_cron_dly) { unlink($chk_cron_dly); } - if (-e $chk_cron_wly) { unlink($chk_cron_wly); } - if (-e $chk_cron_mly) { unlink($chk_cron_mly); } if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'daily')) { - symlink("../bin/checkup",$chk_cron_dly) - } else { - symlink("/bin/false",$chk_cron_dly) + system('/usr/local/bin/updxlratorctrl cron daily >/dev/null 2>&1'); } - if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'weekly')) + if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'weekly')) { - symlink("../bin/checkup",$chk_cron_wly) - } else { - symlink("/bin/false",$chk_cron_wly) + system('/usr/local/bin/updxlratorctrl cron weekly >/dev/null 2>&1'); } - if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'monthly')) + if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'monthly')) { - symlink("../bin/checkup",$chk_cron_mly) - } else { - symlink("/bin/false",$chk_cron_mly) + system('/usr/local/bin/updxlratorctrl cron monthly >/dev/null 2>&1'); } + # don't save those variable to the settings file, + # but we wan't to have them in the hash again after saving to file + my $obsolete = $xlratorsettings{'REMOVE_OBSOLETE'}; + my $nosource = $xlratorsettings{'REMOVE_NOSOURCE'}; + my $outdated = $xlratorsettings{'REMOVE_OUTDATED'}; + my $gui = $xlratorsettings{'EXTENDED_GUI'}; + delete($xlratorsettings{'REMOVE_OBSOLETE'}); delete($xlratorsettings{'REMOVE_NOSOURCE'}); delete($xlratorsettings{'REMOVE_OUTDATED'}); @@ -1183,6 +1502,12 @@ sub savesettings delete($xlratorsettings{'EXTENDED_GUI'}); &General::writehash("${General::swroot}/updatexlrator/settings", \%xlratorsettings); + + # put temp variables back into the hash + $xlratorsettings{'REMOVE_OBSOLETE'} = $obsolete; + $xlratorsettings{'REMOVE_NOSOURCE'} = $nosource; + $xlratorsettings{'REMOVE_OUTDATED'} = $outdated; + $xlratorsettings{'EXTENDED_GUI'} = $gui; } # ------------------------------------------------------------------- @@ -1224,3 +1549,18 @@ sub getmtime } # ------------------------------------------------------------------- + +sub getPID +{ + my $pid=''; + my @psdata=`ps ax --no-heading`; + + foreach (@psdata) + { + if (/$_[0]/) { ($pid)=/^\s*(\d+)/; } + } + + return $pid; +} + +# -------------------------------------------------------------------