X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=modulemanager;h=af5bf113caa6f75b1d16b43bfbb5c8b74d193bb0;hb=e6601069038c35c546fd3f3dce95024b0d13f1b4;hp=41c2c872c54fd3b8467e245b8475bbf6e6701938;hpb=a115cb04b75b27c661551b6395e79b4d96d0fdef;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/modulemanager b/modulemanager index 41c2c872c..af5bf113c 100755 --- a/modulemanager +++ b/modulemanager @@ -1,10 +1,40 @@ #!/usr/bin/env perl + +# +# InspIRCd -- Internet Relay Chat Daemon +# +# Copyright (C) 2008-2009 Robin Burchell +# +# This file is part of InspIRCd. InspIRCd is free software: you can +# redistribute it and/or modify it under the terms of the GNU General Public +# License as published by the Free Software Foundation, version 2. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + + use strict; use warnings FATAL => qw(all); -use LWP::Simple; use make::configure; +BEGIN { + 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; my %installed; @@ -26,15 +56,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->decoded_content) { s/^\s+//; # ignore whitespace at start next if /^#/; if (/^module (\S+) (\S+) (\S+)/) { @@ -141,10 +176,9 @@ my %todo = %installed; sub ver_cmp { ($a,$b) = @_ if @_; - # string versions first, git IDs - if ($a =~ /[a-z0-9]{40}/ or $b =~ /[a-z0-9]{40}/) + if ($a !~ /^[0-9.]+$/ or $b !~ /^[0-9.]+$/) { - # it's a string version. compare them as such. + # not a valid version number, don't try to sort return $a ne $b; } @@ -152,7 +186,7 @@ sub ver_cmp { my @a = split /\./, $a; my @b = split /\./, $b; push @a, 0 while $#a < $#b; - push @b, 0 while $#b < $#a; + push @b, ($_[2] || 0) while $#b < $#a; for my $i (0..$#a) { my $d = $a[$i] <=> $b[$i]; return $d if $d; @@ -163,13 +197,13 @@ sub ver_cmp { sub ver_in_range { my($ver, $range) = @_; return 1 unless defined $range; + my($l,$h) = ($range, $range); if ($range =~ /(.*)-(.*)/) { - my($l,$h) = ($1,$2); - return 0 if $l && ver_cmp($ver, $l) < 0; - return 0 if $h && ver_cmp($ver, $h) > 0; - return 1; + ($l,$h) = ($1,$2); } - return !ver_cmp($ver, $range); + return 0 if $l && ver_cmp($ver, $l) < 0; + return 0 if $h && ver_cmp($ver, $h, 9999) > 0; + return 1; } sub find_mod_in_range { @@ -231,7 +265,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) { @@ -314,11 +348,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->decoded_content; + close(MF); print " - done\n"; } else { - print " - HTTP $stat\n"; + printf "\nHTTP %s: %s\n", $response->code, $response->message; } }