added more support for broken md5 code
authorewt <devnull@localhost>
Fri, 28 Mar 1997 17:46:34 +0000 (17:46 +0000)
committerewt <devnull@localhost>
Fri, 28 Mar 1997 17:46:34 +0000 (17:46 +0000)
CVS patchset: 1503
CVS date: 1997/03/28 17:46:34

lib/rpmlib.h
lib/signature.c
lib/verify.c

index ff06c7f..bfd002c 100644 (file)
@@ -96,6 +96,7 @@ extern const int rpmTagTableSize;
 #define RPMTAG_CHANGELOGTIME            1080
 #define RPMTAG_CHANGELOGNAME            1081
 #define RPMTAG_CHANGELOGTEXT            1082
+#define RPMTAG_BROKENMD5                1083 /* internal */
 
 #define RPMTAG_EXTERNAL_TAG            1000000
 
@@ -386,10 +387,11 @@ rpmErrorCallBackType rpmErrorSetCallback(rpmErrorCallBackType);
 /**************************************************/
 
 #define RPMSIGTAG_SIZE                         1000
-/* the md5 sum was broken on big endian machines for a while */
-#define RPMSIGTAG_LITTLEENDIANMD5      1001
+/* the md5 sum was broken *twice* on big endian machines */
+#define RPMSIGTAG_LEMD5_1              1001
 #define RPMSIGTAG_PGP                          1002
-#define RPMSIGTAG_MD5                  1003
+#define RPMSIGTAG_LEMD5_2              1003
+#define RPMSIGTAG_MD5                  1004
 
 /**************************************************/
 /*                                                */
index 97ec373..e3ef4a3 100644 (file)
@@ -292,7 +292,8 @@ int rpmVerifySignature(char *file, int_32 sigTag, void *sig, int count,
            return 1;
        }
        break;
-      case RPMSIGTAG_LITTLEENDIANMD5:
+      case RPMSIGTAG_LEMD5_1:
+      case RPMSIGTAG_LEMD5_2:
        if (verifyMD5Signature(file, sig, result, mdbinfileBroken)) {
            return 1;
        }
index ac00d5d..46e34aa 100644 (file)
@@ -37,12 +37,23 @@ int rpmVerifyFile(char * prefix, Header h, int filenum, int * result,
     char linkto[1024];
     int size;
     char ** unameList, ** gnameList;
-    int useBrokenMd5;
+    int_32 useBrokenMd5;
 
-    if (headerGetEntry(h, RPMTAG_RPMVERSION, NULL, NULL, NULL))
-       useBrokenMd5 = 0;
-    else
-       useBrokenMd5 = 1;
+#if WORDS_BIGENDIAN
+    if (!headerGetEntry(h, RPMTAG_BROKENMD5, NULL, &useBrokenMd5, NULL)) {
+       char * rpmVersion;
+
+       if (headerGetEntry(h, RPMTAG_RPMVERSION, NULL, &rpmVersion, NULL)) {
+           useBrokenMd5 = ((rpmvercmp(rpmVersion, "2.3.3") >= 0) &&
+                           (rpmvercmp(rpmVersion, "2.3.8") <= 0));
+       } else {
+           useBrokenMd5 = 1;
+       }
+       headerAddEntry(h, RPMTAG_BROKENMD5, RPM_INT32_TYPE, &useBrokenMd5, 1);
+    }
+#else
+    useBrokenMd5 = 0;
+#endif
 
     headerGetEntry(h, RPMTAG_FILEMODES, &type, (void **) &modeList, &count);