X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/6aef1942f441e6e667982b92802907026d8cc7c6..d27daedb6a0bf672508072100f20233d08ccf0e0:/apt-pkg/acquire.cc diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc index e61f4192d..3010f55aa 100644 --- a/apt-pkg/acquire.cc +++ b/apt-pkg/acquire.cc @@ -428,20 +428,30 @@ void pkgAcquire::SetFds(int &Fd,fd_set *RSet,fd_set *WSet) } } /*}}}*/ -// Acquire::RunFds - Deal with active FDs /*{{{*/ +// Acquire::RunFds - compatibility remove on next abi/api break /*{{{*/ +void pkgAcquire::RunFds(fd_set *RSet,fd_set *WSet) +{ + RunFdsSane(RSet, WSet); +}; + /*}}}*/ +// Acquire::RunFdsSane - Deal with active FDs /*{{{*/ // --------------------------------------------------------------------- /* Dispatch active FDs over to the proper workers. It is very important that a worker never be erased while this is running! The queue class should never erase a worker except during shutdown processing. */ -void pkgAcquire::RunFds(fd_set *RSet,fd_set *WSet) +bool pkgAcquire::RunFdsSane(fd_set *RSet,fd_set *WSet) { + bool Res = true; + for (Worker *I = Workers; I != 0; I = I->NextAcquire) { if (I->InFd >= 0 && FD_ISSET(I->InFd,RSet) != 0) - I->InFdReady(); + Res &= I->InFdReady(); if (I->OutFd >= 0 && FD_ISSET(I->OutFd,WSet) != 0) - I->OutFdReady(); + Res &= I->OutFdReady(); } + + return Res; } /*}}}*/ // Acquire::Run - Run the fetch sequence /*{{{*/ @@ -497,7 +507,11 @@ static void CheckDropPrivsMustBeDisabled(pkgAcquire const &Fetcher) struct passwd const * const pw = getpwnam(SandboxUser.c_str()); if (pw == NULL) + { + _error->Warning(_("No sandbox user '%s' on the system, can not drop privileges"), SandboxUser.c_str()); + _config->Set("APT::Sandbox::User", ""); return; + } gid_t const old_euid = geteuid(); gid_t const old_egid = getegid(); @@ -604,7 +618,8 @@ pkgAcquire::RunResult pkgAcquire::Run(int PulseIntervall) break; } - RunFds(&RFds,&WFds); + if(RunFdsSane(&RFds,&WFds) == false) + break; // Timeout, notify the log class if (Res == 0 || (Log != 0 && Log->Update == true)) @@ -715,7 +730,7 @@ bool pkgAcquire::Clean(string Dir) /* This is the total number of bytes needed */ APT_PURE unsigned long long pkgAcquire::TotalNeeded() { - return std::accumulate(ItemsBegin(), ItemsEnd(), 0, + return std::accumulate(ItemsBegin(), ItemsEnd(), 0llu, [](unsigned long long const T, Item const * const I) { return T + I->FileSize; }); @@ -726,7 +741,7 @@ APT_PURE unsigned long long pkgAcquire::TotalNeeded() /* This is the number of bytes that is not local */ APT_PURE unsigned long long pkgAcquire::FetchNeeded() { - return std::accumulate(ItemsBegin(), ItemsEnd(), 0, + return std::accumulate(ItemsBegin(), ItemsEnd(), 0llu, [](unsigned long long const T, Item const * const I) { if (I->Local == false) return T + I->FileSize; @@ -740,7 +755,7 @@ APT_PURE unsigned long long pkgAcquire::FetchNeeded() /* This is the number of bytes that is not local */ APT_PURE unsigned long long pkgAcquire::PartialPresent() { - return std::accumulate(ItemsBegin(), ItemsEnd(), 0, + return std::accumulate(ItemsBegin(), ItemsEnd(), 0llu, [](unsigned long long const T, Item const * const I) { if (I->Local == false) return T + I->PartialSize;