diff options
author | Roger Dingledine <arma@torproject.org> | 2017-09-13 23:19:04 -0400 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2017-09-14 03:02:37 -0400 |
commit | eb429232ef11f15f8a9f2ad60cc106103648a525 (patch) | |
tree | 5ce7f7a428b20ad6e486aeb33a045a11b07f5129 /src/or/directory.c | |
parent | dcd0aea85e9315c53a6b70a4a2b62ec65d539896 (diff) | |
download | tor-eb429232ef11f15f8a9f2ad60cc106103648a525.tar.gz tor-eb429232ef11f15f8a9f2ad60cc106103648a525.zip |
Make dir servers include a "Date:" http header more often
Directory servers now include a "Date:" http header for response
codes other than 200. Clients starting with a skewed clock and a
recent consensus were getting "304 Not modified" responses from
directory authorities, so without a Date header the client would
never hear about a wrong clock.
Fixes bug 23499; bugfix on 0.0.8rc1.
Diffstat (limited to 'src/or/directory.c')
-rw-r--r-- | src/or/directory.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/or/directory.c b/src/or/directory.c index 9551b41556..0c79b4659a 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -3479,14 +3479,28 @@ static void write_http_status_line(dir_connection_t *conn, int status, const char *reason_phrase) { - char buf[256]; - if (!reason_phrase) + char buf[256+RFC1123_TIME_LEN+1]; + char *datestring = NULL; + + if (!reason_phrase) { /* bullet-proofing */ reason_phrase = "unspecified"; - if (tor_snprintf(buf, sizeof(buf), "HTTP/1.0 %d %s\r\n\r\n", - status, reason_phrase) < 0) { + } + + if (server_mode(get_options())) { + /* include the Date: header, but only if we're a relay or bridge */ + char datebuf[RFC1123_TIME_LEN+1]; + format_rfc1123_time(datebuf, time(NULL)); + tor_asprintf(&datestring, "Date: %s\r\n", datebuf); + } + + if (tor_snprintf(buf, sizeof(buf), "HTTP/1.0 %d %s\r\n%s\r\n", + status, reason_phrase, datestring?datestring:"") < 0) { log_warn(LD_BUG,"status line too long."); + tor_free(datestring); return; } + tor_free(datestring); + log_debug(LD_DIRSERV,"Wrote status 'HTTP/1.0 %d %s'", status, reason_phrase); connection_buf_add(buf, strlen(buf), TO_CONN(conn)); } |