From: Timo Sirainen Date: Tue, 11 Apr 2023 08:01:15 +0000 (+0300) Subject: lib-storage: mail_parse_human_timestamp() - Add support for imap date-time X-Git-Tag: 2.4.0~2802 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c800a997ea971635231bffbbbbc76cfd455ab18a;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: mail_parse_human_timestamp() - Add support for imap date-time --- diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 40c17e1797..e72ad81580 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -3344,6 +3344,7 @@ int mail_parse_human_timestamp(const char *str, time_t *timestamp_r, struct tm tm; unsigned int secs; const char *error; + int tz; if (i_isdigit(str[0]) && i_isdigit(str[1]) && i_isdigit(str[2]) && i_isdigit(str[3]) && str[4] == '-' && @@ -3359,9 +3360,13 @@ int mail_parse_human_timestamp(const char *str, time_t *timestamp_r, *utc_r = TRUE; return 0; } else if (imap_parse_date(str, timestamp_r)) { - /* imap date */ + /* imap datetime */ *utc_r = FALSE; return 0; + } else if (imap_parse_datetime(str, timestamp_r, &tz)) { + /* imap datetime */ + *utc_r = TRUE; + return 0; } else if (str_to_time(str, timestamp_r) == 0) { /* unix timestamp */ *utc_r = TRUE; diff --git a/src/lib-storage/mail-storage.h b/src/lib-storage/mail-storage.h index b2895518a3..bf889ec4ac 100644 --- a/src/lib-storage/mail-storage.h +++ b/src/lib-storage/mail-storage.h @@ -1026,8 +1026,8 @@ void mail_generate_guid_128_hash(const char *guid, guid_128_t guid_128_r); Returns 0 and timestamp on success, -1 if the string couldn't be parsed. Currently supported string formats: yyyy-mm-dd (utc=FALSE), - imap date (utc=FALSE), unix timestamp (utc=TRUE), interval (e.g. n days, - utc=TRUE). */ + imap date (utc=FALSE), imap date-time (utc=TRUE), unix timestamp (utc=TRUE), + interval (e.g. n days, utc=TRUE). */ int mail_parse_human_timestamp(const char *str, time_t *timestamp_r, bool *utc_r); diff --git a/src/lib-storage/test-mail-storage.c b/src/lib-storage/test-mail-storage.c index a10cb07361..3e728678a6 100644 --- a/src/lib-storage/test-mail-storage.c +++ b/src/lib-storage/test-mail-storage.c @@ -15,6 +15,8 @@ static const struct test_globals { { "2022-01-21", 1642723200, TRUE }, /* IMAP date */ { "21-Jan-2022", 1642723200, FALSE }, + /* IMAP datetime */ + { "21-Jan-2022 10:00:00 +0300", 1642723200 + 7*3600, TRUE }, /* UNIX timestamp */ { "1642723200", 1642723200, TRUE }, }; @@ -644,7 +646,7 @@ static void test_mail_parse_human_timestamp(void) time_t timestamp; bool is_utc; - test_begin("mail_parse_human_timestamp"); + test_begin("mail_parse_human_timestamp()"); for (unsigned int i = 0; i < N_ELEMENTS(human_timestamp_tests); i++) { ret = mail_parse_human_timestamp(human_timestamp_tests[i].str,