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 $retval = 'Linux kernel versions';
my @now = &kernelGetInfo();
if (!scalar @now) {
- &main::msg($main::who, "failed.");
+ &::msg($::who, "failed.");
return;
}
- foreach (@now) {
- &main::msg($main::who, $_);
+ if ($::who =~ /^\#/) {
+ &::msg($::who, "No, I won't harass the entire channel.");
+ return undef;
+ }
+
+ 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.");
+ &::DEBUG('kA: failure to retrieve.');
return;
}
}
if (scalar @now != scalar @old) {
- &main::DEBUG("kA: scalar mismatch; removing and exiting.");
+ &::DEBUG("kA: scalar mismatch; removing and exiting.");
unlink $file;
return;
}
if (!scalar @new) {
- &main::DEBUG("kA: no new kernels.");
+ &::DEBUG("kA: no new kernels.");
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: $_");
- }
- }
-
open(OUT, ">$file");
foreach (@now) {
print OUT "$_\n";
}
close OUT;
+
+ return @new;
}
1;
+
+# vim:ts=4:sw=4:expandtab:tw=80