From c8c9f0bafbf42e5ea74c74e51318435749005260 Mon Sep 17 00:00:00 2001 From: u5surf Date: Fri, 7 Feb 2025 20:58:18 +0900 Subject: [PATCH] Add variables for ISO8601 format for ssl_client_v_start/end #477 --- src/core/ngx_core.h | 2 +- src/event/ngx_event_openssl.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/core/ngx_core.h b/src/core/ngx_core.h index 02890b843..34960757e 100644 --- a/src/core/ngx_core.h +++ b/src/core/ngx_core.h @@ -104,7 +104,7 @@ typedef void (*ngx_connection_handler_pt)(ngx_connection_t *c); #define LF (u_char) '\n' #define CR (u_char) '\r' #define CRLF "\r\n" - +#define ngx_ascii_is_digit(c) (c >= 0x30 && c <= 0x39) #define ngx_abs(value) (((value) >= 0) ? (value) : - (value)) #define ngx_max(val1, val2) ((val1 < val2) ? (val2) : (val1)) diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c index 0681ca3a2..f5f8ff5a8 100644 --- a/src/event/ngx_event_openssl.c +++ b/src/event/ngx_event_openssl.c @@ -5755,6 +5755,40 @@ ngx_ssl_get_client_v_start(ngx_connection_t *c, ngx_pool_t *pool, ngx_str_t *s) return NGX_OK; } +ngx_int_t +ngx_ssl_print_time(BIO *bio, ASN1_TIME *tm, long flag) +{ + ngx_int_t ret; + struct tm stm; + const char period = 0x2E; + int l, f_len; + char *v, *f; + + ret = ASN1_TIME_to_tm(tm, &stm); + if (ret != NGX_OK) { + return ret; + } + + l = tm->length; + v = (char *)tm->data; + f = NULL; + f_len = 0; + + if (tm->length > 15 && v[14] == period) { + f = &v[15]; + while(15 + f_len < l && ngx_ascii_is_digit(f[f_len])) + ++f_len; + } + if (flag) { + BIO_printf(bio, "%4d-%02d-%02d %02d:%02d:%02d.%.*sZ", + stm.tm_year + 1900, stm.tm_mon + 1, + stm.tm_mday, stm.tm_hour, + stm.tm_min, stm.tm_sec, f_len, f); + } else { + ASN1_TIME_print(bio, tm); + } + return NGX_OK; +} ngx_int_t ngx_ssl_get_client_v_end(ngx_connection_t *c, ngx_pool_t *pool, ngx_str_t *s)