#!/usr/bin/perl -w use strict; my $destdir="/usr/share/doc/rfc"; my $tempdir="tmp/rfc"; my $url="http://www.rfc-editor.org/rfc"; my $sendmailto=""; $sendmailto=$ENV{USER} if(@ARGV and $ARGV[0] eq "-m" and shift @ARGV); my $id="unknown"; undef $/; my ($mail,$template); if(@ARGV) { die "usage: $0 [-m] [] (defaults to reading an email from stdin)\n" if(1 != @ARGV or not $ARGV[0] =~ /^[1-9]\d*$/s); $id=$ARGV[0]; } else { $mail=; $template=<<'EOD'; --OtherAccess Content-Type:\s+Message/External-body;\s+access-type="mail-server";\s+server="RFC-INFO@RFC-EDITOR.ORG" Content-Type: text/plain Content-ID: <\d+.RFC@RFC-EDITOR.ORG> RETRIEVE: rfc DOC-ID: rfc\d+ --OtherAccess Content-Type:\s+Message/External-body;\s+name="rfc(\d+).txt";\s+site="ftp.isi.edu";\s+access-type="anon-ftp";\s+directory="in-notes" Content-Type: text/plain Content-ID: <\d+.RFC@RFC-EDITOR.ORG> \s+ --OtherAccess-- EOD if($mail =~ /$template/s) { $id=$1; $url="ftp://ftp.isi.edu/in-notes"; } else { $template=<<'EOD'; A new Request for Comments is now available in online RFC libraries. \n*\s*(?:BCP ?\d+|FYI ?\d+)?\s* RFC (\d+) EOD if($mail =~ /$template/s) { $id=$1; } else { &ptooey("regexp",1) } } } &ptooey("chdir") unless(chdir($tempdir)); &ptooey("lock") unless(link "mail.log","$id.lock"); &ptooey("duplicate",1,1) if(-f "$destdir/rfc$id.txt"); &ptooey("wget") if(system("wget --passive-ftp $url/rfc$id.txt >/dev/null 2>/dev/null")); &ptooey("size") unless(-s "rfc$id.txt"); &ptooey("chmod") unless(chmod(0644,"rfc$id.txt")); &ptooey("link") unless(link "rfc$id.txt","$destdir/rfc$id.txt"); &ptooey("unlink") unless(unlink "rfc$id.txt"); &ptooey("unlock") unless(unlink "$id.lock"); sub ptooey { my ($action,$noerrorstring,$exitclean)=@_; unlink("rfc$id.txt","$id.lock") if($id); if($sendmailto) { open(STDERR,"|mail -s 'grabrfc($id): $action' $sendmailto"); } print STDERR "grabrfc($id): $action"; print STDERR ": $!" unless($noerrorstring); print STDERR "\n"; close(STDERR); exit 0 if($exitclean); exit 111; } 0;