ZMailer Year 2000 Status

ZMailers since 2.98 (December 1994) have been ``Millenium Bug'' resistant by removing usage of user supplied date header parsed data, as such activity was not of any practical usefull value, and yet the users are able to submit "Date:" headers with invalid representations.

Previous versions did regenerate the "Date:" headers from that parse result with local timezone offset, and as the parse got things often wrong, so did that regeneration. On the other hand, that problem is merely cosmetical, as I think also of the entire "Date:" headers role.

All versions of ever existed ZMailers have generated "Date:"-like date and time presentations with full year value instead of abbreviating to two digits. Also, timezones are presented as offsets relative to UTC, if it can be determined.

Internally ZMailer uses UNIX time_t, which at the moment is usually a signed long (32-bits) representing seconds since epoch of January 1st, 1970, 00:00 UTC. This signed value overflows into negative side in early January 2038.

Solution to that UNIX Epoch Event problem is to use 64-bit signed integer type for that datatype, which very likely will be the norm by that time.


Y2K occurred, and what was seen ?

Some older systems have problems at figuring what the timezone is, when they generate DateTime presentations. Either they will display absolutely weird things, or use UTC time. (Nuisance) (RedHat 5.0, ZMailer 2.99.50 or thereabouts.)

Up and including 2.99.52-patch1 by 31-Dec-1999 the router does parse the Date: header, which result isn't used anywhere, but which work may cause the header to be marked ``bad'', and thus rewritten.. Also various incarnations of the date parser have had different approaches for the Y2K; earlier ones less successfull than newer, however the newer are somewhat fragile with extremely bad input. (Nuisance/Fatal Nuisance)

Easiest way to fix that parse ``problem'' is to use following kind of ``comment away'' method:

diff -u -r1.10 -r1.12
--- router/libdb/header.c       1999/12/04 01:17:28     1.10
+++ router/libdb/header.c       2000/01/03 13:28:13     1.12
@@ -48,8 +48,13 @@
 #if 0
 { "return-path",       AMailboxList,   nilUserType,    normal          },
 #endif
+#if 1
+{ "date",        nilHeaderSemantics,   nilUserType,    normal          },
+{ "resent-date", nilHeaderSemantics,   nilUserType,    Resent          },
+#else
 { "date",              DateTime,       nilUserType,    normal          },
 { "resent-date",       DateTime,       nilUserType,    Resent          },
+#endif
 { "encrypted",         Encrypted,      nilUserType,    normal          },
 { "errors-to",         AddressList,    Sender,         normal          },
 { "obsoletes",         MessageIDList,  nilUserType,    normal          },

... after all, parsing Date: header isn't very usefull at the MTA.


Matti Aarnio's email address is mea@nic.funet.fi, and another at matti.aarnio@sonera.fi