commit eb5bdfc0f9980991a49151e9bb513f0e83b489e1 Author: Will Drewry wad@chromium.org Date: Fri Sep 13 15:57:10 2013 -0500
tlsdate: add optional --showtime support for "raw"
Add support for optional arguments to --showtime, "raw" and "human".
Human readable output is what --showtime and -V do already. Passing in --showtime=raw will tell tlsdate-helper to write the raw unix time directly to stdout in host byte order.
The purpose of this change is to provide easier integration of privilege isolation for time setting. If tlsdate is called from a wrapper, like tlsdated, it should be possible to pass the time back to a privileged time-setter with the minimum of needed parsing. --- src/tlsdate-helper.c | 7 +++++++ src/tlsdate.c | 7 ++++--- src/tlsdate.h | 1 + 3 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/src/tlsdate-helper.c b/src/tlsdate-helper.c index cd44c97..4058f5e 100644 --- a/src/tlsdate-helper.c +++ b/src/tlsdate-helper.c @@ -1071,6 +1071,7 @@ main(int argc, char **argv) uint32_t server_time_s; int setclock; int showtime; + int showtime_raw; int timewarp; int leap;
@@ -1085,6 +1086,7 @@ main(int argc, char **argv) verbose = (0 != strcmp ("quiet", argv[5])); setclock = (0 == strcmp ("setclock", argv[7])); showtime = (0 == strcmp ("showtime", argv[8])); + showtime_raw = (0 == strcmp ("showtime=raw", argv[8])); timewarp = (0 == strcmp ("timewarp", argv[9])); leap = (0 == strcmp ("leapaway", argv[10])); proxy = (0 == strcmp ("none", argv[11]) ? NULL : argv[11]); @@ -1205,6 +1207,11 @@ main(int argc, char **argv) "server or run it again\n", TLS_RTT_THRESHOLD); }
+ if (showtime_raw) + { + fwrite(&server_time_s, sizeof(server_time_s), 1, stdout); + } + if (showtime) { struct tm ltm; diff --git a/src/tlsdate.c b/src/tlsdate.c index c8bc09c..c19ef69 100644 --- a/src/tlsdate.c +++ b/src/tlsdate.c @@ -91,7 +91,7 @@ usage(void) " [-P|--protocol] [sslv23|sslv3|tlsv1]\n" " [-C|--certcontainer] [dirname|filename]\n" " [-v|--verbose]\n" - " [-V|--showtime]\n" + " [-V|--showtime] [human|raw]\n" " [-t|--timewarp]\n" " [-l|--leap]\n" " [-x|--proxy] [url]\n"); @@ -132,7 +132,7 @@ main(int argc, char **argv) static struct option long_options[] = { {"verbose", 0, 0, 'v'}, - {"showtime", 0, 0, 'V'}, + {"showtime", 2, 0, 'R'}, {"skip-verification", 0, 0, 's'}, {"help", 0, 0, 'h'}, {"host", 0, 0, 'H'}, @@ -154,6 +154,7 @@ main(int argc, char **argv) switch (c) { case 'v': verbose = 1; break; case 'V': showtime = 1; break; + case 'R': showtime = (optarg && 0 == strcmp("raw", optarg) ? 2:1); break; case 's': ca_racket = 0; break; case 'h': usage(); exit(1); break; case 'H': host = optarg; break; @@ -190,7 +191,7 @@ main(int argc, char **argv) (verbose ? "verbose" : "quiet"), ca_cert_container, (setclock ? "setclock" : "dont-set-clock"), - (showtime ? "showtime" : "no-showtime"), + (showtime ? (showtime == 2 ? "showtime=raw" : "showtime") : "no-showtime"), (timewarp ? "timewarp" : "no-fun"), (leap ? "leapaway" : "holdfast"), (proxy ? proxy : "none"), diff --git a/src/tlsdate.h b/src/tlsdate.h index 978396d..ccd8e51 100644 --- a/src/tlsdate.h +++ b/src/tlsdate.h @@ -14,6 +14,7 @@ #include <stdint.h> #include <stdio.h> #include <stdlib.h> +#include <string.h> #include <getopt.h> #include <time.h> #include <unistd.h>