#define RPMTAG_CHANGELOGTIME 1080
#define RPMTAG_CHANGELOGNAME 1081
#define RPMTAG_CHANGELOGTEXT 1082
+#define RPMTAG_BROKENMD5 1083 /* internal */
#define RPMTAG_EXTERNAL_TAG 1000000
/**************************************************/
#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
/**************************************************/
/* */
return 1;
}
break;
- case RPMSIGTAG_LITTLEENDIANMD5:
+ case RPMSIGTAG_LEMD5_1:
+ case RPMSIGTAG_LEMD5_2:
if (verifyMD5Signature(file, sig, result, mdbinfileBroken)) {
return 1;
}
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);