|
Igor Gnatenko |
082d5d |
From 651264c51dfb13bf78bb969a429719f301497631 Mon Sep 17 00:00:00 2001
|
|
Igor Gnatenko |
082d5d |
From: Mark Wielaard <mark@klomp.org>
|
|
Igor Gnatenko |
082d5d |
Date: Wed, 15 Mar 2017 20:07:29 +0100
|
|
Mark Wielaard |
284dc3 |
Subject: [PATCH] Make sure to reset file attributes for generated build-id
|
|
Mark Wielaard |
284dc3 |
directories.
|
|
Mark Wielaard |
117a78 |
|
|
Igor Gnatenko |
082d5d |
[Note this patch is currently being tested in Fedora. See bug below.]
|
|
Mark Wielaard |
117a78 |
|
|
Igor Gnatenko |
082d5d |
When creating the build-id directories we should reset the file attributes
|
|
Igor Gnatenko |
082d5d |
to the defaults. Otherwise if the file list contained an %attr or %defattr
|
|
Igor Gnatenko |
082d5d |
the directories would come out with the wrong mode.
|
|
Mark Wielaard |
117a78 |
|
|
Igor Gnatenko |
082d5d |
Includes a testcase based on a spec by Igor Gnatenko that fails before
|
|
Igor Gnatenko |
082d5d |
and Check that build-id directories are created with the right permissions
|
|
Igor Gnatenko |
082d5d |
even if the spec file sets attrs explicitly.
|
|
Igor Gnatenko |
082d5d |
|
|
Igor Gnatenko |
082d5d |
https://bugzilla.redhat.com/show_bug.cgi?id=1432372
|
|
Igor Gnatenko |
082d5d |
|
|
Igor Gnatenko |
082d5d |
Signed-off-by: Mark Wielaard <mark@klomp.org>
|
|
Igor Gnatenko |
082d5d |
(cherry picked from commit b91dc6106e360f13ff365dfac247191942039152)
|
|
Igor Gnatenko |
082d5d |
---
|
|
Igor Gnatenko |
082d5d |
build/files.c | 21 +++++++++++++++++++
|
|
Igor Gnatenko |
082d5d |
tests/Makefile.am | 2 ++
|
|
Igor Gnatenko |
082d5d |
tests/data/SOURCES/hello.c | 8 +++++++
|
|
Igor Gnatenko |
082d5d |
tests/data/SPECS/hello-attr-buildid.spec | 27 ++++++++++++++++++++++++
|
|
Igor Gnatenko |
082d5d |
tests/rpmbuildid.at | 36 ++++++++++++++++++++++++++++++++
|
|
Igor Gnatenko |
082d5d |
5 files changed, 94 insertions(+)
|
|
Igor Gnatenko |
082d5d |
create mode 100644 tests/data/SOURCES/hello.c
|
|
Igor Gnatenko |
082d5d |
create mode 100644 tests/data/SPECS/hello-attr-buildid.spec
|
|
Igor Gnatenko |
082d5d |
|
|
Igor Gnatenko |
082d5d |
diff --git a/build/files.c b/build/files.c
|
|
Igor Gnatenko |
082d5d |
index fef0c6960..728a44ba2 100644
|
|
Igor Gnatenko |
082d5d |
--- a/build/files.c
|
|
Igor Gnatenko |
082d5d |
+++ b/build/files.c
|
|
Igor Gnatenko |
082d5d |
@@ -1770,6 +1770,7 @@ static int generateBuildIDs(FileList fl)
|
|
Igor Gnatenko |
082d5d |
char *mainiddir = NULL;
|
|
Igor Gnatenko |
082d5d |
char *debugiddir = NULL;
|
|
Igor Gnatenko |
082d5d |
if (rc == 0) {
|
|
Igor Gnatenko |
082d5d |
+ char *attrstr;
|
|
Igor Gnatenko |
082d5d |
/* Add .build-id directories to hold the subdirs/symlinks. */
|
|
Igor Gnatenko |
082d5d |
#define BUILD_ID_DIR "/usr/lib/.build-id"
|
|
Igor Gnatenko |
082d5d |
#define DEBUG_ID_DIR "/usr/lib/debug/.build-id"
|
|
Igor Gnatenko |
082d5d |
@@ -1777,6 +1778,18 @@ static int generateBuildIDs(FileList fl)
|
|
Igor Gnatenko |
082d5d |
mainiddir = rpmGetPath(fl->buildRoot, BUILD_ID_DIR, NULL);
|
|
Igor Gnatenko |
082d5d |
debugiddir = rpmGetPath(fl->buildRoot, DEBUG_ID_DIR, NULL);
|
|
Igor Gnatenko |
082d5d |
|
|
Igor Gnatenko |
082d5d |
+ /* Make sure to reset all file flags to defaults.
|
|
Igor Gnatenko |
082d5d |
+ Uses parseForAttr to reset ar, arFlags, and specdFlags.
|
|
Igor Gnatenko |
082d5d |
+ Note that parseForAttr pokes at the attrstr, so we cannot
|
|
Igor Gnatenko |
082d5d |
+ just pass a static string. */
|
|
Igor Gnatenko |
082d5d |
+ fl->def.verifyFlags = RPMVERIFY_ALL;
|
|
Igor Gnatenko |
082d5d |
+ fl->cur.verifyFlags = RPMVERIFY_ALL;
|
|
Igor Gnatenko |
082d5d |
+ fl->def.specdFlags |= SPECD_VERIFY;
|
|
Igor Gnatenko |
082d5d |
+ fl->cur.specdFlags |= SPECD_VERIFY;
|
|
Igor Gnatenko |
082d5d |
+ attrstr = xstrdup ("%defattr(-,root,root)");
|
|
Igor Gnatenko |
082d5d |
+ parseForAttr(fl->pool, attrstr, 1, &fl->def);
|
|
Igor Gnatenko |
082d5d |
+ free (attrstr);
|
|
Igor Gnatenko |
082d5d |
+
|
|
Igor Gnatenko |
082d5d |
/* Supported, but questionable. */
|
|
Igor Gnatenko |
082d5d |
if (needMain && needDbg)
|
|
Igor Gnatenko |
082d5d |
rpmlog(RPMLOG_WARNING,
|
|
Igor Gnatenko |
082d5d |
@@ -1786,8 +1799,12 @@ static int generateBuildIDs(FileList fl)
|
|
Igor Gnatenko |
082d5d |
if ((rc = rpmioMkpath(mainiddir, 0755, -1, -1)) != 0) {
|
|
Igor Gnatenko |
082d5d |
rpmlog(RPMLOG_ERR, "%s %s: %m\n", errdir, mainiddir);
|
|
Igor Gnatenko |
082d5d |
} else {
|
|
Igor Gnatenko |
082d5d |
+ rasprintf (&attrstr, "%s %s", "%attr(-,root,root) ",
|
|
Igor Gnatenko |
082d5d |
+ mainiddir);
|
|
Igor Gnatenko |
082d5d |
+ parseForAttr(fl->pool, attrstr, 0, &fl->cur);
|
|
Igor Gnatenko |
082d5d |
fl->cur.isDir = 1;
|
|
Igor Gnatenko |
082d5d |
rc = addFile(fl, mainiddir, NULL);
|
|
Igor Gnatenko |
082d5d |
+ free (attrstr);
|
|
Igor Gnatenko |
082d5d |
}
|
|
Igor Gnatenko |
082d5d |
}
|
|
Igor Gnatenko |
082d5d |
|
|
Igor Gnatenko |
082d5d |
@@ -1795,8 +1812,12 @@ static int generateBuildIDs(FileList fl)
|
|
Igor Gnatenko |
082d5d |
if ((rc = rpmioMkpath(debugiddir, 0755, -1, -1)) != 0) {
|
|
Igor Gnatenko |
082d5d |
rpmlog(RPMLOG_ERR, "%s %s: %m\n", errdir, debugiddir);
|
|
Igor Gnatenko |
082d5d |
} else {
|
|
Igor Gnatenko |
082d5d |
+ rasprintf (&attrstr, "%s %s", "%attr(-,root,root) ",
|
|
Igor Gnatenko |
082d5d |
+ debugiddir);
|
|
Igor Gnatenko |
082d5d |
+ parseForAttr(fl->pool, attrstr, 0, &fl->cur);
|
|
Igor Gnatenko |
082d5d |
fl->cur.isDir = 1;
|
|
Igor Gnatenko |
082d5d |
rc = addFile(fl, debugiddir, NULL);
|
|
Igor Gnatenko |
082d5d |
+ free (attrstr);
|
|
Igor Gnatenko |
082d5d |
}
|
|
Igor Gnatenko |
082d5d |
}
|
|
Igor Gnatenko |
082d5d |
}
|
|
Mark Wielaard |
117a78 |
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
|
Igor Gnatenko |
082d5d |
index 10555ce9a..d9586da1d 100644
|
|
Mark Wielaard |
117a78 |
--- a/tests/Makefile.am
|
|
Mark Wielaard |
117a78 |
+++ b/tests/Makefile.am
|
|
Igor Gnatenko |
082d5d |
@@ -68,6 +68,8 @@ EXTRA_DIST += data/RPMS/hello-2.0-1.i686.rpm
|
|
Mark Wielaard |
117a78 |
EXTRA_DIST += data/RPMS/hello-2.0-1.x86_64.rpm
|
|
Mark Wielaard |
117a78 |
EXTRA_DIST += data/SRPMS/foo-1.0-1.src.rpm
|
|
Mark Wielaard |
117a78 |
EXTRA_DIST += data/SRPMS/hello-1.0-1.src.rpm
|
|
Mark Wielaard |
117a78 |
+EXTRA_DIST += data/SOURCES/hello.c
|
|
Mark Wielaard |
117a78 |
+EXTRA_DIST += data/SPECS/hello-attr-buildid.spec
|
|
Mark Wielaard |
117a78 |
|
|
Mark Wielaard |
117a78 |
# testsuite voodoo
|
|
Mark Wielaard |
117a78 |
AUTOTEST = $(AUTOM4TE) --language=autotest
|
|
Mark Wielaard |
117a78 |
diff --git a/tests/data/SOURCES/hello.c b/tests/data/SOURCES/hello.c
|
|
Mark Wielaard |
117a78 |
new file mode 100644
|
|
Igor Gnatenko |
082d5d |
index 000000000..020484eed
|
|
Mark Wielaard |
117a78 |
--- /dev/null
|
|
Mark Wielaard |
117a78 |
+++ b/tests/data/SOURCES/hello.c
|
|
Mark Wielaard |
117a78 |
@@ -0,0 +1,8 @@
|
|
Mark Wielaard |
117a78 |
+#include <stdio.h>
|
|
Mark Wielaard |
117a78 |
+
|
|
Mark Wielaard |
117a78 |
+int
|
|
Mark Wielaard |
117a78 |
+main (void)
|
|
Mark Wielaard |
117a78 |
+{
|
|
Mark Wielaard |
117a78 |
+ printf ("Hello, world!\n");
|
|
Mark Wielaard |
117a78 |
+ return 0;
|
|
Mark Wielaard |
117a78 |
+}
|
|
Mark Wielaard |
117a78 |
diff --git a/tests/data/SPECS/hello-attr-buildid.spec b/tests/data/SPECS/hello-attr-buildid.spec
|
|
Mark Wielaard |
117a78 |
new file mode 100644
|
|
Igor Gnatenko |
082d5d |
index 000000000..cdab95fff
|
|
Mark Wielaard |
117a78 |
--- /dev/null
|
|
Mark Wielaard |
117a78 |
+++ b/tests/data/SPECS/hello-attr-buildid.spec
|
|
Mark Wielaard |
117a78 |
@@ -0,0 +1,27 @@
|
|
Mark Wielaard |
117a78 |
+Name: test
|
|
Mark Wielaard |
117a78 |
+Version: 1.0
|
|
Mark Wielaard |
117a78 |
+Release: 1
|
|
Mark Wielaard |
117a78 |
+Summary: Test
|
|
Mark Wielaard |
117a78 |
+
|
|
Mark Wielaard |
117a78 |
+License: Public Domain
|
|
Mark Wielaard |
117a78 |
+URL: https://fedoraproject.org
|
|
Mark Wielaard |
117a78 |
+Source: hello.c
|
|
Mark Wielaard |
117a78 |
+
|
|
Mark Wielaard |
117a78 |
+%description
|
|
Mark Wielaard |
117a78 |
+%{summary}.
|
|
Mark Wielaard |
117a78 |
+
|
|
Mark Wielaard |
117a78 |
+%prep
|
|
Mark Wielaard |
117a78 |
+%autosetup -c -D -T
|
|
Mark Wielaard |
117a78 |
+cp -a %{S:0} .
|
|
Mark Wielaard |
117a78 |
+
|
|
Mark Wielaard |
117a78 |
+%build
|
|
Mark Wielaard |
117a78 |
+gcc -g hello.c -o hello
|
|
Mark Wielaard |
117a78 |
+
|
|
Mark Wielaard |
117a78 |
+%install
|
|
Mark Wielaard |
117a78 |
+mkdir -p %{buildroot}%{_bindir}
|
|
Mark Wielaard |
117a78 |
+install -D -p -m 0755 -t %{buildroot}%{_bindir} hello
|
|
Mark Wielaard |
117a78 |
+
|
|
Mark Wielaard |
117a78 |
+%files
|
|
Mark Wielaard |
117a78 |
+%attr(644,root,root) %{_bindir}/hello
|
|
Mark Wielaard |
117a78 |
+
|
|
Mark Wielaard |
117a78 |
+%changelog
|
|
Mark Wielaard |
117a78 |
diff --git a/tests/rpmbuildid.at b/tests/rpmbuildid.at
|
|
Igor Gnatenko |
082d5d |
index 15c06202f..1cae26dbf 100644
|
|
Mark Wielaard |
117a78 |
--- a/tests/rpmbuildid.at
|
|
Mark Wielaard |
117a78 |
+++ b/tests/rpmbuildid.at
|
|
Mark Wielaard |
117a78 |
@@ -1166,3 +1166,39 @@ if test "$id1" == "$id2"; then echo "equal"; else echo "unequal $id1 $id2"; fi
|
|
Mark Wielaard |
117a78 |
],
|
|
Mark Wielaard |
117a78 |
[ignore])
|
|
Mark Wielaard |
117a78 |
AT_CLEANUP
|
|
Mark Wielaard |
117a78 |
+
|
|
Mark Wielaard |
117a78 |
+# ------------------------------
|
|
Mark Wielaard |
117a78 |
+# Check that build-id directories are created with the right permissions
|
|
Mark Wielaard |
117a78 |
+# even if the spec file sets attrs explicitly.
|
|
Mark Wielaard |
117a78 |
+AT_SETUP([rpmbuild buildid attrs])
|
|
Mark Wielaard |
117a78 |
+AT_KEYWORDS([build] [debuginfo] [buildid])
|
|
Mark Wielaard |
117a78 |
+AT_CHECK([
|
|
Mark Wielaard |
117a78 |
+rm -rf ${TOPDIR}
|
|
Mark Wielaard |
117a78 |
+AS_MKDIR_P(${TOPDIR}/SOURCES)
|
|
Mark Wielaard |
117a78 |
+
|
|
Mark Wielaard |
117a78 |
+# Setup sources
|
|
Mark Wielaard |
117a78 |
+cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES
|
|
Mark Wielaard |
117a78 |
+
|
|
Mark Wielaard |
117a78 |
+# Build, contains one ELF which should have a buildid.
|
|
Mark Wielaard |
117a78 |
+run rpmbuild \
|
|
Mark Wielaard |
117a78 |
+ --macros=${abs_top_builddir}/macros:${abs_top_builddir}/tests/testing/usr/local/lib/rpm/platform/%{_target_cpu}-%{_target_os}/macros:${top_srcdir}/macros.debug \
|
|
Mark Wielaard |
117a78 |
+ --rcfile=${abs_top_builddir}/rpmrc \
|
|
Mark Wielaard |
117a78 |
+ --define="_build_id_links compat" \
|
|
Mark Wielaard |
117a78 |
+ --define "_unique_debug_names 1" \
|
|
Mark Wielaard |
117a78 |
+ --define "_unique_debug_srcs 1" \
|
|
Mark Wielaard |
117a78 |
+ --quiet -ba "${abs_srcdir}"/data/SPECS/hello-attr-buildid.spec
|
|
Mark Wielaard |
117a78 |
+
|
|
Mark Wielaard |
117a78 |
+run rpm -qp --qf "[[%{filenames} %{filemodes:perms}\n]]" \
|
|
Mark Wielaard |
117a78 |
+ ${abs_builddir}/testing/build/RPMS/*/test-1.0-1*rpm \
|
|
Mark Wielaard |
117a78 |
+ | grep "build-id d"
|
|
Mark Wielaard |
117a78 |
+
|
|
Mark Wielaard |
117a78 |
+run rpm -qp --qf "[[%{filenames} %{filemodes:perms}\n]]" \
|
|
Mark Wielaard |
117a78 |
+ ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1*rpm \
|
|
Mark Wielaard |
117a78 |
+ | grep "build-id d"
|
|
Mark Wielaard |
117a78 |
+],
|
|
Mark Wielaard |
117a78 |
+[0],
|
|
Mark Wielaard |
117a78 |
+[/usr/lib/.build-id drwxr-xr-x
|
|
Mark Wielaard |
117a78 |
+/usr/lib/debug/.build-id drwxr-xr-x
|
|
Mark Wielaard |
117a78 |
+],
|
|
Mark Wielaard |
117a78 |
+[ignore])
|
|
Mark Wielaard |
117a78 |
+AT_CLEANUP
|