Mercurial > hg > nginx-quic
view src/os/unix/ngx_time.c @ 5396:42f874c0b970
Mail: added session close on smtp_greeting_delay violation.
A server MUST send greeting before other replies, while before this
change in case of smtp_greeting_delay violation the 220 greeting was
sent after several 503 replies to commands received before greeting,
resulting in protocol synchronization loss. Moreover, further commands
were accepted after the greeting.
While closing a connection isn't strictly RFC compliant (RFC 5321
requires servers to wait for a QUIT before closing a connection), it's
probably good enough for practial uses.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 30 Sep 2013 22:09:50 +0400 |
parents | d620f497c50f |
children |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #include <ngx_config.h> #include <ngx_core.h> /* * FreeBSD does not test /etc/localtime change, however, we can workaround it * by calling tzset() with TZ and then without TZ to update timezone. * The trick should work since FreeBSD 2.1.0. * * Linux does not test /etc/localtime change in localtime(), * but may stat("/etc/localtime") several times in every strftime(), * therefore we use it to update timezone. * * Solaris does not test /etc/TIMEZONE change too and no workaround available. */ void ngx_timezone_update(void) { #if (NGX_FREEBSD) if (getenv("TZ")) { return; } putenv("TZ=UTC"); tzset(); unsetenv("TZ"); tzset(); #elif (NGX_LINUX) time_t s; struct tm *t; char buf[4]; s = time(0); t = localtime(&s); strftime(buf, 4, "%H", t); #endif } void ngx_localtime(time_t s, ngx_tm_t *tm) { #if (NGX_HAVE_LOCALTIME_R) (void) localtime_r(&s, tm); #else ngx_tm_t *t; t = localtime(&s); *tm = *t; #endif tm->ngx_tm_mon++; tm->ngx_tm_year += 1900; } void ngx_libc_localtime(time_t s, struct tm *tm) { #if (NGX_HAVE_LOCALTIME_R) (void) localtime_r(&s, tm); #else struct tm *t; t = localtime(&s); *tm = *t; #endif } void ngx_libc_gmtime(time_t s, struct tm *tm) { #if (NGX_HAVE_LOCALTIME_R) (void) gmtime_r(&s, tm); #else struct tm *t; t = gmtime(&s); *tm = *t; #endif }