Hi Ilja,Any chance you can produce a patch against 1.2-CVS? I'm not in a position to test a 2.0 release quite yet..
Thanks, Simon. Ilja Booij wrote:
Paul J Stevens wrote:I've created some code to fix the timezone issue. Basically it's a cleanup of the date_sql2imap() function. I've taken out all the magic, put a call to strptime() and strftime() in there, and all seems to be well. :)Simon,These both look like a valid bugs. Please file a report for both on the bugtracker and send us your patch for the missing timezone.String output handling in the imap code is a known issue. I'm working on a massive cleanup of that code. Could you please send me the actual IMAP command send by snappermail so I can add that one to my test-suite?It's simpler and returns the datetime + timezone: example (cut & paste from telnet imap session): a fetch 1 (INTERNALDATE) * 1 FETCH (INTERNALDATE "25-Aug-2004 17:08:06 +0100") a OK FETCH completed a fetch 2 (INTERNALDATE) * 2 FETCH (INTERNALDATE "30-Aug-2004 13:44:08 +0100") a OK FETCH completed I'm at GMT+1 here, hence the +0100. I haven't committed the code yet, can people test it? Patch is attached. Cheers, Ilja ------------------------------------------------------------------------ Index: dbmailtypes.h =================================================================== RCS file: /cvsroot-dbmail/dbmail/dbmailtypes.h,v retrieving revision 1.20 diff -r1.20 dbmailtypes.h 154a155,159/* length of database date string YYYY-MM-DD HH:MM:SS1234567890123456789 */ #define SQL_INTERNALDATE_LEN 19Index: imaputil.c =================================================================== RCS file: /cvsroot-dbmail/dbmail/imaputil.c,v retrieving revision 1.74 diff -r1.74 imaputil.c 35a36#include <time.h>68c69,70 < char _imapdate[IMAP_INTERNALDATE_LEN] = "03-Nov-1979 00:00:00"; ---#define IMAP_STANDARD_DATE "03-Nov-1979 00:00:00 +0000" char _imapdate[IMAP_INTERNALDATE_LEN] = IMAP_STANDARD_DATE;71c73,75 < char _sqldate[] = "1979-11-03 00:00:00"; ---#define SQL_STANDARD_DATE "1979-11-03 00:00:00" char _sqldate[SQL_INTERNALDATE_LEN + 1] = SQL_STANDARD_DATE;199c203< ---1822,1823c1826 < * NOTE: sqldate is not tested for validity. Behaviour is undefined for non-sql < * dates. ---* NOTE: if date is not valid, IMAP_STANDARD_DATE is returned1827,1830c1830,1842 < int mon;< < if (strlen(sqldate) != strlen("yyyy-mm-dd hh:mm:ss")) {< strcpy(_imapdate, "03-Nov-1979 00:00:00"); ---char *last_char; struct tm tm_localtime, tm_sqldate; time_t td; /* we need to get the localtime to get the current timezone */ tm_localtime = *localtime(&td); /* parse sqldate */ last_char = strptime(sqldate, "%Y-%m-%d %T", &tm_sqldate); if (*last_char != '\0') { trace(TRACE_DEBUG, "%s,%s, error parsing date [%s]", __FILE__, __func__, sqldate); strcpy(_imapdate, IMAP_STANDARD_DATE);1833,1855c1845,1847< < /* copy day */< _imapdate[0] = sqldate[8]; < _imapdate[1] = sqldate[9];< < /* find out which month */< mon = strtoul(&sqldate[5], NULL, 10) - 1; < if (mon < 0 || mon > 11) < mon = 0;< < /* copy month */< _imapdate[3] = month_desc[mon][0]; < _imapdate[4] = month_desc[mon][1]; < _imapdate[5] = month_desc[mon][2];< < /* copy year */< _imapdate[7] = sqldate[0]; < _imapdate[8] = sqldate[1]; < _imapdate[9] = sqldate[2]; < _imapdate[10] = sqldate[3];< < /* copy time */< strcpy(&_imapdate[11], &sqldate[10]); ---tm_sqldate.tm_gmtoff = tm_localtime.tm_gmtoff;(void) strftime(_imapdate, IMAP_INTERNALDATE_LEN, "%d-%b-%Y %T %z", &tm_sqldate);1869,1871d1860 < * < * sqldate is slightly tested for validity. NULL is returned in case of an erroneous date. < * however, the tests performed are NOT extensive enough. 1875,1876c1864,1865 < int i, j; < char sub[4]; ---struct tm tm; char *last_char;1878,1879c1867,1870 < if (strlen(imapdate) != strlen("dd-mon-yyyy") < && strlen(imapdate) != strlen("d-mon-yyyy")) ---last_char = strptime(imapdate, "%d-%b-%Y", &tm); if (*last_char != '\0') { trace(TRACE_DEBUG, "%s,%s: error parsing IMAP date %s", __FILE__, __func__, imapdate);1881,1898d1871< < j = (strlen(imapdate) == strlen("d-mon-yyyy")) ? 1 : 0; < < /* copy year */< _sqldate[0] = imapdate[7 - j]; < _sqldate[1] = imapdate[8 - j]; < _sqldate[2] = imapdate[9 - j]; < _sqldate[3] = imapdate[10 - j];< < _sqldate[4] = '-'; < < /* copy month */< strncpy(sub, &imapdate[3 - j], 3); < sub[3] = 0;< < for (i = 0; i < 12; i++) {< if (strcasecmp(month_desc[i], sub) == 0) < break; 1900,1914c1873,1874< < if (i >= 12)< return NULL;< < i++; /* make i in [1,12] */< _sqldate[5] = (i < 10) ? '0' : '1'; < _sqldate[6] = (i < 10) ? (i + '0') : ((i - 10) + '0');< < _sqldate[7] = '-'; < < /* copy day */< _sqldate[8] = j ? '0' : imapdate[0]; < _sqldate[9] = imapdate[1 - j];< < _sqldate[10] = 0; /* terminate */---(void) strftime(_sqldate, SQL_INTERNALDATE_LEN, "%Y-%m-%d 00:00:00", &tm);1918d1877<------------------------------------------------------------------------ _______________________________________________ Dbmail-dev mailing list Dbmail-dev@dbmail.org http://twister.fastxs.net/mailman/listinfo/dbmail-dev
-- Simon Cocking <[EMAIL PROTECTED]> Network Operations MailGuard Pty. Limited Email anti-virus, anti-spam and content filtering Melbourne 68-72 York St South Melbourne VIC 3205 P +61 3 9694 4444 Sydney Level 39, 2 Park Street Sydney NSW 2000 P +61 2 9004 7889 http://www.mailguard.com.au/mg
smime.p7s
Description: S/MIME Cryptographic Signature