summaryrefslogtreecommitdiff
blob: 80e95ef1efd06055e4fb7668fa98d5d4318e6584 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/perl

use strict ;
use LWP::Simple ; ;
use HTML::LinkExtor ;

my @upstream_url	=
(
	"http://grsecurity.net/test.php",
	"http://grsecurity.net/download_stable.php"
) ;

my $file_pattern	= "grsecurity-";
my @allowed_suffixes	= ( ".patch", ".patch.sig" ) ;

my %currently_available = () ;


sub sane
{
	my ( $name ) = @_ ;

	return 0 if $name eq "" ;
	return 0 if $name =~ / / ;

	my $got_suffix = 0 ;
	foreach my $suffix ( @allowed_suffixes )
	{
		$got_suffix = 1 if $name =~ /$suffix$/ ;
	}

	return $got_suffix ;
}


sub get_currently_available
{
	my $parser ;
	my @links  ;

	foreach my $uurl ( @upstream_url )
	{
		$parser = HTML::LinkExtor->new( undef, $uurl ) ;
		$parser->parse( get( $uurl ) )->eof ;

		@links = $parser->links ;

		foreach my $ref ( @links )
		{
			my $file_url    = ${$ref}[2] ;
			my $file_name   = $file_url ;
			$file_name      =~ s/^.*\/(.*)$/$1/ ;

			next unless sane( $file_name ) ;

			$currently_available{ $file_name } = $file_url ;
		}
	}
}


sub download_newly_available
{
	my $downloads = "" ;

	foreach my $file_name ( sort keys %currently_available )
	{
		next unless $file_name =~ /$file_pattern/ ;
		print "\tDownloading $file_name ... " ;
		my $file_url = $currently_available{ $file_name } ;
		if ( getstore( $file_url, $file_name ) )
		{
			print "OK\n" ;
			$downloads .= "\t$file_name\n" ;
		}
		else
		{
			print "FAIL\n" ;
		}
	}

	return $downloads ;
}


sub print_successful_downloads
{
	my ( $downloads ) = @_ ;

	if( $downloads ne "" )
	{
		print "\n\nSuccessfully downloaded files from upstream:\n\n" ;
		print $downloads ;
		print "\n\n" ;
	}
	else
	{
		print "\n\nNo files downloaded from upstream --- nothing to report.\n\n" ;
		print "\n\n" ;
	}
}


sub main
{
	get_currently_available() ;
	my $downloads = download_newly_available() ;

	print_successful_downloads( $downloads ) ;
}

main() ;