forked from pool/dc3dd
Add reproducible.patch to allow for reproducible builds added upstream bug link OBS-URL: https://build.opensuse.org/request/show/450974 OBS-URL: https://build.opensuse.org/package/show/security:forensics/dc3dd?expand=0&rev=7
68 lines
2.4 KiB
Diff
68 lines
2.4 KiB
Diff
Index: root/osc/openSUSE:Factory/dc3dd/dc3dd-7.2.641/man/help2man
|
|
===================================================================
|
|
--- dc3dd-7.2.641/man/help2man
|
|
+++ dc3dd-7.2.641/man/help2man
|
|
@@ -242,7 +242,7 @@ $version_text ||= get_option_value $ARGV
|
|
# the English version expands to the month as a word and the full year. It
|
|
# is used on the footer of the generated manual pages. If in doubt, you may
|
|
# just use %x as the value (which should be the full locale-specific date).
|
|
-my $date = enc strftime _("%B %Y"), localtime;
|
|
+my $date = enc strftime _("%B %Y"), gmtime($ENV{SOURCE_DATE_EPOCH} || time);
|
|
(my $program = $ARGV[0]) =~ s!.*/!!;
|
|
my $package = $program;
|
|
my $version;
|
|
Index: root/osc/openSUSE:Factory/dc3dd/dc3dd-7.2.641/src/dc3dd.c
|
|
===================================================================
|
|
--- dc3dd-7.2.641/src/dc3dd.c
|
|
+++ dc3dd-7.2.641/src/dc3dd.c
|
|
@@ -637,13 +637,48 @@ report_error(int status, int errnum, con
|
|
usage(status);
|
|
}
|
|
|
|
+time_t reproducible_time()
|
|
+{
|
|
+ time_t now;
|
|
+ char *source_date_epoch;
|
|
+ unsigned long long epoch;
|
|
+ char *endptr;
|
|
+
|
|
+ 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 {
|
|
+ now = time(NULL);
|
|
+ }
|
|
+ return now;
|
|
+}
|
|
+
|
|
// End code copied (and modified) from ../lib/error.c
|
|
|
|
static char*
|
|
get_formatted_time_string()
|
|
{
|
|
// Get the current local time.
|
|
- time_t t = time(NULL);
|
|
+ time_t t = reproducible_time();
|
|
struct tm tm;
|
|
struct tm* ret = localtime_r(&t, &tm);
|
|
if (ret == NULL)
|