diff options
Diffstat (limited to 'src')
-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)); } |