more or less "the final" dpb pieces for fetching as a separate user.

This commit is contained in:
espie 2015-04-27 13:32:57 +00:00
parent 8305696d7b
commit c148e02ce4
4 changed files with 44 additions and 16 deletions

View File

@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
# $OpenBSD: Fetch.pm,v 1.63 2014/03/17 10:48:40 espie Exp $
# $OpenBSD: Fetch.pm,v 1.64 2015/04/27 13:32:57 espie Exp $
#
# Copyright (c) 2010-2013 Marc Espie <espie@openbsd.org>
#
@ -22,6 +22,7 @@ use OpenBSD::md5;
# handles fetch information, if required
package DPB::Fetch;
our @ISA = (qw(DPB::UserProxy));
sub new
{
@ -30,6 +31,7 @@ sub new
logger => $logger,
known_sha => {}, known_files => {},
known_short => {},
user => $state->{fetch_user},
fetch_only => $state->{fetch_only}}, $class;
if (defined $state->{subst}->value('FTP_ONLY')) {
$o->{ftp_only} = 1;
@ -105,7 +107,7 @@ sub run_expire_old
$core->unsquiggle;
$core->start_job(DPB::Job::Normal->new(
sub {
$self->expire_old;
$self->run_as(sub { $self->expire_old; });
},
sub {
# and we will never need this again
@ -292,7 +294,8 @@ sub fetch
{
my ($self, $file, $core, $endcode) = @_;
require DPB::Job::Fetch;
my $job = DPB::Job::Fetch->new($file, $endcode);
my $job = DPB::Job::Fetch->new($file, $endcode, $self,
$self->{logger});
$core->start_job($job, $file);
}

View File

@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
# $OpenBSD: Fetch.pm,v 1.3 2015/04/25 11:24:24 espie Exp $
# $OpenBSD: Fetch.pm,v 1.4 2015/04/27 13:32:57 espie Exp $
#
# Copyright (c) 2010-2013 Marc Espie <espie@openbsd.org>
#
@ -30,7 +30,10 @@ sub run
{
my ($self, $core) = @_;
my $job = $core->job;
$self->redirect_fh($job->{logfh}, $job->{log});
$job->{logger}->run_as(
sub {
$self->redirect_fh($job->{logfh}, $job->{log});
});
exit(!$job->{file}->checksum($job->{file}->tempfilename));
}
@ -44,13 +47,19 @@ sub finalize
# got a stupid error message instead, so retry for
# full size.
if (defined $self->{fetcher}->{initial_sz}) {
unlink($job->{file}->tempfilename);
$job->{fetcher}->run_as(
sub {
unlink($job->{file}->tempfilename);
});
} else {
shift @{$job->{sites}};
}
return $job->bad_file($self->{fetcher}, $core);
}
rename($job->{file}->tempfilename, $job->{file}->filename);
$job->{fetcher}->run_as(
sub {
rename($job->{file}->tempfilename, $job->{file}->filename);
});
print {$job->{logfh}} "Renamed to ", $job->{file}->filename, "\n";
$job->{file}->cache;
my $sz = $job->{file}->{sz};
@ -103,7 +112,10 @@ sub run
my $shell = $core->shell;
my $site = $self->{site};
$site =~ s/^\"(.*)\"$/$1/;
$self->redirect($job->{log});
$job->{logger}->run_as(
sub {
$self->redirect($job->{log});
});
if ($job->{file}{sz} == 0) {
print STDERR "No size in distinfo\n";
exit(1);
@ -119,7 +131,7 @@ sub run
print STDERR "===> Trying $site\n";
print STDERR join(' ', @cmd), "\n";
# run ftp;
$core->shell->nochroot->exec(@cmd);
$core->shell->nochroot->run_as($job->{fetcher}{user})->exec(@cmd);
}
sub finalize
@ -139,7 +151,10 @@ sub finalize
# definite error also if file is too large
stat($job->{file}->tempfilename) &&
(stat _)[7] > $job->{file}->{sz}) {
unlink($job->{file}->tempfilename);
$job->{fetcher}->run_as(
sub {
unlink($job->{file}->tempfilename);
});
}
# if we got suspended, well, might have to retry same site
if (!$self->{got_suspended}) {
@ -190,17 +205,22 @@ sub new_checksum_task
sub new
{
my ($class, $file, $e) = @_;
my ($class, $file, $e, $fetcher, $logger) = @_;
my $job = bless {
sites => [@{$file->{site}}],
file => $file,
tasks => [],
endcode => $e,
fetcher => $fetcher,
logger => $logger,
log => $file->logger->make_distlogs($file),
}, $class;
open $job->{logfh}, '>>', $job->{log};
$job->{logger}->run_as(
sub {
open $job->{logfh}, '>>', $job->{log};
});
print {$job->{logfh}} ">>> From ", $file->fullpkgpath, "\n";
File::Path::mkpath(File::Basename::dirname($file->filename));
$job->{fetcher}->make_path(File::Basename::dirname($file->filename));
$job->{watched} = DPB::Watch->new($file->tempfilename,
$file->{sz}, undef, $job->{started});
$job->new_fetch_task;

View File

@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
# $OpenBSD: State.pm,v 1.11 2015/04/26 18:00:19 espie Exp $
# $OpenBSD: State.pm,v 1.12 2015/04/27 13:32:57 espie Exp $
#
# Copyright (c) 2010-2013 Marc Espie <espie@openbsd.org>
#
@ -195,6 +195,11 @@ sub grabber
return shift->{grabber};
}
sub fetch
{
return shift->{grabber}{fetch};
}
sub make
{
return shift->{make};

View File

@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
# $OpenBSD: Fetch.pm,v 1.3 2013/10/26 06:51:28 espie Exp $
# $OpenBSD: Fetch.pm,v 1.4 2015/04/27 13:32:57 espie Exp $
#
# Copyright (c) 2010-2013 Marc Espie <espie@openbsd.org>
#
@ -49,7 +49,7 @@ sub start_build
{
my ($self, $v, $core, $lock) = @_;
$self->log('J', $v);
DPB::Fetch->fetch($v, $core,
$self->{engine}{state}->fetch->fetch($v, $core,
sub {
$self->end($core, $v, $core->{status});
});