summaryrefslogtreecommitdiffstats
path: root/debian/patches/0008-reproducible_build.diff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--debian/patches/0008-reproducible_build.diff68
1 files changed, 68 insertions, 0 deletions
diff --git a/debian/patches/0008-reproducible_build.diff b/debian/patches/0008-reproducible_build.diff
new file mode 100644
index 0000000..94d8b58
--- /dev/null
+++ b/debian/patches/0008-reproducible_build.diff
@@ -0,0 +1,68 @@
+From: Debian DNS Packaging <pkg-dns-devel@lists.alioth.debian.org>
+Date: Fri, 24 Nov 2017 16:26:54 +0000
+Subject: _reproducible_build
+
+---
+ lib/dns/gen.c | 35 +++++++++++++++++++++++++++++++++--
+ 1 file changed, 33 insertions(+), 2 deletions(-)
+
+diff --git a/lib/dns/gen.c b/lib/dns/gen.c
+index 2a3b94b..b26a509 100644
+--- a/lib/dns/gen.c
++++ b/lib/dns/gen.c
+@@ -32,6 +32,8 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <time.h>
++#include <errno.h>
++#include <limits.h>
+
+ #ifdef WIN32
+ #include "gen-win32.h"
+@@ -528,6 +530,9 @@ main(int argc, char **argv) {
+ char *prefix = NULL;
+ char *suffix = NULL;
+ char *file = NULL;
++ char *source_date_epoch;
++ unsigned long long epoch;
++ char *endptr;
+ isc_dir_t dir;
+
+ for (i = 0; i < TYPENAMES; i++)
+@@ -618,8 +623,34 @@ main(int argc, char **argv) {
+ INSIST(n > 0 && (unsigned)n < sizeof(srcdir));
+ sd(0, "", buf, filetype);
+
+- if (time(&now) != -1) {
+- if ((tm = localtime(&now)) != NULL && tm->tm_year > 104) {
++ source_date_epoch = getenv("SOURCE_DATE_EPOCH");
++ if (source_date_epoch) {
++ errno = 0;
++ epoch = strtoull(source_date_epoch, &endptr, 10);
++ if ((errno == ERANGE && (epoch == ULLONG_MAX || epoch == 0))
++ || (errno != 0 && epoch == 0)) {
++ fprintf(stderr, "Environment variable $SOURCE_DATE_EPOCH: strtoull: %s\n", strerror(errno));
++ exit(EXIT_FAILURE);
++ }
++ if (endptr == source_date_epoch) {
++ fprintf(stderr, "Environment variable $SOURCE_DATE_EPOCH: No digits were found: %s\n", endptr);
++ exit(EXIT_FAILURE);
++ }
++ if (*endptr != '\0') {
++ fprintf(stderr, "Environment variable $SOURCE_DATE_EPOCH: Trailing garbage: %s\n", endptr);
++ exit(EXIT_FAILURE);
++ }
++ if (epoch > ULONG_MAX) {
++ fprintf(stderr, "Environment variable $SOURCE_DATE_EPOCH: value must be smaller than or equal to: %lu but was found to be: %llu \n", ULONG_MAX, epoch);
++ exit(EXIT_FAILURE);
++ }
++ now = epoch;
++ } else {
++ time(&now);
++ }
++
++ if (now != -1) {
++ if ((tm = gmtime(&now)) != NULL && tm->tm_year > 104) {
+ n = snprintf(year, sizeof(year), "-%d",
+ tm->tm_year + 1900);
+ INSIST(n > 0 && (unsigned)n < sizeof(year));