packages (rpm-4_5): rpm/rpm-sigpad.patch (NEW) - add padding for signatures...

glen glen at pld-linux.org
Mon Jun 8 11:31:49 CEST 2009


Author: glen                         Date: Mon Jun  8 09:31:49 2009 GMT
Module: packages                      Tag: rpm-4_5
---- Log message:
- add padding for signatures so that rpm's do not have to be rewritten when signatures are added
  note: rpm addsign doesn't support such signing yet

---- Files affected:
packages/rpm:
   rpm-sigpad.patch (NONE -> 1.1.2.1)  (NEW)

---- Diffs:

================================================================
Index: packages/rpm/rpm-sigpad.patch
diff -u /dev/null packages/rpm/rpm-sigpad.patch:1.1.2.1
--- /dev/null	Mon Jun  8 11:31:49 2009
+++ packages/rpm/rpm-sigpad.patch	Mon Jun  8 11:31:44 2009
@@ -0,0 +1,39 @@
+	- jbj: reserve ~1K in  RPMSIGTAG_PADDING for now.
+	- jbj: add RPMSIGTAG_PADDING to force metadata header alignment in file.
+--- rpm-4.5/build/pack.c	2007-12-17 00:28:09.000000000 +0200
++++ rpm-4.5-sigpad/build/pack.c	2009-06-08 12:29:50.225343621 +0300
+@@ -702,6 +702,22 @@
+ 	goto exit;
+     }
+ 
++    /* Pad the signature header to put the metadata header at known offset. */
++    {	size_t slen = headerSizeof(sig, HEADER_MAGIC_YES);
++	void * uh = headerUnload(sig);
++	static const size_t align = 1024;
++	size_t nb = align - 96 - 16 - 8;
++	unsigned char * b;
++
++	uh = _free(uh);
++assert(slen < nb);
++	nb -= slen;
++	b = memset(alloca(nb), 0, nb);
++	(void) headerAddEntry(sig, RPMSIGTAG_PADDING, RPM_BIN_TYPE, b, nb);
++	sig = headerReload(sig, RPMTAG_HEADERSIGNATURES);
++assert(sig != NULL);
++    }
++
+     /* Open the output file */
+     fd = Fopen(fileName, "w");
+     if (fd == NULL || Ferror(fd)) {
+--- rpm-4.5/lib/rpmlib.h	2008-06-10 02:19:16.000000000 +0300
++++ rpm-4.5-sigpad/lib/rpmlib.h	2009-06-08 12:29:50.225343621 +0300
+@@ -1058,7 +1058,8 @@
+     RPMSIGTAG_BADSHA1_2	= RPMTAG_BADSHA1_2,	/*!< internal Broken SHA1, take 2. */
+     RPMSIGTAG_SHA1	= RPMTAG_SHA1HEADER,	/*!< internal sha1 header digest. */
+     RPMSIGTAG_DSA	= RPMTAG_DSAHEADER,	/*!< internal DSA header signature. */
+-    RPMSIGTAG_RSA	= RPMTAG_RSAHEADER	/*!< internal RSA header signature. */
++    RPMSIGTAG_RSA	= RPMTAG_RSAHEADER,	/*!< internal RSA header signature. */
++    RPMSIGTAG_PADDING	= 0x3fffffff		/*!< signature header padding */
+ };
+ 
+ /** \ingroup signature
================================================================


More information about the pld-cvs-commit mailing list