You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.4 KiB
70 lines
2.4 KiB
commit 1e9522c61c7a544d59db32cb7fbbd42e6793d848 |
|
Author: Florian Weimer <fweimer@redhat.com> |
|
Date: Thu Oct 5 18:14:27 2017 +0200 |
|
|
|
nscd: Eliminate compilation time dependency in the build output |
|
|
|
Reviewed-by: Carlos O'Donell <carlos@redhat.com> |
|
|
|
diff --git a/nscd/nscd_stat.c b/nscd/nscd_stat.c |
|
index d7d351c663fa6fe6..27b914aa712e7b8d 100644 |
|
--- a/nscd/nscd_stat.c |
|
+++ b/nscd/nscd_stat.c |
|
@@ -35,9 +35,23 @@ |
|
# include <selinux/avc.h> |
|
#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))) |
|
{
|
|
|