From 117a783617f87e7fa3c7a759704007e3bc5b90de Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: May 30 2017 09:48:59 +0000 Subject: Fix resetting attr flags in buildid creation (#1449732) --- diff --git a/0025-buildid-reset-attrs.patch b/0025-buildid-reset-attrs.patch new file mode 100644 index 0000000..5a9b3f3 --- /dev/null +++ b/0025-buildid-reset-attrs.patch @@ -0,0 +1,233 @@ +commit b91dc6106e360f13ff365dfac247191942039152 +Author: Mark Wielaard +Date: Wed Mar 15 20:07:29 2017 +0100 + + Make sure to reset file attributes for generated build-id directories. + + [Note this patch is currently being tested in Fedora. See bug below.] + + When creating the build-id directories we should reset the file attributes + to the defaults. Otherwise if the file list contained an %attr or %defattr + the directories would come out with the wrong mode. + + Includes a testcase based on a spec by Igor Gnatenko that fails before + and Check that build-id directories are created with the right permissions + even if the spec file sets attrs explicitly. + + https://bugzilla.redhat.com/show_bug.cgi?id=1432372 + + Signed-off-by: Mark Wielaard + +[Just the testcase] + +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 815a390..ad41957 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -69,6 +69,8 @@ EXTRA_DIST += data/RPMS/hello-2.0-1.i686.rpm + EXTRA_DIST += data/RPMS/hello-2.0-1.x86_64.rpm + EXTRA_DIST += data/SRPMS/foo-1.0-1.src.rpm + EXTRA_DIST += data/SRPMS/hello-1.0-1.src.rpm ++EXTRA_DIST += data/SOURCES/hello.c ++EXTRA_DIST += data/SPECS/hello-attr-buildid.spec + + # testsuite voodoo + AUTOTEST = $(AUTOM4TE) --language=autotest +diff --git a/tests/data/SOURCES/hello.c b/tests/data/SOURCES/hello.c +new file mode 100644 +index 0000000..020484e +--- /dev/null ++++ b/tests/data/SOURCES/hello.c +@@ -0,0 +1,8 @@ ++#include ++ ++int ++main (void) ++{ ++ printf ("Hello, world!\n"); ++ return 0; ++} +diff --git a/tests/data/SPECS/hello-attr-buildid.spec b/tests/data/SPECS/hello-attr-buildid.spec +new file mode 100644 +index 0000000..cdab95f +--- /dev/null ++++ b/tests/data/SPECS/hello-attr-buildid.spec +@@ -0,0 +1,27 @@ ++Name: test ++Version: 1.0 ++Release: 1 ++Summary: Test ++ ++License: Public Domain ++URL: https://fedoraproject.org ++Source: hello.c ++ ++%description ++%{summary}. ++ ++%prep ++%autosetup -c -D -T ++cp -a %{S:0} . ++ ++%build ++gcc -g hello.c -o hello ++ ++%install ++mkdir -p %{buildroot}%{_bindir} ++install -D -p -m 0755 -t %{buildroot}%{_bindir} hello ++ ++%files ++%attr(644,root,root) %{_bindir}/hello ++ ++%changelog +diff --git a/tests/rpmbuildid.at b/tests/rpmbuildid.at +index 15c0620..1cae26d 100644 +--- a/tests/rpmbuildid.at ++++ b/tests/rpmbuildid.at +@@ -1166,3 +1166,39 @@ if test "$id1" == "$id2"; then echo "equal"; else echo "unequal $id1 $id2"; fi + ], + [ignore]) + AT_CLEANUP ++ ++# ------------------------------ ++# Check that build-id directories are created with the right permissions ++# even if the spec file sets attrs explicitly. ++AT_SETUP([rpmbuild buildid attrs]) ++AT_KEYWORDS([build] [debuginfo] [buildid]) ++AT_CHECK([ ++rm -rf ${TOPDIR} ++AS_MKDIR_P(${TOPDIR}/SOURCES) ++ ++# Setup sources ++cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES ++ ++# Build, contains one ELF which should have a buildid. ++run rpmbuild \ ++ --macros=${abs_top_builddir}/macros:${abs_top_builddir}/tests/testing/usr/local/lib/rpm/platform/%{_target_cpu}-%{_target_os}/macros:${top_srcdir}/macros.debug \ ++ --rcfile=${abs_top_builddir}/rpmrc \ ++ --define="_build_id_links compat" \ ++ --define "_unique_debug_names 1" \ ++ --define "_unique_debug_srcs 1" \ ++ --quiet -ba "${abs_srcdir}"/data/SPECS/hello-attr-buildid.spec ++ ++run rpm -qp --qf "[[%{filenames} %{filemodes:perms}\n]]" \ ++ ${abs_builddir}/testing/build/RPMS/*/test-1.0-1*rpm \ ++ | grep "build-id d" ++ ++run rpm -qp --qf "[[%{filenames} %{filemodes:perms}\n]]" \ ++ ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1*rpm \ ++ | grep "build-id d" ++], ++[0], ++[/usr/lib/.build-id drwxr-xr-x ++/usr/lib/debug/.build-id drwxr-xr-x ++], ++[ignore]) ++AT_CLEANUP + +commit 9d942049cf929d5a053c239cdd64f5b97d182c14 +Author: Mark Wielaard +Date: Fri May 19 23:11:39 2017 +0200 + + rpmbuild: Reset attrFlags in generateBuildIDs. + + Debuginfo directories and files could be marked as configuration files + if the file list ended with a config file. + + Patch by Panu Matilainen. Testcase by me. + + https://bugzilla.redhat.com/show_bug.cgi?id=1449732 + + Signed-off-by: Mark Wielaard + +diff --git a/build/files.c b/build/files.c +index 791bbe2..86c601b 100644 +--- a/build/files.c ++++ b/build/files.c +@@ -1860,6 +1860,8 @@ static int generateBuildIDs(FileList fl) + Uses parseForAttr to reset ar, arFlags, and specdFlags. + Note that parseForAttr pokes at the attrstr, so we cannot + just pass a static string. */ ++ fl->cur.attrFlags = 0; ++ fl->def.attrFlags = 0; + fl->def.verifyFlags = RPMVERIFY_ALL; + fl->cur.verifyFlags = RPMVERIFY_ALL; + fl->def.specdFlags |= SPECD_VERIFY; + +diff --git a/tests/data/SPECS/hello-config-buildid.spec b/tests/data/SPECS/hello-config-buildid.spec +new file mode 100644 +index 0000000..ca2d30d +--- /dev/null ++++ b/tests/data/SPECS/hello-config-buildid.spec +@@ -0,0 +1,30 @@ ++Name: test ++Version: 1.0 ++Release: 1 ++Summary: Test ++ ++License: Public Domain ++URL: https://fedoraproject.org ++Source: hello.c ++ ++%description ++%{summary}. ++ ++%prep ++%autosetup -c -D -T ++cp -a %{S:0} . ++ ++%build ++gcc -g hello.c -o hello ++ ++%install ++mkdir -p %{buildroot}/bin ++install -D -p -m 0755 -t %{buildroot}/bin hello ++mkdir -p %{buildroot}/etc ++echo "settings" > %{buildroot}/etc/config.file ++ ++%files ++%attr(644,root,root) /bin/hello ++%config(noreplace) /etc/config.file ++ ++%changelog +diff --git a/tests/rpmbuildid.at b/tests/rpmbuildid.at +index 88ce226..4fab3d5 100644 +--- a/tests/rpmbuildid.at ++++ b/tests/rpmbuildid.at +@@ -1324,3 +1324,35 @@ run rpm -qp --qf "[[%{filenames} %{filemodes:perms}\n]]" \ + ], + [ignore]) + AT_CLEANUP ++ ++# ------------------------------ ++# Check that build-id directories are created with the right attributes ++# even if the spec file sets config explicitly. ++AT_SETUP([rpmbuild buildid config attrs]) ++AT_KEYWORDS([build] [debuginfo] [buildid]) ++AT_CHECK([ ++rm -rf ${TOPDIR} ++AS_MKDIR_P(${TOPDIR}/SOURCES) ++ ++# Setup sources ++cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES ++ ++# Build, contains one ELF which should have a buildid. ++run rpmbuild \ ++ --macros=${abs_top_builddir}/macros:${abs_top_builddir}/tests/testing/usr/local/lib/rpm/platform/%{_target_cpu}-%{_target_os}/macros:${top_srcdir}/macros.debug \ ++ --rcfile=${abs_top_builddir}/rpmrc \ ++ --define="_build_id_links compat" \ ++ --define "_unique_debug_names 1" \ ++ --define "_unique_debug_srcs 1" \ ++ --quiet -ba "${abs_srcdir}"/data/SPECS/hello-config-buildid.spec ++ ++# Should contain one config file. ++run rpm -c -qp ${abs_builddir}/testing/build/RPMS/*/test-1.0-1*rpm ++# Should not contain config files. ++run rpm -c -qp ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1*rpm ++], ++[0], ++[/etc/config.file ++], ++[ignore]) ++AT_CLEANUP + diff --git a/rpm.spec b/rpm.spec index 3ef91c1..b413bf7 100644 --- a/rpm.spec +++ b/rpm.spec @@ -33,7 +33,7 @@ Summary: The RPM package management system Name: rpm Version: %{rpmver} -Release: %{?snapver:0.%{snapver}.}22%{?dist} +Release: %{?snapver:0.%{snapver}.}23%{?dist} Group: System Environment/Base Url: http://www.rpm.org/ Source0: http://ftp.rpm.org/releases/%{srcdir}/%{name}-%{srcver}.tar.bz2 @@ -88,6 +88,7 @@ Patch270: 0021-debugedit-Fix-off-by-one-adding-DW_FORM_string-repla.patch Patch271: 0022-unbreak-short-circuit.patch Patch272: 0023-minisymtab-exe-sh.patch Patch273: 0024-no-recompute-build-id.patch +Patch274: 0025-buildid-reset-attrs.patch # World writable empty (tmp) dirs in debuginfo packages (#641022) Patch280: rpm-4.13.x-writable-tmp-dir.patch @@ -593,6 +594,9 @@ exit 0 %doc doc/librpm/html/* %changelog +* Tue May 30 2017 Mark Wielaard - 4.13.0.1-23 +- Fix resetting attr flags in buildid creation (#1449732) + * Tue May 23 2017 Panu Matilainen - 4.13.0.1-22 - Python dependency generators live in python-rpm-generators now (#1444925)