Sfoglia il codice sorgente

Merge remote-tracking branch 'donkult/debian/sid' into debian/sid

Michael Vogt 13 anni fa
parent
commit
b55e706a87

+ 1 - 1
apt-pkg/deb/deblistparser.cc

@@ -805,7 +805,7 @@ bool debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator &FileI,
    map_ptrloc const storage = WriteUniqString(component);
    map_ptrloc const storage = WriteUniqString(component);
    FileI->Component = storage;
    FileI->Component = storage;
 
 
-   pkgTagFile TagFile(&File);
+   pkgTagFile TagFile(&File, File.Size());
    pkgTagSection Section;
    pkgTagSection Section;
    if (_error->PendingError() == true || TagFile.Step(Section) == false)
    if (_error->PendingError() == true || TagFile.Step(Section) == false)
       return false;
       return false;

+ 15 - 5
apt-pkg/deb/dpkgpm.cc

@@ -382,24 +382,32 @@ bool pkgDPkgPM::RunScriptsWithPkgs(const char *Cnf)
       OptSec = "DPkg::Tools::Options::" + string(Opts->Value.c_str(),Pos);
       OptSec = "DPkg::Tools::Options::" + string(Opts->Value.c_str(),Pos);
       
       
       unsigned int Version = _config->FindI(OptSec+"::Version",1);
       unsigned int Version = _config->FindI(OptSec+"::Version",1);
+      unsigned int InfoFD = _config->FindI(OptSec + "::InfoFD", STDIN_FILENO);
       
       
       // Create the pipes
       // Create the pipes
       int Pipes[2];
       int Pipes[2];
       if (pipe(Pipes) != 0)
       if (pipe(Pipes) != 0)
 	 return _error->Errno("pipe","Failed to create IPC pipe to subprocess");
 	 return _error->Errno("pipe","Failed to create IPC pipe to subprocess");
-      SetCloseExec(Pipes[0],true);
+      if (InfoFD != (unsigned)Pipes[0])
+	 SetCloseExec(Pipes[0],true);
+      else
+	 _config->Set("APT::Keep-Fds::", Pipes[0]);
       SetCloseExec(Pipes[1],true);
       SetCloseExec(Pipes[1],true);
-      
+
       // Purified Fork for running the script
       // Purified Fork for running the script
-      pid_t Process = ExecFork();      
+      pid_t Process = ExecFork();
       if (Process == 0)
       if (Process == 0)
       {
       {
 	 // Setup the FDs
 	 // Setup the FDs
-	 dup2(Pipes[0],STDIN_FILENO);
+	 dup2(Pipes[0], InfoFD);
 	 SetCloseExec(STDOUT_FILENO,false);
 	 SetCloseExec(STDOUT_FILENO,false);
-	 SetCloseExec(STDIN_FILENO,false);      
+	 SetCloseExec(STDIN_FILENO,false);
 	 SetCloseExec(STDERR_FILENO,false);
 	 SetCloseExec(STDERR_FILENO,false);
 
 
+	 string hookfd;
+	 strprintf(hookfd, "%d", InfoFD);
+	 setenv("APT_HOOK_INFO_FD", hookfd.c_str(), 1);
+
 	 dpkgChrootDirectory();
 	 dpkgChrootDirectory();
 	 const char *Args[4];
 	 const char *Args[4];
 	 Args[0] = "/bin/sh";
 	 Args[0] = "/bin/sh";
@@ -409,6 +417,8 @@ bool pkgDPkgPM::RunScriptsWithPkgs(const char *Cnf)
 	 execv(Args[0],(char **)Args);
 	 execv(Args[0],(char **)Args);
 	 _exit(100);
 	 _exit(100);
       }
       }
+      if (InfoFD == (unsigned)Pipes[0])
+	 _config->Clear("APT::Keep-Fds", Pipes[0]);
       close(Pipes[0]);
       close(Pipes[0]);
       FILE *F = fdopen(Pipes[1],"w");
       FILE *F = fdopen(Pipes[1],"w");
       if (F == 0)
       if (F == 0)

