From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 0E772E688 for ; Tue, 18 Jul 2023 18:01:08 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id EC4E51DE15 for ; Tue, 18 Jul 2023 18:01:07 +0200 (CEST) Received: from nena.proxmox.com (unknown [94.136.29.99]) by firstgate.proxmox.com (Proxmox) with ESMTP for ; Tue, 18 Jul 2023 18:01:04 +0200 (CEST) Received: by nena.proxmox.com (Postfix, from userid 1000) id 063372E5E48; Tue, 18 Jul 2023 18:01:04 +0200 (CEST) From: Mira Limbeck To: pmg-devel@lists.proxmox.com Date: Tue, 18 Jul 2023 18:01:00 +0200 Message-Id: <20230718160101.1070267-1-m.limbeck@proxmox.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.656 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods RDNS_NONE 0.793 Delivered to internal network by a host with no rDNS SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record T_SCC_BODY_TEXT_LINE -0.01 - URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [main.rs] Subject: [pmg-devel] [RFC log-tracker] rfc3339: move timezone offset compatibility code to X-BeenThere: pmg-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Mail Gateway development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Jul 2023 16:01:08 -0000 old time format parsing code The compatibility code was added to the new rfc3339 code path temporarily so that the old code path would not be changed before the PMG 8 release. Now move it to the old time format code to make sure the rfc3339 code path works as expected. Since we have all the information we need (year, month, day, hours, minutes, seconds, timezone), there's no need for a workaround in this code path. The change needs to be accompanied by one in pmg-api MailTracker.pmg to keep the time displayed in the GUI the same for the old time format, and correct for the new rfc3339 format. Signed-off-by: Mira Limbeck --- After talking to Dominik this might be best sent as an RFC for further discussions. As such I haven't touched the tests yet. This change requires changing all tests, including the new rfc3339 ones. Any code that uses the pmg-log-tracker directly may behave differently now, since the timestamps it outputs are different than before. src/main.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main.rs b/src/main.rs index e55f17b..67d804f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2255,11 +2255,11 @@ fn parse_time( cur_month: i64, timezone_offset: time_t, ) -> Option<(time_t, &'_ [u8])> { - parse_time_with_year(data, timezone_offset) - .or_else(|| parse_time_no_year(data, cur_year, cur_month)) + parse_time_with_year(data) + .or_else(|| parse_time_no_year(data, cur_year, cur_month, timezone_offset)) } -fn parse_time_with_year(data: &'_ [u8], timezone_offset: time_t) -> Option<(time_t, &'_ [u8])> { +fn parse_time_with_year(data: &'_ [u8]) -> Option<(time_t, &'_ [u8])> { let mut timestamp_buffer = [0u8; 25]; let count = data.iter().take_while(|b| **b != b' ').count(); @@ -2287,12 +2287,12 @@ fn parse_time_with_year(data: &'_ [u8], timezone_offset: time_t) -> Option<(time std::str::from_utf8_unchecked(×tamp_buffer[0..timestamp_len]) }) { // TODO handle timezone offset in old code path instead - Ok(ltime) => Some((ltime + timezone_offset, data)), + Ok(ltime) => Some((ltime, data)), Err(_err) => None, } } -fn parse_time_no_year(data: &'_ [u8], cur_year: i64, cur_month: i64) -> Option<(time_t, &'_ [u8])> { +fn parse_time_no_year(data: &'_ [u8], cur_year: i64, cur_month: i64, timezone_offset: time_t) -> Option<(time_t, &'_ [u8])> { if data.len() < 15 { return None; } @@ -2397,7 +2397,7 @@ fn parse_time_no_year(data: &'_ [u8], cur_year: i64, cur_month: i64) -> Option<( _ => &data[1..], }; - Some((ltime, data)) + Some((ltime - timezone_offset, data)) } type ByteSlice<'a> = &'a [u8]; -- 2.39.2