| diff -ruN htpdate/htpdate.c htpdate.new/htpdate.c |
| --- htpdate/htpdate.c 2010-05-19 11:27:53.000000000 -0700 |
| +++ htpdate.new/htpdate.c 2010-05-19 11:32:51.000000000 -0700 |
| @@ -75,6 +75,9 @@ |
| static int logmode = 0; |
| static time_t gmtoffset; |
| |
| +/* By default do not wait for valid http response to turn off settime */ |
| +static int waitfornw = 0; |
| +static int recvdvalidresp = 0; |
| |
| /* Insertion sort is more efficient (and smaller) than qsort for small lists */ |
| static void insertsort( int a[], int length ) { |
| @@ -263,6 +266,7 @@ |
| /* Look for the line that contains Date: */ |
| if ( (pdate = strstr(buffer, "Date: ")) != NULL ) { |
| strncpy(remote_time, pdate + 11, 24); |
| + recvdvalidresp = 1; |
| |
| if ( strptime( remote_time, "%d %b %Y %T", &tm) != NULL) { |
| /* Web server timestamps are without daylight saving */ |
| @@ -406,6 +410,7 @@ |
| -s set time\n\ |
| -t turn off sanity time check\n\ |
| -u run daemon as user\n\ |
| + -w wait for at least one valid http response before turning off set time\n\ |
| -x adjust kernel clock\n\ |
| host web server hostname or ip address (maximum of 16)\n\ |
| port port number (default 80 and 8080 for proxy server)\n"); |
| @@ -510,7 +515,7 @@ |
| |
| |
| /* Parse the command line switches and arguments */ |
| - while ( (param = getopt(argc, argv, "046abdhi:lm:p:qstu:xDM:P:") ) != -1) |
| + while ( (param = getopt(argc, argv, "046abdhi:lm:p:qstu:wxDM:P:") ) != -1) |
| switch( param ) { |
| |
| case '0': /* HTTP/1.0 */ |
| @@ -586,6 +591,9 @@ |
| } |
| } |
| break; |
| + case 'w': |
| + waitfornw = 1; |
| + break; |
| case 'x': /* adjust time and "kernel" */ |
| setmode = 3; |
| break; |
| @@ -815,7 +823,7 @@ |
| } |
| |
| /* After first poll cycle do not step through time, only adjust */ |
| - if ( setmode != 3 ) { |
| + if ( setmode != 3 && (!waitfornw || ( waitfornw && recvdvalidresp ))) { |
| setmode = 1; |
| } |
| |