improved date parsing

This commit is contained in:
SJ 2015-11-10 16:06:47 +01:00
parent 40d187a718
commit 97fe864810
6 changed files with 10 additions and 31 deletions

View File

@ -14,7 +14,7 @@
#define VERSION "1.2.0-master" #define VERSION "1.2.0-master"
#define BUILD 925 #define BUILD 926
#define HOSTID "mailarchiver" #define HOSTID "mailarchiver"

View File

@ -73,7 +73,6 @@ int import_message(char *filename, struct session_data *sdata, struct __data *da
sdata->sent = 0;
sdata->delivered = 0; sdata->delivered = 0;
sdata->import = 1; sdata->import = 1;
@ -81,15 +80,6 @@ int import_message(char *filename, struct session_data *sdata, struct __data *da
state = parse_message(sdata, 1, data, cfg); state = parse_message(sdata, 1, data, cfg);
post_parse(sdata, &state, cfg); post_parse(sdata, &state, cfg);
if(sdata->sent <= 0 && sdata->delivered > 0) sdata->sent = sdata->delivered;
if(sdata->sent > sdata->now) sdata->sent = sdata->now;
if(sdata->sent == -1) sdata->sent = 0;
/* fat chances that you won't import emails before 1990.01.01 */
if(sdata->sent > 631148400) sdata->retained = sdata->sent;
rule = check_againt_ruleset(data->archiving_rules, &state, sdata->tot_len, sdata->spam_message); rule = check_againt_ruleset(data->archiving_rules, &state, sdata->tot_len, sdata->spam_message);
if(rule){ if(rule){

View File

@ -547,7 +547,8 @@ void init_session_data(struct session_data *sdata, struct __config *cfg){
for(i=0; i<MAX_RCPT_TO; i++) memset(sdata->rcptto[i], 0, SMALLBUFSIZE); for(i=0; i<MAX_RCPT_TO; i++) memset(sdata->rcptto[i], 0, SMALLBUFSIZE);
time(&(sdata->now)); time(&(sdata->now));
sdata->sent = sdata->delivered = sdata->retained = sdata->now; sdata->delivered = sdata->retained = sdata->now;
sdata->sent = 0;
sdata->sql_errno = 0; sdata->sql_errno = 0;

View File

@ -147,6 +147,7 @@ void post_parse(struct session_data *sdata, struct _state *state, struct __confi
digest_string(state->message_id, &(state->message_id_hash[0])); digest_string(state->message_id, &(state->message_id_hash[0]));
if(sdata->sent == 0) sdata->sent = sdata->now;
} }
@ -228,11 +229,6 @@ int parse_line(char *buf, struct _state *state, struct session_data *sdata, int
state->is_header = 1; state->is_header = 1;
memset(state->b_body, 0, BIGBUFSIZE); memset(state->b_body, 0, BIGBUFSIZE);
state->bodylen = 0; state->bodylen = 0;
if(sdata->import == 1){
sdata->sent = 0;
}
} }
if(take_into_pieces == 1){ if(take_into_pieces == 1){
@ -381,24 +377,19 @@ int parse_line(char *buf, struct _state *state, struct session_data *sdata, int
else if(strncasecmp(buf, "Subject:", strlen("Subject:")) == 0) state->message_state = MSG_SUBJECT; else if(strncasecmp(buf, "Subject:", strlen("Subject:")) == 0) state->message_state = MSG_SUBJECT;
else if(strncasecmp(buf, "Recipient:", strlen("Recipient:")) == 0) state->message_state = MSG_RECIPIENT; else if(strncasecmp(buf, "Recipient:", strlen("Recipient:")) == 0) state->message_state = MSG_RECIPIENT;
//else if(strncasecmp(buf, "Date:", strlen("Date:")) == 0 && sdata->sent == 0) sdata->sent = parse_date_header(buf, cfg);
/* /*
* in pilerimport: sdata->sent = 0 * by default sdata->sent = 0, and let the parser extract value from the Date: header
* in piler daemon: sdata->sent = sdata->now
*/ */
else if(strncasecmp(buf, "Date:", strlen("Date:")) == 0 && state->is_1st_header == 1){ else if(strncasecmp(buf, "Date:", strlen("Date:")) == 0 && state->is_1st_header == 1 && sdata->sent == 0){
if(strstr(buf, "=?") && strstr(buf, "?=")) fixupEncodedHeaderLine(buf, MAXBUFSIZE); if(strstr(buf, "=?") && strstr(buf, "?=")) fixupEncodedHeaderLine(buf, MAXBUFSIZE);
if(sdata->sent == 0) sdata->sent = parse_date_header(buf, cfg); sdata->sent = parse_date_header(buf, cfg);
else {
sdata->sent = parse_date_header(buf, cfg);
/* allow -1 week ... +1 day drift in the parsed Date: value */ /* allow +2 days drift in the parsed Date: value */
if(sdata->now - sdata->sent > 604800 || sdata->sent - sdata->now > 86400) sdata->sent = sdata->now;
} if(sdata->sent - sdata->now > 2*86400) sdata->sent = sdata->now;
} }
else if(strncasecmp(buf, "Delivery-date:", strlen("Delivery-date:")) == 0 && sdata->delivered == 0) sdata->delivered = parse_date_header(buf, cfg); else if(strncasecmp(buf, "Delivery-date:", strlen("Delivery-date:")) == 0 && sdata->delivered == 0) sdata->delivered = parse_date_header(buf, cfg);

View File

@ -120,8 +120,6 @@ uint64 retrieve_email_by_metadata_id(struct session_data *sdata, struct __data *
snprintf(sdata->filename, SMALLBUFSIZE-1, "%s", filename); snprintf(sdata->filename, SMALLBUFSIZE-1, "%s", filename);
sdata->sent = 0;
state = parse_message(sdata, 0, data, cfg); state = parse_message(sdata, 0, data, cfg);
post_parse(sdata, &state, cfg); post_parse(sdata, &state, cfg);

View File

@ -74,7 +74,6 @@ int main(int argc, char **argv){
init_session_data(&sdata, &cfg); init_session_data(&sdata, &cfg);
sdata.sent = 0;
sdata.delivered = 0; sdata.delivered = 0;
sdata.tot_len = st.st_size; sdata.tot_len = st.st_size;
sdata.import = 1; sdata.import = 1;