From 30c8107e9c56d7d78dcf9136f94aeed9d631dfb3 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 4 Nov 2015 13:19:14 +0100 Subject: drop privileges in copy:// method as we do for file:// Continueing on the track of dropping privileges in all methods, lets drop it in copy, too, as the reasoning for it is very similar to file and the interaction between the too quiet interesting as copy kinda surfed as a fallback for file not being able to read the file. Both now show a better error message as well as it was previously claiming to have a hashsum mismatch, given that it couldn't read the file. Git-Dch: Ignore --- methods/file.cc | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) (limited to 'methods/file.cc') diff --git a/methods/file.cc b/methods/file.cc index 8a087c36d..4e3410078 100644 --- a/methods/file.cc +++ b/methods/file.cc @@ -21,6 +21,7 @@ #include #include #include +#include "aptmethod.h" #include #include @@ -28,24 +29,13 @@ #include /*}}}*/ -class FileMethod : public pkgAcqMethod +class FileMethod : public aptMethod { virtual bool Fetch(FetchItem *Itm) APT_OVERRIDE; - virtual bool Configuration(std::string Message) APT_OVERRIDE; public: - - FileMethod() : pkgAcqMethod("1.0",SingleInstance | SendConfig | LocalOnly) {}; + FileMethod() : aptMethod("file", "1.0", SingleInstance | SendConfig | LocalOnly) {}; }; -bool FileMethod::Configuration(std::string Message) -{ - if (pkgAcqMethod::Configuration(Message) == false) - return false; - - DropPrivsOrDie(); - - return true; -} // FileMethod::Fetch - Fetch a file /*{{{*/ // --------------------------------------------------------------------- @@ -78,6 +68,7 @@ bool FileMethod::Fetch(FetchItem *Itm) if (Res.IMSHit != true) RemoveFile("file", Itm->DestFile); + int olderrno = 0; // See if the file exists if (stat(File.c_str(),&Buf) == 0) { @@ -92,11 +83,10 @@ bool FileMethod::Fetch(FetchItem *Itm) Res.IMSHit = true; } - Hashes Hash(Itm->ExpectedHashes); - FileFd Fd(File, FileFd::ReadOnly); - Hash.AddFD(Fd); - Res.TakeHashes(Hash); + CalculateHashes(Itm, Res); } + else + olderrno = errno; if (Res.IMSHit == false) URIStart(Res); @@ -128,7 +118,10 @@ bool FileMethod::Fetch(FetchItem *Itm) else if (Res.Filename.empty() == false) URIDone(Res); else - return _error->Error(_("File not found")); + { + errno = olderrno; + return _error->Errno(File.c_str(), _("File not found")); + } return true; } -- cgit v1.2.3