mirror of
https://bitbucket.org/jsuto/piler.git
synced 2025-06-13 12:17:02 +02:00
added google xoauth2 support + fixed a journaling issue
This commit is contained in:
@ -13,7 +13,7 @@
|
||||
|
||||
#define VERSION "0.1.21"
|
||||
|
||||
#define BUILD 706
|
||||
#define BUILD 708
|
||||
|
||||
#define HOSTID "mailarchiver"
|
||||
|
||||
|
@ -162,7 +162,7 @@ struct _state {
|
||||
|
||||
int bodylen;
|
||||
int tolen;
|
||||
char ms_journal;
|
||||
char ms_journal, ms_journal_dropped;
|
||||
};
|
||||
|
||||
|
||||
|
12
src/parser.c
12
src/parser.c
@ -84,6 +84,8 @@ struct _state parse_message(struct session_data *sdata, int take_into_pieces, st
|
||||
}
|
||||
|
||||
if(take_into_pieces == 1 && state.writebufpos > 0){
|
||||
if(state.ms_journal == 1) remove_trailing_journal_boundary(&writebuffer[0], &state);
|
||||
|
||||
len = write(state.mfd, writebuffer, state.writebufpos);
|
||||
memset(writebuffer, 0, sizeof(writebuffer));
|
||||
state.writebufpos = 0;
|
||||
@ -212,6 +214,7 @@ int parse_line(char *buf, struct _state *state, struct session_data *sdata, int
|
||||
state->saved_size += len;
|
||||
//n = write(state->mfd, buf, len); // WRITE
|
||||
if(len + state->writebufpos > writebuffersize-1){
|
||||
if(state->ms_journal == 1) remove_trailing_journal_boundary(writebuffer, state);
|
||||
n = write(state->mfd, writebuffer, state->writebufpos); state->writebufpos = 0; memset(writebuffer, 0, writebuffersize);
|
||||
}
|
||||
memcpy(writebuffer+state->writebufpos, buf, len); state->writebufpos += len;
|
||||
@ -327,6 +330,7 @@ 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, "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);
|
||||
else if(strncasecmp(buf, "Received:", strlen("Received:")) == 0) state->message_state = MSG_RECEIVED;
|
||||
|
||||
if(state->message_state == MSG_MESSAGE_ID && state->message_id[0] == 0){
|
||||
p = strchr(buf+11, ' ');
|
||||
@ -357,6 +361,14 @@ int parse_line(char *buf, struct _state *state, struct session_data *sdata, int
|
||||
if(p) *p = '\0';
|
||||
}
|
||||
|
||||
if(state->message_state == MSG_RECEIVED && state->ms_journal == 1 && state->ms_journal_dropped == 0){
|
||||
state->ms_journal_dropped = 1;
|
||||
state->writebufpos = 0; memset(writebuffer, 0, writebuffersize);
|
||||
memcpy(writebuffer+state->writebufpos, buf, len); state->writebufpos += strlen(buf);
|
||||
memcpy(writebuffer+state->writebufpos, "\n", 1); state->writebufpos++;
|
||||
}
|
||||
|
||||
|
||||
if(state->is_1st_header == 1 && state->message_state == MSG_REFERENCES){
|
||||
if(strncasecmp(buf, "References:", 11) == 0) parse_reference(state, buf+11);
|
||||
else parse_reference(state, buf);
|
||||
|
@ -34,5 +34,6 @@ char *determine_attachment_type(char *filename, char *type);
|
||||
char *get_attachment_extractor_by_filename(char *filename);
|
||||
void parse_reference(struct _state *state, char *s);
|
||||
int base64_decode_attachment_buffer(char *p, int plen, unsigned char *b, int blen);
|
||||
void remove_trailing_journal_boundary(char *writebuffer, struct _state *state);
|
||||
|
||||
#endif /* _PARSER_H */
|
||||
|
@ -96,6 +96,7 @@ void init_state(struct _state *state){
|
||||
state->bodylen = 0;
|
||||
|
||||
state->ms_journal = 0;
|
||||
state->ms_journal_dropped = 0;
|
||||
}
|
||||
|
||||
|
||||
@ -811,3 +812,21 @@ int base64_decode_attachment_buffer(char *p, int plen, unsigned char *b, int ble
|
||||
return b64len;
|
||||
}
|
||||
|
||||
|
||||
void remove_trailing_journal_boundary(char *writebuffer, struct _state *state){
|
||||
char *p;
|
||||
|
||||
p = strstr(writebuffer, state->boundaries->s);
|
||||
if(p){
|
||||
state->writebufpos -= strlen(p);
|
||||
*p = '\0';
|
||||
p = strrchr(writebuffer, '\n');
|
||||
if(p){
|
||||
state->writebufpos -= strlen(p);
|
||||
*p = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user