summaryrefslogtreecommitdiff
blob: bc9f921f9d8de7808cb370278d5d67a56da7bae6 (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
#!/usr/bin/perl

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

my $upstream_url        = "http://grsecurity.net/test.php" ;

my $file_pattern	= "grsecurity-2.2.2-";
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  ;

        $parser = HTML::LinkExtor->new( undef, $upstream_url ) ;
        $parser->parse( get( $upstream_url ) )->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() ;