+ 1 - 1
apt-pkg/indexrecords.cc

@@ -62,7 +62,7 @@ bool indexRecords::Load(const string Filename)				/*{{{*/
    if (OpenMaybeClearSignedFile(Filename, Fd) == false)
    if (OpenMaybeClearSignedFile(Filename, Fd) == false)
       return false;
       return false;
 
 
-   pkgTagFile TagFile(&Fd);
+   pkgTagFile TagFile(&Fd, Fd.Size());
    if (_error->PendingError() == true)
    if (_error->PendingError() == true)
    {
    {
       strprintf(ErrorText, _("Unable to parse Release file %s"),Filename.c_str());
       strprintf(ErrorText, _("Unable to parse Release file %s"),Filename.c_str());

+ 37 - 22
apt-pkg/tagfile.cc

@@ -50,21 +50,27 @@ public:
 /* */
 /* */
 pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long long Size)
 pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long long Size)
 {
 {
+   /* The size is increased by 4 because if we start with the Size of the
+      filename we need to try to read 1 char more to see an EOF faster, 1
+      char the end-pointer can be on and maybe 2 newlines need to be added
+      to the end of the file -> 4 extra chars */
+   Size += 4;
    d = new pkgTagFilePrivate(pFd, Size);
    d = new pkgTagFilePrivate(pFd, Size);
 
 
    if (d->Fd.IsOpen() == false)
    if (d->Fd.IsOpen() == false)
-   {
       d->Start = d->End = d->Buffer = 0;
       d->Start = d->End = d->Buffer = 0;
+   else
+      d->Buffer = (char*)malloc(sizeof(char) * Size);
+
+   if (d->Buffer == NULL)
       d->Done = true;
       d->Done = true;
-      d->iOffset = 0;
-      return;
-   }
-   
-   d->Buffer = new char[Size];
+   else
+      d->Done = false;
+
    d->Start = d->End = d->Buffer;
    d->Start = d->End = d->Buffer;
-   d->Done = false;
    d->iOffset = 0;
    d->iOffset = 0;
-   Fill();
+   if (d->Done == false)
+      Fill();
 }
 }
 									/*}}}*/
 									/*}}}*/
 // TagFile::~pkgTagFile - Destructor					/*{{{*/
 // TagFile::~pkgTagFile - Destructor					/*{{{*/
@@ -72,11 +78,11 @@ pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long long Size)
 /* */
 /* */
 pkgTagFile::~pkgTagFile()
 pkgTagFile::~pkgTagFile()
 {
 {
-   delete [] d->Buffer;
+   free(d->Buffer);
    delete d;
    delete d;
 }
 }
 									/*}}}*/
 									/*}}}*/
