From 3590d05ae837b2b6146106a8521913299379559b Mon Sep 17 00:00:00 2001 From: Mathias Kresin Date: Sat, 5 Jan 2019 07:34:02 +0100 Subject: [PATCH] firmware-utils: mkdlinkfw: create reproducible header Use the SOURCE_DATE_EPOCH environment variable if set instead of the current time. The used timestamp matches the timestamp of the latest commit this way and make the images reproducible. Signed-off-by: Mathias Kresin --- src/mkdlinkfw-lib.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/mkdlinkfw-lib.c b/src/mkdlinkfw-lib.c index a661c0b..3b71fda 100644 --- a/src/mkdlinkfw-lib.c +++ b/src/mkdlinkfw-lib.c @@ -34,9 +34,24 @@ extern char *progname; uint32_t jboot_timestamp(void) { - time_t rawtime; - time(&rawtime); - return (((uint32_t) rawtime) - TIMESTAMP_MAGIC) >> 2; + char *env = getenv("SOURCE_DATE_EPOCH"); + char *endptr = env; + time_t fixed_timestamp = -1; + errno = 0; + + if (env && *env) { + fixed_timestamp = strtoull(env, &endptr, 10); + + if (errno || (endptr && *endptr != '\0')) { + fprintf(stderr, "Invalid SOURCE_DATE_EPOCH"); + fixed_timestamp = -1; + } + } + + if (fixed_timestamp == -1) + time(&fixed_timestamp); + + return (((uint32_t) fixed_timestamp) - TIMESTAMP_MAGIC) >> 2; } uint16_t jboot_checksum(uint16_t start_val, uint16_t *data, int size) -- 2.30.2