Browse Source

add hashsum support in apt-file download and add more tests

tags/debian/0.9.16
Michael Vogt 7 years ago
parent
commit
c1409d1be8
4 changed files with 60 additions and 0 deletions
  1. +11
    -0
      apt-pkg/contrib/fileutl.cc
  2. +1
    -0
      apt-pkg/contrib/fileutl.h
  3. +11
    -0
      cmdline/apt-helper.cc
  4. +37
    -0
      test/integration/test-apt-helper

+ 11
- 0
apt-pkg/contrib/fileutl.cc View File

@@ -1841,3 +1841,14 @@ std::string GetTempDir()

return string(tmpdir);
}

bool Rename(std::string From, std::string To)
{
if (rename(From.c_str(),To.c_str()) != 0)
{
_error->Error(_("rename failed, %s (%s -> %s)."),strerror(errno),
From.c_str(),To.c_str());
return false;
}
return true;
}

+ 1
- 0
apt-pkg/contrib/fileutl.h View File

@@ -164,6 +164,7 @@ bool RealFileExists(std::string File);
bool DirectoryExists(std::string const &Path) __attrib_const;
bool CreateDirectory(std::string const &Parent, std::string const &Path);
time_t GetModificationTime(std::string const &Path);
bool Rename(std::string From, std::string To);

std::string GetTempDir();



+ 11
- 0
cmdline/apt-helper.cc View File

@@ -44,6 +44,9 @@ bool DoDownloadFile(CommandLine &CmdL)
Fetcher.Setup(&Stat);
std::string download_uri = CmdL.FileList[1];
std::string targetfile = CmdL.FileList[2];
HashString hash;
if (CmdL.FileSize() > 3)
hash = HashString(CmdL.FileList[3]);
new pkgAcqFile(&Fetcher, download_uri, "", 0, "desc", "short-desc",
"dest-dir-ignored", targetfile);
Fetcher.Run();
@@ -52,6 +55,14 @@ bool DoDownloadFile(CommandLine &CmdL)
_error->Error(_("Download Failed"));
return false;
}
if(hash.empty() == false)
if(hash.VerifyFile(targetfile) == false)
{
_error->Error(_("HashSum Failed"));
Rename(targetfile, targetfile+".failed");
return false;
}

return true;
}



+ 37
- 0
test/integration/test-apt-helper View File

@@ -0,0 +1,37 @@
#!/bin/sh
set -e

TESTDIR=$(readlink -f $(dirname $0))
. $TESTDIR/framework

setupenvironment
configarchitecture "i386"

changetohttpswebserver

echo "foo" > aptarchive/foo

msgtest 'apt-file download-file md5sum'
apthelper -qq download-file http://localhost:8080/foo foo2 MD5Sum:d3b07384d113edec49eaa6238ad5ff00 && msgpass || msgfail
testfileequal foo2 'foo'

msgtest 'apt-file download-file sha1'
apthelper -qq download-file http://localhost:8080/foo foo1 SHA1:f1d2d2f924e986ac86fdf7b36c94bcdf32beec15 && msgpass || msgfail
testfileequal foo1 'foo'

msgtest 'apt-file download-file sha256'
apthelper -qq download-file http://localhost:8080/foo foo3 SHA256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c && msgpass || msgfail
testfileequal foo3 'foo'

msgtest 'apt-file download-file no-hash'
apthelper -qq download-file http://localhost:8080/foo foo4 && msgpass || msgfail
testfileequal foo4 'foo'

msgtest 'apt-file download-file wrong hash'
if ! apthelper -qq download-file http://localhost:8080/foo foo5 MD5Sum:aabbcc 2>&1 2> download.stderr; then
msgpass
else
msgfail
fi
testfileequal download.stderr 'E: HashSum Failed'
testfileequal foo5.failed 'foo'

Loading…
Cancel
Save