de linuxmanr4, 3 años han pasado desde su publicación, escrito en Perl.
Enlace corto
http://gw.gd/MoFJ
Insertar vínculo
  1. #!/usr/bin/perl
  2. #
  3. # This code is distributed under the terms of the GPL
  4. #
  5. # (c) 2006-2009 marco.s - http://update-accelerator.advproxy.net
  6. #
  7. # Portions (c) 2008 by dotzball - http://www.blockouttraffic.de
  8. #
  9. # $Id: updxlrator,v 2.1 2009/08/16 00:00:00 marco.s Exp $
  10. #
  11.  
  12. use strict;
  13. use HTTP::Date;
  14.  
  15. $|=1;
  16.  
  17. my $swroot="/var/ipcop";
  18. my $updcachedir="/home/httpd/html/updatecache";
  19. my $apphome="/var/ipcop/updatexlrator";
  20. my $logfile="/var/log/updatexlrator/cache.log";
  21. my $wget="$apphome/bin/wget";
  22. my $debug=(-e "$apphome/debug");
  23. my $http_port='81';
  24. my %netsettings=();
  25. my %proxysettings=();
  26. my %xlratorsettings=();
  27. my $logging=0;
  28. my $passive_mode=0;
  29. my $maxusage=0;
  30. my $nice='';
  31. my @tmp=();
  32. my $request='';
  33. my $xlrator_url=0;
  34. my $source_url='';
  35. my $hostaddr='';
  36. my $username='';
  37. my $method='';
  38. my $unique = 0;
  39. my $mirror = 1;
  40.  
  41. readhash("${swroot}/ethernet/settings", \%netsettings);
  42.  
  43. if (-e "$swroot/updatexlrator/settings")
  44. {
  45.         &readhash("$swroot/updatexlrator/settings", \%xlratorsettings);
  46.         if ($xlratorsettings{'ENABLE_LOG'} eq 'on') { $logging=1; };
  47.         if ($xlratorsettings{'PASSIVE_MODE'} eq 'on') { $passive_mode=1; };
  48.         $maxusage=$xlratorsettings{'MAX_DISK_USAGE'};
  49.         if ($xlratorsettings{'LOW_DOWNLOAD_PRIORITY'} eq 'on') { $nice='/usr/bin/nice --adjustment=15 '; };
  50. }
  51. if (!$maxusage) { $maxusage=75; };
  52.  
  53.  
  54. # dotzball: check for dead downloads
  55. system("$apphome/bin/checkdeaddl &");
  56.  
  57.  
  58. while (<>) {
  59.  
  60.         $request=$_;
  61.  
  62.         @tmp=split(/ /,$request);
  63.         chomp(@tmp);
  64.  
  65.         $source_url = $tmp[0];
  66.         $hostaddr   = $tmp[1]; while ($hostaddr =~ /.*\/$/) { chop $hostaddr; }
  67.         $username   = $tmp[2]; if ($username eq '') { $username='-'; };
  68.         $method     = $tmp[3];
  69.  
  70.         $xlrator_url = $source_url;
  71.  
  72.         if (($method eq 'GET') || ($method eq 'HEAD'))
  73.         {
  74.  
  75.         # -----------------------------------------------------------
  76.         #  Section: Windows Update / Windows Downloads
  77.         # -----------------------------------------------------------
  78.  
  79.         if (
  80.             (($source_url =~ m@^http://[^/]*\.microsoft\.com/.*\.(exe|psf|msi|msp|msu|dmg|cab)$@i) ||
  81.              ($source_url =~ m@^http://[^/]*\.windowsupdate\.com/.*\.(exe|psf|msi|msp|msu|dmg|cab)$@i))
  82.         &&   ($source_url !~ m@^http://[^/]*\.microsoft\.com/.*(/autoupd|selfupdate/).*\.cab@i)
  83.         &&   ($source_url !~ m@\&@)
  84.            )
  85.         {
  86.                 $xlrator_url = &check_cache($source_url,$hostaddr,$username,"Microsoft",$unique);
  87.         }
  88.  
  89.         # -----------------------------------------------------------
  90.         #  Section: Adobe Downloads
  91.         # -----------------------------------------------------------
  92.  
  93.         if (
  94.             ($source_url =~ m@^http://(ar)?download\.adobe\.com/.*\.(exe|msi|bin|dmg|idx|gz)$@i) ||
  95.             ($source_url =~ m@^http://swupdl\.adobe\.com/updates/.*\.(exe|msi|bin|dmg|idx|gz|[a-z][a-z]_[A-Z][A-Z])$@i) ||
  96.             ($source_url =~ m@^http://swupmf\.adobe\.com/manifest/.*\.upd$@i)
  97.            )
  98.         {
  99.                 $xlrator_url = &check_cache($source_url,$hostaddr,$username,"Adobe",$unique);
  100.         }
  101.  
  102.         # -----------------------------------------------------------
  103.         #  Section: Linux Downloads
  104.         # -----------------------------------------------------------
  105.  
  106.         if ($source_url =~ m@^[h|f]t?tp://[^?]+\.(deb|rpm)$@i)
  107.         {
  108.                 $xlrator_url = &check_cache($source_url,$hostaddr,$username,"Linux",$mirror);
  109.         }
  110.  
  111.         # -----------------------------------------------------------
  112.         #  Section: Trend Micro Downloads
  113.         # -----------------------------------------------------------
  114.  
  115.         if (
  116.             ($source_url =~ m@^http://[^/]*\.trendmicro\.com/activeupdate/.*@i) &&
  117.             ($source_url !~ m@.*/tmnotify\.dat$@i) &&
  118.             ($source_url !~ m@.*/ini_xml\.zip$@i) &&
  119.             ($source_url !~ m@.*/server\.ini$@i)
  120.            )
  121.         {
  122.                 $xlrator_url = &check_cache($source_url,$hostaddr,$username,"TrendMicro",$mirror);
  123.         }
  124.  
  125.         # -----------------------------------------------------------
  126.         #  Section: Symantec Downloads
  127.         # -----------------------------------------------------------
  128.  
  129.         if ($source_url =~ m@^[h|f]tt?p://[^/]*\.symantec(liveupdate)?\.com/.*\.(exe|zip|vdb|xdb)$@i)
  130.         {
  131.                 $xlrator_url = &check_cache($source_url,$hostaddr,$username,"Symantec",$unique);
  132.         }
  133.  
  134.         # -----------------------------------------------------------
  135.         #  Section: Apple Downloads
  136.         # -----------------------------------------------------------
  137.  
  138.         if (
  139.             (($source_url =~ m@^http://swcdn\.apple\.com/content/downloads/.*\.(tar|pkg)$@i) ||
  140.              ($source_url =~ m@^http://appldnld\.apple\.com\.edgesuite\.net/.*\.(exe|dmg)$@i) ||
  141.              ($source_url =~ m@^http://.*\.g.akamai.net/.*/3093/1/.*\.(tar|pkg|dmg|exe)$@i))
  142.            )
  143.         {
  144.                 $xlrator_url = &check_cache($source_url,$hostaddr,$username,"Apple",$unique);
  145.         }
  146.  
  147.         # -----------------------------------------------------------
  148.         #  Section: Avast Downloads
  149.         # -----------------------------------------------------------
  150.  
  151.         if ($source_url =~ m@^http://download[\d]+\.avast\.com/.*\.(exe|vpu)$@i)
  152.         {
  153.                 $xlrator_url = &check_cache($source_url,$hostaddr,$username,"Avast",$mirror);
  154.         }
  155.  
  156.         # -----------------------------------------------------------
  157.  
  158.         }
  159.  
  160.         $request="$xlrator_url $hostaddr $username $method\n";
  161.  
  162.         print $request;
  163. }
  164.  
  165. # -------------------------------------------------------------------
  166.  
  167. sub readhash
  168. {
  169.         my $filename = $_[0];
  170.         my $hash = $_[1];
  171.         my ($var, $val);
  172.  
  173.         if (-e $filename)
  174.         {
  175.                 open(FILE, $filename) or die "Unable to read file $filename";
  176.                 while (<FILE>)
  177.                 {
  178.                         chop;
  179.                         ($var, $val) = split /=/, $_, 2;
  180.                         if ($var)
  181.                         {
  182.                                 $val =~ s/^\'//g;
  183.                                 $val =~ s/\'$//g;
  184.  
  185.                                 # Untaint variables read from hash
  186.                                 $var =~ /([A-Za-z0-9_-]*)/; $var = $1;
  187.                                 $val =~ /([\w\W]*)/; $val = $1;
  188.                                 $hash->{$var} = $val;
  189.                         }
  190.                 }
  191.                 close FILE;
  192.         }
  193. }
  194.  
  195. # -------------------------------------------------------------------
  196.  
  197. sub writelog
  198. {
  199.         if ($logging)
  200.         {
  201.                 open(LOGFILE,">>$logfile");
  202.                 print LOGFILE time." $_[0] $_[1] $_[2] $_[3] $_[4]\n";
  203.                 close(LOGFILE);
  204.         }
  205. }
  206.  
  207. # -------------------------------------------------------------------
  208.  
  209. sub debuglog
  210. {
  211.         if ($debug)
  212.         {
  213.                 open(LOGFILE,">>/var/log/updatexlrator/debug.log");
  214.                 my @now = localtime(time);
  215.                 printf LOGFILE "%04d-%02d-%02d %02d:%02d:%02d [%d] [%s] %s\n",$now[5]+1900,$now[4]+1,$now[3],$now[2],$now[1],$now[0],$$,"updxlrator",$_[0];
  216.                 close(LOGFILE);
  217.         }
  218. }
  219.  
  220. # -------------------------------------------------------------------
  221.  
  222. sub setcachestatus
  223. {
  224.         open (FILE,">>$_[0]");
  225.         print FILE "$_[1]\n";
  226.         close FILE;
  227. }
  228.  
  229. # -------------------------------------------------------------------
  230.  
  231. sub diskfree
  232. {
  233.         open(DF,"/bin/df --block-size=1 $_[0]|");
  234.         my @dfdata = <DF>;
  235.         close DF;
  236.         shift(@dfdata);
  237.         chomp(@dfdata);
  238.         my $dfstr = join(' ',@dfdata);
  239.         my ($device,$size,$used,$free,$percent,$mount) = split(' ',$dfstr);
  240.         if ($free =~ m/^(\d+)$/)
  241.         {
  242.                 return $free;
  243.         }
  244. }
  245.  
  246. # -------------------------------------------------------------------
  247.  
  248. sub diskusage
  249. {
  250.         open(DF,"/bin/df $_[0]|");
  251.         my @dfdata = <DF>;
  252.         close DF;
  253.         shift(@dfdata);
  254.         chomp(@dfdata);
  255.         my $dfstr = join(' ',@dfdata);
  256.         my ($device,$size,$used,$free,$percent,$mount) = split(' ',$dfstr);
  257.         if ($percent =~ m/^(\d+)%$/)
  258.         {
  259.                 $percent =~ s/%$//;
  260.                 return $percent;
  261.         }
  262. }
  263.  
  264. # -------------------------------------------------------------------
  265.  
  266. sub getmtime
  267. {
  268.         my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($_[0]);
  269.  
  270.         return $mtime;
  271. }
  272.  
  273. # -------------------------------------------------------------------
  274.  
  275. sub check_cache
  276. {
  277.         my $updsource="UPDCACHE";
  278.         my $updfile='';
  279.         my $cacheurl='';
  280.         my $vendorid='';
  281.         my $uuid='';
  282.         my @http_header=();
  283.         my $remote_size=0;
  284.         my $remote_mtime=0;
  285.         my $login='';
  286.         my $useragent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
  287.  
  288.         my $sourceurl=$_[0];
  289.         my $cfmirror=$_[4];
  290.  
  291.         $sourceurl =~ s@\%2f@/@ig;
  292.         $updfile = substr($sourceurl,rindex($sourceurl,"/")+1);
  293.         $updfile =~ s@\%20@ @ig;
  294.  
  295.         if ($cfmirror)
  296.         {
  297.                 $uuid = `echo $updfile | md5sum`;
  298.         } else {
  299.                 $uuid = `echo $sourceurl | md5sum`;
  300.         }
  301.  
  302.         $uuid =~ s/[^0-9a-f]//g;
  303.         $uuid =~ s/([a-f\d]{8})([a-f\d]{4})([a-f\d]{4})([a-f\d]{4})([a-f\d]{12})/$1-$2-$3-$4-$5/;
  304.  
  305.         $vendorid = $_[3];
  306.         $vendorid =~ tr/A-Z/a-z/;
  307.  
  308.         &debuglog("Processing URL $sourceurl");
  309.         &debuglog("Vendor ID is $vendorid");
  310.         &debuglog("UUID is $uuid");
  311.  
  312.         if (($proxysettings{'UPSTREAM_PROXY'}) && ($proxysettings{'UPSTREAM_USER'}))
  313.         {
  314.                 $login = "--proxy-user=\"$proxysettings{'UPSTREAM_USER'}\"";
  315.                 if ($proxysettings{'UPSTREAM_PASSWORD'})
  316.                 {
  317.                         $login .= " --proxy-password=\"$proxysettings{'UPSTREAM_PASSWORD'}\"";
  318.                 }
  319.         }
  320.  
  321.         if ($proxysettings{'UPSTREAM_PROXY'}) { &debuglog("Using upstream proxy $proxysettings{'UPSTREAM_PROXY'}"); }
  322.  
  323.         $ENV{'http_proxy'} = $proxysettings{'UPSTREAM_PROXY'};
  324.         @http_header = `$wget $login --user-agent="$useragent" --spider -S $sourceurl 2>&1`;
  325.         $ENV{'http_proxy'} = '';
  326.  
  327.         foreach (@http_header)
  328.         {
  329.                 chomp;
  330.                 if (/^\s*Content-Length:\s/) { $remote_size = $_; $remote_size =~ s/[^0-9]//g; }
  331.                 if (/^\s*Last-Modified:\s/) { $remote_mtime = $_; $remote_mtime =~ s/^\s*Last-Modified:\s//; $remote_mtime = HTTP::Date::str2time($remote_mtime) }
  332.         }
  333.  
  334.         if (
  335.                 (-e "$updcachedir/$vendorid/$uuid/$updfile") &&
  336.                 ($remote_size == (-s "$updcachedir/$vendorid/$uuid/$updfile")) &&
  337.                 ($remote_mtime == &getmtime("$updcachedir/$vendorid/$uuid/$updfile"))
  338.            )
  339.         {
  340.                 &debuglog("File exists in cache and is up to date");
  341.                 &debuglog("Retrieving file from cache ($updsource)");
  342.                 &setcachestatus("$updcachedir/$vendorid/$uuid/access.log",time);
  343.                 system("$apphome/bin/setperms $vendorid/$uuid/access.log");
  344.                 $cacheurl="http://$netsettings{'GREEN_ADDRESS'}:$http_port/updatecache/$vendorid/$uuid/$updfile";
  345.         }
  346.                 else
  347.         {
  348.                 if (-e "$updcachedir/$vendorid/$uuid/$updfile")
  349.                 {
  350.                         &debuglog("Local filesize: " . (-s "$updcachedir/$vendorid/$uuid/$updfile"));
  351.                         &debuglog("Local timestamp: " . &getmtime("$updcachedir/$vendorid/$uuid/$updfile"));
  352.                 } else { &debuglog("File not found in cache"); }
  353.                 $updsource="DLSOURCE";
  354.                 &debuglog("Remote filesize: $remote_size");
  355.                 &debuglog("Remote timestamp: $remote_mtime");
  356.                 &debuglog("Free disk space: " . &diskfree($updcachedir));
  357.                 &debuglog("Disk usage: " . &diskusage($updcachedir) . "% (max. $maxusage%)");
  358.                 if (-e "$updcachedir/download/$vendorid/$updfile") { &debuglog("File download/$vendorid/$updfile exists"); }
  359.                 &debuglog("Retrieving file from source ($updsource)");
  360.                 if ((!$passive_mode) && (&diskusage($updcachedir) <= $maxusage) && ($remote_size <= &diskfree($updcachedir)) && (!-e "$updcachedir/download/$vendorid/$updfile"))
  361.                 {
  362.                         &debuglog("Running command $nice$apphome/bin/download $vendorid $sourceurl $cfmirror &");
  363.                         system("$nice$apphome/bin/download $vendorid $sourceurl $cfmirror &");
  364.                 }
  365.                 $cacheurl=$sourceurl;
  366.         }
  367.  
  368.         &writelog($_[1],$_[2],$_[3],$updsource,$sourceurl);
  369.  
  370.         return $cacheurl;
  371. }
  372.  
  373. # -------------------------------------------------------------------

Respuestas a IPCop Update Accelerator rss

Título Nombre Lenguaje cuando
Re: IPCop Update + Avira linuxmanr4 perl 3 años han pasado desde su publicación.