backport some fixes
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=421
This commit is contained in:
parent
9c5d0ddfdb
commit
b9d34b5388
20
editdwarf.diff
Normal file
20
editdwarf.diff
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
debugedit: edit_dwarf2 check lndx is in range before checking r_offset.
|
||||||
|
|
||||||
|
upstream commit 7e9af0c000868ad6272a9577f9daed991599419b
|
||||||
|
--- ./tools/debugedit.c.orig 2017-12-05 11:59:10.287010024 +0000
|
||||||
|
+++ ./tools/debugedit.c 2017-12-05 12:00:02.776862694 +0000
|
||||||
|
@@ -2171,10 +2171,10 @@ edit_dwarf2 (DSO *dso)
|
||||||
|
r_offset = rel.r_offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
- while (r_offset > (dso->lines.table[lndx].old_idx
|
||||||
|
- + 4
|
||||||
|
- + dso->lines.table[lndx].unit_length)
|
||||||
|
- && lndx < dso->lines.used)
|
||||||
|
+ while (lndx < dso->lines.used
|
||||||
|
+ && r_offset > (dso->lines.table[lndx].old_idx
|
||||||
|
+ + 4
|
||||||
|
+ + dso->lines.table[lndx].unit_length))
|
||||||
|
lndx++;
|
||||||
|
|
||||||
|
if (lndx >= dso->lines.used)
|
156
hardlink.diff
Normal file
156
hardlink.diff
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
Create first hard link file and keep open, write it at end
|
||||||
|
|
||||||
|
upstream commit e276991614fd127f21aba94946f81f22cb7e6b73
|
||||||
|
upstream commit 0afe0c3c6cba64d8b7adcdec6ed70f8d32961b58
|
||||||
|
upstream commit ef3ff412c33a71be6b3543a50c244377dff3d9e7
|
||||||
|
--- ./lib/fsm.c.orig 2017-10-05 10:04:56.977602149 +0000
|
||||||
|
+++ ./lib/fsm.c 2017-12-05 12:05:19.529973029 +0000
|
||||||
|
@@ -218,56 +218,76 @@ static int linkSane(FD_t wfd, const char
|
||||||
|
sb.st_dev == lsb.st_dev && sb.st_ino == lsb.st_ino);
|
||||||
|
}
|
||||||
|
|
||||||
|
-/** \ingroup payload
|
||||||
|
- * Create file from payload stream.
|
||||||
|
- * @return 0 on success
|
||||||
|
- */
|
||||||
|
-static int expandRegular(rpmfi fi, const char *dest, rpmpsm psm, int exclusive, int nodigest, int nocontent)
|
||||||
|
+static void wfd_close(FD_t *wfdp)
|
||||||
|
{
|
||||||
|
- FD_t wfd = NULL;
|
||||||
|
- int rc = 0;
|
||||||
|
+ if (wfdp && *wfdp) {
|
||||||
|
+ int myerrno = errno;
|
||||||
|
+ static int oneshot = 0;
|
||||||
|
+ static int flush_io = 0;
|
||||||
|
+ if (!oneshot) {
|
||||||
|
+ flush_io = rpmExpandNumeric("%{?_flush_io}");
|
||||||
|
+ oneshot = 1;
|
||||||
|
+ }
|
||||||
|
+ if (flush_io) {
|
||||||
|
+ int fdno = Fileno(*wfdp);
|
||||||
|
+ fsync(fdno);
|
||||||
|
+ }
|
||||||
|
+ Fclose(*wfdp);
|
||||||
|
+ *wfdp = NULL;
|
||||||
|
+ errno = myerrno;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
|
||||||
|
+static int wfd_open(FD_t *wfdp, const char *dest, int exclusive)
|
||||||
|
+{
|
||||||
|
+ int rc = 0;
|
||||||
|
/* Create the file with 0200 permissions (write by owner). */
|
||||||
|
{
|
||||||
|
mode_t old_umask = umask(0577);
|
||||||
|
- wfd = Fopen(dest, exclusive ? "wx.ufdio" : "a.ufdio");
|
||||||
|
+ *wfdp = Fopen(dest, exclusive ? "wx.ufdio" : "a.ufdio");
|
||||||
|
umask(old_umask);
|
||||||
|
|
||||||
|
/* If reopening, make sure the file is what we expect */
|
||||||
|
- if (!exclusive && wfd != NULL && !linkSane(wfd, dest)) {
|
||||||
|
+ if (!exclusive && *wfdp != NULL && !linkSane(*wfdp, dest)) {
|
||||||
|
rc = RPMERR_OPEN_FAILED;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- if (Ferror(wfd)) {
|
||||||
|
+ if (Ferror(*wfdp)) {
|
||||||
|
rc = RPMERR_OPEN_FAILED;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+exit:
|
||||||
|
+ wfd_close(wfdp);
|
||||||
|
+ return rc;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/** \ingroup payload
|
||||||
|
+ * Create file from payload stream.
|
||||||
|
+ * @return 0 on success
|
||||||
|
+ */
|
||||||
|
+static int expandRegular(rpmfi fi, const char *dest, rpmpsm psm, int exclusive, int nodigest, int nocontent)
|
||||||
|
+{
|
||||||
|
+ FD_t wfd = NULL;
|
||||||
|
+ int rc;
|
||||||
|
+
|
||||||
|
+ rc = wfd_open(&wfd, dest, exclusive);
|
||||||
|
+ if (rc != 0)
|
||||||
|
+ goto exit;
|
||||||
|
+
|
||||||
|
if (!nocontent)
|
||||||
|
rc = rpmfiArchiveReadToFilePsm(fi, wfd, nodigest, psm);
|
||||||
|
+ wfd_close(&wfd);
|
||||||
|
exit:
|
||||||
|
- if (wfd) {
|
||||||
|
- int myerrno = errno;
|
||||||
|
- static int oneshot = 0;
|
||||||
|
- static int flush_io = 0;
|
||||||
|
- if (!oneshot) {
|
||||||
|
- flush_io = rpmExpandNumeric("%{?_flush_io}");
|
||||||
|
- oneshot = 1;
|
||||||
|
- }
|
||||||
|
- if (flush_io) {
|
||||||
|
- int fdno = Fileno(wfd);
|
||||||
|
- fsync(fdno);
|
||||||
|
- }
|
||||||
|
- Fclose(wfd);
|
||||||
|
- errno = myerrno;
|
||||||
|
- }
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int fsmMkfile(rpmfi fi, const char *dest, rpmfiles files,
|
||||||
|
rpmpsm psm, int nodigest, int *setmeta,
|
||||||
|
- int * firsthardlink)
|
||||||
|
+ int * firsthardlink, FD_t *firstlinkfile)
|
||||||
|
{
|
||||||
|
int rc = 0;
|
||||||
|
int numHardlinks = rpmfiFNlink(fi);
|
||||||
|
@@ -276,7 +296,7 @@ static int fsmMkfile(rpmfi fi, const cha
|
||||||
|
/* Create first hardlinked file empty */
|
||||||
|
if (*firsthardlink < 0) {
|
||||||
|
*firsthardlink = rpmfiFX(fi);
|
||||||
|
- rc = expandRegular(fi, dest, psm, 1, nodigest, 1);
|
||||||
|
+ rc = wfd_open(firstlinkfile, dest, 1);
|
||||||
|
} else {
|
||||||
|
/* Create hard links for others */
|
||||||
|
char *fn = rpmfilesFN(files, *firsthardlink);
|
||||||
|
@@ -294,7 +314,8 @@ static int fsmMkfile(rpmfi fi, const cha
|
||||||
|
rc = expandRegular(fi, dest, psm, 1, nodigest, 0);
|
||||||
|
} else if (rpmfiArchiveHasContent(fi)) {
|
||||||
|
if (!rc)
|
||||||
|
- rc = expandRegular(fi, dest, psm, 0, nodigest, 0);
|
||||||
|
+ rc = rpmfiArchiveReadToFilePsm(fi, *firstlinkfile, nodigest, psm);
|
||||||
|
+ wfd_close(firstlinkfile);
|
||||||
|
*firsthardlink = -1;
|
||||||
|
} else {
|
||||||
|
*setmeta = 0;
|
||||||
|
@@ -861,6 +882,7 @@ int rpmPackageFilesInstall(rpmts ts, rpm
|
||||||
|
int nodigest = (rpmtsFlags(ts) & RPMTRANS_FLAG_NOFILEDIGEST) ? 1 : 0;
|
||||||
|
int nofcaps = (rpmtsFlags(ts) & RPMTRANS_FLAG_NOCAPS) ? 1 : 0;
|
||||||
|
int firsthardlink = -1;
|
||||||
|
+ FD_t firstlinkfile = NULL;
|
||||||
|
int skip;
|
||||||
|
rpmFileAction action;
|
||||||
|
char *tid = NULL;
|
||||||
|
@@ -932,7 +954,7 @@ int rpmPackageFilesInstall(rpmts ts, rpm
|
||||||
|
if (S_ISREG(sb.st_mode)) {
|
||||||
|
if (rc == RPMERR_ENOENT) {
|
||||||
|
rc = fsmMkfile(fi, fpath, files, psm, nodigest,
|
||||||
|
- &setmeta, &firsthardlink);
|
||||||
|
+ &setmeta, &firsthardlink, &firstlinkfile);
|
||||||
|
}
|
||||||
|
} else if (S_ISDIR(sb.st_mode)) {
|
||||||
|
if (rc == RPMERR_ENOENT) {
|
||||||
|
@@ -970,7 +992,8 @@ int rpmPackageFilesInstall(rpmts ts, rpm
|
||||||
|
/* we skip the hard linked file containing the content */
|
||||||
|
/* write the content to the first used instead */
|
||||||
|
char *fn = rpmfilesFN(files, firsthardlink);
|
||||||
|
- rc = expandRegular(fi, fn, psm, 0, nodigest, 0);
|
||||||
|
+ rc = rpmfiArchiveReadToFilePsm(fi, firstlinkfile, nodigest, psm);
|
||||||
|
+ wfd_close(&firstlinkfile);
|
||||||
|
firsthardlink = -1;
|
||||||
|
free(fn);
|
||||||
|
}
|
15
rofs.diff
Normal file
15
rofs.diff
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
Don't bother retrying locking on read-only filesystem (RhBug:1502134)
|
||||||
|
|
||||||
|
upstream commit f25752a8cd6b161f3002dc7839242872ecb59547
|
||||||
|
--- ./lib/rpmlock.c.orig 2017-08-10 08:08:07.122108699 +0000
|
||||||
|
+++ ./lib/rpmlock.c 2017-12-05 12:02:26.248459858 +0000
|
||||||
|
@@ -30,7 +30,8 @@ static rpmlock rpmlock_new(const char *l
|
||||||
|
(void) umask(oldmask);
|
||||||
|
|
||||||
|
if (lock->fd == -1) {
|
||||||
|
- lock->fd = open(lock_path, O_RDONLY);
|
||||||
|
+ if (errno != EROFS)
|
||||||
|
+ lock->fd = open(lock_path, O_RDONLY);
|
||||||
|
if (lock->fd == -1) {
|
||||||
|
free(lock);
|
||||||
|
lock = NULL;
|
@ -21,6 +21,11 @@ Fri Dec 1 17:15:13 CET 2017 - mls@suse.de
|
|||||||
* perlprov.diff
|
* perlprov.diff
|
||||||
* python3-abi-kind.diff
|
* python3-abi-kind.diff
|
||||||
* rpmrctests.diff
|
* rpmrctests.diff
|
||||||
|
- new patches (backports from master):
|
||||||
|
* editdwarf.diff
|
||||||
|
* rofs.diff
|
||||||
|
* transfiletriggerpostun.diff
|
||||||
|
* hardlink.diff
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Nov 23 13:41:13 UTC 2017 - rbrown@suse.com
|
Thu Nov 23 13:41:13 UTC 2017 - rbrown@suse.com
|
||||||
|
6
rpm.spec
6
rpm.spec
@ -127,6 +127,10 @@ Patch99: enable-postin-scripts-error.diff
|
|||||||
Patch100: rpm-findlang-inject-metainfo.patch
|
Patch100: rpm-findlang-inject-metainfo.patch
|
||||||
Patch102: emptymanifest.diff
|
Patch102: emptymanifest.diff
|
||||||
Patch103: find-lang-qt-qm.patch
|
Patch103: find-lang-qt-qm.patch
|
||||||
|
Patch104: editdwarf.diff
|
||||||
|
Patch105: rofs.diff
|
||||||
|
Patch106: transfiletriggerpostun.diff
|
||||||
|
Patch107: hardlink.diff
|
||||||
Patch6464: auto-config-update-aarch64-ppc64le.diff
|
Patch6464: auto-config-update-aarch64-ppc64le.diff
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
#
|
#
|
||||||
@ -222,7 +226,7 @@ rm -f rpmdb/db.h
|
|||||||
%patch -P 70 -P 71 -P 73 -P 74 -P 75 -P 77 -P 78
|
%patch -P 70 -P 71 -P 73 -P 74 -P 75 -P 77 -P 78
|
||||||
%patch -P 85
|
%patch -P 85
|
||||||
%patch -P 93 -P 94 -P 99
|
%patch -P 93 -P 94 -P 99
|
||||||
%patch -P 100 -P 102 -P 103
|
%patch -P 100 -P 102 -P 103 -P 104 -P 105 -P 106 -P 107
|
||||||
|
|
||||||
%ifarch aarch64 ppc64le
|
%ifarch aarch64 ppc64le
|
||||||
%patch6464
|
%patch6464
|
||||||
|
21
transfiletriggerpostun.diff
Normal file
21
transfiletriggerpostun.diff
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Fix not all %transfiletriggerpostun triggers executing (RhBug:1514085)
|
||||||
|
|
||||||
|
upstream commit db1b99db2543b2c2526a2e116daeffa0498d5de4
|
||||||
|
--- ./lib/rpmtriggers.c.orig 2017-10-05 10:04:57.121602122 +0000
|
||||||
|
+++ ./lib/rpmtriggers.c 2017-12-05 12:04:35.448096904 +0000
|
||||||
|
@@ -106,7 +106,6 @@ void rpmtriggersPrepPostUnTransFileTrigs
|
||||||
|
rpmfiles files;
|
||||||
|
rpmds rpmdsTriggers;
|
||||||
|
rpmds rpmdsTrigger;
|
||||||
|
- int tix = 0;
|
||||||
|
|
||||||
|
ii = rpmdbIndexIteratorInit(rpmtsGetRdb(ts), RPMDBI_TRANSFILETRIGGERNAME);
|
||||||
|
mi = rpmdbNewIterator(rpmtsGetRdb(ts), RPMDBI_PACKAGES);
|
||||||
|
@@ -131,6 +130,7 @@ void rpmtriggersPrepPostUnTransFileTrigs
|
||||||
|
if (rpmdbGetIteratorCount(mi)) {
|
||||||
|
/* Filter triggers and save only trans postun triggers into ts */
|
||||||
|
while ((trigH = rpmdbNextIterator(mi)) != NULL) {
|
||||||
|
+ int tix = 0;
|
||||||
|
rpmdsTriggers = rpmdsNew(trigH, RPMTAG_TRANSFILETRIGGERNAME, 0);
|
||||||
|
while ((rpmdsTrigger = rpmdsFilterTi(rpmdsTriggers, tix))) {
|
||||||
|
if ((rpmdsNext(rpmdsTrigger) >= 0) &&
|
Loading…
x
Reference in New Issue
Block a user