diff options
author | CoprDistGit <infra@openeuler.org> | 2024-09-18 07:05:42 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2024-09-18 07:05:42 +0000 |
commit | 4ad1d692311b38472d44f5deb9c32634b334ed4d (patch) | |
tree | 3e004676c8e07b495fdeda7291033d0fde73d783 /backport-Fix-root-relocation-regression.patch | |
parent | e248808867f90830a43b5ca5d192bef9dd2edec2 (diff) |
automatic import of rpm
Diffstat (limited to 'backport-Fix-root-relocation-regression.patch')
-rw-r--r-- | backport-Fix-root-relocation-regression.patch | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/backport-Fix-root-relocation-regression.patch b/backport-Fix-root-relocation-regression.patch new file mode 100644 index 0000000..bfe792b --- /dev/null +++ b/backport-Fix-root-relocation-regression.patch @@ -0,0 +1,66 @@ +From 308ac60677732e9979b9ce11e5a3085906da1901 Mon Sep 17 00:00:00 2001 +From: Michal Domonkos <mdomonko@redhat.com> +Date: Fri, 26 Jul 2024 10:44:04 +0200 +Subject: [PATCH] Fix root relocation regression + +Conflict:Do not modify the test code because the current test code is + different from that of the upstream community. If we directly + modify the test code, the test wull fail. Guaranteed by local + use cases. +Reference:https://github.com/rpm-software-management/rpm/commit/308ac60677732e9979b9ce11e5a3085906da1901 + +When relocating the root directory, make sure we insert the new path's +dirname to dirNames[] even if the root itself is owned by the package. + +This appears to have been the intention from the first version (largely +untouched since) of this code as we allow the root to pass through the +first checks (by setting len to 0 in that case) as well as the second +for loop where we do the relocations. + +This allows fsm to properly create and remove the relocated directory +since we're now using fd-based calls (#1919) and the parent directory +needs to be opened first. + +No need to do string comparison here, the empty basename signals that +we're processing the root directory, so just use that. + +Building a relocatable package that owns the root directory seems to be +a handy way to create user-installable packages (see RHEL-28967) and it +happened to work before with the path-based calls so this technically +was a regression. Add a test that emulates this use case. + +Fixes: #3173 +--- + lib/relocation.c | 8 +++++--- + 1 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/lib/relocation.c b/lib/relocation.c +index d31cf4779..0202b5c46 100644 +--- a/lib/relocation.c ++++ b/lib/relocation.c +@@ -181,8 +181,9 @@ void rpmRelocateFileList(rpmRelocation *relocations, int numRelocations, + rpmFileTypes ft; + int fnlen; + ++ size_t baselen = strlen(baseNames[i]); + size_t len = maxlen + +- strlen(dirNames[dirIndexes[i]]) + strlen(baseNames[i]) + 1; ++ strlen(dirNames[dirIndexes[i]]) + baselen + 1; + if (len >= fileAlloced) { + fileAlloced = len * 2; + fn = xrealloc(fn, fileAlloced); +@@ -244,8 +245,9 @@ assert(fn != NULL); /* XXX can't happen */ + continue; + } + +- /* Relocation on full paths only, please. */ +- if (fnlen != len) continue; ++ /* Relocation on '/' and full paths only, please. */ ++ if (baselen && fnlen != len) ++ continue; + + rpmlog(RPMLOG_DEBUG, "relocating %s to %s\n", + fn, relocations[j].newPath); +-- +2.33.0 + |