From 4584746c1acaea848d1ee0329cefa2a51b5049a7 Mon Sep 17 00:00:00 2001 From: Alexander Kanavin Date: Mon, 29 Jan 2024 19:06:29 +0100 Subject: classes/package_rpm: correctly escape percent characters This many characters doesn't work with rpm 4.19 packaging (as shown by nodejs recipes), and per documentation a single escape is enough: https://github.com/rpm-software-management/rpm/blob/rpm-4.19.x/docs/manual/spec.md#shell-globbing It also should be done in a function, and just before writing out the corrected filename to .spec, not earlier where the path may still be needed for file operations (such as gettings file attributes). (From OE-Core rev: 6d9fe2623c37e405a80acf71633f7291ecdde533) Signed-off-by: Alexander Kanavin Signed-off-by: Alexandre Belloni Signed-off-by: Richard Purdie --- meta/classes-global/package_rpm.bbclass | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'meta/classes-global') diff --git a/meta/classes-global/package_rpm.bbclass b/meta/classes-global/package_rpm.bbclass index e0f4de42a1..819ee50278 100644 --- a/meta/classes-global/package_rpm.bbclass +++ b/meta/classes-global/package_rpm.bbclass @@ -216,10 +216,12 @@ python write_specfile () { raise e return "%attr({:o},{},{}) ".format(mode, owner, group) + def escape_chars(p): + return p.replace("%", "%%") + path = rootpath.replace(walkpath, "") if path.endswith("DEBIAN") or path.endswith("CONTROL"): continue - path = path.replace("%", "%%%%%%%%") # Treat all symlinks to directories as normal files. # os.walk() lists them as directories. @@ -238,29 +240,27 @@ python write_specfile () { for dir in dirs: if dir == "CONTROL" or dir == "DEBIAN": continue - dir = dir.replace("%", "%%%%%%%%") p = path + '/' + dir # All packages own the directories their files are in... - target.append(get_attr(dir) + '%dir "' + p + '"') + target.append(get_attr(dir) + '%dir "' + escape_chars(p) + '"') else: # packages own only empty directories or explict directory. # This will prevent the overlapping of security permission. attr = get_attr(path) if path and not files and not dirs: - target.append(attr + '%dir "' + path + '"') + target.append(attr + '%dir "' + escape_chars(path) + '"') elif path and path in dirfiles: - target.append(attr + '%dir "' + path + '"') + target.append(attr + '%dir "' + escape_chars(path) + '"') for file in files: if file == "CONTROL" or file == "DEBIAN": continue - file = file.replace("%", "%%%%%%%%") attr = get_attr(file) p = path + '/' + file if conffiles.count(p): - target.append(attr + '%config "' + p + '"') + target.append(attr + '%config "' + escape_chars(p) + '"') else: - target.append(attr + '"' + p + '"') + target.append(attr + '"' + escape_chars(p) + '"') # Prevent the prerm/postrm scripts from being run during an upgrade def wrap_uninstall(scriptvar): -- cgit v1.2.3-54-g00ecf