4 $spool_dir = "./spool";
18 # try lookup some file in spool, exit if it cannot be done
19 sub find_file_in_spool()
21 opendir(DIR, $spool_dir) || die "can't opendir $spool_dir: $!";
25 -f "$spool_dir/$f" or next;
26 $file = "$spool_dir/$f";
31 exit 0 if ($file eq "");
34 # read file from spool, and try unlink it. if cannot unlink -- exit
35 # sets $requester (email), $problems, @md5 (arrays of md5's)
36 # and %url (map from md5 to urls)
39 open(F, "< $file") || exit 0;
42 $requester =~ /^[a-zA-Z_\-0-9\@\.]+$/
43 or die "$file: evil requester: $requester";
45 $force_reply++ if ($flags =~ /force-reply/);
53 /^([a-f0-9]{32})\s+((ftp|http):\/\/([a-z0-9A-Z:\+\~\.\-\/_]|\%[0-9])+)\s*$/
54 or die "$file: corrupted";
57 /\/$/ and die "$file: cannot fetch dir";
61 unlink($file) || exit 0;
69 my $md5_dir = "$ftp_dir/by-md5/$1/$2/$md5";
70 $url =~ /\/([^\/]+)$/ or die;
72 return "$md5_dir/$basename";
79 $dir =~ /(.*)\/[^\/]+$/ and install_dir($1);
87 my $path = file_path($md5, $url);
89 $path =~ /(.*)\/[^\/]+$/ and install_dir($1);
91 if (system("mv -f \"tmp/$md5\" \"$path\"")) {
92 $problems .= "FATAL: cannot mv file ($url)\n";
94 if (open(D, "> $path.desc")) {
95 print D "URL: $url\n";
96 print D "MD5: $md5\n";
97 print D 'Fetched-by: $Id$'."\n";
100 $problems .= "ERROR: cannot write $path.desc\n";
104 $md5 =~ /^(..)/ and my $m2 = $1;
106 if (open(L, ">> $ENV{HOME}/.lists/lista_$m2")) {
107 print L "/home/ftp/pub/Linux/distfiles/by-md5/$1/$2/$md5/";
108 $url =~ /\/([^\/]+)$/;
113 $normal_out .= "STORED: $url ($md5, " . (-s $path) . " bytes)\n";
120 my ($md5, $url) = @_;
122 my $cmd = "wget -nv -O tmp/$md5 \"$url\"";
124 my $path = file_path($md5, $url);
126 $normal_out .= "ALREADY GOT: $url ($md5, " . (-s $path) . " bytes)\n";
130 open(W, "$cmd 2>&1 |");
132 /URL:.*\s+\-\>\s+.*/ and next;
137 $problems .= "$cmd:\n$out\n\n";
139 if (-f "tmp/$md5" && -s "tmp/$md5" > 0) {
140 my $computed_md5 = `md5sum tmp/$md5`;
141 $computed_md5 =~ /^([a-f0-9]{32})/ and $computed_md5 = $1;
142 if ($computed_md5 ne $md5) {
143 $problems .= "FATAL: $url md5 mismatch, needed $md5, got $computed_md5\n";
145 move_file($md5, $url);
148 $problems .= "FATAL: $url ($md5) was not fetched\n";
155 $problems .= "\n\n" if ($problems ne "");
156 foreach $md5 (@md5) {
157 fetch_file($md5, $url{$md5});
163 open(EMAIL, "| /usr/sbin/sendmail -t");
164 #open(EMAIL, "| cat");
166 if ($problems ne "") {
170 "From: distfiles <feedback\@pld-linux.org>
173 Subject: [distfiles] sources fetched $marker
174 Message-ID: <$$." . time . "\@distfiles.pld-linux.org>
175 X-distfiles-program: file-fetcher.pl
176 X-distfiles-version: " . '$Id$' . "
179 Files fetched: $fetched_count
184 Virtually Yours: distfiles.
189 find_file_in_spool();
192 send_email() unless (!$force_reply and $problems eq "" and $fetched_count == 0);