-// TagFile::Offset - Return the current offset in the buffer     	/*{{{*/
+// TagFile::Offset - Return the current offset in the buffer		/*{{{*/
 unsigned long pkgTagFile::Offset()
 unsigned long pkgTagFile::Offset()
 {
 {
    return d->iOffset;
    return d->iOffset;
@@ -89,19 +95,22 @@ unsigned long pkgTagFile::Offset()
  */
  */
 bool pkgTagFile::Resize()
 bool pkgTagFile::Resize()
 {
 {
-   char *tmp;
-   unsigned long long EndSize = d->End - d->Start;
-
    // fail is the buffer grows too big
    // fail is the buffer grows too big
    if(d->Size > 1024*1024+1)
    if(d->Size > 1024*1024+1)
       return false;
       return false;
 
 
+   return Resize(d->Size * 2);
+}
+bool pkgTagFile::Resize(unsigned long long const newSize)
+{
+   unsigned long long const EndSize = d->End - d->Start;
+
    // get new buffer and use it
    // get new buffer and use it
-   tmp = new char[2*d->Size];
-   memcpy(tmp, d->Buffer, d->Size);
-   d->Size = d->Size*2;
-   delete [] d->Buffer;
-   d->Buffer = tmp;
+   char* newBuffer = (char*)realloc(d->Buffer, sizeof(char) * newSize);
+   if (newBuffer == NULL)
+      return false;
+   d->Buffer = newBuffer;
+   d->Size = newSize;
 
 
    // update the start/end pointers to the new buffer
    // update the start/end pointers to the new buffer
    d->Start = d->Buffer;
    d->Start = d->Buffer;
@@ -152,9 +161,10 @@ bool pkgTagFile::Fill()
    if (d->Done == false)
    if (d->Done == false)
    {
    {
       // See if only a bit of the file is left
       // See if only a bit of the file is left
-      if (d->Fd.Read(d->End, d->Size - (d->End - d->Buffer),&Actual) == false)
+      unsigned long long const dataSize = d->Size - ((d->End - d->Buffer) + 1);
+      if (d->Fd.Read(d->End, dataSize, &Actual) == false)
 	 return false;
 	 return false;
-      if (Actual != d->Size - (d->End - d->Buffer))
+      if (Actual != dataSize || d->Fd.Eof() == true)
 	 d->Done = true;
 	 d->Done = true;
       d->End += Actual;
       d->End += Actual;
    }
    }
@@ -171,8 +181,13 @@ bool pkgTagFile::Fill()
       for (const char *E = d->End - 1; E - d->End < 6 && (*E == '\n' || *E == '\r'); E--)
       for (const char *E = d->End - 1; E - d->End < 6 && (*E == '\n' || *E == '\r'); E--)
 	 if (*E == '\n')
 	 if (*E == '\n')
 	    LineCount++;
 	    LineCount++;
-      for (; LineCount < 2; LineCount++)
-	 *d->End++ = '\n';
+      if (LineCount < 2)
+      {
+	 if ((unsigned)(d->End - d->Buffer) >= d->Size)
+	    Resize(d->Size + 3);
+	 for (; LineCount < 2; LineCount++)
+	    *d->End++ = '\n';
+      }
       
       
       return true;
       return true;
    }
    }

+ 1 - 0
apt-pkg/tagfile.h

@@ -95,6 +95,7 @@ class pkgTagFile
 
 
    bool Fill();
    bool Fill();
    bool Resize();
    bool Resize();
+   bool Resize(unsigned long long const newSize);
 
 
    public:
    public:
 
 

+ 11 - 2
doc/apt.conf.5.xml

@@ -688,7 +688,8 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";};
      <literal>options</literal> this must be specified in list notation. The commands
      <literal>options</literal> this must be specified in list notation. The commands
      are invoked in order using <filename>/bin/sh</filename>; should any fail APT 
      are invoked in order using <filename>/bin/sh</filename>; should any fail APT 
      will abort. APT will pass the filenames of all .deb files it is going to
      will abort. APT will pass the filenames of all .deb files it is going to
-     install to the commands, one per line on standard input.</para>
+     install to the commands, one per line on the requested file descriptor, defaulting
+     to standard input.</para>
 
 
      <para>Version 2 of this protocol dumps more information, including the
      <para>Version 2 of this protocol dumps more information, including the
      protocol version, the APT configuration space and the packages, files
      protocol version, the APT configuration space and the packages, files
@@ -700,7 +701,15 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";};
      <literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::Version</literal>
      <literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::Version</literal>
      accordingly, the default being version 1. If APT isn't supporting the requested
      accordingly, the default being version 1. If APT isn't supporting the requested
      version it will send the information in the highest version it has support for instead.
      version it will send the information in the highest version it has support for instead.
-     </para></listitem>
+     </para>
+
+     <para>The file descriptor to be used to send the information can be requested with
+     <literal>DPkg::Tools::options::<replaceable>cmd</replaceable>::InfoFD</literal>
+     which defaults to <literal>0</literal> for standard input and is available since
+     version 0.9.11. Support for the option can be detected by looking for the environment
+     variable <envar>APT_HOOK_INFO_FD</envar> which contains the number of the used
+     file descriptor as a confirmation.</para>
+     </listitem>
      </varlistentry>
      </varlistentry>
 
 
      <varlistentry><term><option>Run-Directory</option></term>
      <varlistentry><term><option>Run-Directory</option></term>

+ 4 - 4
test/integration/framework

@@ -88,11 +88,11 @@ msgdone() {
 runapt() {
 runapt() {
 	msgdebug "Executing: ${CCMD}$*${CDEBUG} "
 	msgdebug "Executing: ${CCMD}$*${CDEBUG} "
 	if [ -f ./aptconfig.conf ]; then
 	if [ -f ./aptconfig.conf ]; then
-		APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$*
-        elif [ -f ../aptconfig.conf ]; then
-                APT_CONFIG=../aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$*
+		MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$*
+	elif [ -f ../aptconfig.conf ]; then
+		MALLOC_PERTURB_=21 MALLOC_CHECK_=2 APT_CONFIG=../aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$*
 	else
 	else
-		LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$*
+		MALLOC_PERTURB_=21 MALLOC_CHECK_=2 LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$*
 	fi
 	fi
 }
 }
 aptconfig() { runapt apt-config $*; }
 aptconfig() { runapt apt-config $*; }

+ 55 - 39
test/integration/test-bug-712116-dpkg-pre-install-pkgs-hook-multiarch

@@ -26,95 +26,111 @@ hook='pre-install-pkgs'
 
 
 enablehookversion() {
 enablehookversion() {
 	echo "#!/bin/sh
 	echo "#!/bin/sh
-while read line; do
+FD=0
+echo -n > ${hook}-v${1}.list
+if [ -n \"${2}\" ]; then
+	FD=\$APT_HOOK_INFO_FD
+	if [ "\$FD" != \"${2}\" ]; then echo \"ERROR: Information is not on requested FD: \$FD != ${2}\" >> ${hook}-v${1}.list; fi
+fi
+while read </proc/\$\$/fd/\$FD line; do
 	if echo \"\$line\" | grep -Fq '**'; then
 	if echo \"\$line\" | grep -Fq '**'; then
 		echo \"\$line\"
 		echo \"\$line\"
 	fi
 	fi
-done > ${hook}-v${1}.list" > ${hook}-v${1}.sh
+done >> ${hook}-v${1}.list" > ${hook}-v${1}.sh
 	chmod +x ${hook}-v${1}.sh
 	chmod +x ${hook}-v${1}.sh
 	echo "dpkg::${hook}:: \"./${hook}-v${1}.sh --foo -bar\";
 	echo "dpkg::${hook}:: \"./${hook}-v${1}.sh --foo -bar\";
 DPkg::Tools::options::\"./${hook}-v${1}.sh\"::Version \"$1\";" > rootdir/etc/apt/apt.conf.d/hook-v$1
 DPkg::Tools::options::\"./${hook}-v${1}.sh\"::Version \"$1\";" > rootdir/etc/apt/apt.conf.d/hook-v$1
+	if [ -n "$2" ]; then
+		echo "DPkg::Tools::options::\"./${hook}-v${1}.sh\"::InfoFD \"${2}\";" >> rootdir/etc/apt/apt.conf.d/hook-v$1
+	fi
 }
 }
 
 
-enablehookversion 2
-enablehookversion 3
-
 observehook() {
 observehook() {
 	rm -f ${hook}-v2.list ${hook}-v3.list
 	rm -f ${hook}-v2.list ${hook}-v3.list
 	msgtest 'Observe hooks while' "$*"
 	msgtest 'Observe hooks while' "$*"
 	testsuccess --nomsg aptget "$@" -y --force-yes
 	testsuccess --nomsg aptget "$@" -y --force-yes
 }
 }
 
 
-observehook install stuff -t stable
-testfileequal "${hook}-v2.list" 'libsame - < 1 **CONFIGURE**
+testrun() {
+	observehook install stuff -t stable
+	testfileequal "${hook}-v2.list" 'libsame - < 1 **CONFIGURE**
 toolkit - < 1 **CONFIGURE**
 toolkit - < 1 **CONFIGURE**
 stuff - < 1 **CONFIGURE**'
 stuff - < 1 **CONFIGURE**'
-testfileequal "${hook}-v3.list" 'libsame - - none < 1 amd64 same **CONFIGURE**
+	testfileequal "${hook}-v3.list" 'libsame - - none < 1 amd64 same **CONFIGURE**
 toolkit - - none < 1 all foreign **CONFIGURE**
 toolkit - - none < 1 all foreign **CONFIGURE**
 stuff - - none < 1 amd64 none **CONFIGURE**'
 stuff - - none < 1 amd64 none **CONFIGURE**'
 
 
-observehook install stuff -t unstable
-testfileequal "${hook}-v2.list" 'libsame 1 < 2 **CONFIGURE**
+	observehook install stuff -t unstable
+	testfileequal "${hook}-v2.list" 'libsame 1 < 2 **CONFIGURE**
 toolkit 1 < 2 **CONFIGURE**
 toolkit 1 < 2 **CONFIGURE**
 stuff 1 < 2 **CONFIGURE**'
 stuff 1 < 2 **CONFIGURE**'
-testfileequal "${hook}-v3.list" 'libsame 1 amd64 same < 2 amd64 same **CONFIGURE**
+	testfileequal "${hook}-v3.list" 'libsame 1 amd64 same < 2 amd64 same **CONFIGURE**
 toolkit 1 all foreign < 2 amd64 foreign **CONFIGURE**
 toolkit 1 all foreign < 2 amd64 foreign **CONFIGURE**
 stuff 1 amd64 none < 2 amd64 none **CONFIGURE**'
 stuff 1 amd64 none < 2 amd64 none **CONFIGURE**'
 
 
-observehook install stuff:i386 -t unstable
-testfileequal "${hook}-v2.list" 'stuff 2 > - **REMOVE**
+	observehook install stuff:i386 -t unstable
+	testfileequal "${hook}-v2.list" 'stuff 2 > - **REMOVE**
 libsame - < 2 **CONFIGURE**
 libsame - < 2 **CONFIGURE**
 stuff - < 2 **CONFIGURE**'
 stuff - < 2 **CONFIGURE**'
-testfileequal "${hook}-v3.list" 'stuff 2 amd64 none > - - none **REMOVE**
+	testfileequal "${hook}-v3.list" 'stuff 2 amd64 none > - - none **REMOVE**
 libsame - - none < 2 i386 same **CONFIGURE**
 libsame - - none < 2 i386 same **CONFIGURE**
 stuff - - none < 2 i386 none **CONFIGURE**'
 stuff - - none < 2 i386 none **CONFIGURE**'
 
 
-observehook remove libsame
-testfileequal "${hook}-v2.list" 'libsame 2 > - **REMOVE**'
-testfileequal "${hook}-v3.list" 'libsame 2 amd64 same > - - none **REMOVE**'
+	observehook remove libsame
+	testfileequal "${hook}-v2.list" 'libsame 2 > - **REMOVE**'
+	testfileequal "${hook}-v3.list" 'libsame 2 amd64 same > - - none **REMOVE**'
 
 
-observehook install stuff:i386/stable libsame:i386/stable toolkit/stable
-testfileequal "${hook}-v2.list" 'libsame 2 > 1 **CONFIGURE**
+	observehook install stuff:i386/stable libsame:i386/stable toolkit/stable
+	testfileequal "${hook}-v2.list" 'libsame 2 > 1 **CONFIGURE**
 toolkit 2 > 1 **CONFIGURE**
 toolkit 2 > 1 **CONFIGURE**
 stuff 2 > 1 **CONFIGURE**'
 stuff 2 > 1 **CONFIGURE**'
-testfileequal "${hook}-v3.list" 'libsame 2 i386 same > 1 i386 same **CONFIGURE**
+	testfileequal "${hook}-v3.list" 'libsame 2 i386 same > 1 i386 same **CONFIGURE**
 toolkit 2 amd64 foreign > 1 all foreign **CONFIGURE**
 toolkit 2 amd64 foreign > 1 all foreign **CONFIGURE**
 stuff 2 i386 none > 1 i386 none **CONFIGURE**'
 stuff 2 i386 none > 1 i386 none **CONFIGURE**'
 
 
-observehook install 'libsame:*'
-testfileequal "${hook}-v2.list" 'libsame 1 < 2 **CONFIGURE**
+	observehook install 'libsame:*'
+	testfileequal "${hook}-v2.list" 'libsame 1 < 2 **CONFIGURE**
 libsame - < 2 **CONFIGURE**
 libsame - < 2 **CONFIGURE**
 toolkit 1 < 2 **CONFIGURE**
 toolkit 1 < 2 **CONFIGURE**
 stuff 1 < 2 **CONFIGURE**'
 stuff 1 < 2 **CONFIGURE**'
-testfileequal "${hook}-v3.list" 'libsame 1 i386 same < 2 i386 same **CONFIGURE**
+	testfileequal "${hook}-v3.list" 'libsame 1 i386 same < 2 i386 same **CONFIGURE**
 libsame - - none < 2 amd64 same **CONFIGURE**
 libsame - - none < 2 amd64 same **CONFIGURE**
 toolkit 1 all foreign < 2 amd64 foreign **CONFIGURE**
 toolkit 1 all foreign < 2 amd64 foreign **CONFIGURE**
 stuff 1 i386 none < 2 i386 none **CONFIGURE**'
 stuff 1 i386 none < 2 i386 none **CONFIGURE**'
 
 
-observehook purge stuff:i386 'libsame:*' toolkit
-testfileequal "${hook}-v2.list" 'libsame 2 > - **REMOVE**
+	observehook purge stuff:i386 'libsame:*' toolkit
+	testfileequal "${hook}-v2.list" 'libsame 2 > - **REMOVE**
 stuff 2 > - **REMOVE**
 stuff 2 > - **REMOVE**
 libsame 2 > - **REMOVE**
 libsame 2 > - **REMOVE**
 toolkit 2 > - **REMOVE**'
 toolkit 2 > - **REMOVE**'
-testfileequal "${hook}-v3.list" 'libsame 2 amd64 same > - - none **REMOVE**
+	testfileequal "${hook}-v3.list" 'libsame 2 amd64 same > - - none **REMOVE**
 stuff 2 i386 none > - - none **REMOVE**
 stuff 2 i386 none > - - none **REMOVE**
 libsame 2 i386 same > - - none **REMOVE**
 libsame 2 i386 same > - - none **REMOVE**
 toolkit 2 amd64 foreign > - - none **REMOVE**'
 toolkit 2 amd64 foreign > - - none **REMOVE**'
 
 
-observehook install confpkg
-testfileequal "${hook}-v2.list" 'confpkg - < 1 **CONFIGURE**'
-testfileequal "${hook}-v3.list" 'confpkg - - none < 1 amd64 none **CONFIGURE**'
+	observehook install confpkg
+	testfileequal "${hook}-v2.list" 'confpkg - < 1 **CONFIGURE**'
+	testfileequal "${hook}-v3.list" 'confpkg - - none < 1 amd64 none **CONFIGURE**'
+
+	observehook remove confpkg
+	testfileequal "${hook}-v2.list" 'confpkg 1 > - **REMOVE**'
+	testfileequal "${hook}-v3.list" 'confpkg 1 amd64 none > - - none **REMOVE**'
 
 
-observehook remove confpkg
-testfileequal "${hook}-v2.list" 'confpkg 1 > - **REMOVE**'
-testfileequal "${hook}-v3.list" 'confpkg 1 amd64 none > - - none **REMOVE**'
+	msgtest 'Conffiles of package remained after remove' 'confpkg'
+	dpkg -l confpkg | grep -q '^rc' && msgpass || msgfail
 
 
-msgtest 'Conffiles of package remained after remove' 'confpkg'
-dpkg -l confpkg | grep -q '^rc' && msgpass || msgfail
+	observehook purge confpkg
+	testfileequal "${hook}-v2.list" 'confpkg 1 > - **REMOVE**'
+	testfileequal "${hook}-v3.list" 'confpkg 1 amd64 none > - - none **REMOVE**'
 
 
-observehook purge confpkg
-testfileequal "${hook}-v2.list" 'confpkg 1 > - **REMOVE**'
-testfileequal "${hook}-v3.list" 'confpkg 1 amd64 none > - - none **REMOVE**'
+	msgtest 'Conffiles are gone after purge' 'confpkg'
+	dpkg -l confpkg 2>/dev/null | grep -q '^rc' && msgfail || msgpass
+}
+
+enablehookversion 2
+enablehookversion 3
+testrun
 
 
-msgtest 'Conffiles are gone after purge' 'confpkg'
-dpkg -l confpkg 2>/dev/null | grep -q '^rc' && msgfail || msgpass
+enablehookversion 2 13
+enablehookversion 3 13
+testrun

+ 12 - 8
test/libapt/run-tests

@@ -2,9 +2,11 @@
 set -e
 set -e
 
 
 DIR=$(readlink -f $(dirname $0))
 DIR=$(readlink -f $(dirname $0))
-echo "Compiling the tests …"
-(cd $DIR && make)
-echo "Running all testcases …"
+if [ -z "$MAKELEVEL" ]; then
+	echo 'Compiling the tests …'
+	(cd $DIR && make)
+	echo 'Running all testcases …'
+fi
 LDPATH="$DIR/../../build/bin"
 LDPATH="$DIR/../../build/bin"
 EXT="_libapt_test"
 EXT="_libapt_test"
 EXIT_CODE=0
 EXIT_CODE=0
@@ -70,9 +72,11 @@ do
 			"${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-tlh%5fDE"
 			"${tmppath}/ftp.de.debian.org_debian_dists_sid_main_i18n_Translation-tlh%5fDE"
 	elif [ $name = "HashSums${EXT}" ]; then
 	elif [ $name = "HashSums${EXT}" ]; then
 		TMP="$(readlink -f "./${0}")"
 		TMP="$(readlink -f "./${0}")"
-		echo -n "Testing with ${NAME} "
-		LD_LIBRARY_PATH=${LDPATH} ${testapp} $TMP $(md5sum $TMP | cut -d' ' -f 1) $(sha1sum $TMP | cut -d' ' -f 1) $(sha256sum $TMP | cut -d' ' -f 1) $(sha512sum $TMP | cut -d' ' -f 1) && echo "$TESTOKAY" || echo "$TESTFAIL"
-		continue
+		tmppath="$TMP"
+		tmppath="${tmppath} $(md5sum $TMP | cut -d' ' -f 1)"
+		tmppath="${tmppath} $(sha1sum $TMP | cut -d' ' -f 1)"
+		tmppath="${tmppath} $(sha256sum $TMP | cut -d' ' -f 1)"
+		tmppath="${tmppath} $(sha512sum $TMP | cut -d' ' -f 1)"
 	elif [ $name = "CompareVersion${EXT}" ]; then
 	elif [ $name = "CompareVersion${EXT}" ]; then
 		tmppath="${DIR}/versions.lst"
 		tmppath="${DIR}/versions.lst"
 	elif [ $name = "CdromFindPackages${EXT}" ]; then
 	elif [ $name = "CdromFindPackages${EXT}" ]; then
@@ -107,8 +111,8 @@ do
 	fi
 	fi
 
 
 	echo -n "Testing with ${NAME} "
 	echo -n "Testing with ${NAME} "
-	if LD_LIBRARY_PATH=${LDPATH} ${testapp} ${tmppath} ; then
- 		echo "$TESTOKAY"
+	if MALLOC_PERTURB_=21 MALLOC_CHECK_=2 LD_LIBRARY_PATH=${LDPATH} ${testapp} ${tmppath} ; then
+		echo "$TESTOKAY"
 	else
 	else
 		echo "$TESTFAIL"
 		echo "$TESTFAIL"
 		EXIT_CODE=1
 		EXIT_CODE=1