summaryrefslogtreecommitdiff
path: root/apt-private/private-download.cc
diff options
context:
space:
mode:
authorMichael Vogt <mvo@ubuntu.com>2014-11-06 08:55:06 +0100
committerMichael Vogt <mvo@ubuntu.com>2014-11-06 08:55:06 +0100
commit9397ea947c23c0957a683152360909810340abce (patch)
tree6b29e35b9ef602c15d0aab20eefdec3138eb4692 /apt-private/private-download.cc
parent87ecd6a2d719aeaeedd99dd500b467e966376f1c (diff)
parent6e2261d0f250406058d66b360080aa986953ae19 (diff)
Merge remote-tracking branch 'upstream/debian/experimental' into feature/no-more-acquire-guessing
Conflicts: apt-pkg/acquire-item.cc
Diffstat (limited to 'apt-private/private-download.cc')
-rw-r--r--apt-private/private-download.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/apt-private/private-download.cc b/apt-private/private-download.cc
index 8cabf14b5..37fae18e9 100644
--- a/apt-private/private-download.cc
+++ b/apt-private/private-download.cc
@@ -49,16 +49,23 @@ bool CheckDropPrivsMustBeDisabled(pkgAcquire &Fetcher) /*{{{*/
for (pkgAcquire::ItemIterator I = Fetcher.ItemsBegin();
I != Fetcher.ItemsEnd() && res == true; ++I)
{
- int fd = open((*I)->DestFile.c_str(), O_CREAT | O_RDWR, 0600);
+ if ((*I)->DestFile.empty())
+ continue;
+ // we assume that an existing (partial) file means that we have sufficient rights
+ if (RealFileExists((*I)->DestFile))
+ continue;
+ int fd = open((*I)->DestFile.c_str(), O_CREAT | O_EXCL | O_RDWR, 0600);
if (fd < 0)
{
res = false;
std::string msg;
strprintf(msg, _("Can't drop privileges for downloading as file '%s' couldn't be accessed by user '%s'."),
(*I)->DestFile.c_str(), SandboxUser.c_str());
- c0out << msg << std::endl;
+ std::cerr << "W: " << msg << std::endl;
_config->Set("APT::Sandbox::User", "");
+ break;
}
+ unlink((*I)->DestFile.c_str());
close(fd);
}