Skip to content

Commit

Permalink
[settings] Add "unixtime" builtin setting to expose the current time
Browse files Browse the repository at this point in the history
Expose the current wall-clock time (in seconds since the Epoch), since
this is often useful in captured boot logs and can also be useful when
checking unexpected X.509 certificate validation failures.

Use a :uint32 setting to avoid Y2K38 rollover, thereby ensuring that
this will eventually be somebody else's problem.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Jan 26, 2017
1 parent 0bfe9f5 commit 41f786c
Showing 1 changed file with 33 additions and 0 deletions.
33 changes: 33 additions & 0 deletions src/core/settings.c
Expand Up @@ -31,6 +31,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <byteswap.h>
#include <errno.h>
#include <assert.h>
#include <time.h>
#include <ipxe/in.h>
#include <ipxe/ip.h>
#include <ipxe/ipv6.h>
Expand Down Expand Up @@ -2552,6 +2553,38 @@ struct builtin_setting version_builtin_setting __builtin_setting = {
.fetch = version_fetch,
};

/**
* Fetch current time setting
*
* @v data Buffer to fill with setting data
* @v len Length of buffer
* @ret len Length of setting data, or negative error
*/
static int unixtime_fetch ( void *data, size_t len ) {
uint32_t content;

/* Return current time */
content = htonl ( time(NULL) );
if ( len > sizeof ( content ) )
len = sizeof ( content );
memcpy ( data, &content, len );
return sizeof ( content );
}

/** Current time setting */
const struct setting unixtime_setting __setting ( SETTING_MISC, unixtime ) = {
.name = "unixtime",
.description = "Seconds since the Epoch",
.type = &setting_type_uint32,
.scope = &builtin_scope,
};

/** Current time built-in setting */
struct builtin_setting unixtime_builtin_setting __builtin_setting = {
.setting = &unixtime_setting,
.fetch = unixtime_fetch,
};

/**
* Fetch built-in setting
*
Expand Down

0 comments on commit 41f786c

Please sign in to comment.