!111 upgrade version to 4.17.0
Merge pull request !111 from renxichen/master
This commit is contained in:
commit
513b070576
@ -17,9 +17,9 @@ index 402749362..8619c1323 100644
|
|||||||
--- a/macros.in
|
--- a/macros.in
|
||||||
+++ b/macros.in
|
+++ b/macros.in
|
||||||
@@ -1184,6 +1184,7 @@ package or when debugging this package.\
|
@@ -1184,6 +1184,7 @@ package or when debugging this package.\
|
||||||
%__transaction_ima %{__plugindir}/ima.so
|
|
||||||
%__transaction_prioreset %{__plugindir}/prioreset.so
|
%__transaction_prioreset %{__plugindir}/prioreset.so
|
||||||
%__transaction_audit %{__plugindir}/audit.so
|
%__transaction_audit %{__plugindir}/audit.so
|
||||||
|
%__transaction_dbus_announce %{__plugindir}/dbus_announce.so
|
||||||
+%__transaction_digest_list %{__plugindir}/digest_list.so
|
+%__transaction_digest_list %{__plugindir}/digest_list.so
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
@ -41,10 +41,11 @@ new file mode 100644
|
|||||||
index 000000000..beb397309
|
index 000000000..beb397309
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/plugins/digest_list.c
|
+++ b/plugins/digest_list.c
|
||||||
@@ -0,0 +1,498 @@
|
@@ -0,0 +1,499 @@
|
||||||
+#include "system.h"
|
+#include "system.h"
|
||||||
+#include "errno.h"
|
+#include "errno.h"
|
||||||
+
|
+
|
||||||
|
+#include <fcntl.h>
|
||||||
+#include <rpm/rpmlog.h>
|
+#include <rpm/rpmlog.h>
|
||||||
+#include <rpm/rpmts.h>
|
+#include <rpm/rpmts.h>
|
||||||
+#include <rpm/header.h>
|
+#include <rpm/header.h>
|
||||||
@ -565,7 +566,7 @@ index 46cd0f31a..3c6b18b53 100644
|
|||||||
} break;
|
} break;
|
||||||
case 4:
|
case 4:
|
||||||
@@ -658,6 +659,7 @@ static int pgpPrtSig(pgpTag tag, const uint8_t *h, size_t hlen,
|
@@ -658,6 +659,7 @@ static int pgpPrtSig(pgpTag tag, const uint8_t *h, size_t hlen,
|
||||||
if (p > (h + hlen))
|
if (p > hend)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
+ _digp->data = p;
|
+ _digp->data = p;
|
||||||
|
|||||||
@ -1,102 +0,0 @@
|
|||||||
From 8f4b3c3cab8922a2022b9e47c71f1ecf906077ef Mon Sep 17 00:00:00 2001
|
|
||||||
From: Demi Marie Obenour <athena@invisiblethingslab.com>
|
|
||||||
Date: Mon, 8 Feb 2021 16:05:01 -0500
|
|
||||||
Subject: [PATCH] hdrblobInit() needs bounds checks too
|
|
||||||
|
|
||||||
Users can pass untrusted data to hdrblobInit() and it must be robust
|
|
||||||
against this.
|
|
||||||
---
|
|
||||||
lib/header.c | 48 +++++++++++++++++++++++++++++++-----------------
|
|
||||||
1 file changed, 31 insertions(+), 17 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/header.c b/lib/header.c
|
|
||||||
index ea39e679f4..ebba9c2b09 100644
|
|
||||||
--- a/lib/header.c
|
|
||||||
+++ b/lib/header.c
|
|
||||||
@@ -11,6 +11,7 @@
|
|
||||||
#include "system.h"
|
|
||||||
#include <netdb.h>
|
|
||||||
#include <errno.h>
|
|
||||||
+#include <inttypes.h>
|
|
||||||
#include <rpm/rpmtypes.h>
|
|
||||||
#include <rpm/rpmstring.h>
|
|
||||||
#include "lib/header_internal.h"
|
|
||||||
@@ -1912,6 +1913,25 @@ hdrblob hdrblobFree(hdrblob blob)
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static rpmRC hdrblobVerifyLengths(rpmTagVal regionTag, uint32_t il, uint32_t dl,
|
|
||||||
+ char **emsg) {
|
|
||||||
+ uint32_t il_max = HEADER_TAGS_MAX;
|
|
||||||
+ uint32_t dl_max = HEADER_DATA_MAX;
|
|
||||||
+ if (regionTag == RPMTAG_HEADERSIGNATURES) {
|
|
||||||
+ il_max = 32;
|
|
||||||
+ dl_max = 64 * 1024 * 1024;
|
|
||||||
+ }
|
|
||||||
+ if (hdrchkRange(il_max, il)) {
|
|
||||||
+ rasprintf(emsg, _("hdr tags: BAD, no. of tags(%" PRIu32 ") out of range"), il);
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ }
|
|
||||||
+ if (hdrchkRange(dl_max, dl)) {
|
|
||||||
+ rasprintf(emsg, _("hdr data: BAD, no. of bytes(%" PRIu32 ") out of range"), dl);
|
|
||||||
+ return RPMRC_FAIL;
|
|
||||||
+ }
|
|
||||||
+ return RPMRC_OK;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
rpmRC hdrblobRead(FD_t fd, int magic, int exact_size, rpmTagVal regionTag, hdrblob blob, char **emsg)
|
|
||||||
{
|
|
||||||
int32_t block[4];
|
|
||||||
@@ -1924,13 +1944,6 @@ rpmRC hdrblobRead(FD_t fd, int magic, int exact_size, rpmTagVal regionTag, hdrbl
|
|
||||||
size_t nb;
|
|
||||||
rpmRC rc = RPMRC_FAIL; /* assume failure */
|
|
||||||
int xx;
|
|
||||||
- int32_t il_max = HEADER_TAGS_MAX;
|
|
||||||
- int32_t dl_max = HEADER_DATA_MAX;
|
|
||||||
-
|
|
||||||
- if (regionTag == RPMTAG_HEADERSIGNATURES) {
|
|
||||||
- il_max = 32;
|
|
||||||
- dl_max = 64 * 1024 * 1024;
|
|
||||||
- }
|
|
||||||
|
|
||||||
memset(block, 0, sizeof(block));
|
|
||||||
if ((xx = Freadall(fd, bs, blen)) != blen) {
|
|
||||||
@@ -1943,15 +1956,9 @@ rpmRC hdrblobRead(FD_t fd, int magic, int exact_size, rpmTagVal regionTag, hdrbl
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
il = ntohl(block[2]);
|
|
||||||
- if (hdrchkRange(il_max, il)) {
|
|
||||||
- rasprintf(emsg, _("hdr tags: BAD, no. of tags(%d) out of range"), il);
|
|
||||||
- goto exit;
|
|
||||||
- }
|
|
||||||
dl = ntohl(block[3]);
|
|
||||||
- if (hdrchkRange(dl_max, dl)) {
|
|
||||||
- rasprintf(emsg, _("hdr data: BAD, no. of bytes(%d) out of range"), dl);
|
|
||||||
+ if (hdrblobVerifyLengths(regionTag, il, dl, emsg))
|
|
||||||
goto exit;
|
|
||||||
- }
|
|
||||||
|
|
||||||
nb = (il * sizeof(struct entryInfo_s)) + dl;
|
|
||||||
uc = sizeof(il) + sizeof(dl) + nb;
|
|
||||||
@@ -1995,11 +2002,18 @@ rpmRC hdrblobInit(const void *uh, size_t uc,
|
|
||||||
struct hdrblob_s *blob, char **emsg)
|
|
||||||
{
|
|
||||||
rpmRC rc = RPMRC_FAIL;
|
|
||||||
-
|
|
||||||
memset(blob, 0, sizeof(*blob));
|
|
||||||
+ if (uc && uc < 8) {
|
|
||||||
+ rasprintf(emsg, _("hdr length: BAD"));
|
|
||||||
+ goto exit;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
blob->ei = (int32_t *) uh; /* discards const */
|
|
||||||
- blob->il = ntohl(blob->ei[0]);
|
|
||||||
- blob->dl = ntohl(blob->ei[1]);
|
|
||||||
+ blob->il = ntohl((uint32_t)(blob->ei[0]));
|
|
||||||
+ blob->dl = ntohl((uint32_t)(blob->ei[1]));
|
|
||||||
+ if (hdrblobVerifyLengths(regionTag, blob->il, blob->dl, emsg) != RPMRC_OK)
|
|
||||||
+ goto exit;
|
|
||||||
+
|
|
||||||
blob->pe = (entryInfo) &(blob->ei[2]);
|
|
||||||
blob->pvlen = sizeof(blob->il) + sizeof(blob->dl) +
|
|
||||||
(blob->il * sizeof(*blob->pe)) + blob->dl;
|
|
||||||
@ -20,7 +20,7 @@ index 147059bb5..c3d898b4c 100644
|
|||||||
+ (dist && strstr(field, dist)) ? "" : dist);
|
+ (dist && strstr(field, dist)) ? "" : dist);
|
||||||
free(dist);
|
free(dist);
|
||||||
}
|
}
|
||||||
if (rpmCharCheck(spec, field, WHITELIST_VERREL))
|
if (rpmCharCheck(spec, field, ALLOWED_CHARS_VERREL))
|
||||||
--
|
--
|
||||||
2.27.GIT
|
2.27.GIT
|
||||||
|
|
||||||
|
|||||||
@ -39,19 +39,19 @@ index 6dfd801c8..ab6938d8c 100644
|
|||||||
static void nullAttrRec(AttrRec ar)
|
static void nullAttrRec(AttrRec ar)
|
||||||
{
|
{
|
||||||
memset(ar, 0, sizeof(*ar));
|
memset(ar, 0, sizeof(*ar));
|
||||||
@@ -984,11 +991,13 @@ static void genCpioListAndHeader(FileList fl, Package pkg, int isSrc)
|
@@ -997,11 +997,14 @@ static void genCpioListAndHeader(FileList fl, Package pkg, int isSrc)
|
||||||
{
|
{
|
||||||
FileListRec flp;
|
FileListRec flp;
|
||||||
char buf[BUFSIZ];
|
char buf[BUFSIZ];
|
||||||
+ char file_info[BUFSIZ];
|
+ char file_info[BUFSIZ];
|
||||||
+ char file_digest[128 * 2 + 1];
|
+ char file_digest[128 * 2 + 1];
|
||||||
int i, npaths = 0;
|
int i, npaths = 0;
|
||||||
|
int fail_on_dupes = rpmExpandNumeric("%{?_duplicate_files_terminate_build}") > 0;
|
||||||
uint32_t defaultalgo = PGPHASHALGO_MD5, digestalgo;
|
uint32_t defaultalgo = PGPHASHALGO_MD5, digestalgo;
|
||||||
rpm_loff_t totalFileSize = 0;
|
rpm_loff_t totalFileSize = 0;
|
||||||
Header h = pkg->header; /* just a shortcut */
|
Header h = pkg->header; /* just a shortcut */
|
||||||
- int override_date = 0;
|
+ int processed = 0;
|
||||||
+ int override_date = 0, processed = 0;
|
time_t source_date_epoch = 0;
|
||||||
time_t source_date_epoch;
|
|
||||||
char *srcdate = getenv("SOURCE_DATE_EPOCH");
|
char *srcdate = getenv("SOURCE_DATE_EPOCH");
|
||||||
|
|
||||||
@@ -1058,8 +1067,9 @@ static void genCpioListAndHeader(FileList fl, Package pkg, int isSrc)
|
@@ -1058,8 +1067,9 @@ static void genCpioListAndHeader(FileList fl, Package pkg, int isSrc)
|
||||||
|
|||||||
@ -1,36 +0,0 @@
|
|||||||
From 4a71a3eccd7e9e14ee0e83b1cb300386a93622cd Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Fri, 13 Dec 2019 14:14:10 +0200
|
|
||||||
Subject: [PATCH] Silence spurious error message from lsetfilecon() on
|
|
||||||
-EOPNOTSUPP
|
|
||||||
|
|
||||||
We already filter out -EOPNOTSUPP and return OK, but the message was
|
|
||||||
getting logged before the filtering so we'd spit out spurious error
|
|
||||||
messages on filesystems that don't support SELinux (RhBug:1777502)
|
|
||||||
---
|
|
||||||
plugins/selinux.c | 7 ++++---
|
|
||||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/selinux.c b/plugins/selinux.c
|
|
||||||
index a51f95e..ba37ffa 100644
|
|
||||||
--- a/plugins/selinux.c
|
|
||||||
+++ b/plugins/selinux.c
|
|
||||||
@@ -168,11 +168,12 @@ static rpmRC selinux_fsm_file_prepare(rpmPlugin plugin, rpmfi fi,
|
|
||||||
if (selabel_lookup_raw(sehandle, &scon, dest, file_mode) == 0) {
|
|
||||||
int conrc = lsetfilecon(path, scon);
|
|
||||||
|
|
||||||
- rpmlog(loglvl(conrc < 0), "lsetfilecon: (%s, %s) %s\n",
|
|
||||||
- path, scon, (conrc < 0 ? strerror(errno) : ""));
|
|
||||||
-
|
|
||||||
if (conrc == 0 || (conrc < 0 && errno == EOPNOTSUPP))
|
|
||||||
rc = RPMRC_OK;
|
|
||||||
+
|
|
||||||
+ rpmlog(loglvl(rc != RPMRC_OK), "lsetfilecon: (%s, %s) %s\n",
|
|
||||||
+ path, scon, (conrc < 0 ? strerror(errno) : ""));
|
|
||||||
+
|
|
||||||
freecon(scon);
|
|
||||||
} else {
|
|
||||||
/* No context for dest is not our headache */
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ index fe9803a..4027493 100644
|
|||||||
+ CONFIG_SITE=${CONFIG_SITE:-NONE}\
|
+ CONFIG_SITE=${CONFIG_SITE:-NONE}\
|
||||||
+ export CONFIG_SITE\
|
+ export CONFIG_SITE\
|
||||||
\
|
\
|
||||||
%{verbose:set -x}\
|
%[%{verbose}?"set -x":""]\
|
||||||
umask 022\
|
umask 022\
|
||||||
--
|
--
|
||||||
1.8.3.1
|
1.8.3.1
|
||||||
|
|||||||
@ -1,113 +0,0 @@
|
|||||||
From 153c5c219844f0f294862c9043b20f4d24f7fa69 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Tue, 18 Feb 2020 15:50:40 +0200
|
|
||||||
Subject: [PATCH] Use common error logic regardless of setexecfilecon()
|
|
||||||
availability
|
|
||||||
|
|
||||||
Refactor the custom exec context setting code to look like setexecfilecon()
|
|
||||||
in case the real one is not available to eliminate pesky behavioral
|
|
||||||
differences between the two cases.
|
|
||||||
|
|
||||||
This fixes a concrete bug of libselinux setexecfilecon() returning with
|
|
||||||
an error when security_getenforce() returns with -1 (such as a bare
|
|
||||||
chroot with no /sys mounts etc), causing us to spit out useless error
|
|
||||||
messages in that case ever since fixing the bogus if-logic in
|
|
||||||
commit ab601b882b9d9d8248250111317615db1aa7b7c6.
|
|
||||||
|
|
||||||
Fixes: #1077
|
|
||||||
---
|
|
||||||
plugins/selinux.c | 44 +++++++++++++++++++++-----------------------
|
|
||||||
1 file changed, 21 insertions(+), 23 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/selinux.c b/plugins/selinux.c
|
|
||||||
index ba37ffabe..12545174d 100644
|
|
||||||
--- a/plugins/selinux.c
|
|
||||||
+++ b/plugins/selinux.c
|
|
||||||
@@ -94,65 +94,63 @@ static rpmRC selinux_psm_pre(rpmPlugin plugin, rpmte te)
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static rpmRC selinux_scriptlet_fork_post(rpmPlugin plugin,
|
|
||||||
- const char *path, int type)
|
|
||||||
-{
|
|
||||||
- rpmRC rc = RPMRC_FAIL;
|
|
||||||
- int xx;
|
|
||||||
#ifndef HAVE_SETEXECFILECON
|
|
||||||
+static int setexecfilecon(const char *path, const char *fallback_type)
|
|
||||||
+{
|
|
||||||
+ int rc = -1;
|
|
||||||
security_context_t mycon = NULL, fcon = NULL, newcon = NULL;
|
|
||||||
context_t con = NULL;
|
|
||||||
|
|
||||||
- if (sehandle == NULL)
|
|
||||||
- return RPMRC_OK;
|
|
||||||
-
|
|
||||||
/* Figure the context to for next exec() */
|
|
||||||
if (getcon(&mycon) < 0)
|
|
||||||
goto exit;
|
|
||||||
if (getfilecon(path, &fcon) < 0)
|
|
||||||
goto exit;
|
|
||||||
- if (security_compute_create(mycon, fcon, string_to_security_class("process"), &newcon) < 0)
|
|
||||||
+ if (security_compute_create(mycon, fcon,
|
|
||||||
+ string_to_security_class("process"), &newcon) < 0)
|
|
||||||
goto exit;
|
|
||||||
|
|
||||||
if (rstreq(mycon, newcon)) {
|
|
||||||
- /* No default transition, use rpm_script_t for now. */
|
|
||||||
- const char * script_type = "rpm_script_t";
|
|
||||||
-
|
|
||||||
con = context_new(mycon);
|
|
||||||
if (!con)
|
|
||||||
goto exit;
|
|
||||||
- if (context_type_set(con, script_type))
|
|
||||||
+ if (context_type_set(con, fallback_type))
|
|
||||||
goto exit;
|
|
||||||
freecon(newcon);
|
|
||||||
newcon = xstrdup(context_str(con));
|
|
||||||
}
|
|
||||||
|
|
||||||
- if ((xx = setexeccon(newcon)) == 0)
|
|
||||||
- rc = RPMRC_OK;
|
|
||||||
-
|
|
||||||
- rpmlog(loglvl(xx < 0), "setexeccon: (%s, %s) %s\n",
|
|
||||||
- path, newcon, (xx < 0 ? strerror(errno) : ""));
|
|
||||||
+ rc = setexeccon(newcon);
|
|
||||||
|
|
||||||
exit:
|
|
||||||
context_free(con);
|
|
||||||
freecon(newcon);
|
|
||||||
freecon(fcon);
|
|
||||||
freecon(mycon);
|
|
||||||
+ return rc;
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+static rpmRC selinux_scriptlet_fork_post(rpmPlugin plugin,
|
|
||||||
+ const char *path, int type)
|
|
||||||
+{
|
|
||||||
+ /* No default transition, use rpm_script_t for now. */
|
|
||||||
+ const char *script_type = "rpm_script_t";
|
|
||||||
+ rpmRC rc = RPMRC_FAIL;
|
|
||||||
|
|
||||||
-#else
|
|
||||||
if (sehandle == NULL)
|
|
||||||
return RPMRC_OK;
|
|
||||||
|
|
||||||
- if ((xx = setexecfilecon(path, "rpm_script_t")) == 0)
|
|
||||||
+ if (setexecfilecon(path, script_type) == 0)
|
|
||||||
rc = RPMRC_OK;
|
|
||||||
|
|
||||||
- rpmlog(loglvl(xx < 0), "setexecfilecon: (%s) %s\n",
|
|
||||||
- path, (xx < 0 ? strerror(errno) : ""));
|
|
||||||
-#endif
|
|
||||||
/* If selinux is not enforcing, we don't care either */
|
|
||||||
if (rc && security_getenforce() < 1)
|
|
||||||
rc = RPMRC_OK;
|
|
||||||
|
|
||||||
+ rpmlog(loglvl(rc), "setexecfilecon: (%s, %s) %s\n",
|
|
||||||
+ path, script_type, rc ? strerror(errno) : "");
|
|
||||||
+
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
@ -20,7 +20,7 @@ index b0a17c8..cac899a 100644
|
|||||||
+ rasprintf(&field,"%s%s",field,dist);
|
+ rasprintf(&field,"%s%s",field,dist);
|
||||||
+ free(dist);
|
+ free(dist);
|
||||||
+ }
|
+ }
|
||||||
if (rpmCharCheck(spec, field, WHITELIST_VERREL))
|
if (rpmCharCheck(spec, field, ALLOWED_CHARS_VERREL))
|
||||||
goto exit;
|
goto exit;
|
||||||
headerPutString(pkg->header, tag, field);
|
headerPutString(pkg->header, tag, field);
|
||||||
@@ -987,6 +992,8 @@ static rpmRC handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag,
|
@@ -987,6 +992,8 @@ static rpmRC handlePreambleTag(rpmSpec spec, Package pkg, rpmTagVal tag,
|
||||||
|
|||||||
@ -1,26 +0,0 @@
|
|||||||
From 213a4064a4b1b5b260a55b3933170599e617494d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Tue, 1 Sep 2020 12:15:33 +0300
|
|
||||||
Subject: [PATCH] Add missing terminator to copyTagsFromMainDebug array
|
|
||||||
|
|
||||||
headerCopyTags() expects a 0-terminated array, this was overflowing
|
|
||||||
(spotted by address-sanitizer)
|
|
||||||
---
|
|
||||||
build/files.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/build/files.c b/build/files.c
|
|
||||||
index f06f9ac74..47625905c 100644
|
|
||||||
--- a/build/files.c
|
|
||||||
+++ b/build/files.c
|
|
||||||
@@ -2838,6 +2838,7 @@ static rpmTag copyTagsFromMainDebug[] = {
|
|
||||||
RPMTAG_OS,
|
|
||||||
RPMTAG_PLATFORM,
|
|
||||||
RPMTAG_OPTFLAGS,
|
|
||||||
+ 0
|
|
||||||
};
|
|
||||||
|
|
||||||
/* this is a hack: patch the summary and the description to include
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
From 38c03ddb18e86c84d89af695f72442d8365eb64e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Florian Festi <ffesti@redhat.com>
|
|
||||||
Date: Tue, 21 Jul 2020 10:45:20 +0200
|
|
||||||
Subject: [PATCH] Always close libelf handle (#1313)
|
|
||||||
|
|
||||||
Otherwise executables that are not proper elf files are leaking libelf
|
|
||||||
handles. This results in file being left open (mmap'ed) and fails the
|
|
||||||
build on NFS as those files can't be deleted properly there.
|
|
||||||
|
|
||||||
Resolves: rhbz#1840728
|
|
||||||
See also: https://bugzilla.redhat.com/show_bug.cgi?id=1840728
|
|
||||||
---
|
|
||||||
build/files.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/build/files.c b/build/files.c
|
|
||||||
index f675306f7..62489c07c 100644
|
|
||||||
--- a/build/files.c
|
|
||||||
+++ b/build/files.c
|
|
||||||
@@ -1935,8 +1935,8 @@ static int generateBuildIDs(FileList fl, ARGV_t *files)
|
|
||||||
if (terminate)
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
- elf_end (elf);
|
|
||||||
}
|
|
||||||
+ elf_end (elf);
|
|
||||||
close (fd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,169 +0,0 @@
|
|||||||
From d6a86b5e69e46cc283b1e06c92343319beb42e21 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Thu, 4 Mar 2021 13:21:19 +0200
|
|
||||||
Subject: [PATCH] Be much more careful about copying data from the signature
|
|
||||||
header
|
|
||||||
Conflict:NA
|
|
||||||
Reference:https://github.com/rpm-software-management/rpm/commit/d6a86b5e69e46cc283b1e06c92343319beb42e21
|
|
||||||
|
|
||||||
Only look for known tags, and ensure correct type and size where known
|
|
||||||
before copying over. Bump the old arbitrary 16k count limit to 16M limit
|
|
||||||
though, it's not inconceivable that a package could have that many files.
|
|
||||||
While at it, ensure none of these tags exist in the main header,
|
|
||||||
which would confuse us greatly.
|
|
||||||
This is optimized for backporting ease, upstream can remove redundancies
|
|
||||||
and further improve checking later.
|
|
||||||
Reported and initial patches by Demi Marie Obenour.
|
|
||||||
Fixes: RhBug:1935049, RhBug:1933867, RhBug:1935035, RhBug:1934125, ...
|
|
||||||
Fixes: CVE-2021-3421, CVE-2021-20271
|
|
||||||
---
|
|
||||||
lib/package.c | 112 +++++++++++++++++++++++++---------------------------------
|
|
||||||
1 file changed, 49 insertions(+), 63 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/package.c b/lib/package.c
|
|
||||||
index db70d13..6f10bb9 100644
|
|
||||||
--- a/lib/package.c
|
|
||||||
+++ b/lib/package.c
|
|
||||||
@@ -31,82 +31,67 @@ struct pkgdata_s {
|
|
||||||
rpmRC rc;
|
|
||||||
};
|
|
||||||
|
|
||||||
+struct taglate_s {
|
|
||||||
+ rpmTagVal stag;
|
|
||||||
+ rpmTagVal xtag;
|
|
||||||
+ rpm_count_t count;
|
|
||||||
+} const xlateTags[] = {
|
|
||||||
+ { RPMSIGTAG_SIZE, RPMTAG_SIGSIZE, 1 },
|
|
||||||
+ { RPMSIGTAG_PGP, RPMTAG_SIGPGP, 0 },
|
|
||||||
+ { RPMSIGTAG_MD5, RPMTAG_SIGMD5, 16 },
|
|
||||||
+ { RPMSIGTAG_GPG, RPMTAG_SIGGPG, 0 },
|
|
||||||
+ /* { RPMSIGTAG_PGP5, RPMTAG_SIGPGP5, 0 }, */ /* long obsolete, dont use */
|
|
||||||
+ { RPMSIGTAG_PAYLOADSIZE, RPMTAG_ARCHIVESIZE, 1 },
|
|
||||||
+ { RPMSIGTAG_FILESIGNATURES, RPMTAG_FILESIGNATURES, 0 },
|
|
||||||
+ { RPMSIGTAG_FILESIGNATURELENGTH, RPMTAG_FILESIGNATURELENGTH, 1 },
|
|
||||||
+ { RPMSIGTAG_SHA1, RPMTAG_SHA1HEADER, 1 },
|
|
||||||
+ { RPMSIGTAG_SHA256, RPMTAG_SHA256HEADER, 1 },
|
|
||||||
+ { RPMSIGTAG_DSA, RPMTAG_DSAHEADER, 0 },
|
|
||||||
+ { RPMSIGTAG_RSA, RPMTAG_RSAHEADER, 0 },
|
|
||||||
+ { RPMSIGTAG_LONGSIZE, RPMTAG_LONGSIGSIZE, 1 },
|
|
||||||
+ { RPMSIGTAG_LONGARCHIVESIZE, RPMTAG_LONGARCHIVESIZE, 1 },
|
|
||||||
+ { 0 }
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
/** \ingroup header
|
|
||||||
* Translate and merge legacy signature tags into header.
|
|
||||||
* @param h header (dest)
|
|
||||||
* @param sigh signature header (src)
|
|
||||||
+ * @return failing tag number, 0 on success
|
|
||||||
*/
|
|
||||||
static
|
|
||||||
-void headerMergeLegacySigs(Header h, Header sigh)
|
|
||||||
+rpmTagVal headerMergeLegacySigs(Header h, Header sigh, char **msg)
|
|
||||||
{
|
|
||||||
- HeaderIterator hi;
|
|
||||||
+ const struct taglate_s *xl;
|
|
||||||
struct rpmtd_s td;
|
|
||||||
-
|
|
||||||
- hi = headerInitIterator(sigh);
|
|
||||||
- for (; headerNext(hi, &td); rpmtdFreeData(&td))
|
|
||||||
- {
|
|
||||||
- switch (td.tag) {
|
|
||||||
- /* XXX Translate legacy signature tag values. */
|
|
||||||
- case RPMSIGTAG_SIZE:
|
|
||||||
- td.tag = RPMTAG_SIGSIZE;
|
|
||||||
- break;
|
|
||||||
- case RPMSIGTAG_PGP:
|
|
||||||
- td.tag = RPMTAG_SIGPGP;
|
|
||||||
- break;
|
|
||||||
- case RPMSIGTAG_MD5:
|
|
||||||
- td.tag = RPMTAG_SIGMD5;
|
|
||||||
- break;
|
|
||||||
- case RPMSIGTAG_GPG:
|
|
||||||
- td.tag = RPMTAG_SIGGPG;
|
|
||||||
- break;
|
|
||||||
- case RPMSIGTAG_PGP5:
|
|
||||||
- td.tag = RPMTAG_SIGPGP5;
|
|
||||||
- break;
|
|
||||||
- case RPMSIGTAG_PAYLOADSIZE:
|
|
||||||
- td.tag = RPMTAG_ARCHIVESIZE;
|
|
||||||
- break;
|
|
||||||
- case RPMSIGTAG_FILESIGNATURES:
|
|
||||||
- td.tag = RPMTAG_FILESIGNATURES;
|
|
||||||
- break;
|
|
||||||
- case RPMSIGTAG_FILESIGNATURELENGTH:
|
|
||||||
- td.tag = RPMTAG_FILESIGNATURELENGTH;
|
|
||||||
- break;
|
|
||||||
- case RPMSIGTAG_SHA1:
|
|
||||||
- case RPMSIGTAG_SHA256:
|
|
||||||
- case RPMSIGTAG_DSA:
|
|
||||||
- case RPMSIGTAG_RSA:
|
|
||||||
- default:
|
|
||||||
- if (!(td.tag >= HEADER_SIGBASE && td.tag < HEADER_TAGBASE))
|
|
||||||
- continue;
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
- if (!headerIsEntry(h, td.tag)) {
|
|
||||||
- switch (td.type) {
|
|
||||||
- case RPM_NULL_TYPE:
|
|
||||||
- continue;
|
|
||||||
+ rpmtdReset(&td);
|
|
||||||
+ for (xl = xlateTags; xl->stag; xl++) {
|
|
||||||
+ /* There mustn't be one in the main header */
|
|
||||||
+ if (headerIsEntry(h, xl->xtag))
|
|
||||||
+ if (headerGet(sigh, xl->stag, &td, HEADERGET_RAW|HEADERGET_MINMEM)) {
|
|
||||||
+ /* Translate legacy tags */
|
|
||||||
+ if (xl->stag != xl->xtag)
|
|
||||||
+ td.tag = xl->xtag;
|
|
||||||
+ /* Ensure type and tag size match expectations */
|
|
||||||
+ if (td.type != rpmTagGetTagType(td.tag))
|
|
||||||
break;
|
|
||||||
- case RPM_CHAR_TYPE:
|
|
||||||
- case RPM_INT8_TYPE:
|
|
||||||
- case RPM_INT16_TYPE:
|
|
||||||
- case RPM_INT32_TYPE:
|
|
||||||
- case RPM_INT64_TYPE:
|
|
||||||
- if (td.count != 1)
|
|
||||||
- continue;
|
|
||||||
+ if (td.count < 1 || td.count > 16*1024*1024)
|
|
||||||
break;
|
|
||||||
- case RPM_STRING_TYPE:
|
|
||||||
- case RPM_STRING_ARRAY_TYPE:
|
|
||||||
- case RPM_BIN_TYPE:
|
|
||||||
- if (td.count >= 16*1024)
|
|
||||||
- continue;
|
|
||||||
+ if (xl->count && td.count != xl->count)
|
|
||||||
break;
|
|
||||||
- case RPM_I18NSTRING_TYPE:
|
|
||||||
- continue;
|
|
||||||
+ if (!headerPut(h, &td, HEADERPUT_DEFAULT))
|
|
||||||
break;
|
|
||||||
- }
|
|
||||||
- (void) headerPut(h, &td, HEADERPUT_DEFAULT);
|
|
||||||
+ rpmtdFreeData(&td);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- headerFreeIterator(hi);
|
|
||||||
+ rpmtdFreeData(&td);
|
|
||||||
+
|
|
||||||
+ if (xl->stag) {
|
|
||||||
+ rasprintf(msg, "invalid signature tag %s (%d)",
|
|
||||||
+ rpmTagGetName(xl->xtag), xl->xtag);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return xl->stag;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@@ -369,7 +354,8 @@ rpmRC rpmReadPackageFile(rpmts ts, FD_t fd, const char * fn, Header * hdrp)
|
|
||||||
goto exit;
|
|
||||||
|
|
||||||
/* Append (and remap) signature tags to the metadata. */
|
|
||||||
- headerMergeLegacySigs(h, sigh);
|
|
||||||
+ if (headerMergeLegacySigs(h, sigh, &msg))
|
|
||||||
+ goto exit;
|
|
||||||
applyRetrofits(h);
|
|
||||||
|
|
||||||
/* Bump reference count for return. */
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
@ -1,64 +0,0 @@
|
|||||||
From a4afbb62c94c6e0dc18c1bf08336aeb4a91f82de Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Wed, 22 Apr 2020 14:12:47 +0300
|
|
||||||
Subject: [PATCH] Don't look into source package provides in depsolving
|
|
||||||
|
|
||||||
Fixes regressions from commit 75ec16e660e784d7897b37cac1a2b9b135825f25:
|
|
||||||
the newly added provides of to-be-built packages were being used for
|
|
||||||
dependency resolution, such as spec satifying its own buildrequires,
|
|
||||||
and matched against conflicts in installed packages.
|
|
||||||
|
|
||||||
Source packages cannot obsolete anything or provide capabilities or files
|
|
||||||
to transactions, don't add them to rpmal at all. Explicitly skip checks
|
|
||||||
against source provides, similarly to what we already did with obsoletes.
|
|
||||||
|
|
||||||
Fixes: #1189
|
|
||||||
---
|
|
||||||
lib/depends.c | 8 ++++----
|
|
||||||
lib/rpmal.c | 4 ++++
|
|
||||||
2 files changed, 8 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/depends.c b/lib/depends.c
|
|
||||||
index 6acb21dc3..579451926 100644
|
|
||||||
--- a/lib/depends.c
|
|
||||||
+++ b/lib/depends.c
|
|
||||||
@@ -1040,6 +1040,10 @@ int rpmtsCheck(rpmts ts)
|
|
||||||
checkDS(ts, dcache, p, rpmteNEVRA(p), rpmteDS(p, RPMTAG_OBSOLETENAME),
|
|
||||||
tscolor);
|
|
||||||
|
|
||||||
+ /* Skip obsoletion and provides checks for source packages (ie build) */
|
|
||||||
+ if (rpmteIsSource(p))
|
|
||||||
+ continue;
|
|
||||||
+
|
|
||||||
/* Check provides against conflicts in installed packages. */
|
|
||||||
while (rpmdsNext(provides) >= 0) {
|
|
||||||
checkInstDeps(ts, dcache, p, RPMTAG_CONFLICTNAME, NULL, provides, 0);
|
|
||||||
@@ -1047,10 +1051,6 @@ int rpmtsCheck(rpmts ts)
|
|
||||||
checkInstDeps(ts, dcache, p, RPMTAG_REQUIRENAME, NULL, provides, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* Skip obsoletion checks for source packages (ie build) */
|
|
||||||
- if (rpmteIsSource(p))
|
|
||||||
- continue;
|
|
||||||
-
|
|
||||||
/* Check package name (not provides!) against installed obsoletes */
|
|
||||||
checkInstDeps(ts, dcache, p, RPMTAG_OBSOLETENAME, NULL, rpmteDS(p, RPMTAG_NAME), 0);
|
|
||||||
|
|
||||||
diff --git a/lib/rpmal.c b/lib/rpmal.c
|
|
||||||
index 3c8acd63a..8a47d025a 100644
|
|
||||||
--- a/lib/rpmal.c
|
|
||||||
+++ b/lib/rpmal.c
|
|
||||||
@@ -247,6 +247,10 @@ void rpmalAdd(rpmal al, rpmte p)
|
|
||||||
rpmalNum pkgNum;
|
|
||||||
availablePackage alp;
|
|
||||||
|
|
||||||
+ /* Source packages don't provide anything to depsolving */
|
|
||||||
+ if (rpmteIsSource(p))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
if (al->size == al->alloced) {
|
|
||||||
al->alloced += al->delta;
|
|
||||||
al->list = xrealloc(al->list, sizeof(*al->list) * al->alloced);
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
From bb30f997c4b22c0d5cf6752f15d2af17538f91f0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Thu, 9 Jan 2020 10:24:39 +0200
|
|
||||||
Subject: [PATCH] Don't require signature header to be in single contiguous
|
|
||||||
region part II
|
|
||||||
|
|
||||||
The generic case was reported in #270 and fixed quite a while ago in
|
|
||||||
commit 34c2ba3c6a80a778cdf2e42a9193b3264e08e1b3, but signing uses a
|
|
||||||
different code path and require the same treatment.
|
|
||||||
|
|
||||||
Fixes: #1002
|
|
||||||
---
|
|
||||||
lib/signature.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/lib/signature.c b/lib/signature.c
|
|
||||||
index 6f04962e8..21f04c7f2 100644
|
|
||||||
--- a/lib/signature.c
|
|
||||||
+++ b/lib/signature.c
|
|
||||||
@@ -65,7 +65,7 @@ rpmRC rpmReadSignature(FD_t fd, Header * sighp, char ** msg)
|
|
||||||
if (sighp)
|
|
||||||
*sighp = NULL;
|
|
||||||
|
|
||||||
- if (hdrblobRead(fd, 1, 1, RPMTAG_HEADERSIGNATURES, &blob, &buf) != RPMRC_OK)
|
|
||||||
+ if (hdrblobRead(fd, 1, 0, RPMTAG_HEADERSIGNATURES, &blob, &buf) != RPMRC_OK)
|
|
||||||
goto exit;
|
|
||||||
|
|
||||||
/* OK, blob looks sane, load the header. */
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,218 +0,0 @@
|
|||||||
From 307872f71b357a3839fd037514a1c3dabfacc611 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Mon, 3 Feb 2020 14:54:16 +0200
|
|
||||||
Subject: [PATCH] Fix POPT_ARG_STRING memleaks in librpmbuild
|
|
||||||
|
|
||||||
popt always returned malloc'ed memory for POPT_ARG_STRING items, but
|
|
||||||
for whatever historical reason rpm systematically passed const char *
|
|
||||||
pointers as targets, making them look non-freeable. Besides changing
|
|
||||||
just the types and adding free()'s, const-correctness requires extra
|
|
||||||
tweaks as there's mixed use from string literals and poptGetArg() which
|
|
||||||
does return const pointers.
|
|
||||||
---
|
|
||||||
build/parseDescription.c | 11 +++++++----
|
|
||||||
build/parseFiles.c | 5 +++--
|
|
||||||
build/parsePolicies.c | 5 +++--
|
|
||||||
build/parsePrep.c | 6 +++++-
|
|
||||||
build/parseScript.c | 11 +++++++----
|
|
||||||
build/policies.c | 8 ++++++--
|
|
||||||
6 files changed, 31 insertions(+), 15 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/build/parseDescription.c b/build/parseDescription.c
|
|
||||||
index c0737c0..72811f5 100644
|
|
||||||
--- a/build/parseDescription.c
|
|
||||||
+++ b/build/parseDescription.c
|
|
||||||
@@ -19,8 +19,8 @@ int parseDescription(rpmSpec spec)
|
|
||||||
int rc, argc;
|
|
||||||
int arg;
|
|
||||||
const char **argv = NULL;
|
|
||||||
- const char *name = NULL;
|
|
||||||
- const char *lang = RPMBUILD_DEFAULT_LANG;
|
|
||||||
+ char *name = NULL;
|
|
||||||
+ char *lang = NULL;
|
|
||||||
const char *descr = "";
|
|
||||||
poptContext optCon = NULL;
|
|
||||||
struct poptOption optionsTable[] = {
|
|
||||||
@@ -52,7 +52,7 @@ int parseDescription(rpmSpec spec)
|
|
||||||
|
|
||||||
if (poptPeekArg(optCon)) {
|
|
||||||
if (name == NULL)
|
|
||||||
- name = poptGetArg(optCon);
|
|
||||||
+ name = xstrdup(poptGetArg(optCon));
|
|
||||||
if (poptPeekArg(optCon)) {
|
|
||||||
rpmlog(RPMLOG_ERR, _("line %d: Too many names: %s\n"),
|
|
||||||
spec->lineNum,
|
|
||||||
@@ -75,12 +75,15 @@ int parseDescription(rpmSpec spec)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (addLangTag(spec, pkg->header,
|
|
||||||
- RPMTAG_DESCRIPTION, descr, lang)) {
|
|
||||||
+ RPMTAG_DESCRIPTION, descr,
|
|
||||||
+ lang ? lang : RPMBUILD_DEFAULT_LANG)) {
|
|
||||||
nextPart = PART_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
exit:
|
|
||||||
freeStringBuf(sb);
|
|
||||||
+ free(lang);
|
|
||||||
+ free(name);
|
|
||||||
free(argv);
|
|
||||||
poptFreeContext(optCon);
|
|
||||||
return nextPart;
|
|
||||||
diff --git a/build/parseFiles.c b/build/parseFiles.c
|
|
||||||
index 69935d4..0dc1f17 100644
|
|
||||||
--- a/build/parseFiles.c
|
|
||||||
+++ b/build/parseFiles.c
|
|
||||||
@@ -17,7 +17,7 @@ int parseFiles(rpmSpec spec)
|
|
||||||
int rc, argc;
|
|
||||||
int arg;
|
|
||||||
const char ** argv = NULL;
|
|
||||||
- const char *name = NULL;
|
|
||||||
+ char *name = NULL;
|
|
||||||
int flag = PART_SUBNAME;
|
|
||||||
poptContext optCon = NULL;
|
|
||||||
struct poptOption optionsTable[] = {
|
|
||||||
@@ -52,7 +52,7 @@ int parseFiles(rpmSpec spec)
|
|
||||||
|
|
||||||
if (poptPeekArg(optCon)) {
|
|
||||||
if (name == NULL)
|
|
||||||
- name = poptGetArg(optCon);
|
|
||||||
+ name = xstrdup(poptGetArg(optCon));
|
|
||||||
if (poptPeekArg(optCon)) {
|
|
||||||
rpmlog(RPMLOG_ERR, _("line %d: Too many names: %s\n"),
|
|
||||||
spec->lineNum,
|
|
||||||
@@ -89,6 +89,7 @@ int parseFiles(rpmSpec spec)
|
|
||||||
exit:
|
|
||||||
rpmPopMacro(NULL, "license");
|
|
||||||
free(argv);
|
|
||||||
+ free(name);
|
|
||||||
poptFreeContext(optCon);
|
|
||||||
|
|
||||||
return res;
|
|
||||||
diff --git a/build/parsePolicies.c b/build/parsePolicies.c
|
|
||||||
index 118b92c..64b95b1 100644
|
|
||||||
--- a/build/parsePolicies.c
|
|
||||||
+++ b/build/parsePolicies.c
|
|
||||||
@@ -19,7 +19,7 @@ int parsePolicies(rpmSpec spec)
|
|
||||||
int rc, argc;
|
|
||||||
int arg;
|
|
||||||
const char **argv = NULL;
|
|
||||||
- const char *name = NULL;
|
|
||||||
+ char *name = NULL;
|
|
||||||
int flag = PART_SUBNAME;
|
|
||||||
poptContext optCon = NULL;
|
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ int parsePolicies(rpmSpec spec)
|
|
||||||
|
|
||||||
if (poptPeekArg(optCon)) {
|
|
||||||
if (name == NULL)
|
|
||||||
- name = poptGetArg(optCon);
|
|
||||||
+ name = xstrdup(poptGetArg(optCon));
|
|
||||||
if (poptPeekArg(optCon)) {
|
|
||||||
rpmlog(RPMLOG_ERR, _("line %d: Too many names: %s\n"),
|
|
||||||
spec->lineNum, spec->line);
|
|
||||||
@@ -66,6 +66,7 @@ int parsePolicies(rpmSpec spec)
|
|
||||||
|
|
||||||
exit:
|
|
||||||
free(argv);
|
|
||||||
+ free(name);
|
|
||||||
poptFreeContext(optCon);
|
|
||||||
|
|
||||||
return res;
|
|
||||||
diff --git a/build/parsePrep.c b/build/parsePrep.c
|
|
||||||
index fe37575..cafb050 100644
|
|
||||||
--- a/build/parsePrep.c
|
|
||||||
+++ b/build/parsePrep.c
|
|
||||||
@@ -242,7 +242,7 @@ static int doSetupMacro(rpmSpec spec, const char *line)
|
|
||||||
int leaveDirs = 0, skipDefaultAction = 0;
|
|
||||||
int createDir = 0, quietly = 0;
|
|
||||||
int buildInPlace = 0;
|
|
||||||
- const char * dirName = NULL;
|
|
||||||
+ char * dirName = NULL;
|
|
||||||
struct poptOption optionsTable[] = {
|
|
||||||
{ NULL, 'a', POPT_ARG_STRING, NULL, 'a', NULL, NULL},
|
|
||||||
{ NULL, 'b', POPT_ARG_STRING, NULL, 'b', NULL, NULL},
|
|
||||||
@@ -373,6 +373,7 @@ exit:
|
|
||||||
freeStringBuf(before);
|
|
||||||
freeStringBuf(after);
|
|
||||||
poptFreeContext(optCon);
|
|
||||||
+ free(dirName);
|
|
||||||
free(argv);
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
@@ -484,6 +485,9 @@ static rpmRC doPatchMacro(rpmSpec spec, const char *line)
|
|
||||||
|
|
||||||
exit:
|
|
||||||
argvFree(patchnums);
|
|
||||||
+ free(opt_b);
|
|
||||||
+ free(opt_d);
|
|
||||||
+ free(opt_o);
|
|
||||||
free(argv);
|
|
||||||
poptFreeContext(optCon);
|
|
||||||
return rc;
|
|
||||||
diff --git a/build/parseScript.c b/build/parseScript.c
|
|
||||||
index bdf6ab3..e037bba 100644
|
|
||||||
--- a/build/parseScript.c
|
|
||||||
+++ b/build/parseScript.c
|
|
||||||
@@ -100,9 +100,9 @@ int parseScript(rpmSpec spec, int parsePart)
|
|
||||||
int arg;
|
|
||||||
const char **argv = NULL;
|
|
||||||
poptContext optCon = NULL;
|
|
||||||
- const char *name = NULL;
|
|
||||||
- const char *prog = "/bin/sh";
|
|
||||||
- const char *file = NULL;
|
|
||||||
+ char *name = NULL;
|
|
||||||
+ char *prog = xstrdup("/bin/sh");
|
|
||||||
+ char *file = NULL;
|
|
||||||
int priority = 1000000;
|
|
||||||
struct poptOption optionsTable[] = {
|
|
||||||
{ NULL, 'p', POPT_ARG_STRING, &prog, 'p', NULL, NULL},
|
|
||||||
@@ -326,7 +326,7 @@ int parseScript(rpmSpec spec, int parsePart)
|
|
||||||
|
|
||||||
if (poptPeekArg(optCon)) {
|
|
||||||
if (name == NULL)
|
|
||||||
- name = poptGetArg(optCon);
|
|
||||||
+ name = xstrdup(poptGetArg(optCon));
|
|
||||||
if (poptPeekArg(optCon)) {
|
|
||||||
rpmlog(RPMLOG_ERR, _("line %d: Too many names: %s\n"),
|
|
||||||
spec->lineNum,
|
|
||||||
@@ -465,6 +465,9 @@ exit:
|
|
||||||
free(reqargs);
|
|
||||||
freeStringBuf(sb);
|
|
||||||
free(progArgv);
|
|
||||||
+ free(prog);
|
|
||||||
+ free(name);
|
|
||||||
+ free(file);
|
|
||||||
free(argv);
|
|
||||||
poptFreeContext(optCon);
|
|
||||||
|
|
||||||
diff --git a/build/policies.c b/build/policies.c
|
|
||||||
index d3b1930..e92df19 100644
|
|
||||||
--- a/build/policies.c
|
|
||||||
+++ b/build/policies.c
|
|
||||||
@@ -276,16 +276,20 @@ static rpmRC processPolicies(rpmSpec spec, Package pkg, int test)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (writeModuleToHeader(mod, pkg) != RPMRC_OK) {
|
|
||||||
- freeModule(mod);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
- freeModule(mod);
|
|
||||||
+ mod = freeModule(mod);
|
|
||||||
+ name = _free(name);
|
|
||||||
+ types = _free(types);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = RPMRC_OK;
|
|
||||||
|
|
||||||
exit:
|
|
||||||
+ freeModule(mod);
|
|
||||||
+ free(name);
|
|
||||||
+ free(types);
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,39 +0,0 @@
|
|||||||
From 4ddab4fb7e1ccc7dc466534250177b7d2682a9e2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Wed, 29 Jan 2020 15:39:58 +0200
|
|
||||||
Subject: [PATCH] Fix a minor memory leak on suppressed inhibition lock warning
|
|
||||||
message
|
|
||||||
|
|
||||||
Commit 708e61307bc3fd027b016fdf5a1d1a5274c1843c introduced a memory leak
|
|
||||||
on the error object: if the message is suppressed then the error object
|
|
||||||
is never freed. Test for the suppression conditions separately to fix.
|
|
||||||
---
|
|
||||||
plugins/systemd_inhibit.c | 10 ++++++----
|
|
||||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/systemd_inhibit.c b/plugins/systemd_inhibit.c
|
|
||||||
index 0ddca9cd8..ecff30533 100644
|
|
||||||
--- a/plugins/systemd_inhibit.c
|
|
||||||
+++ b/plugins/systemd_inhibit.c
|
|
||||||
@@ -52,12 +52,14 @@ static int inhibit(void)
|
|
||||||
dbus_message_unref(reply);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (dbus_error_is_set(&err)
|
|
||||||
- && !dbus_error_has_name(&err, DBUS_ERROR_NO_SERVER)
|
|
||||||
- && !dbus_error_has_name(&err, DBUS_ERROR_FILE_NOT_FOUND)) {
|
|
||||||
- rpmlog(RPMLOG_WARNING,
|
|
||||||
+ if (dbus_error_is_set(&err)) {
|
|
||||||
+ if (!dbus_error_has_name(&err, DBUS_ERROR_NO_SERVER) &&
|
|
||||||
+ !dbus_error_has_name(&err, DBUS_ERROR_FILE_NOT_FOUND))
|
|
||||||
+ {
|
|
||||||
+ rpmlog(RPMLOG_WARNING,
|
|
||||||
"Unable to get systemd shutdown inhibition lock: %s\n",
|
|
||||||
err.message);
|
|
||||||
+ }
|
|
||||||
dbus_error_free(&err);
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
From 67f8dadebdf290c4ade36a7d3a27e52048d96032 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Tue, 4 Feb 2020 10:36:43 +0200
|
|
||||||
Subject: [PATCH] Fix build regression in commit
|
|
||||||
307872f71b357a3839fd037514a1c3dabfacc611
|
|
||||||
|
|
||||||
Commit 307872f71b357a3839fd037514a1c3dabfacc611 broke build with
|
|
||||||
SELinux enabled but was accidentally merged. Fix the breakage.
|
|
||||||
---
|
|
||||||
build/policies.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/build/policies.c b/build/policies.c
|
|
||||||
index e92df194a..16d5f87e6 100644
|
|
||||||
--- a/build/policies.c
|
|
||||||
+++ b/build/policies.c
|
|
||||||
@@ -221,6 +221,7 @@ static rpmRC processPolicies(rpmSpec spec, Package pkg, int test)
|
|
||||||
char *types = NULL;
|
|
||||||
uint32_t flags = 0;
|
|
||||||
poptContext optCon = NULL;
|
|
||||||
+ ModuleRec mod = NULL;
|
|
||||||
|
|
||||||
rpmRC rc = RPMRC_FAIL;
|
|
||||||
|
|
||||||
@@ -236,7 +237,6 @@ static rpmRC processPolicies(rpmSpec spec, Package pkg, int test)
|
|
||||||
}
|
|
||||||
|
|
||||||
for (ARGV_const_t pol = pkg->policyList; *pol != NULL; pol++) {
|
|
||||||
- ModuleRec mod;
|
|
||||||
const char *line = *pol;
|
|
||||||
const char **argv = NULL;
|
|
||||||
int argc = 0;
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,60 +0,0 @@
|
|||||||
From 486579912381ede82172dc6d0ff3941a6d0536b5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hongxu Jia <hongxu.jia@windriver.com>
|
|
||||||
Date: Wed, 3 Jun 2020 10:25:24 +0800
|
|
||||||
Subject: [PATCH] Fix: bump up the limit of signature header to 64MB
|
|
||||||
|
|
||||||
Since commits [Place file signatures into the signature header where they
|
|
||||||
belong][1] applied, run `rpm -Kv **.rpm' failed if signature header
|
|
||||||
is larger than 64KB. Here are steps:
|
|
||||||
|
|
||||||
1) A unsigned rpm package, the size is 227560 bytes
|
|
||||||
$ ls -al xz-src-5.2.5-r0.corei7_64.rpm
|
|
||||||
-rw-------. 1 mockbuild 1000 227560 Jun 3 09:59
|
|
||||||
|
|
||||||
2) Sign the rpm package
|
|
||||||
$ rpmsign --addsign ... xz-src-5.2.5-r0.corei7_64.rpm
|
|
||||||
|
|
||||||
3) The size of signed rpm is 312208 bytes
|
|
||||||
$ ls -al xz-src-5.2.5-r0.corei7_64.rpm
|
|
||||||
-rw-------. 1 mockbuild 1000 312208 Jun 3 09:48
|
|
||||||
|
|
||||||
4) Run `rpm -Kv' failed with signature hdr data out of range
|
|
||||||
$ rpm -Kv xz-src-5.2.5-r0.corei7_64.rpm
|
|
||||||
xz-src-5.2.5-r0.corei7_64.rpm:
|
|
||||||
error: xz-src-5.2.5-r0.corei7_64.rpm: signature hdr data: BAD, no. of
|
|
||||||
bytes(88864) out of range
|
|
||||||
|
|
||||||
From 1) and 3), the size of signed rpm package increased
|
|
||||||
312208 - 227560 = 84648, so the check of dl_max (64KB,65536)
|
|
||||||
is not enough.
|
|
||||||
|
|
||||||
As [1] said:
|
|
||||||
|
|
||||||
This also means the signature header can be MUCH bigger than ever
|
|
||||||
before,so bump up the limit (to 64MB, arbitrary something for now)
|
|
||||||
|
|
||||||
So [1] missed to multiply by 1024.
|
|
||||||
|
|
||||||
[1] https://github.com/rpm-software-management/rpm/commit/f558e886050c4e98f6cdde391df679a411b3f62c
|
|
||||||
|
|
||||||
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
|
|
||||||
---
|
|
||||||
lib/header.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/lib/header.c b/lib/header.c
|
|
||||||
index f9152ba90..e59d63744 100644
|
|
||||||
--- a/lib/header.c
|
|
||||||
+++ b/lib/header.c
|
|
||||||
@@ -1903,7 +1903,7 @@ rpmRC hdrblobRead(FD_t fd, int magic, int exact_size, rpmTagVal regionTag, hdrbl
|
|
||||||
|
|
||||||
if (regionTag == RPMTAG_HEADERSIGNATURES) {
|
|
||||||
il_max = 32;
|
|
||||||
- dl_max = 64 * 1024;
|
|
||||||
+ dl_max = 64 * 1024 * 1024;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(block, 0, sizeof(block));
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,98 +0,0 @@
|
|||||||
From a58725822651f791b2e74fe40a6e85b3b7e72aca Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Mon, 10 Aug 2020 11:01:37 +0300
|
|
||||||
Subject: [PATCH] Fix changelog trimming to work relative to newest
|
|
||||||
existing
|
|
||||||
entry (#1301)
|
|
||||||
|
|
||||||
%_changelog_trimtime is an absolute timestamp which needs to be
|
|
||||||
%constantly
|
|
||||||
pushed forward to preserve the same relative age, and will start
|
|
||||||
trimming
|
|
||||||
entries from unchanged packages until none are left, leading to
|
|
||||||
unexpected
|
|
||||||
and confusing behavior (RhBug:1722806, ...)
|
|
||||||
|
|
||||||
It's better to trim by age relative to newest changelog entry. This way
|
|
||||||
the
|
|
||||||
number of trimmed entries will not change unless the spec changes, and
|
|
||||||
at
|
|
||||||
least one entry is always preserved. Introduce a new %_changelog_trimage
|
|
||||||
macro for this and mark the broken by design %_changelog_trimtime as
|
|
||||||
deprecated, but autoconvert an existing trimtime into relative for now.
|
|
||||||
|
|
||||||
As a seemingly unrelated change, move the "time" variable declaration
|
|
||||||
to a narrower scope to unmask the time() function for use on entry.
|
|
||||||
|
|
||||||
Fixes: #1301
|
|
||||||
---
|
|
||||||
build/parseChangelog.c | 16 +++++++++++++++-
|
|
||||||
macros.in | 6 +++++-
|
|
||||||
2 files changed, 20 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/build/parseChangelog.c b/build/parseChangelog.c
|
|
||||||
index ad6d834..22f445e 100644
|
|
||||||
--- a/build/parseChangelog.c
|
|
||||||
+++ b/build/parseChangelog.c
|
|
||||||
@@ -200,18 +200,26 @@ static rpmRC addChangelog(Header h, ARGV_const_t sb)
|
|
||||||
rpmRC rc = RPMRC_FAIL; /* assume failure */
|
|
||||||
char *s, *sp;
|
|
||||||
int i;
|
|
||||||
- time_t time;
|
|
||||||
+ time_t firstTime = 0;
|
|
||||||
time_t lastTime = 0;
|
|
||||||
time_t trimtime = rpmExpandNumeric("%{?_changelog_trimtime}");
|
|
||||||
+ time_t trimage = rpmExpandNumeric("%{?_changelog_trimage}");
|
|
||||||
char *date, *name, *text, *next;
|
|
||||||
int date_words; /* number of words in date string */
|
|
||||||
|
|
||||||
+ /* Convert _changelog_trimtime to age for backwards compatibility */
|
|
||||||
+ if (trimtime && !trimage) {
|
|
||||||
+ trimage = time(NULL) - trimtime;
|
|
||||||
+ trimtime = 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
s = sp = argvJoin(sb, "");
|
|
||||||
|
|
||||||
/* skip space */
|
|
||||||
SKIPSPACE(s);
|
|
||||||
|
|
||||||
while (*s != '\0') {
|
|
||||||
+ time_t time;
|
|
||||||
if (*s != '*') {
|
|
||||||
rpmlog(RPMLOG_ERR, _("%%changelog entries must start with *\n"));
|
|
||||||
goto exit;
|
|
||||||
@@ -235,6 +243,12 @@ static rpmRC addChangelog(Header h, ARGV_const_t sb)
|
|
||||||
rpmlog(RPMLOG_ERR, _("bad date in %%changelog: %s\n"), date);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
+ /* Changelog trimming is always relative to first entry */
|
|
||||||
+ if (!firstTime) {
|
|
||||||
+ firstTime = time;
|
|
||||||
+ if (trimage)
|
|
||||||
+ trimtime = firstTime - trimage;
|
|
||||||
+ }
|
|
||||||
if (lastTime && lastTime < time) {
|
|
||||||
rpmlog(RPMLOG_ERR,
|
|
||||||
_("%%changelog not in descending chronological order\n"));
|
|
||||||
diff --git a/macros.in b/macros.in
|
|
||||||
index 8619c13..5b45d73 100644
|
|
||||||
--- a/macros.in
|
|
||||||
+++ b/macros.in
|
|
||||||
@@ -230,8 +230,12 @@ package or when debugging this package.\
|
|
||||||
# The path to the gzip executable (legacy, use %{__gzip} instead).
|
|
||||||
%_gzipbin %{__gzip}
|
|
||||||
|
|
||||||
+# Maximum age of preserved changelog entries in binary packages,
|
|
||||||
+# relative to newest existing entry. Unix timestamp format.
|
|
||||||
+%_changelog_trimage 0
|
|
||||||
+
|
|
||||||
# The Unix time of the latest kept changelog entry in binary packages.
|
|
||||||
-# Any older entry is not packaged in binary packages.
|
|
||||||
+# DEPRACATED, use %_changelog_trimage instead.
|
|
||||||
%_changelog_trimtime 0
|
|
||||||
|
|
||||||
# If true, set the SOURCE_DATE_EPOCH environment variable
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
From c9bb0c30d0eab5ff7db80d920d40c02623732f71 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tom Stellard <tstellar@redhat.com>
|
|
||||||
Date: Tue, 9 Jun 2020 21:05:16 +0000
|
|
||||||
Subject: [PATCH] Fix data race in packageBinaries() function
|
|
||||||
|
|
||||||
The pkg variable used in the parallel loop was declared outside
|
|
||||||
of the omp parallel construct, so it was shared among tasks. This
|
|
||||||
had the potential to cause a data race. The gcc openmp implementation
|
|
||||||
did not hit this problem, but I uncovered it while trying to compile with
|
|
||||||
clang. My best guess as to what was happening is that after the last
|
|
||||||
task was launched, all tasks had the same value of pkg and were operating
|
|
||||||
on the same data at the same time.
|
|
||||||
|
|
||||||
This patch declares the variable inside the omp parallel construct, so each
|
|
||||||
task gets its own copy of the variable.
|
|
||||||
---
|
|
||||||
build/pack.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/build/pack.c b/build/pack.c
|
|
||||||
index 1f3d432bb3..8d6f74935e 100644
|
|
||||||
--- a/build/pack.c
|
|
||||||
+++ b/build/pack.c
|
|
||||||
@@ -765,7 +765,7 @@ rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating)
|
|
||||||
#pragma omp parallel
|
|
||||||
#pragma omp single
|
|
||||||
for (int i = 0; i < npkgs; i++) {
|
|
||||||
- pkg = tasks[i];
|
|
||||||
+ Package pkg = tasks[i];
|
|
||||||
#pragma omp task untied priority(i)
|
|
||||||
{
|
|
||||||
pkg->rc = packageBinary(spec, pkg, cookie, cheating, &pkg->filename);
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
From d937b04fb1cb5d3ca303bd458169c352a4b52669 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Florian Festi <ffesti@redhat.com>
|
|
||||||
Date: Fri, 31 Jan 2020 12:27:26 +0100
|
|
||||||
Subject: [PATCH] Fix isUnorderedReq() for multiple qualifiers
|
|
||||||
|
|
||||||
isUnorderedReq() returned True as soon as any qualifier that does not
|
|
||||||
require ordering is passed. But some qulifiers - basically the scriptlets
|
|
||||||
run during installation and erasure of the package - may still require
|
|
||||||
the dependency to be taken into account during ordering.
|
|
||||||
|
|
||||||
Now isUnorderedReq() returns 0 if any of those are also set.
|
|
||||||
|
|
||||||
Resolves: #1030
|
|
||||||
---
|
|
||||||
lib/rpmds.h | 6 ++++--
|
|
||||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/rpmds.h b/lib/rpmds.h
|
|
||||||
index 491d8738d..d160c948e 100644
|
|
||||||
--- a/lib/rpmds.h
|
|
||||||
+++ b/lib/rpmds.h
|
|
||||||
@@ -82,12 +82,14 @@ typedef rpmFlags rpmsenseFlags;
|
|
||||||
_notpre(RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN)
|
|
||||||
#define _UNORDERED_ONLY_MASK \
|
|
||||||
_notpre(RPMSENSE_RPMLIB|RPMSENSE_CONFIG|RPMSENSE_PRETRANS|RPMSENSE_POSTTRANS|RPMSENSE_SCRIPT_VERIFY)
|
|
||||||
+#define _FORCE_ORDER_ONLY_MASK \
|
|
||||||
+ _notpre(RPMSENSE_SCRIPT_PRE|RPMSENSE_SCRIPT_POST|RPMSENSE_SCRIPT_PREUN|RPMSENSE_SCRIPT_POSTUN)
|
|
||||||
|
|
||||||
#define isLegacyPreReq(_x) (((_x) & _ALL_REQUIRES_MASK) == RPMSENSE_PREREQ)
|
|
||||||
#define isInstallPreReq(_x) ((_x) & _INSTALL_ONLY_MASK)
|
|
||||||
#define isErasePreReq(_x) ((_x) & _ERASE_ONLY_MASK)
|
|
||||||
-#define isUnorderedReq(_x) ((_x) & _UNORDERED_ONLY_MASK)
|
|
||||||
-
|
|
||||||
+#define isUnorderedReq(_x) ((_x) & _UNORDERED_ONLY_MASK && \
|
|
||||||
+ !((_x) & _FORCE_ORDER_ONLY_MASK))
|
|
||||||
|
|
||||||
|
|
||||||
/** \ingroup rpmds
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,54 +0,0 @@
|
|||||||
From 6d7fa91949337c7a86bab3359b39558fdae07dce Mon Sep 17 00:00:00 2001
|
|
||||||
From: Michael Schroeder <mls@suse.de>
|
|
||||||
Date: Fri, 23 Oct 2020 14:02:35 +0200
|
|
||||||
Subject: [PATCH] Fix logic error in grabArgs()
|
|
||||||
|
|
||||||
If there was a \ at the end of the buffer, the code would
|
|
||||||
return a pointer after the trailing \0 leading to unallocated
|
|
||||||
memory access and weird results in some cases.
|
|
||||||
|
|
||||||
See commit 817959609b95afe34ce0f7f6c3dc5d7d0d9a8470.
|
|
||||||
---
|
|
||||||
rpmio/macro.c | 2 +-
|
|
||||||
tests/rpmmacro.at | 5 +++++
|
|
||||||
2 files changed, 6 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/rpmio/macro.c b/rpmio/macro.c
|
|
||||||
index 1edcb39e6..a1ed9b288 100644
|
|
||||||
--- a/rpmio/macro.c
|
|
||||||
+++ b/rpmio/macro.c
|
|
||||||
@@ -947,7 +947,7 @@ grabArgs(MacroBuf mb, const rpmMacroEntry me, const char * se,
|
|
||||||
splitQuoted(&argv, s, " \t");
|
|
||||||
free(s);
|
|
||||||
|
|
||||||
- cont = ((*lastc == '\0' || *lastc == '\n') && *(lastc-1) != '\\') ?
|
|
||||||
+ cont = (*lastc == '\0') || (*lastc == '\n' && *(lastc-1) != '\\') ?
|
|
||||||
lastc : lastc + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/tests/rpmmacro.at b/tests/rpmmacro.at
|
|
||||||
index d972a1197..a21952c46 100644
|
|
||||||
--- a/tests/rpmmacro.at
|
|
||||||
+++ b/tests/rpmmacro.at
|
|
||||||
@@ -179,6 +179,9 @@ runroot rpm \
|
|
||||||
--eval '%foo %{quote: 2 3 5} %{quote:%{nil}}' \
|
|
||||||
--eval '%foo x%{quote:y}z 123' \
|
|
||||||
--eval '%foo x%{quote:%{nil}}z' \
|
|
||||||
+ --eval '%foo 1 \
|
|
||||||
+bar' \
|
|
||||||
+ --eval '%foo 1 \' \
|
|
||||||
],
|
|
||||||
[0],
|
|
||||||
[1:"1"
|
|
||||||
@@ -190,6 +193,8 @@ runroot rpm \
|
|
||||||
2:" 2 3 5" ""
|
|
||||||
2:"xyz" "123"
|
|
||||||
1:"xz"
|
|
||||||
+2:"1" "\"bar
|
|
||||||
+2:"1" "\"
|
|
||||||
])
|
|
||||||
AT_CLEANUP
|
|
||||||
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
From c886b359ba5f05eec6a8da34b55437834b7d80ee Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Thu, 6 Feb 2020 14:51:14 +0200
|
|
||||||
Subject: [PATCH] Fix pointer dereference before testing for NULL in
|
|
||||||
rpmtdGetNumber()
|
|
||||||
|
|
||||||
---
|
|
||||||
lib/rpmtd.c | 6 +++---
|
|
||||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/rpmtd.c b/lib/rpmtd.c
|
|
||||||
index e33c8cb53..41c6a50e8 100644
|
|
||||||
--- a/lib/rpmtd.c
|
|
||||||
+++ b/lib/rpmtd.c
|
|
||||||
@@ -210,12 +210,12 @@ const char * rpmtdGetString(rpmtd td)
|
|
||||||
|
|
||||||
uint64_t rpmtdGetNumber(rpmtd td)
|
|
||||||
{
|
|
||||||
- uint64_t val = 0;
|
|
||||||
- int ix = (td->ix >= 0 ? td->ix : 0);
|
|
||||||
-
|
|
||||||
if (td == NULL)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
+ uint64_t val = 0;
|
|
||||||
+ int ix = (td->ix >= 0 ? td->ix : 0);
|
|
||||||
+
|
|
||||||
switch (td->type) {
|
|
||||||
case RPM_INT64_TYPE:
|
|
||||||
val = *((uint64_t *) td->data + ix);
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,40 +0,0 @@
|
|||||||
From 747b7119ae89a3ccaceeae4f5570c7ab83d2cf5d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Tue, 1 Sep 2020 13:14:35 +0300
|
|
||||||
Subject: [PATCH] Fix possible read beyond buffer in rstrnlenhash()
|
|
||||||
|
|
||||||
On strings that are not \0-terminated (which are a big reason for the
|
|
||||||
existence of this function), the while-loop would try to compare the
|
|
||||||
first character beyond the specified buffer for '\0' before realizing
|
|
||||||
we're already beyond the end when checking n. Should be mostly harmless
|
|
||||||
in practise as the check for n would still terminate it, but not right.
|
|
||||||
In particular this trips up address sanitizer with the bdb backend where
|
|
||||||
some of the returned strings are not \0-terminated.
|
|
||||||
|
|
||||||
Test for string length first, and move the decrementing side-effect into
|
|
||||||
the loop for better readability.
|
|
||||||
---
|
|
||||||
rpmio/rpmstrpool.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/rpmio/rpmstrpool.c b/rpmio/rpmstrpool.c
|
|
||||||
index 776ca6dea..0db0b5313 100644
|
|
||||||
--- a/rpmio/rpmstrpool.c
|
|
||||||
+++ b/rpmio/rpmstrpool.c
|
|
||||||
@@ -88,11 +88,12 @@ static inline unsigned int rstrnlenhash(const char * str, size_t n, size_t * len
|
|
||||||
unsigned int hash = 0xe4721b68;
|
|
||||||
const char * s = str;
|
|
||||||
|
|
||||||
- while (*s != '\0' && n-- > 0) {
|
|
||||||
+ while (n > 0 && *s != '\0') {
|
|
||||||
hash += *s;
|
|
||||||
hash += (hash << 10);
|
|
||||||
hash ^= (hash >> 6);
|
|
||||||
s++;
|
|
||||||
+ n--;
|
|
||||||
}
|
|
||||||
hash += (hash << 3);
|
|
||||||
hash ^= (hash >> 11);
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,29 +0,0 @@
|
|||||||
From 85e5a70368854da0537099128530b0df69ca2216 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Wed, 29 Jan 2020 13:58:16 +0200
|
|
||||||
Subject: [PATCH] Fix regression on v3 package handling on database rebuild
|
|
||||||
|
|
||||||
Introduced in commit 27ea3f8624560bd158fc7bc801639310a0ffab10, the
|
|
||||||
wrong header is being added in case of v3 packages.
|
|
||||||
|
|
||||||
Fixes: #1017
|
|
||||||
---
|
|
||||||
lib/rpmdb.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/lib/rpmdb.c b/lib/rpmdb.c
|
|
||||||
index 7ae67563f..91543eb68 100644
|
|
||||||
--- a/lib/rpmdb.c
|
|
||||||
+++ b/lib/rpmdb.c
|
|
||||||
@@ -2557,7 +2557,7 @@ int rpmdbRebuild(const char * prefix, rpmts ts,
|
|
||||||
/* Deleted entries are eliminated in legacy headers by copy. */
|
|
||||||
if (headerIsEntry(h, RPMTAG_HEADERIMAGE)) {
|
|
||||||
Header nh = headerReload(headerCopy(h), RPMTAG_HEADERIMAGE);
|
|
||||||
- rc = rpmdbAdd(newdb, h);
|
|
||||||
+ rc = rpmdbAdd(newdb, nh);
|
|
||||||
headerFree(nh);
|
|
||||||
} else {
|
|
||||||
rc = rpmdbAdd(newdb, h);
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,49 +0,0 @@
|
|||||||
From 6b18e76f3db5dd3db5a468c947309322d8bc11aa Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Thu, 21 Nov 2019 12:22:45 +0200
|
|
||||||
Subject: [PATCH] Fix resource leaks on zstd open error paths
|
|
||||||
|
|
||||||
If zstd stream initialization fails, the opened fd and the stream
|
|
||||||
itself are leaked. Handle error exit in a central label.
|
|
||||||
---
|
|
||||||
rpmio/rpmio.c | 12 ++++++++++--
|
|
||||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rpmio/rpmio.c b/rpmio/rpmio.c
|
|
||||||
index 243942411..10ba20cd6 100644
|
|
||||||
--- a/rpmio/rpmio.c
|
|
||||||
+++ b/rpmio/rpmio.c
|
|
||||||
@@ -1128,13 +1128,13 @@ static rpmzstd rpmzstdNew(int fdno, const char *fmode)
|
|
||||||
if ((flags & O_ACCMODE) == O_RDONLY) { /* decompressing */
|
|
||||||
if ((_stream = (void *) ZSTD_createDStream()) == NULL
|
|
||||||
|| ZSTD_isError(ZSTD_initDStream(_stream))) {
|
|
||||||
- return NULL;
|
|
||||||
+ goto err;
|
|
||||||
}
|
|
||||||
nb = ZSTD_DStreamInSize();
|
|
||||||
} else { /* compressing */
|
|
||||||
if ((_stream = (void *) ZSTD_createCStream()) == NULL
|
|
||||||
|| ZSTD_isError(ZSTD_initCStream(_stream, level))) {
|
|
||||||
- return NULL;
|
|
||||||
+ goto err;
|
|
||||||
}
|
|
||||||
nb = ZSTD_CStreamOutSize();
|
|
||||||
}
|
|
||||||
@@ -1149,6 +1149,14 @@ static rpmzstd rpmzstdNew(int fdno, const char *fmode)
|
|
||||||
zstd->b = xmalloc(nb);
|
|
||||||
|
|
||||||
return zstd;
|
|
||||||
+
|
|
||||||
+err:
|
|
||||||
+ fclose(fp);
|
|
||||||
+ if ((flags & O_ACCMODE) == O_RDONLY)
|
|
||||||
+ ZSTD_freeDStream(_stream);
|
|
||||||
+ else
|
|
||||||
+ ZSTD_freeCStream(_stream);
|
|
||||||
+ return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static FD_t zstdFdopen(FD_t fd, int fdno, const char * fmode)
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
From 83a5a20352dccd336a0114238c5988f0a9fa6d3e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Denys Vlasenko <dvlasenk@redhat.com>
|
|
||||||
Date: Thu, 23 Jan 2020 14:21:26 +0100
|
|
||||||
Subject: [PATCH] If fork fails in getOutputFrom(), close opened unused pipe
|
|
||||||
fds on error code path
|
|
||||||
|
|
||||||
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
|
|
||||||
---
|
|
||||||
build/rpmfc.c | 16 +++++++++++-----
|
|
||||||
1 file changed, 11 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/build/rpmfc.c b/build/rpmfc.c
|
|
||||||
index f5f3793b9..81101518b 100644
|
|
||||||
--- a/build/rpmfc.c
|
|
||||||
+++ b/build/rpmfc.c
|
|
||||||
@@ -277,6 +277,17 @@ static int getOutputFrom(ARGV_t argv,
|
|
||||||
}
|
|
||||||
|
|
||||||
child = fork();
|
|
||||||
+ if (child < 0) {
|
|
||||||
+ rpmlog(RPMLOG_ERR, _("Couldn't fork %s: %s\n"),
|
|
||||||
+ argv[0], strerror(errno));
|
|
||||||
+ if (doio) {
|
|
||||||
+ close(toProg[1]);
|
|
||||||
+ close(toProg[0]);
|
|
||||||
+ close(fromProg[0]);
|
|
||||||
+ close(fromProg[1]);
|
|
||||||
+ }
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
if (child == 0) {
|
|
||||||
close(toProg[1]);
|
|
||||||
close(fromProg[0]);
|
|
||||||
@@ -299,11 +310,6 @@ static int getOutputFrom(ARGV_t argv,
|
|
||||||
argv[0], strerror(errno));
|
|
||||||
_exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
- if (child < 0) {
|
|
||||||
- rpmlog(RPMLOG_ERR, _("Couldn't fork %s: %s\n"),
|
|
||||||
- argv[0], strerror(errno));
|
|
||||||
- return -1;
|
|
||||||
- }
|
|
||||||
|
|
||||||
if (!doio)
|
|
||||||
goto reap;
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
From d1dee9c00af418004f578a97e9b794676daf6d37 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Matthew Almond <malmond@fb.com>
|
|
||||||
Date: Mon, 28 Sep 2020 12:41:22 -0700
|
|
||||||
Subject: [PATCH] Make fdSeek return 0 on success, -1 on error
|
|
||||||
|
|
||||||
This code eliminates a false positive failure when the destination
|
|
||||||
position is > 2GiB. This is done by changing the contract for `Fseek`.
|
|
||||||
Now it returns `0` on success instead of an `int` offset.
|
|
||||||
Care should be used to interpret the result as there is a difference in
|
|
||||||
semantics between the POSIX `fseek(2)`. Existing code is correct: negative
|
|
||||||
results are still failures.
|
|
||||||
---
|
|
||||||
rpmio/rpmio.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/rpmio/rpmio.c b/rpmio/rpmio.c
|
|
||||||
index 10a28a923..9f4a60aa1 100644
|
|
||||||
--- a/rpmio/rpmio.c
|
|
||||||
+++ b/rpmio/rpmio.c
|
|
||||||
@@ -382,7 +382,7 @@ static ssize_t fdWrite(FDSTACK_t fps, const void * buf, size_t count)
|
|
||||||
|
|
||||||
static int fdSeek(FDSTACK_t fps, off_t pos, int whence)
|
|
||||||
{
|
|
||||||
- return lseek(fps->fdno, pos, whence);
|
|
||||||
+ return (lseek(fps->fdno, pos, whence) == -1) ? -1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int fdClose(FDSTACK_t fps)
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
From 92a78e6acf3f056faccebb25a9d310ee96f8015d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Cerul Alain <ae@metaeducation.com>
|
|
||||||
Date: Mon, 13 Jul 2020 00:34:42 -0400
|
|
||||||
Subject: [PATCH] Remove compare of global array tagsByName to NULL
|
|
||||||
|
|
||||||
A 2016 change (57a96d2486c26142ebb168a1f00b0374d35bf044) apparently
|
|
||||||
changed tagsByName from dynamic allocation to being static, so that
|
|
||||||
Valgrind would not complain about lost memory. The definition is:
|
|
||||||
|
|
||||||
static headerTagTableEntry tagsByName[TABLESIZE];
|
|
||||||
|
|
||||||
But a comparison was left of `tagsByName == NULL` in lib/tagname.c
|
|
||||||
and compiling with clang gives a warning, saying it is never NULL.
|
|
||||||
---
|
|
||||||
lib/tagname.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/lib/tagname.c b/lib/tagname.c
|
|
||||||
index 68b252991..4efd847eb 100644
|
|
||||||
--- a/lib/tagname.c
|
|
||||||
+++ b/lib/tagname.c
|
|
||||||
@@ -234,7 +234,7 @@ int rpmTagGetNames(rpmtd tagnames, int fullname)
|
|
||||||
|
|
||||||
pthread_once(&tagsLoaded, loadTags);
|
|
||||||
|
|
||||||
- if (tagnames == NULL || tagsByName == NULL)
|
|
||||||
+ if (tagnames == NULL)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
rpmtdReset(tagnames);
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,101 +0,0 @@
|
|||||||
From 3c061be6aeaec1be793b406fac9f667dc5d1429b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Wed, 4 Mar 2020 11:15:02 +0200
|
|
||||||
Subject: [PATCH] Use libelf for determining file colors
|
|
||||||
|
|
||||||
libmagic strings are notoriously unreliable as the details from version
|
|
||||||
to version. We link to libelf anyway so we might as well as get the
|
|
||||||
info straight from the horse's mouth.
|
|
||||||
|
|
||||||
Besides being more reliable, this detaches the coloring business from
|
|
||||||
the hardcoded rpmfcTokens struct and informative-only FILECLASS
|
|
||||||
contents,
|
|
||||||
opening the door for other changes in that area.
|
|
||||||
---
|
|
||||||
build/rpmfc.c | 35 +++++++++++++++++++++++++++++------
|
|
||||||
1 file changed, 29 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/build/rpmfc.c b/build/rpmfc.c
|
|
||||||
index aaa0dca..0886616 100644
|
|
||||||
--- a/build/rpmfc.c
|
|
||||||
+++ b/build/rpmfc.c
|
|
||||||
@@ -7,6 +7,7 @@
|
|
||||||
#include <signal.h>
|
|
||||||
#include <magic.h>
|
|
||||||
#include <regex.h>
|
|
||||||
+#include <gelf.h>
|
|
||||||
|
|
||||||
#include <rpm/header.h>
|
|
||||||
#include <rpm/argv.h>
|
|
||||||
@@ -595,7 +596,7 @@ exit:
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
-/* Only used for elf coloring and controlling RPMTAG_FILECLASS inclusion now */
|
|
||||||
+/* Only used for controlling RPMTAG_FILECLASS inclusion now */
|
|
||||||
static const struct rpmfcTokens_s rpmfcTokens[] = {
|
|
||||||
{ "directory", RPMFC_INCLUDE },
|
|
||||||
|
|
||||||
@@ -1076,6 +1077,29 @@ static int initAttrs(rpmfc fc)
|
|
||||||
return nattrs;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static uint32_t getElfColor(const char *fn)
|
|
||||||
+{
|
|
||||||
+ uint32_t color = 0;
|
|
||||||
+ int fd = open(fn, O_RDONLY);
|
|
||||||
+ if (fd >= 0) {
|
|
||||||
+ Elf *elf = elf_begin (fd, ELF_C_READ, NULL);
|
|
||||||
+ GElf_Ehdr ehdr;
|
|
||||||
+ if (elf && gelf_getehdr(elf, &ehdr)) {
|
|
||||||
+ switch (ehdr.e_ident[EI_CLASS]) {
|
|
||||||
+ case ELFCLASS64:
|
|
||||||
+ color = RPMFC_ELF64;
|
|
||||||
+ break;
|
|
||||||
+ case ELFCLASS32:
|
|
||||||
+ color = RPMFC_ELF32;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ elf_end(elf);
|
|
||||||
+ }
|
|
||||||
+ close(fd);
|
|
||||||
+ }
|
|
||||||
+ return color;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode)
|
|
||||||
{
|
|
||||||
int msflags = MAGIC_CHECK | MAGIC_COMPRESS | MAGIC_NO_CHECK_TOKENS;
|
|
||||||
@@ -1187,8 +1211,6 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode)
|
|
||||||
/* Add attributes based on file type and/or path */
|
|
||||||
rpmfcAttributes(fc, ix, ftype, s);
|
|
||||||
|
|
||||||
- fc->fcolor[ix] = fcolor;
|
|
||||||
-
|
|
||||||
/* Add to file class dictionary and index array */
|
|
||||||
#pragma omp ordered
|
|
||||||
if (fcolor != RPMFC_WHITE && (fcolor & RPMFC_INCLUDE)) {
|
|
||||||
@@ -1202,6 +1224,10 @@ rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode)
|
|
||||||
}
|
|
||||||
/* Pool id's start from 1, for headers we want it from 0 */
|
|
||||||
fc->fcdictx[ix] = ftypeId - 1;
|
|
||||||
+
|
|
||||||
+ /* Add ELF colors */
|
|
||||||
+ if (S_ISREG(mode) && is_executable)
|
|
||||||
+ fc->fcolor[ix] = getElfColor(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ms != NULL)
|
|
||||||
@@ -1493,9 +1519,6 @@ rpmRC rpmfcGenerateDepends(const rpmSpec spec, Package pkg)
|
|
||||||
goto exit;
|
|
||||||
|
|
||||||
/* Add per-file colors(#files) */
|
|
||||||
- /* XXX Make sure only primary (i.e. Elf32/Elf64) colors are added. */
|
|
||||||
- for (int i = 0; i < fc->nfiles; i++)
|
|
||||||
- fc->fcolor[i] &= 0x0f;
|
|
||||||
headerPutUint32(pkg->header, RPMTAG_FILECOLORS, fc->fcolor, fc->nfiles);
|
|
||||||
|
|
||||||
/* Add classes(#classes) */
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
From 7b3a3f004f96ed3cb9cc377f7e64bfc88195dfc2 Mon Dec 13 16:41:34 2021
|
||||||
|
From: From: Florian Festi <ffesti@redhat.com>
|
||||||
|
Date: Mon, 13 Dec 2021 16:41:34 +0800
|
||||||
|
Subject: [PATCH] Use root as default UID_0_USER and UID_0_GROUP
|
||||||
|
|
||||||
|
If /etc/passwd or /etc/group was not available during building rpm itself
|
||||||
|
these ended up empty. This affects builds done later on using rpmbuild.
|
||||||
|
|
||||||
|
Resolves: #1838
|
||||||
|
---
|
||||||
|
configure.ac | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index cdaf2b6..8656043 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -1050,6 +1050,8 @@ fi
|
||||||
|
|
||||||
|
user_with_uid0=$(awk -F: '$3==0 {print $1;exit}' /etc/passwd)
|
||||||
|
group_with_gid0=$(awk -F: '$3==0 {print $1;exit}' /etc/group)
|
||||||
|
+if test -z "$user_with_uid0" ; then user_with_uid0=root ; fi
|
||||||
|
+if test -z "$group_with_gid0" ; then group_with_gid0=root ; fi
|
||||||
|
AC_DEFINE_UNQUOTED([UID_0_USER],["$user_with_uid0"],[Get the user name having userid 0])
|
||||||
|
AC_DEFINE_UNQUOTED([GID_0_GROUP],["$group_with_gid0"],[Get the group name having groupid 0])
|
||||||
|
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -1,132 +0,0 @@
|
|||||||
From 6f6f5e70f16bef21523c3e2f19e7557bfcaa2546 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Michal Domonkos <mdomonko@redhat.com>
|
|
||||||
Date: Tue, 21 Apr 2020 11:38:25 +0200
|
|
||||||
Subject: [PATCH] build: prioritize large packages
|
|
||||||
|
|
||||||
Binary packages come in different sizes and so their build time can vary
|
|
||||||
greatly. Dynamic scheduling, which we currently use for parallel
|
|
||||||
building, is a good strategy to combat such differences and load-balance
|
|
||||||
the available CPU cores.
|
|
||||||
|
|
||||||
That said, knowing that the build time of a package is proportional to
|
|
||||||
its size, we can reduce the overall time even further by cleverly
|
|
||||||
ordering the task queue.
|
|
||||||
|
|
||||||
As an example, consider a set of 5 packages, 4 of which take 1 unit of
|
|
||||||
time to build and one takes 4 units. If we were to build these on a
|
|
||||||
dual-core system, one possible unit distribution would look like this:
|
|
||||||
|
|
||||||
TIME --->
|
|
||||||
CPU 1 * * * * * * # package 1, 3 and 5
|
|
||||||
CPU 2 * * # package 2 and 4
|
|
||||||
|
|
||||||
Now, compare that to a different distribution where the largest package
|
|
||||||
5 gets built early on:
|
|
||||||
|
|
||||||
TIME --->
|
|
||||||
CPU 1 * * * * # package 5
|
|
||||||
CPU 2 * * * * # package 1, 2, 3 and 4
|
|
||||||
|
|
||||||
It's obvious that processing the largest packages first gives better
|
|
||||||
results when dealing with such a mix of small and large packages
|
|
||||||
(typically a regular package and its debuginfo counterpart,
|
|
||||||
respectively).
|
|
||||||
|
|
||||||
Now, with dynamic scheduling in OpenMP, we cannot directly control the
|
|
||||||
task queue; we can only generate the tasks and let the runtime system do
|
|
||||||
its work. What we can do, however, is to provide a hint to the runtime
|
|
||||||
system for the desired ordering, using the "priority" clause.
|
|
||||||
|
|
||||||
So, in this commit, we use the clause to assign a priority value to each
|
|
||||||
build task based on the respective package size (the bigger the size,
|
|
||||||
the higher the priority), to help achieve an optimal execution order.
|
|
||||||
|
|
||||||
Indeed, in my testing, the priorities were followed to the letter (but
|
|
||||||
remember, that's not guaranteed by the specification). Interestingly,
|
|
||||||
even without the use of priorities, simply generating the tasks in the
|
|
||||||
desired order resulted in the same execution order for me, but that's,
|
|
||||||
again, just an implementation detail.
|
|
||||||
|
|
||||||
Also note that OpenMP is allowed to stop the thread generating the tasks
|
|
||||||
at any time, and make it execute some of the tasks instead. If the
|
|
||||||
chosen task happens to be a long-duration one, we might hit a starvation
|
|
||||||
scenario where the other threads have exhausted the task queue and
|
|
||||||
there's nobody to generate new tasks. To counter that, this commit also
|
|
||||||
adds the "untied" clause which allows other threads to pick up where the
|
|
||||||
generating thread left off, and continue generating new tasks.
|
|
||||||
|
|
||||||
Resolves #1045.
|
|
||||||
---
|
|
||||||
build/pack.c | 38 +++++++++++++++++++++++++++++++++++---
|
|
||||||
1 file changed, 35 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/build/pack.c b/build/pack.c
|
|
||||||
index a44a3fe9c8..bc40683c4f 100644
|
|
||||||
--- a/build/pack.c
|
|
||||||
+++ b/build/pack.c
|
|
||||||
@@ -6,6 +6,7 @@
|
|
||||||
#include "system.h"
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
+#include <stdlib.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
|
|
||||||
#include <rpm/rpmlib.h> /* RPMSIGTAG*, rpmReadPackageFile */
|
|
||||||
@@ -726,16 +727,45 @@ static rpmRC packageBinary(rpmSpec spec, Package pkg, const char *cookie, int ch
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int compareBinaries(const void *p1, const void *p2) {
|
|
||||||
+ Package pkg1 = *(Package *)p1;
|
|
||||||
+ Package pkg2 = *(Package *)p2;
|
|
||||||
+ uint64_t size1 = headerGetNumber(pkg1->header, RPMTAG_LONGSIZE);
|
|
||||||
+ uint64_t size2 = headerGetNumber(pkg2->header, RPMTAG_LONGSIZE);
|
|
||||||
+ if (size1 > size2)
|
|
||||||
+ return -1;
|
|
||||||
+ if (size1 < size2)
|
|
||||||
+ return 1;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ * Run binary creation in parallel, with task priority based on package size
|
|
||||||
+ * (largest first) to help achieve an optimal load distribution.
|
|
||||||
+ */
|
|
||||||
rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating)
|
|
||||||
{
|
|
||||||
rpmRC rc = RPMRC_OK;
|
|
||||||
Package pkg;
|
|
||||||
+ Package *tasks;
|
|
||||||
+ int npkgs = 0;
|
|
||||||
+
|
|
||||||
+ for (pkg = spec->packages; pkg != NULL; pkg = pkg->next)
|
|
||||||
+ npkgs++;
|
|
||||||
+ tasks = xcalloc(npkgs, sizeof(Package));
|
|
||||||
+
|
|
||||||
+ pkg = spec->packages;
|
|
||||||
+ for (int i = 0; i < npkgs; i++) {
|
|
||||||
+ tasks[i] = pkg;
|
|
||||||
+ pkg = pkg->next;
|
|
||||||
+ }
|
|
||||||
+ qsort(tasks, npkgs, sizeof(Package), compareBinaries);
|
|
||||||
|
|
||||||
- /* Run binary creation in parallel */
|
|
||||||
#pragma omp parallel
|
|
||||||
#pragma omp single
|
|
||||||
- for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) {
|
|
||||||
- #pragma omp task
|
|
||||||
+ for (int i = 0; i < npkgs; i++) {
|
|
||||||
+ pkg = tasks[i];
|
|
||||||
+ #pragma omp task untied priority(i)
|
|
||||||
{
|
|
||||||
pkg->rc = packageBinary(spec, pkg, cookie, cheating, &pkg->filename);
|
|
||||||
rpmlog(RPMLOG_DEBUG,
|
|
||||||
@@ -754,6 +784,8 @@ rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating)
|
|
||||||
if (rc == RPMRC_OK)
|
|
||||||
checkPackageSet(spec->packages);
|
|
||||||
|
|
||||||
+ free(tasks);
|
|
||||||
+
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,29 +0,0 @@
|
|||||||
From c464f1ece501346da11ed7582b8d46682363a285 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Thierry Vignaud <tvignaud@redhat.com>
|
|
||||||
Date: Mon, 23 Dec 2019 16:51:49 +0100
|
|
||||||
Subject: [PATCH] fix zstd magic
|
|
||||||
|
|
||||||
I spot it while adding support for zstd compressed metadata in
|
|
||||||
URPM/urpmi, which was broken by this typo
|
|
||||||
|
|
||||||
typo introduced in commit 3684424fe297c996bb05bb64631336fa2903df12
|
|
||||||
---
|
|
||||||
rpmio/rpmfileutil.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/rpmio/rpmfileutil.c b/rpmio/rpmfileutil.c
|
|
||||||
index bda97adf1..84ee34f4d 100644
|
|
||||||
--- a/rpmio/rpmfileutil.c
|
|
||||||
+++ b/rpmio/rpmfileutil.c
|
|
||||||
@@ -188,7 +188,7 @@ int rpmFileIsCompressed(const char * file, rpmCompressedMagic * compressed)
|
|
||||||
(magic[4] == 0x5a) && (magic[5] == 0x00)) {
|
|
||||||
/* new style xz (lzma) with magic */
|
|
||||||
*compressed = COMPRESSED_XZ;
|
|
||||||
- } else if ((magic[0] == 0x28) && (magic[1] == 0x85) &&
|
|
||||||
+ } else if ((magic[0] == 0x28) && (magic[1] == 0xB5) &&
|
|
||||||
(magic[2] == 0x2f) ) {
|
|
||||||
*compressed = COMPRESSED_ZSTD;
|
|
||||||
} else if ((magic[0] == 'L') && (magic[1] == 'Z') &&
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
From 52c3ee60a1ce0e7e527dc396dd1e1a0e29b7b0ed Mon Sep 17 00:00:00 2001
|
|
||||||
From: Michael Schroeder <mls@suse.de>
|
|
||||||
Date: Fri, 10 Jan 2020 15:47:13 +0100
|
|
||||||
Subject: [PATCH] ndb: only clear the dbenv in the rpmdb if the last reference
|
|
||||||
is gone
|
|
||||||
|
|
||||||
Otherwise we will segfault if just one index is closed.
|
|
||||||
---
|
|
||||||
lib/backend/ndb/glue.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/lib/backend/ndb/glue.c b/lib/backend/ndb/glue.c
|
|
||||||
index 376e360e3..841c2fe42 100644
|
|
||||||
--- a/lib/backend/ndb/glue.c
|
|
||||||
+++ b/lib/backend/ndb/glue.c
|
|
||||||
@@ -52,8 +52,8 @@ static void closeEnv(rpmdb rdb)
|
|
||||||
if (ndbenv->data)
|
|
||||||
free(ndbenv->data);
|
|
||||||
free(ndbenv);
|
|
||||||
+ rdb->db_dbenv = 0;
|
|
||||||
}
|
|
||||||
- rdb->db_dbenv = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct ndbEnv_s *openEnv(rpmdb rdb)
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
From a427c3cd2776bc523bd40491a5d92d98d071ffea Mon Sep 17 00:00:00 2001
|
|
||||||
From: Demi Marie Obenour <athena@invisiblethingslab.com>
|
|
||||||
Date: Tue, 16 Mar 2021 11:41:16 +0200
|
|
||||||
Subject: [PATCH] Optimize signature header merge a bit
|
|
||||||
|
|
||||||
Look up possible offending tags from the main header first in a separate
|
|
||||||
loop, this avoids having to re-sort after each headerPut() operation
|
|
||||||
---
|
|
||||||
lib/package.c | 7 ++++++-
|
|
||||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/lib/package.c b/lib/package.c
|
|
||||||
index 6f10bb9..355c3e7 100644
|
|
||||||
--- a/lib/package.c
|
|
||||||
+++ b/lib/package.c
|
|
||||||
@@ -64,10 +64,14 @@ rpmTagVal headerMergeLegacySigs(Header h, Header sigh, char **msg)
|
|
||||||
{
|
|
||||||
const struct taglate_s *xl;
|
|
||||||
struct rpmtd_s td;
|
|
||||||
- rpmtdReset(&td);
|
|
||||||
for (xl = xlateTags; xl->stag; xl++) {
|
|
||||||
/* There mustn't be one in the main header */
|
|
||||||
if (headerIsEntry(h, xl->xtag))
|
|
||||||
+ goto exit;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ rpmtdReset(&td);
|
|
||||||
+ for (xl = xlateTags; xl->stag; xl++) {
|
|
||||||
if (headerGet(sigh, xl->stag, &td, HEADERGET_RAW|HEADERGET_MINMEM)) {
|
|
||||||
/* Translate legacy tags */
|
|
||||||
if (xl->stag != xl->xtag)
|
|
||||||
@@ -86,6 +90,7 @@ rpmTagVal headerMergeLegacySigs(Header h, Header sigh, char **msg)
|
|
||||||
}
|
|
||||||
rpmtdFreeData(&td);
|
|
||||||
|
|
||||||
+exit:
|
|
||||||
if (xl->stag) {
|
|
||||||
rasprintf(msg, "invalid signature tag %s (%d)",
|
|
||||||
rpmTagGetName(xl->xtag), xl->xtag);
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,47 +0,0 @@
|
|||||||
From f34030816d84dfbf52f259404b32b81e53c21fbb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jes Sorensen <jsorensen@fb.com>
|
|
||||||
Date: Fri, 3 Apr 2020 14:09:18 -0400
|
|
||||||
Subject: [PATCH] rpmfiArchiveRead() use signed return value to handle -1 on
|
|
||||||
error
|
|
||||||
|
|
||||||
size_t is unsigned, so returning -1 is not going to have the expected
|
|
||||||
behavior. Fix it to return ssize_t.
|
|
||||||
|
|
||||||
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
|
|
||||||
---
|
|
||||||
lib/rpmarchive.h | 4 ++--
|
|
||||||
lib/rpmfi.c | 2 +-
|
|
||||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/lib/rpmarchive.h b/lib/rpmarchive.h
|
|
||||||
index c864e5b56..2484b4d71 100644
|
|
||||||
--- a/lib/rpmarchive.h
|
|
||||||
+++ b/lib/rpmarchive.h
|
|
||||||
@@ -122,9 +122,9 @@ int rpmfiArchiveWriteFile(rpmfi fi, FD_t fd);
|
|
||||||
* @param fi file info
|
|
||||||
* @param buf pointer to buffer
|
|
||||||
* @param size number of bytes to read
|
|
||||||
- * @return bytes actually read
|
|
||||||
+ * @return bytes actually read, -1 on error
|
|
||||||
*/
|
|
||||||
-size_t rpmfiArchiveRead(rpmfi fi, void * buf, size_t size);
|
|
||||||
+ssize_t rpmfiArchiveRead(rpmfi fi, void * buf, size_t size);
|
|
||||||
|
|
||||||
/** \ingroup payload
|
|
||||||
* Has current file content stored in the archive
|
|
||||||
diff --git a/lib/rpmfi.c b/lib/rpmfi.c
|
|
||||||
index c314a8b29..af428468c 100644
|
|
||||||
--- a/lib/rpmfi.c
|
|
||||||
+++ b/lib/rpmfi.c
|
|
||||||
@@ -2261,7 +2261,7 @@ int rpmfiArchiveHasContent(rpmfi fi)
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
-size_t rpmfiArchiveRead(rpmfi fi, void * buf, size_t size)
|
|
||||||
+ssize_t rpmfiArchiveRead(rpmfi fi, void * buf, size_t size)
|
|
||||||
{
|
|
||||||
if (fi == NULL || fi->archive == NULL)
|
|
||||||
return -1;
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
From 61ea5a8ea64dc130713da889f3f0c8da1a547bd9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ross Burton <ross.burton@intel.com>
|
|
||||||
Date: Wed, 4 Dec 2019 17:13:10 +0000
|
|
||||||
Subject: [PATCH] rpmio: initialise libgcrypt
|
|
||||||
|
|
||||||
If we're using libgcrypt for hashing we need to initialise libgcrypt as
|
|
||||||
otherwise it is not thread-safe. Without this it will crash when used
|
|
||||||
in parallel packaging runs.
|
|
||||||
|
|
||||||
Fixes #968
|
|
||||||
---
|
|
||||||
rpmio/digest_libgcrypt.c | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/rpmio/digest_libgcrypt.c b/rpmio/digest_libgcrypt.c
|
|
||||||
index b31fda569..291187f60 100644
|
|
||||||
--- a/rpmio/digest_libgcrypt.c
|
|
||||||
+++ b/rpmio/digest_libgcrypt.c
|
|
||||||
@@ -20,6 +20,8 @@ struct DIGEST_CTX_s {
|
|
||||||
/**************************** init ************************************/
|
|
||||||
|
|
||||||
int rpmInitCrypto(void) {
|
|
||||||
+ gcry_check_version (NULL);
|
|
||||||
+ gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
From 733a0997ba5608f6b37d0b6d47c7bbd6f9d62381 Mon Sep 17 00:00:00 2001
|
|
||||||
From: openeuler-basic <shenyangyang4@huawei.com>
|
|
||||||
Date: Fri, 10 Jan 2020 10:29:16 +0800
|
|
||||||
Subject: [PATCH] bugfix rpm 4.14.2 fix tty failed
|
|
||||||
|
|
||||||
---
|
|
||||||
rpmpopt.in | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/rpmpopt.in b/rpmpopt.in
|
|
||||||
index 8e4ef02..9585422 100644
|
|
||||||
--- a/rpmpopt.in
|
|
||||||
+++ b/rpmpopt.in
|
|
||||||
@@ -219,7 +219,7 @@ rpmbuild alias --buildpolicy --define '__os_install_post %{_rpmconfigdir}/brp-!#
|
|
||||||
--POPTargs=$"<policy>"
|
|
||||||
# Minimally preserve rpmbuild's --sign functionality
|
|
||||||
rpmbuild alias --sign \
|
|
||||||
- --pipe 'rpm --addsign `grep ".*: .*\.rpm$"|cut -d: -f2` < "/dev/"`ps -p $$ -o tty | tail -n 1`' \
|
|
||||||
+ --pipe "grep '.*: .*\.rpm$'|cut -d: -f2|xargs -r rpm --addsign" \
|
|
||||||
--POPTdesc=$"generate GPG signature (deprecated, use command rpmsign instead)"
|
|
||||||
rpmbuild alias --trace --eval '%trace' \
|
|
||||||
--POPTdesc=$"trace macro expansion"
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
@ -1,46 +0,0 @@
|
|||||||
From ab2179452c5be276a6b96c591afded485c7e58c3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Panu Matilainen <pmatilai@redhat.com>
|
|
||||||
Date: Wed, 13 Nov 2019 11:38:07 +0200
|
|
||||||
Subject: [PATCH] change rpmsigdig test's SHA256HEADER SHA1HEADER SIGMD5 value
|
|
||||||
|
|
||||||
---
|
|
||||||
tests/rpmsigdig.at | 6 +++---
|
|
||||||
tests/rpmtests | 6 +++---
|
|
||||||
2 files changed, 6 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/tests/rpmsigdig.at b/tests/rpmsigdig.at
|
|
||||||
index 3c15221..91c205e 100644
|
|
||||||
--- a/tests/rpmsigdig.at
|
|
||||||
+++ b/tests/rpmsigdig.at
|
|
||||||
@@ -146,9 +146,9 @@ done
|
|
||||||
runroot rpmkeys -Kv /build/RPMS/noarch/attrtest-1.0-1.noarch.rpm
|
|
||||||
],
|
|
||||||
[0],
|
|
||||||
-[SHA256HEADER: 8d150309b6988914994ad609ff8267718f23e8034affe260e6d4361a83a45a62
|
|
||||||
-SHA1HEADER: 78606c9281c44f34470d26df2caebba117b9d183
|
|
||||||
-SIGMD5: 3269c96a8e88bf4514647c570c66723b
|
|
||||||
+[SHA256HEADER: 340fcc0e848922c0a0c5e9f988482683038b4c753d29ef4682a3ca279cef2ef4
|
|
||||||
+SHA1HEADER: 12352190a4557cd595387fbf0474ae65fd324158
|
|
||||||
+SIGMD5: 3dc56bbd5166fca1d2c7cb637a057049
|
|
||||||
PAYLOADDIGEST: 749d8980cc5889419da8cdbe9a5b3292742af8a227db3635f84966481b7612a8
|
|
||||||
/build/RPMS/noarch/attrtest-1.0-1.noarch.rpm:
|
|
||||||
Header SHA256 digest: OK
|
|
||||||
diff --git a/tests/rpmtests b/tests/rpmtests
|
|
||||||
index 6fa80e3..ae95856 100644
|
|
||||||
--- a/tests/rpmtests
|
|
||||||
+++ b/tests/rpmtests
|
|
||||||
@@ -14547,9 +14547,9 @@ runroot rpmkeys -Kv /build/RPMS/noarch/attrtest-1.0-1.noarch.rpm
|
|
||||||
at_status=$? at_failed=false
|
|
||||||
$at_check_filter
|
|
||||||
at_fn_diff_devnull "$at_stderr" || at_failed=:
|
|
||||||
-echo >>"$at_stdout"; $as_echo "SHA256HEADER: 8d150309b6988914994ad609ff8267718f23e8034affe260e6d4361a83a45a62
|
|
||||||
-SHA1HEADER: 78606c9281c44f34470d26df2caebba117b9d183
|
|
||||||
-SIGMD5: 3269c96a8e88bf4514647c570c66723b
|
|
||||||
+echo >>"$at_stdout"; $as_echo "SHA256HEADER: 340fcc0e848922c0a0c5e9f988482683038b4c753d29ef4682a3ca279cef2ef4
|
|
||||||
+SHA1HEADER: 12352190a4557cd595387fbf0474ae65fd324158
|
|
||||||
+SIGMD5: 3dc56bbd5166fca1d2c7cb637a057049
|
|
||||||
PAYLOADDIGEST: 749d8980cc5889419da8cdbe9a5b3292742af8a227db3635f84966481b7612a8
|
|
||||||
/build/RPMS/noarch/attrtest-1.0-1.noarch.rpm:
|
|
||||||
Header SHA256 digest: OK
|
|
||||||
--
|
|
||||||
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
From f2bc669cd0a080792522dd1bb7f50ef7025f16f0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mark Wielaard <mark@klomp.org>
|
|
||||||
Date: Sat, 21 Jul 2018 10:13:04 +0200
|
|
||||||
Subject: [PATCH] find-debuginfo.sh: decompress DWARF compressed ELF sections
|
|
||||||
|
|
||||||
debugedit and dwz do not support DWARF compressed ELF sections, let's
|
|
||||||
just decompress those before extracting debuginfo.
|
|
||||||
|
|
||||||
Tested-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
|
|
||||||
---
|
|
||||||
scripts/find-debuginfo.sh | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/scripts/find-debuginfo.sh b/scripts/find-debuginfo.sh
|
|
||||||
index 90a44942d..7b01bc036 100755
|
|
||||||
--- a/scripts/find-debuginfo.sh
|
|
||||||
+++ b/scripts/find-debuginfo.sh
|
|
||||||
@@ -357,6 +357,9 @@ do_file()
|
|
||||||
get_debugfn "$f"
|
|
||||||
[ -f "${debugfn}" ] && return
|
|
||||||
|
|
||||||
+ echo "explicitly decompress any DWARF compressed ELF sections in $f"
|
|
||||||
+ eu-elfcompress -q -p -t none "$f"
|
|
||||||
+
|
|
||||||
echo "extracting debug info from $f"
|
|
||||||
# See also cpio SOURCEFILE copy. Directories must match up.
|
|
||||||
debug_base_name="$RPM_BUILD_DIR"
|
|
||||||
--
|
|
||||||
2.18.0
|
|
||||||
|
|
||||||
42
get-in-use-of-ndb.patch
Normal file
42
get-in-use-of-ndb.patch
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
From 8ba0780a26429bbb474e23112627ebbaeb9abfee Mon Sep 17 00:00:00 2001
|
||||||
|
From: renmingshuai <renmingshuai@huawei.com>
|
||||||
|
Date: Mon, 29 Nov 2021 10:53:24 +0800
|
||||||
|
Subject: [PATCH] get in use of ndb
|
||||||
|
|
||||||
|
---
|
||||||
|
configure.ac | 4 ++--
|
||||||
|
macros.in | 2 +-
|
||||||
|
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 6b161dc..ab1c667 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -490,9 +490,9 @@ AM_CONDITIONAL([BDB_RO], [test "$enable_bdb_ro" = yes])
|
||||||
|
# Check for SQLITE support
|
||||||
|
AC_ARG_ENABLE([sqlite],
|
||||||
|
[AS_HELP_STRING([--enable-sqlite=@<:@yes/no/auto@:>@)],
|
||||||
|
- [build with sqlite rpm database format support (default=yes)])],
|
||||||
|
+ [build with sqlite rpm database format support (default=auto)])],
|
||||||
|
[enable_sqlite="$enableval"],
|
||||||
|
- [enable_sqlite=yes])
|
||||||
|
+ [enable_sqlite=auto])
|
||||||
|
|
||||||
|
AS_IF([test "x$enable_sqlite" != "xno"], [
|
||||||
|
PKG_CHECK_MODULES([SQLITE], [sqlite3 >= 3.22.0], [have_sqlite=yes], [have_sqlite=no])
|
||||||
|
diff --git a/macros.in b/macros.in
|
||||||
|
index 22f675c..3e81918 100644
|
||||||
|
--- a/macros.in
|
||||||
|
+++ b/macros.in
|
||||||
|
@@ -602,7 +602,7 @@ package or when debugging this package.\
|
||||||
|
# sqlite Sqlite database
|
||||||
|
# dummy dummy backend (no actual functionality)
|
||||||
|
#
|
||||||
|
-%_db_backend sqlite
|
||||||
|
+%_db_backend ndb
|
||||||
|
|
||||||
|
#==============================================================================
|
||||||
|
# ---- GPG/PGP/PGP5 signature macros.
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
Binary file not shown.
BIN
rpm-4.17.0.tar.bz2
Normal file
BIN
rpm-4.17.0.tar.bz2
Normal file
Binary file not shown.
135
rpm.spec
135
rpm.spec
@ -1,66 +1,33 @@
|
|||||||
Name: rpm
|
Name: rpm
|
||||||
Version: 4.15.1
|
Version: 4.17.0
|
||||||
Release: 30
|
Release: 1
|
||||||
Summary: RPM Package Manager
|
Summary: RPM Package Manager
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
URL: http://www.rpm.org/
|
URL: http://www.rpm.org/
|
||||||
Source0: http://ftp.rpm.org/releases/rpm-4.15.x/%{name}-%{version}.tar.bz2
|
Source0: http://ftp.rpm.org/releases/rpm-4.17.x/%{name}-%{version}.tar.bz2
|
||||||
|
|
||||||
Patch1: Unbundle-config-site-and-add-RPM-LD-FLAGS-macro.patch
|
Patch1: Unbundle-config-site-and-add-RPM-LD-FLAGS-macro.patch
|
||||||
Patch2: rpm-4.12.0-rpm2cpio-hack.patch
|
Patch2: rpm-4.12.0-rpm2cpio-hack.patch
|
||||||
Patch3: find-debuginfo.sh-decompress-DWARF-compressed-ELF-se.patch
|
Patch3: add-dist-to-release-by-default.patch
|
||||||
Patch4: skip-updating-the-preferences.patch
|
Patch4: revert-always-execute-file-trigger-scriptlet-callbac.patch
|
||||||
Patch5: add-dist-to-release-by-default.patch
|
Patch5: bugfix-rpm-4.11.3-add-aarch64_ilp32-arch.patch
|
||||||
Patch6: Silence-spurious-error-message-from-lsetfilecon-on-E.patch
|
Patch6: bugfix-rpm-4.14.2-wait-once-get-rpmlock-fail.patch
|
||||||
Patch7: revert-always-execute-file-trigger-scriptlet-callbac.patch
|
Patch7: Generate-digest-lists.patch
|
||||||
Patch8: change-rpmsigdig-test-s-SHA256HEADER-SHA1HEADER-SIGM.patch
|
Patch8: Add-digest-list-plugin.patch
|
||||||
|
Patch9: Don-t-add-dist-to-release-if-it-is-already-there.patch
|
||||||
|
Patch10: Use-user.digest_list-to-avoid-duplicate-processing-o.patch
|
||||||
|
Patch11: call-process_digest_list-after-files-are-added.patch
|
||||||
|
Patch12: fix-lsetxattr-error-in-container.patch
|
||||||
|
Patch13: get-in-use-of-ndb.patch
|
||||||
|
Patch14: backport-Use-root-as-default-UID_0_USER-and-UID_0_GROUP.patch
|
||||||
|
Patch15: still-in-use-of-python-scripts-from-old-version.patch
|
||||||
|
|
||||||
Patch9: bugfix-rpm-4.11.3-add-aarch64_ilp32-arch.patch
|
BuildRequires: gcc autoconf automake libtool make gawk popt-devel openssl-devel readline-devel
|
||||||
Patch10: bugfix-rpm-4.14.2-fix-tty-failed.patch
|
|
||||||
Patch11: bugfix-rpm-4.14.2-wait-once-get-rpmlock-fail.patch
|
|
||||||
Patch12: Use-common-error-logic-regardless-of-setexecfilecon-.patch
|
|
||||||
Patch13: Generate-digest-lists.patch
|
|
||||||
Patch14: Add-digest-list-plugin.patch
|
|
||||||
Patch15: Don-t-add-dist-to-release-if-it-is-already-there.patch
|
|
||||||
Patch16: Use-user.digest_list-to-avoid-duplicate-processing-o.patch
|
|
||||||
Patch17: call-process_digest_list-after-files-are-added.patch
|
|
||||||
|
|
||||||
Patch18: backport-Fix-changelog-trimming-to-work-relative-to-newest-ex.patch
|
|
||||||
Patch19: backport-Fix-resource-leaks-on-zstd-open-error-paths.patch
|
|
||||||
Patch20: backport-rpmio-initialise-libgcrypt.patch
|
|
||||||
Patch21: backport-fix-zstd-magic.patch
|
|
||||||
Patch22: backport-Don-t-require-signature-header-to-be-in-single-conti.patch
|
|
||||||
Patch23: backport-ndb-only-clear-the-dbenv-in-the-rpmdb-if-the-last-re.patch
|
|
||||||
Patch24: backport-Fix-regression-on-v3-package-handling-on-database-re.patch
|
|
||||||
Patch25: backport-Fix-a-minor-memory-leak-on-suppressed-inhibition-loc.patch
|
|
||||||
Patch26: backport-Fix-POPT_ARG_STRING-memleaks-in-librpmbuild.patch
|
|
||||||
Patch27: backport-Fix-build-regression-in-commit-307872f71b357a3839fd0.patch
|
|
||||||
Patch28: backport-Fix-isUnorderedReq-for-multiple-qualifiers.patch
|
|
||||||
Patch29: backport-If-fork-fails-in-getOutputFrom-close-opened-unused-p.patch
|
|
||||||
Patch30: backport-Fix-pointer-dereference-before-testing-for-NULL-in-r.patch
|
|
||||||
Patch31: backport-Don-t-look-into-source-package-provides-in-depsolvin.patch
|
|
||||||
Patch32: backport-rpmfiArchiveRead-use-signed-return-value-to-handle-1.patch
|
|
||||||
Patch33: backport-Fix-bump-up-the-limit-of-signature-header-to-64MB.patch
|
|
||||||
Patch34: backport-Remove-compare-of-global-array-tagsByName-to-NULL.patch
|
|
||||||
Patch35: backport-Always-close-libelf-handle-1313.patch
|
|
||||||
Patch36: backport-Add-missing-terminator-to-copyTagsFromMainDebug-arra.patch
|
|
||||||
Patch37: backport-Fix-possible-read-beyond-buffer-in-rstrnlenhash.patch
|
|
||||||
Patch38: backport-Make-fdSeek-return-0-on-success-1-on-error.patch
|
|
||||||
Patch39: backport-Fix-logic-error-in-grabArgs.patch
|
|
||||||
Patch40: backport-Use-libelf-for-determining-file-colors.patch
|
|
||||||
Patch41: backport-CVE-2021-20271.patch
|
|
||||||
Patch42: backport-optimize-signature-header-merge-a-bit.patch
|
|
||||||
Patch43: CVE-2021-20266.patch
|
|
||||||
Patch44: backport-build-prioritize-large-packages.patch
|
|
||||||
Patch45: backport-Fix-data-race-in-packageBinaries-function.patch
|
|
||||||
Patch46: fix-lsetxattr-error-in-container.patch
|
|
||||||
|
|
||||||
BuildRequires: gcc autoconf automake libtool make gawk popt-devel openssl-devel readline-devel libdb-devel
|
|
||||||
BuildRequires: zlib-devel libzstd-devel xz-devel bzip2-devel libarchive-devel ima-evm-utils-devel
|
BuildRequires: zlib-devel libzstd-devel xz-devel bzip2-devel libarchive-devel ima-evm-utils-devel
|
||||||
BuildRequires: dbus-devel fakechroot elfutils-devel elfutils-libelf-devel ima-evm-utils
|
BuildRequires: dbus-devel fakechroot elfutils-devel elfutils-libelf-devel ima-evm-utils
|
||||||
BuildRequires: lua-devel libcap-devel libacl-devel libselinux-devel file-devel gettext-devel ncurses-devel
|
BuildRequires: lua-devel libcap-devel libacl-devel libselinux-devel file-devel gettext-devel ncurses-devel
|
||||||
BuildRequires: system-rpm-config dwz gnupg2
|
BuildRequires: system-rpm-config dwz gnupg2 debugedit
|
||||||
Requires: coreutils popt curl zstd libcap crontabs logrotate libdb-utils
|
Requires: coreutils popt curl zstd libcap crontabs logrotate
|
||||||
Obsoletes: %{name}-build-libs %{name}-sign-libs %{name}-sign %{name}-cron
|
Obsoletes: %{name}-build-libs %{name}-sign-libs %{name}-sign %{name}-cron
|
||||||
Provides: %{name}-build-libs %{name}-sign-libs %{name}-sign %{name}-cron
|
Provides: %{name}-build-libs %{name}-sign-libs %{name}-sign %{name}-cron
|
||||||
Obsoletes: %{name}-plugin-selinux %{name}-plugin-syslog %{name}-plugin-systemd-inhibit < 4.15.1-28 %{name}-plugin-ima %{name}-plugin-prioreset
|
Obsoletes: %{name}-plugin-selinux %{name}-plugin-syslog %{name}-plugin-systemd-inhibit < 4.15.1-28 %{name}-plugin-ima %{name}-plugin-prioreset
|
||||||
@ -75,18 +42,18 @@ The RPM Package Manager (RPM) is a powerful package management system capability
|
|||||||
-verifying integrity of packaged software and resulting software installation
|
-verifying integrity of packaged software and resulting software installation
|
||||||
|
|
||||||
%package libs
|
%package libs
|
||||||
Summary: Shared library of rpm 4.15
|
Summary: Shared library of rpm 4.17
|
||||||
Requires: %{name} = %{version}-%{release}
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
|
||||||
%description libs
|
%description libs
|
||||||
Shared library of rpm 4.15.
|
Shared library of rpm 4.17.
|
||||||
|
|
||||||
%package build
|
%package build
|
||||||
Summary: Scripts and executable programs used to build packages
|
Summary: Scripts and executable programs used to build packages
|
||||||
Requires: %{name} = %{version}-%{release}
|
Requires: %{name} = %{version}-%{release}
|
||||||
Requires: elfutils binutils findutils sed grep gawk diffutils file patch
|
Requires: elfutils binutils findutils sed grep gawk diffutils file patch
|
||||||
Requires: tar unzip gzip bzip2 cpio xz zstd pkgconfig system-rpm-config
|
Requires: tar unzip gzip bzip2 cpio xz zstd pkgconfig system-rpm-config
|
||||||
Requires: gdb-headless
|
Requires: gdb-headless debugedit
|
||||||
|
|
||||||
%description build
|
%description build
|
||||||
This package provides scripts and executable programs that used to
|
This package provides scripts and executable programs that used to
|
||||||
@ -132,8 +99,6 @@ Obsoletes: apidocs
|
|||||||
%prep
|
%prep
|
||||||
%autosetup -n %{name}-%{version} -p1
|
%autosetup -n %{name}-%{version} -p1
|
||||||
|
|
||||||
sed -ie 's:^python test:python2 test:g' tests/rpmtests tests/local.at
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
CPPFLAGS="$CPPFLAGS -DLUA_COMPAT_APIINTCASTS"
|
CPPFLAGS="$CPPFLAGS -DLUA_COMPAT_APIINTCASTS"
|
||||||
CFLAGS="$RPM_OPT_FLAGS -DLUA_COMPAT_APIINTCASTS"
|
CFLAGS="$RPM_OPT_FLAGS -DLUA_COMPAT_APIINTCASTS"
|
||||||
@ -163,7 +128,13 @@ done;
|
|||||||
--with-imaevm \
|
--with-imaevm \
|
||||||
--enable-zstd \
|
--enable-zstd \
|
||||||
--enable-python \
|
--enable-python \
|
||||||
--with-crypto=openssl
|
--enable-bdb-ro \
|
||||||
|
--enable-ndb \
|
||||||
|
--enable-bdb=no \
|
||||||
|
--enable-sqlite=no \
|
||||||
|
--with-crypto=openssl \
|
||||||
|
--with-fapolicyd=no \
|
||||||
|
--with-fsverity=no
|
||||||
|
|
||||||
%make_build
|
%make_build
|
||||||
|
|
||||||
@ -184,6 +155,9 @@ install -m 755 scripts/rpm.daily ${RPM_BUILD_ROOT}%{_sysconfdir}/cron.daily/rpm
|
|||||||
mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d
|
mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d
|
||||||
install -m 644 scripts/rpm.log ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d/rpm
|
install -m 644 scripts/rpm.log ${RPM_BUILD_ROOT}%{_sysconfdir}/logrotate.d/rpm
|
||||||
|
|
||||||
|
install -m 755 build-aux/config.guess ${RPM_BUILD_ROOT}%{_rpmconfigdir}/
|
||||||
|
install -m 755 build-aux/config.sub ${RPM_BUILD_ROOT}%{_rpmconfigdir}/
|
||||||
|
|
||||||
mkdir -p ${RPM_BUILD_ROOT}/usr/lib/tmpfiles.d
|
mkdir -p ${RPM_BUILD_ROOT}/usr/lib/tmpfiles.d
|
||||||
echo "r /var/lib/rpm/__db.*" > ${RPM_BUILD_ROOT}/usr/lib/tmpfiles.d/rpm.conf
|
echo "r /var/lib/rpm/__db.*" > ${RPM_BUILD_ROOT}/usr/lib/tmpfiles.d/rpm.conf
|
||||||
|
|
||||||
@ -191,18 +165,10 @@ mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/rpm
|
|||||||
mkdir -p $RPM_BUILD_ROOT%{_rpmconfigdir}/macros.d
|
mkdir -p $RPM_BUILD_ROOT%{_rpmconfigdir}/macros.d
|
||||||
mkdir -p $RPM_BUILD_ROOT/var/lib/rpm
|
mkdir -p $RPM_BUILD_ROOT/var/lib/rpm
|
||||||
|
|
||||||
for dbi in \
|
./rpmdb --define "_db_backend ndb" --dbpath=$(pwd)/ndb/ --initdb
|
||||||
Basenames Conflictname Dirnames Group Installtid Name Obsoletename \
|
cp -va ndb/. $RPM_BUILD_ROOT/var/lib/rpm/
|
||||||
Packages Providename Requirename Triggername Sha1header Sigmd5 \
|
|
||||||
__db.001 __db.002 __db.003 __db.004 __db.005 __db.006 __db.007 \
|
|
||||||
__db.008 __db.009
|
|
||||||
do
|
|
||||||
touch $RPM_BUILD_ROOT/var/lib/rpm/$dbi
|
|
||||||
done
|
|
||||||
|
|
||||||
#./rpmdb --dbpath=$RPM_BUILD_ROOT/var/lib/rpm --initdb
|
for dbutil in recover stat upgrade verify
|
||||||
|
|
||||||
for dbutil in dump load recover stat upgrade verify
|
|
||||||
do
|
do
|
||||||
ln -s ../../bin/db_${dbutil} $RPM_BUILD_ROOT/usr/lib/rpm/rpmdb_${dbutil}
|
ln -s ../../bin/db_${dbutil} $RPM_BUILD_ROOT/usr/lib/rpm/rpmdb_${dbutil}
|
||||||
done
|
done
|
||||||
@ -214,6 +180,7 @@ find $RPM_BUILD_ROOT -name "*.la"|xargs rm -f
|
|||||||
rm -f $RPM_BUILD_ROOT/%{_rpmconfigdir}/{perldeps.pl,perl.*,pythond*}
|
rm -f $RPM_BUILD_ROOT/%{_rpmconfigdir}/{perldeps.pl,perl.*,pythond*}
|
||||||
rm -f $RPM_BUILD_ROOT/%{_fileattrsdir}/{perl*,python*}
|
rm -f $RPM_BUILD_ROOT/%{_fileattrsdir}/{perl*,python*}
|
||||||
rm -f $RPM_BUILD_ROOT/%{_rpmconfigdir}/{tcl.req,osgideps.pl}
|
rm -f $RPM_BUILD_ROOT/%{_rpmconfigdir}/{tcl.req,osgideps.pl}
|
||||||
|
rm -f $RPM_BUILD_ROOT/%{_sysconfdir}/dbus-1/system.d/org.rpm.conf
|
||||||
|
|
||||||
%check
|
%check
|
||||||
make check || (cat tests/rpmtests.log; exit 0)
|
make check || (cat tests/rpmtests.log; exit 0)
|
||||||
@ -226,6 +193,17 @@ make check || (cat tests/rpmtests.log; exit 0)
|
|||||||
|
|
||||||
%postun libs -p /sbin/ldconfig
|
%postun libs -p /sbin/ldconfig
|
||||||
|
|
||||||
|
%posttrans
|
||||||
|
{
|
||||||
|
set -e
|
||||||
|
dbpath=$(rpm -E %{_dbpath})
|
||||||
|
while [ -e ${dbpath}/Packages ]
|
||||||
|
do
|
||||||
|
date >> /var/log/rebuilddb.log 2>&1
|
||||||
|
rpm -vvv --rebuilddb >> /var/log/rebuilddb.log 2>&1
|
||||||
|
done
|
||||||
|
} &
|
||||||
|
|
||||||
%files -f %{name}.lang
|
%files -f %{name}.lang
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%license COPYING
|
%license COPYING
|
||||||
@ -235,7 +213,8 @@ make check || (cat tests/rpmtests.log; exit 0)
|
|||||||
%config(noreplace) %{_sysconfdir}/logrotate.d/rpm
|
%config(noreplace) %{_sysconfdir}/logrotate.d/rpm
|
||||||
%dir %{_sysconfdir}/rpm
|
%dir %{_sysconfdir}/rpm
|
||||||
%dir /var/lib/rpm
|
%dir /var/lib/rpm
|
||||||
%attr(0644, root, root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) /var/lib/rpm/*
|
%attr(0644, root, root) %ghost %config(missingok,noreplace) /var/lib/rpm/*
|
||||||
|
%attr(0644, root, root) %ghost /var/lib/rpm/.*.lock
|
||||||
%lang(fr) %{_mandir}/fr/man[18]/*.[18]*
|
%lang(fr) %{_mandir}/fr/man[18]/*.[18]*
|
||||||
%lang(ko) %{_mandir}/ko/man[18]/*.[18]*
|
%lang(ko) %{_mandir}/ko/man[18]/*.[18]*
|
||||||
%lang(ja) %{_mandir}/ja/man[18]/*.[18]*
|
%lang(ja) %{_mandir}/ja/man[18]/*.[18]*
|
||||||
@ -257,6 +236,8 @@ make check || (cat tests/rpmtests.log; exit 0)
|
|||||||
%{_rpmconfigdir}/platform
|
%{_rpmconfigdir}/platform
|
||||||
%{_libdir}/rpm-plugins/
|
%{_libdir}/rpm-plugins/
|
||||||
%exclude %{_libdir}/rpm-plugins/systemd_inhibit.so
|
%exclude %{_libdir}/rpm-plugins/systemd_inhibit.so
|
||||||
|
%exclude %{_libdir}/rpm-plugins/fsverity.so
|
||||||
|
%exclude %{_libdir}/rpm-plugins/dbus_announce.so
|
||||||
%dir %{_rpmconfigdir}/fileattrs
|
%dir %{_rpmconfigdir}/fileattrs
|
||||||
%{_bindir}/rpm
|
%{_bindir}/rpm
|
||||||
%{_bindir}/rpm2archive
|
%{_bindir}/rpm2archive
|
||||||
@ -278,9 +259,6 @@ make check || (cat tests/rpmtests.log; exit 0)
|
|||||||
|
|
||||||
%{_rpmconfigdir}/brp-*
|
%{_rpmconfigdir}/brp-*
|
||||||
%{_rpmconfigdir}/check-*
|
%{_rpmconfigdir}/check-*
|
||||||
%{_rpmconfigdir}/debugedit
|
|
||||||
%{_rpmconfigdir}/sepdebugcrcfix
|
|
||||||
%{_rpmconfigdir}/find-debuginfo.sh
|
|
||||||
%{_rpmconfigdir}/find-lang.sh
|
%{_rpmconfigdir}/find-lang.sh
|
||||||
%{_rpmconfigdir}/*provides*
|
%{_rpmconfigdir}/*provides*
|
||||||
%{_rpmconfigdir}/*requires*
|
%{_rpmconfigdir}/*requires*
|
||||||
@ -309,13 +287,20 @@ make check || (cat tests/rpmtests.log; exit 0)
|
|||||||
|
|
||||||
%files help
|
%files help
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%doc doc/manual/[a-z]*
|
%doc docs/manual/[a-z]*
|
||||||
%doc doc/librpm/html/*
|
%doc docs/librpm/html/*
|
||||||
%{_mandir}/man8/rpm*.8*
|
%{_mandir}/man8/rpm*.8*
|
||||||
%exclude %{_mandir}/man8/rpm-plugin-systemd-inhibit.8*
|
%exclude %{_mandir}/man8/rpm-plugin-systemd-inhibit.8*
|
||||||
|
%exclude %{_mandir}/man8/rpm-plugin-dbus-announce.8*
|
||||||
%{_mandir}/man1/gendiff.1*
|
%{_mandir}/man1/gendiff.1*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Dec 27 2021 renhongxun<renhongxun@huawei.com> - 4.17.0-1
|
||||||
|
- Type:requirement
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:upgrade to 4.17.0
|
||||||
|
|
||||||
* Mon Sep 13 2021 zhangtianxing<zhangtianxing3@huawei.com> - 4.15.1-30
|
* Mon Sep 13 2021 zhangtianxing<zhangtianxing3@huawei.com> - 4.15.1-30
|
||||||
- Type:bugfix
|
- Type:bugfix
|
||||||
- ID:NA
|
- ID:NA
|
||||||
|
|||||||
@ -1,39 +0,0 @@
|
|||||||
From 90e2b3a3b1a6d2b18c4421ed17a94aa5c56108a8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: openEuler Buildteam <buildteam@openeuler.org>
|
|
||||||
Date: Thu, 13 Feb 2020 21:32:33 +0800
|
|
||||||
Subject: [PATCH] skip updating the preferences
|
|
||||||
|
|
||||||
---
|
|
||||||
tests/Makefile.am | 2 +-
|
|
||||||
tests/Makefile.in | 2 +-
|
|
||||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
|
||||||
index 10f095b..ab92353 100644
|
|
||||||
--- a/tests/Makefile.am
|
|
||||||
+++ b/tests/Makefile.am
|
|
||||||
@@ -167,7 +167,7 @@ populate_testing:
|
|
||||||
for prog in gzip cat patch tar sh ln chmod rm mkdir uname grep sed find file ionice mktemp nice cut sort diff touch install wc coreutils xargs; do p=`which $${prog}`; if [ "$${p}" != "" ]; then ln -s $${p} testing/$(bindir)/; fi; done
|
|
||||||
for d in /proc /sys /selinux /etc/selinux; do if [ -d $${d} ]; then ln -s $${d} testing/$${d}; fi; done
|
|
||||||
(cd testing/magic && file -C)
|
|
||||||
- HOME=$(abs_builddir)/testing gpg2 --import ${abs_srcdir}/data/keys/*.secret
|
|
||||||
+ HOME=$(abs_builddir)/testing gpg2 --import --batch ${abs_srcdir}/data/keys/*.secret
|
|
||||||
|
|
||||||
check_DATA = atconfig atlocal $(TESTSUITE)
|
|
||||||
|
|
||||||
diff --git a/tests/Makefile.in b/tests/Makefile.in
|
|
||||||
index 16bcdd5..5603c54 100644
|
|
||||||
--- a/tests/Makefile.in
|
|
||||||
+++ b/tests/Makefile.in
|
|
||||||
@@ -695,7 +695,7 @@ populate_testing:
|
|
||||||
for prog in gzip cat patch tar sh ln chmod rm mkdir uname grep sed find file ionice mktemp nice cut sort diff touch install wc coreutils xargs; do p=`which $${prog}`; if [ "$${p}" != "" ]; then ln -s $${p} testing/$(bindir)/; fi; done
|
|
||||||
for d in /proc /sys /selinux /etc/selinux; do if [ -d $${d} ]; then ln -s $${d} testing/$${d}; fi; done
|
|
||||||
(cd testing/magic && file -C)
|
|
||||||
- HOME=$(abs_builddir)/testing gpg2 --import ${abs_srcdir}/data/keys/*.secret
|
|
||||||
+ HOME=$(abs_builddir)/testing gpg2 --import --batch ${abs_srcdir}/data/keys/*.secret
|
|
||||||
|
|
||||||
@HAVE_FAKECHROOT_TRUE@check-local: $(check_DATA) populate_testing
|
|
||||||
@HAVE_FAKECHROOT_TRUE@ $(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS)
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
210
still-in-use-of-python-scripts-from-old-version.patch
Normal file
210
still-in-use-of-python-scripts-from-old-version.patch
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
From 4ec83c32024a8faf0a66a4275acbcd15751ee303 Mon Sep 17 00:00:00 2001
|
||||||
|
From: renhongxun <renhongxun@huawei.com>
|
||||||
|
Date: Wed, 29 Dec 2021 16:37:45 +0800
|
||||||
|
Subject: [PATCH] still in use of python scripts from old version
|
||||||
|
|
||||||
|
---
|
||||||
|
platform.in | 3 ++
|
||||||
|
scripts/Makefile.am | 8 +--
|
||||||
|
scripts/brp-python-bytecompile | 112 +++++++++++++++++++++++++++++++++++++++++
|
||||||
|
scripts/brp-python-hardlink | 25 +++++++++
|
||||||
|
4 files changed, 144 insertions(+), 4 deletions(-)
|
||||||
|
create mode 100644 scripts/brp-python-bytecompile
|
||||||
|
create mode 100755 scripts/brp-python-hardlink
|
||||||
|
|
||||||
|
diff --git a/platform.in b/platform.in
|
||||||
|
index 71496b8..748186e 100644
|
||||||
|
--- a/platform.in
|
||||||
|
+++ b/platform.in
|
||||||
|
@@ -82,10 +82,13 @@
|
||||||
|
#
|
||||||
|
|
||||||
|
%__arch_install_post @ARCH_INSTALL_POST@
|
||||||
|
+%_python_bytecompile_errors_terminate_build 0
|
||||||
|
+%_python_bytecompile_extra 1
|
||||||
|
|
||||||
|
# Standard brp-macro naming:
|
||||||
|
# convert all '-' in basename to '_', add two leading underscores.
|
||||||
|
%__brp_compress %{_rpmconfigdir}/brp-compress %{?_prefix}
|
||||||
|
+%__brp_python_bytecompile %{_rpmconfigdir}/brp-python-bytecompile "" "%{?_python_bytecompile_errors_terminate_build}" "%{?_python_bytecompile_extra}"
|
||||||
|
%__brp_strip %{_rpmconfigdir}/brp-strip %{__strip}
|
||||||
|
%__brp_strip_comment_note %{_rpmconfigdir}/brp-strip-comment-note %{__strip} %{__objdump}
|
||||||
|
%__brp_strip_static_archive %{_rpmconfigdir}/brp-strip-static-archive %{__strip}
|
||||||
|
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
|
||||||
|
index 4aed76b..5a1c494 100644
|
||||||
|
--- a/scripts/Makefile.am
|
||||||
|
+++ b/scripts/Makefile.am
|
||||||
|
@@ -6,8 +6,8 @@ AM_CFLAGS = @RPMCFLAGS@
|
||||||
|
CLEANFILES =
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
- brp-compress \
|
||||||
|
- brp-strip brp-strip-comment-note \
|
||||||
|
+ brp-compress brp-python-bytecompile \
|
||||||
|
+ brp-strip brp-strip-comment-note brp-python-hardlink \
|
||||||
|
brp-strip-static-archive brp-elfperms \
|
||||||
|
brp-remove-la-files \
|
||||||
|
check-files check-prereqs \
|
||||||
|
@@ -23,8 +23,8 @@ EXTRA_DIST = \
|
||||||
|
fontconfig.prov script.req
|
||||||
|
|
||||||
|
rpmconfig_SCRIPTS = \
|
||||||
|
- brp-compress \
|
||||||
|
- brp-strip brp-strip-comment-note \
|
||||||
|
+ brp-compress brp-python-bytecompile \
|
||||||
|
+ brp-strip brp-strip-comment-note brp-python-hardlink \
|
||||||
|
brp-strip-static-archive brp-elfperms \
|
||||||
|
brp-remove-la-files \
|
||||||
|
check-files check-prereqs \
|
||||||
|
diff --git a/scripts/brp-python-bytecompile b/scripts/brp-python-bytecompile
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..d9c4832
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/scripts/brp-python-bytecompile
|
||||||
|
@@ -0,0 +1,112 @@
|
||||||
|
+#!/bin/bash
|
||||||
|
+errors_terminate=$2
|
||||||
|
+extra=$3
|
||||||
|
+
|
||||||
|
+# If using normal root, avoid changing anything.
|
||||||
|
+if [ -z "$RPM_BUILD_ROOT" ] || [ "$RPM_BUILD_ROOT" = "/" ]; then
|
||||||
|
+ exit 0
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+# Figure out how deep we need to descend. We could pick an insanely high
|
||||||
|
+# number and hope it's enough, but somewhere, somebody's sure to run into it.
|
||||||
|
+depth=`(find "$RPM_BUILD_ROOT" -type f -name "*.py" -print0 ; echo /) | \
|
||||||
|
+ xargs -0 -n 1 dirname | sed 's,[^/],,g' | sort -u | tail -n 1 | wc -c`
|
||||||
|
+if [ -z "$depth" ] || [ "$depth" -le "1" ]; then
|
||||||
|
+ exit 0
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+function python_bytecompile()
|
||||||
|
+{
|
||||||
|
+ local options=$1
|
||||||
|
+ local python_binary=$2
|
||||||
|
+ local exclude=$3
|
||||||
|
+ local python_libdir=$4
|
||||||
|
+ local depth=$5
|
||||||
|
+ local real_libdir=$6
|
||||||
|
+
|
||||||
|
+cat << EOF | $python_binary $options
|
||||||
|
+import compileall, sys, os, re
|
||||||
|
+
|
||||||
|
+python_libdir = "$python_libdir"
|
||||||
|
+depth = $depth
|
||||||
|
+real_libdir = "$real_libdir"
|
||||||
|
+build_root = "$RPM_BUILD_ROOT"
|
||||||
|
+exclude = r"$exclude"
|
||||||
|
+
|
||||||
|
+class Filter:
|
||||||
|
+ def search(self, path):
|
||||||
|
+ ret = not os.path.realpath(path).startswith(build_root)
|
||||||
|
+ if exclude:
|
||||||
|
+ ret = ret or re.search(exclude, path)
|
||||||
|
+ return ret
|
||||||
|
+
|
||||||
|
+sys.exit(not compileall.compile_dir(python_libdir, depth, real_libdir, force=1, rx=Filter(), quiet=1))
|
||||||
|
+EOF
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+# .pyc/.pyo files embed a "magic" value, identifying the ABI version of Python
|
||||||
|
+# bytecode that they are for.
|
||||||
|
+#
|
||||||
|
+# The files below RPM_BUILD_ROOT could be targeting multiple versions of
|
||||||
|
+# python (e.g. a single build that emits several subpackages e.g. a
|
||||||
|
+# python26-foo subpackage, a python31-foo subpackage etc)
|
||||||
|
+#
|
||||||
|
+# Support this by assuming that below each /usr/lib/python$VERSION/, all
|
||||||
|
+# .pyc/.pyo files are to be compiled for /usr/bin/python$VERSION.
|
||||||
|
+#
|
||||||
|
+# For example, below /usr/lib/python2.6/, we're targeting /usr/bin/python2.6
|
||||||
|
+# and below /usr/lib/python3.1/, we're targeting /usr/bin/python3.1
|
||||||
|
+
|
||||||
|
+shopt -s nullglob
|
||||||
|
+for python_libdir in `find "$RPM_BUILD_ROOT" -type d|grep -E "/usr/lib(64)?/python[0-9]\.[0-9]$"`;
|
||||||
|
+do
|
||||||
|
+ python_binary=/usr/bin/$(basename $python_libdir)
|
||||||
|
+ real_libdir=${python_libdir/$RPM_BUILD_ROOT/}
|
||||||
|
+ echo "Bytecompiling .py files below $python_libdir using $python_binary"
|
||||||
|
+
|
||||||
|
+ # Generate normal (.pyc) byte-compiled files.
|
||||||
|
+ python_bytecompile "" "$python_binary" "" "$python_libdir" "$depth" "$real_libdir"
|
||||||
|
+ if [ $? -ne 0 ] && [ 0$errors_terminate -ne 0 ]; then
|
||||||
|
+ # One or more of the files had a syntax error
|
||||||
|
+ exit 1
|
||||||
|
+ fi
|
||||||
|
+
|
||||||
|
+ # Generate optimized (.pyo) byte-compiled files.
|
||||||
|
+ python_bytecompile "-O" "$python_binary" "" "$python_libdir" "$depth" "$real_libdir"
|
||||||
|
+ if [ $? -ne 0 ] && [ 0$errors_terminate -ne 0 ]; then
|
||||||
|
+ # One or more of the files had a syntax error
|
||||||
|
+ exit 1
|
||||||
|
+ fi
|
||||||
|
+done
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+# Handle other locations in the filesystem using the default python implementation
|
||||||
|
+# if extra is set to 0, don't do this
|
||||||
|
+if [ 0$extra -eq 0 ]; then
|
||||||
|
+ exit 0
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+# If we don't have a default python interpreter, we cannot proceed
|
||||||
|
+default_python=${1:-/usr/bin/python}
|
||||||
|
+if [ ! -x "$default_python" ]; then
|
||||||
|
+ exit 0
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+# Figure out if there are files to be bytecompiled with the default_python at all
|
||||||
|
+# this prevents unnecessary default_python invocation
|
||||||
|
+find "$RPM_BUILD_ROOT" -type f -name "*.py" | grep -Ev "/bin/|/sbin/|/usr/lib(64)?/python[0-9]\.[0-9]|/usr/share/doc" || exit 0
|
||||||
|
+
|
||||||
|
+# Generate normal (.pyc) byte-compiled files.
|
||||||
|
+python_bytecompile "" $default_python "/bin/|/sbin/|/usr/lib(64)?/python[0-9]\.[0-9]|/usr/share/doc" "$RPM_BUILD_ROOT" "$depth" "/"
|
||||||
|
+if [ $? -ne 0 ] && [ 0$errors_terminate -ne 0 ]; then
|
||||||
|
+ # One or more of the files had a syntax error
|
||||||
|
+ exit 1
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+# Generate optimized (.pyo) byte-compiled files.
|
||||||
|
+python_bytecompile "-O" $default_python "/bin/|/sbin/|/usr/lib(64)?/python[0-9]\.[0-9]|/usr/share/doc" "$RPM_BUILD_ROOT" "$depth" "/"
|
||||||
|
+if [ $? -ne 0 ] && [ 0$errors_terminate -ne 0 ]; then
|
||||||
|
+ # One or more of the files had a syntax error
|
||||||
|
+ exit 1
|
||||||
|
+fi
|
||||||
|
+exit 0
|
||||||
|
diff --git a/scripts/brp-python-hardlink b/scripts/brp-python-hardlink
|
||||||
|
new file mode 100755
|
||||||
|
index 0000000..5fd1b43
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/scripts/brp-python-hardlink
|
||||||
|
@@ -0,0 +1,25 @@
|
||||||
|
+#!/bin/sh
|
||||||
|
+
|
||||||
|
+# If using normal root, avoid changing anything.
|
||||||
|
+if [ -z "$RPM_BUILD_ROOT" ] || [ "$RPM_BUILD_ROOT" = "/" ]; then
|
||||||
|
+ exit 0
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+hardlink_if_same() {
|
||||||
|
+ if cmp -s "$1" "$2" ; then
|
||||||
|
+ ln -f "$1" "$2"
|
||||||
|
+ return 0
|
||||||
|
+ fi
|
||||||
|
+ return 1
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+# Hardlink identical *.pyc, *.pyo, and *.opt-[12].pyc.
|
||||||
|
+# Originally from PLD's rpm-build-macros
|
||||||
|
+find "$RPM_BUILD_ROOT" -type f -name "*.pyc" -not -name "*.opt-[12].pyc" | while read pyc ; do
|
||||||
|
+ hardlink_if_same "$pyc" "${pyc%c}o"
|
||||||
|
+ o1pyc="${pyc%pyc}opt-1.pyc"
|
||||||
|
+ hardlink_if_same "$pyc" "$o1pyc"
|
||||||
|
+ o2pyc="${pyc%pyc}opt-2.pyc"
|
||||||
|
+ hardlink_if_same "$pyc" "$o2pyc" || hardlink_if_same "$o1pyc" "$o2pyc"
|
||||||
|
+done
|
||||||
|
+exit 0
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user