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 &::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) {
- &::msg($::who, "failed.");
- return;
+ my $retval = 'Linux kernel versions';
+ my @now = &kernelGetInfo();
+ if ( !scalar @now ) {
+ &::msg( $::who, "failed." );
+ return;
}
- foreach (@now) {
- &::msg($::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 @now = &kernelGetInfo();
my @old;
- if (!scalar @now) {
- &::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 (<IN>) {
- chop;
- push(@old,$_);
- }
- close IN;
+ return;
+ }
+ else {
+ open( IN, $file );
+ while (<IN>) {
+ chop;
+ push( @old, $_ );
+ }
+ close IN;
}
my @new;
- for(my $i=0; $i<scalar(@old); $i++) {
- next if ($old[$i] eq $now[$i]);
- push(@new, $now[$i]);
+ for ( my $i = 0 ; $i < scalar(@old) ; $i++ ) {
+ next if ( $old[$i] eq $now[$i] );
+ push( @new, $now[$i] );
}
- if (scalar @now != scalar @old) {
- &::DEBUG("kA: scalar mismatch; removing and exiting.");
- unlink $file;
- return;
+ if ( scalar @now != scalar @old ) {
+ &::DEBUG("kA: scalar mismatch; removing and exiting.");
+ unlink $file;
+ return;
}
- if (!scalar @new) {
- &::DEBUG("kA: no new kernels.");
- return;
+ 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;
}
1;
+
+# vim:ts=4:sw=4:expandtab:tw=80