Make rpmVerifyFile() honor rpmfi digest algorithm
authorPanu Matilainen <pmatilai@redhat.com>
Thu, 29 May 2008 17:41:21 +0000 (20:41 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Mon, 2 Jun 2008 06:50:48 +0000 (09:50 +0300)
lib/verify.c

index d8bab93..62e32ad 100644 (file)
@@ -92,19 +92,25 @@ int rpmVerifyFile(const rpmts ts, const rpmfi fi,
 
 
     if (flags & RPMVERIFY_MD5) {
-       unsigned char md5sum[16];
-       rpm_off_t fsize;
+       const unsigned char *digest; 
+       pgpHashAlgo algo;
+       size_t diglen;
 
        /* XXX If --nomd5, then prelinked library sizes are not corrected. */
-       rc = rpmDoDigest(PGPHASHALGO_MD5, fn, 0, md5sum, &fsize);
-       sb.st_size = fsize;
-       if (rc)
-           *res |= (RPMVERIFY_READFAIL|RPMVERIFY_MD5);
-       else {
-           const unsigned char * MD5 = rpmfiMD5(fi);
-           if (MD5 == NULL || memcmp(md5sum, MD5, sizeof(md5sum)))
+       if ((digest = rpmfiDigest(fi, &algo, &diglen))) {
+           unsigned char fdigest[diglen];
+           rpm_off_t fsize;
+
+           rc = rpmDoDigest(algo, fn, 0, fdigest, &fsize);
+           sb.st_size = fsize;
+           if (rc) {
+               *res |= (RPMVERIFY_READFAIL|RPMVERIFY_MD5);
+           } else if (memcmp(fdigest, digest, diglen)) {
                *res |= RPMVERIFY_MD5;
-       }
+           }
+       } else {
+           *res |= RPMVERIFY_MD5;
+       } 
     } 
 
     if (flags & RPMVERIFY_LINKTO) {