teknoraver / rpms / rpm

Forked from rpms/rpm 4 months ago
Clone
Blob Blame History Raw
commit b91dc6106e360f13ff365dfac247191942039152
Author: Mark Wielaard <mark@klomp.org>
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 <mark@klomp.org>

[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 <stdio.h>
+
+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 <mark@klomp.org>
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 <mark@klomp.org>

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