X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=src%2FModules%2FKernel.pl;h=52c5c108ea5aebff69d1dd819e4bee285d4a9341;hb=0b8cc0cae8719a4a06ee34ec6bd99f911efc1d9c;hp=9d74a65b496507592bf0df99f8b41de01e731cfe;hpb=7ea50ad1d0e8dc5e851aa1c5db489de01e719d24;p=infobot.git diff --git a/src/Modules/Kernel.pl b/src/Modules/Kernel.pl index 9d74a65..52c5c10 100644 --- a/src/Modules/Kernel.pl +++ b/src/Modules/Kernel.pl @@ -7,126 +7,90 @@ package Kernel; -use IO::Socket; -use strict; - -### TODO: change this to http instead of finger? -my $server = "ftp.kernel.org"; -my $port = 79; -my $proto = getprotobyname('tcp'); - -###local $SIG{ALRM} = sub { die "alarm\n" }; - sub kernelGetInfo { -### return unless &main::loadPerlModule("IO::Socket"); - - my $socket = new IO::Socket; - - socket($socket, PF_INET, SOCK_STREAM, $proto) or return "error: socket: $!"; - eval { - alarm 15; - connect($socket, sockaddr_in($port, inet_aton($server))) or return "error: connect: $!"; - alarm 0; - }; - - my @retval; - - if ($@ && $@ ne "alarm\n") { # failed. - return; - } - - $socket->autoflush(1); # required. - - print $socket "\n"; - while (<$socket>) { - chop; - - s/\t//g; - s/\s$//; - s/\s+/ /g; - - next if ($_ eq ""); - - push(@retval, $_); - } - close $socket; - - @retval; + return &::getURL("http://www.kernel.org/kdist/finger_banner"); } sub Kernel { - my @now = &kernelGetInfo(); - if (!scalar @now) { - &main::msg($main::who, "failed."); - return; + my $retval = 'Linux kernel versions'; + my @now = &kernelGetInfo(); + if ( !scalar @now ) { + &::msg( $::who, "failed." ); + return; } - foreach (@now) { - &main::msg($main::who, $_); + foreach $line (@now) { + $line =~ s/The latest //; + $line =~ s/version //; + $line =~ s/of //; + $line =~ s/the //; + $line =~ s/Linux //; + $line =~ s/kernel //; + $line =~ s/tree //; + $line =~ s/ for stable//; + $line =~ s/ to stable kernels//; + $line =~ s/ for 2.4//; + $line =~ s/ for 2.2//; + $line =~ s/ is: */: /; + $retval .= ', ' . $line; } + &::performStrictReply($retval); } sub kernelAnnounce { - my $file = "$main::blootbot_base_dir/Temp/kernel.txt"; + my $file = "$::param{tempDir}/kernel.txt"; my @now = &kernelGetInfo(); my @old; - if (!scalar @now) { - &main::DEBUG("kA: failure to retrieve."); - return; + if ( !scalar @now ) { + &::DEBUG('kA: failure to retrieve.'); + return; } - if (! -f $file) { - open(OUT, ">$file"); - foreach (@now) { - print OUT "$_\n"; - } - close OUT; + if ( !-f $file ) { + open( OUT, ">$file" ); + foreach (@now) { + print OUT "$_\n"; + } + close OUT; - return; - } else { - open(IN, $file); - while () { - chop; - push(@old,$_); - } - close IN; + return; } - - my @new; - for(my $i=0; $i) { + chop; + push( @old, $_ ); + } + close IN; } - if (scalar @now != scalar @old) { - &main::DEBUG("kA: scalar mismatch; removing and exiting."); - unlink $file; - return; + my @new; + for ( my $i = 0 ; $i < scalar(@old) ; $i++ ) { + next if ( $old[$i] eq $now[$i] ); + push( @new, $now[$i] ); } - if (!scalar @new) { - &main::DEBUG("kA: no new kernels."); - return; + if ( scalar @now != scalar @old ) { + &::DEBUG("kA: scalar mismatch; removing and exiting."); + unlink $file; + return; } - my $chan; - my @chans = split(/[\s\t]+/, lc $main::param{'kernelAnnounce'}); - @chans = keys(%main::channels) unless (scalar @chans); - foreach $chan (@chans) { - next unless (&main::validChan($chan)); - - &main::status("sending kernel update to $chan."); - foreach (@new) { - &main::notice($chan, "Kernel: $_"); - } + if ( !scalar @new ) { + &::DEBUG("kA: no new kernels."); + return; } - open(OUT, ">$file"); + open( OUT, ">$file" ); foreach (@now) { - print OUT "$_\n"; + print OUT "$_\n"; } close OUT; + + return @new; } 1; + +# vim:ts=4:sw=4:expandtab:tw=80