X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=modulemanager;h=f00234994a4dfc59990a1128b46ec4f4f9edd250;hb=ecfa0d3847d96cd63ddb5c814f99d2020c8b0a2e;hp=ff2bd3056137768cba3fa6cf69b10bb989c12f0c;hpb=44f42a13de52c8025942ddab42f51feb36821782;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/modulemanager b/modulemanager index ff2bd3056..f00234994 100755 --- a/modulemanager +++ b/modulemanager @@ -21,9 +21,25 @@ use strict; use warnings FATAL => qw(all); -use LWP::Simple; -use make::configure; +BEGIN { + require 5.8.0; + push @INC, '.'; +} + +BEGIN { + # HACK: for some reason this needs to be in a second BEGIN block + # or it doesn't receive the updated @INC from above. + use make::configure; + unless (module_installed("LWP::Simple")) { + die "Your system is missing the LWP::Simple Perl module!"; + } + unless (module_installed("Crypt::SSLeay") || module_installed("IO::Socket::SSL")) { + die "Your system is missing the Crypt::SSLeay or IO::Socket::SSL Perl modules!"; + } +} + +use LWP::Simple; our @modlist; @@ -46,15 +62,20 @@ sub parse_url; # retrieve and parse entries from sources.list sub parse_url { - my $src = shift; + chomp(my $src = shift); return if $url_seen{$src}; $url_seen{$src}++; - my $doc = get($src); - die "Could not retrieve $_" unless defined $doc; + my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 }); + my $response = $ua->get($src); + + unless ($response->is_success) { + my $err = $response->message; + die "Could not retrieve $src: $err"; + } my $mod; - for (split /\n+/, $doc) { + for (split /\n+/, $response->content) { s/^\s+//; # ignore whitespace at start next if /^#/; if (/^module (\S+) (\S+) (\S+)/) { @@ -78,7 +99,7 @@ sub parse_url { $mod->{description} = $1; } elsif (/^mask (.*)/) { $mod->{mask} = $1; - } elsif (m#^source (http://\S+)#) { + } elsif (/^source (\S+)/) { parse_url $1; } else { print "Unknown line in $src: $_\n"; @@ -250,7 +271,7 @@ sub resolve_deps { } } -my $action = lc shift @ARGV; +my $action = $#ARGV >= 0 ? lc shift @ARGV : 'help'; if ($action eq 'install') { for my $mod (@ARGV) { @@ -333,11 +354,16 @@ for my $mod (sort keys %todo) { } $mod_versions{$mod} = $ver; - my $stat = getstore($url, "src/modules/$mod.cpp"); - if ($stat == 200) { + my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 }); + my $response = $ua->get($url); + + if ($response->is_success) { + open(MF, ">src/modules/$mod.cpp") or die "\nFilesystem not writable: $!"; + print MF $response->content; + close(MF); print " - done\n"; } else { - print " - HTTP $stat\n"; + printf "\nHTTP %s: %s\n", $response->code, $response->message; } }