From 95f1260cfd0cd468098e5cf047e0063fdddc2e21 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Mon, 9 Oct 2017 13:27:45 +0200 Subject: [PATCH] Make build of nscd reproducible --- glibc-nscd-reproducible.patch | 70 +++++++++++++++++++++++++++++++++++ glibc.spec | 3 ++ 2 files changed, 73 insertions(+) create mode 100644 glibc-nscd-reproducible.patch diff --git a/glibc-nscd-reproducible.patch b/glibc-nscd-reproducible.patch new file mode 100644 index 0000000..05ba7f2 --- /dev/null +++ b/glibc-nscd-reproducible.patch @@ -0,0 +1,70 @@ +commit 1e9522c61c7a544d59db32cb7fbbd42e6793d848 +Author: Florian Weimer +Date: Thu Oct 5 18:14:27 2017 +0200 + + nscd: Eliminate compilation time dependency in the build output + + Reviewed-by: Carlos O'Donell + +diff --git a/nscd/nscd_stat.c b/nscd/nscd_stat.c +index feb1c98ac31edcb8..b1bc81bd6d7d7fd1 100644 +--- a/nscd/nscd_stat.c ++++ b/nscd/nscd_stat.c +@@ -35,9 +35,23 @@ + # include + #endif /* HAVE_SELINUX */ + ++/* We use this to make sure the receiver is the same. The lower 16 ++ bits are reserved for flags indicating compilation variants. This ++ version needs to be updated if the definition of struct statdata ++ changes. */ ++#define STATDATA_VERSION 0x01020000U + +-/* We use this to make sure the receiver is the same. */ +-static const char compilation[21] = __DATE__ " " __TIME__; ++#ifdef HAVE_SELINUX ++# define STATDATA_VERSION_SELINUX_FLAG 0x0001U ++#else ++# define STATDATA_VERSION_SELINUX_FLAG 0x0000U ++#endif ++ ++/* All flags affecting the struct statdata layout. */ ++#define STATDATA_VERSION_FLAGS STATDATA_VERSION_SELINUX_FLAG ++ ++/* The full version number for struct statdata. */ ++#define STATDATA_VERSION_FULL (STATDATA_VERSION | STATDATA_VERSION_FLAGS) + + /* Statistic data for one database. */ + struct dbstat +@@ -68,10 +82,11 @@ struct dbstat + uintmax_t addfailed; + }; + +-/* Record for transmitting statistics. */ ++/* Record for transmitting statistics. If this definition changes, ++ update STATDATA_VERSION above. */ + struct statdata + { +- char version[sizeof (compilation)]; ++ unsigned int version; /* Must be STATDATA_VERSION_FULL. */ + int debug_level; + time_t runtime; + unsigned long int client_queued; +@@ -96,7 +111,7 @@ send_stats (int fd, struct database_dyn dbs[lastdb]) + + memset (&data, 0, sizeof (data)); + +- memcpy (data.version, compilation, sizeof (compilation)); ++ data.version = STATDATA_VERSION_FULL; + data.debug_level = debug_level; + data.runtime = time (NULL) - start_time; + data.client_queued = client_queued; +@@ -196,7 +211,7 @@ receive_print_stats (void) + + /* Read as much data as we expect. */ + if (TEMP_FAILURE_RETRY (read (fd, &data, sizeof (data))) != sizeof (data) +- || (memcmp (data.version, compilation, sizeof (compilation)) != 0 ++ || (data.version != STATDATA_VERSION_FULL + /* Yes, this is an assignment! */ + && (errno = EINVAL))) + { diff --git a/glibc.spec b/glibc.spec index 5ac3f73..24e64cb 100644 --- a/glibc.spec +++ b/glibc.spec @@ -286,6 +286,8 @@ Patch2110: glibc-rh1351108-update-to-unicode-9.0.0.patch # sln implemented by ldconfig, to conserve disk space. Patch2112: glibc-rh1315476-2.patch +Patch61: glibc-nscd-reproducible.patch + ############################################################################## # End of glibc patches. ############################################################################## @@ -879,6 +881,7 @@ microbenchmark tests on the system. %patch2037 -p1 %patch2110 -p1 %patch2112 -p1 +%patch61 -p1 ############################################################################## # %%prep - Additional prep required...