diff --git a/src/Makefile.in b/src/Makefile.in index 4a35c2c6..4c5ef87a 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -69,9 +69,6 @@ pilerconf: pilerconf.c libpiler.a reindex: reindex.c libpiler.a $(CC) $(CFLAGS) $(INCDIR) $(DEFS) -o $@ $< -lpiler $(LIBS) $(LIBDIR) -fixmetadata: fixmetadata.c libpiler.a - $(CC) $(CFLAGS) $(INCDIR) $(DEFS) -o $@ $< -lpiler $(LIBS) $(LIBDIR) - test: test.c libpiler.a $(CC) $(CFLAGS) $(INCDIR) $(DEFS) -o pilertest $< -lpiler $(LIBS) $(LIBDIR) @LDFLAGS@ @@ -96,7 +93,7 @@ install-piler: $(INSTALL) -m 6755 -o $(RUNNING_USER) -g $(RUNNING_GROUP) pilertest $(DESTDIR)$(bindir) clean: - rm -f *.o *.a libpiler.so* piler pilerconf pilerget pileraget pilerimport pilerexport pilerpurge pilertest reindex fixmetadata + rm -f *.o *.a libpiler.so* piler pilerconf pilerget pileraget pilerimport pilerexport pilerpurge pilertest reindex distclean: clean rm -f Makefile diff --git a/src/config.h b/src/config.h index 527203ae..0f38fa23 100644 --- a/src/config.h +++ b/src/config.h @@ -98,7 +98,6 @@ #define SQL_PREPARED_STMT_INSERT_INTO_RCPT_TABLE "INSERT INTO " SQL_RECIPIENT_TABLE " (`id`,`to`,`todomain`) VALUES(?,?,?)" #define SQL_PREPARED_STMT_INSERT_INTO_SPHINX_TABLE "INSERT INTO " SQL_SPHINX_TABLE " (`id`, `from`, `to`, `fromdomain`, `todomain`, `subject`, `body`, `arrived`, `sent`, `size`, `direction`, `folder`, `attachments`, `attachment_types`) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)" #define SQL_PREPARED_STMT_INSERT_INTO_META_TABLE "INSERT INTO " SQL_METADATA_TABLE " (`from`,`fromdomain`,`subject`,`spam`,`arrived`,`sent`,`retained`,`size`,`hlen`,`direction`,`attachments`,`piler_id`,`message_id`,`reference`,`digest`,`bodydigest`,`vcode`) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" -#define SQL_PREPARED_STMT_UPDATE_META_TABLE "UPDATE " SQL_METADATA_TABLE " SET `from`=?,`fromdomain`=?,`subject`=?,`spam`=?,`arrived`=?,`sent`=?,`retained`=?,`size`=?,`hlen`=?,`direction`=?,`attachments`=?,`reference`=?,`digest`=?,`bodydigest`=?,`vcode`=? WHERE id=?" #define SQL_PREPARED_STMT_INSERT_INTO_ATTACHMENT_TABLE "INSERT INTO " SQL_ATTACHMENT_TABLE " (`piler_id`,`attachment_id`,`sig`,`name`,`type`,`size`,`ptr`) VALUES(?,?,?,?,?,?,?)" #define SQL_PREPARED_STMT_GET_ATTACHMENT_ID_BY_SIGNATURE "SELECT `id` FROM `" SQL_ATTACHMENT_TABLE "` WHERE `sig`=? AND `ptr`=0 AND `size`=?" #define SQL_PREPARED_STMT_GET_ATTACHMENT_POINTER "SELECT `piler_id`, `attachment_id` FROM " SQL_ATTACHMENT_TABLE " WHERE id=?" diff --git a/src/defs.h b/src/defs.h index ff93946b..3f56adf1 100644 --- a/src/defs.h +++ b/src/defs.h @@ -294,7 +294,6 @@ struct import { int download_only; int keep_eml; int timeout; - int reimport; int cap_uidplus; long total_size; time_t started, updated, finished; diff --git a/src/fixmetadata.c b/src/fixmetadata.c deleted file mode 100644 index 515ce77e..00000000 --- a/src/fixmetadata.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - * fixmetadata.c, SJ - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -uint64 get_metaid_by_messageid(struct session_data *sdata, struct __data *data, char *message_id, struct __config *cfg); - - -int update_meta_data(struct session_data *sdata, struct parser_state *state, struct __data *data, struct __config *cfg){ - int ret=ERR; - uint64 id=0; - char *subj; - - id = get_metaid_by_messageid(sdata, data, state->message_id, cfg); - - if(id <= 0) return ERR; - - subj = state->b_subject; - if(*subj == ' ') subj++; - - if(prepare_sql_statement(sdata, &(data->stmt_update_metadata), SQL_PREPARED_STMT_UPDATE_META_TABLE) == ERR) return ret; - - p_bind_init(data); - - data->sql[data->pos] = subj; data->type[data->pos] = TYPE_STRING; data->pos++; - data->sql[data->pos] = (char *)&state->n_attachments; data->type[data->pos] = TYPE_LONG; data->pos++; - data->sql[data->pos] = (char *)&id; data->type[data->pos] = TYPE_LONGLONG; data->pos++; - - if(p_exec_query(sdata, data->stmt_update_metadata, data) == OK) ret = OK; - - close_prepared_statement(data->stmt_update_metadata); - - return ret; -} - - -int main(int argc, char **argv){ - int i; - struct stat st; - struct session_data sdata; - struct parser_state state; - struct __config cfg; - struct __data data; - - srand(getpid()); - - if(argc < 2){ - fprintf(stderr, "usage: %s \n", argv[0]); - exit(1); - } - - if(!can_i_write_current_directory()) __fatal("cannot write current directory!"); - - if(stat(argv[1], &st) != 0){ - fprintf(stderr, "%s is not found\n", argv[1]); - return 0; - } - - (void) openlog("fixmetadata", LOG_PID, LOG_MAIL); - - cfg = read_config(CONFIG_FILE); - - if(open_database(&sdata, &cfg) == ERR) return 0; - - setlocale(LC_CTYPE, cfg.locale); - - data.folder = 0; - data.recursive_folder_names = 0; - - inithash(data.mydomains); - - load_mydomains(&sdata, &data, &cfg); - - init_session_data(&sdata, &cfg); - - sdata.delivered = 0; - sdata.tot_len = st.st_size; - - snprintf(sdata.ttmpfile, SMALLBUFSIZE-1, "%s", argv[1]); - snprintf(sdata.filename, SMALLBUFSIZE-1, "%s", argv[1]); - snprintf(sdata.tmpframe, SMALLBUFSIZE-1, "%s.m", argv[1]); - - state = parse_message(&sdata, 1, &data, &cfg); - post_parse(&sdata, &state, &cfg); - - update_meta_data(&sdata, &state, &data, &cfg); - - //sdata.retained = sdata.now + query_retain_period(&data, &state, st.st_size, sdata.spam_message, &cfg); - - //clearrules(data.archiving_rules); - //clearrules(data.retention_rules); - //clearrules(data.folder_rules); - - clearhash(data.mydomains); - - for(i=1; i<=state.n_attachments; i++){ - unlink(state.attachments[i].internalname); - } - - unlink(sdata.tmpframe); - - close_database(&sdata); - - return 0; -} - - diff --git a/src/import.c b/src/import.c index 32c1a55e..5b82d4fb 100644 --- a/src/import.c +++ b/src/import.c @@ -92,10 +92,7 @@ int import_message(char *filename, struct session_data *sdata, struct __data *da return ERR; } - if(data->import->reimport == 1) - rc = reimport_message(sdata, &state, data, cfg); - else - rc = process_message(sdata, &state, data, cfg); + rc = process_message(sdata, &state, data, cfg); unlink(state.message_id_hash); } @@ -106,13 +103,11 @@ int import_message(char *filename, struct session_data *sdata, struct __data *da switch(rc) { case OK: - if(data->import->reimport == 0){ - bzero(&counters, sizeof(counters)); - counters.c_rcvd = 1; - counters.c_size += sdata->tot_len; - counters.c_stored_size = sdata->stored_len; - update_counters(sdata, data, &counters, cfg); - } + bzero(&counters, sizeof(counters)); + counters.c_rcvd = 1; + counters.c_size += sdata->tot_len; + counters.c_stored_size = sdata->stored_len; + update_counters(sdata, data, &counters, cfg); break; diff --git a/src/message.c b/src/message.c index c120cd24..91ec381f 100644 --- a/src/message.c +++ b/src/message.c @@ -186,7 +186,7 @@ int update_metadata_reference(struct session_data *sdata, struct parser_state *s } -int store_meta_data(struct session_data *sdata, struct parser_state *state, struct __data *data, uint64 old_id, struct __config *cfg){ +int store_meta_data(struct session_data *sdata, struct parser_state *state, struct __data *data, struct __config *cfg){ int rc, ret=ERR, result; char *subj, *p, s[MAXBUFSIZE], s2[SMALLBUFSIZE], vcode[2*DIGEST_LENGTH+1], ref[2*DIGEST_LENGTH+1]; uint64 id=0; @@ -206,11 +206,7 @@ int store_meta_data(struct session_data *sdata, struct parser_state *state, stru } - if(old_id > 0){ - if(prepare_sql_statement(sdata, &(data->stmt_insert_into_meta_table), SQL_PREPARED_STMT_UPDATE_META_TABLE) == ERR) return ERR; - } else { - if(prepare_sql_statement(sdata, &(data->stmt_insert_into_meta_table), SQL_PREPARED_STMT_INSERT_INTO_META_TABLE) == ERR) return ERR; - } + if(prepare_sql_statement(sdata, &(data->stmt_insert_into_meta_table), SQL_PREPARED_STMT_INSERT_INTO_META_TABLE) == ERR) return ERR; memset(s2, 0, sizeof(s2)); @@ -243,35 +239,18 @@ int store_meta_data(struct session_data *sdata, struct parser_state *state, stru data->sql[data->pos] = (char *)&sdata->hdr_len; data->type[data->pos] = TYPE_LONG; data->pos++; data->sql[data->pos] = (char *)&sdata->direction; data->type[data->pos] = TYPE_LONG; data->pos++; data->sql[data->pos] = (char *)&state->n_attachments; data->type[data->pos] = TYPE_LONG; data->pos++; - - if(old_id == 0){ - data->sql[data->pos] = sdata->ttmpfile; data->type[data->pos] = TYPE_STRING; data->pos++; - data->sql[data->pos] = state->message_id; data->type[data->pos] = TYPE_STRING; data->pos++; - } - + data->sql[data->pos] = sdata->ttmpfile; data->type[data->pos] = TYPE_STRING; data->pos++; + data->sql[data->pos] = state->message_id; data->type[data->pos] = TYPE_STRING; data->pos++; data->sql[data->pos] = &ref[0]; data->type[data->pos] = TYPE_STRING; data->pos++; data->sql[data->pos] = sdata->digest; data->type[data->pos] = TYPE_STRING; data->pos++; data->sql[data->pos] = sdata->bodydigest; data->type[data->pos] = TYPE_STRING; data->pos++; data->sql[data->pos] = &vcode[0]; data->type[data->pos] = TYPE_STRING; data->pos++; - if(old_id > 0){ - data->sql[data->pos] = (char *)&id; data->type[data->pos] = TYPE_LONGLONG; data->pos++; - } - - if(p_exec_query(sdata, data->stmt_insert_into_meta_table, data) == ERR){ ret = ERR_EXISTS; } else { - if(old_id > 0){ - remove_recipients(sdata, old_id); - remove_folder_id(sdata, old_id); - id = old_id; - } - else { - id = p_get_insert_id(data->stmt_insert_into_meta_table); - } - + id = p_get_insert_id(data->stmt_insert_into_meta_table); rc = store_recipients(sdata, data, state->b_to, id, cfg); if(cfg->verbosity >= _LOG_DEBUG) syslog(LOG_PRIORITY, "%s: stored recipients, rc=%d", sdata->ttmpfile, rc); @@ -368,7 +347,7 @@ int process_message(struct session_data *sdata, struct parser_state *state, stru sdata->retained += query_retain_period(data, state, sdata->tot_len, sdata->spam_message, cfg); - rc = store_meta_data(sdata, state, data, 0, cfg); + rc = store_meta_data(sdata, state, data, cfg); if(cfg->verbosity >= _LOG_DEBUG) syslog(LOG_PRIORITY, "%s: stored metadata, rc=%d", sdata->ttmpfile, rc); if(rc == ERR_EXISTS){ @@ -379,56 +358,3 @@ int process_message(struct session_data *sdata, struct parser_state *state, stru return OK; } - - -int reimport_message(struct session_data *sdata, struct parser_state *state, struct __data *data, struct __config *cfg){ - int i, rc; - char piler_id[SMALLBUFSIZE]; - char oldfile[SMALLBUFSIZE], newfile[SMALLBUFSIZE]; - - memset(piler_id, 0, sizeof(piler_id)); - - sdata->duplicate_id = get_metaid_by_messageid(sdata, data, state->message_id, &piler_id[0]); - - if(sdata->duplicate_id == 0){ - if(cfg->verbosity >= _LOG_DEBUG) syslog(LOG_PRIORITY, "cannot find this message: %s", state->message_id); - return ERR; - } - - - /* store base64 encoded file attachments */ - - if(state->n_attachments > 0){ - - // rename .a* files! - - for(i=1; i<=state->n_attachments; i++){ - snprintf(oldfile, sizeof(oldfile)-1, "%s.a%d", sdata->ttmpfile, i); - snprintf(newfile, sizeof(newfile)-1, "%s.a%d", piler_id, i); - rename(oldfile, newfile); - } - - rc = store_attachments(sdata, state, data, cfg); - remove_stripped_attachments(state); - if(rc) return ERR; - } - - // rename .m file! - - snprintf(oldfile, sizeof(oldfile)-1, "%s.m", sdata->ttmpfile); - snprintf(sdata->tmpframe, SMALLBUFSIZE-1, "%s.m", piler_id); - rename(oldfile, sdata->tmpframe); - - rc = store_file(sdata, sdata->tmpframe, 0, cfg); - if(rc == 0){ - syslog(LOG_PRIORITY, "%s: error storing message for reimport: %s", sdata->ttmpfile, sdata->tmpframe); - return ERR; - } - - sdata->retained += query_retain_period(data, state, sdata->tot_len, sdata->spam_message, cfg); - - rc = store_meta_data(sdata, state, data, sdata->duplicate_id, cfg); - if(cfg->verbosity >= _LOG_DEBUG) syslog(LOG_PRIORITY, "%s: update metadata, rc=%d", sdata->ttmpfile, rc); - - return OK; -} diff --git a/src/pilerimport.c b/src/pilerimport.c index dd968fa9..4ee4df51 100644 --- a/src/pilerimport.c +++ b/src/pilerimport.c @@ -57,7 +57,6 @@ void usage(){ printf(" -D Dry-run, do not import anything\n"); printf(" -o Only download emails for POP3/IMAP import\n"); printf(" -r Remove imported emails\n"); - printf(" -z Reimport emails\n"); printf(" -q Quiet mode\n"); exit(0); @@ -83,7 +82,7 @@ int main(int argc, char **argv){ import.import_job_id = import.total_messages = import.total_size = import.processed_messages = import.batch_processing_limit = 0; - import.started = import.updated = import.finished = import.remove_after_import = import.reimport = 0; + import.started = import.updated = import.finished = import.remove_after_import = 0; import.extra_recipient = import.move_folder = NULL; import.start_position = 1; import.download_only = 0; @@ -123,7 +122,6 @@ int main(int argc, char **argv){ {"remove-after-import",no_argument, 0, 'r' }, {"move-folder", required_argument, 0, 'g' }, {"only-download",no_argument, 0, 'o' }, - {"reimport", no_argument, 0, 'z' }, {"gui-import", no_argument, 0, 'G' }, {"dry-run", no_argument, 0, 'D' }, {"help", no_argument, 0, 'h' }, @@ -132,9 +130,9 @@ int main(int argc, char **argv){ int option_index = 0; - c = getopt_long(argc, argv, "c:m:M:e:d:i:K:u:p:P:x:F:f:a:b:t:s:g:GDRrozqh?", long_options, &option_index); + c = getopt_long(argc, argv, "c:m:M:e:d:i:K:u:p:P:x:F:f:a:b:t:s:g:GDRroqh?", long_options, &option_index); #else - c = getopt(argc, argv, "c:m:M:e:d:i:K:u:p:P:x:F:f:a:b:t:s:g:GDRrozqh?"); + c = getopt(argc, argv, "c:m:M:e:d:i:K:u:p:P:x:F:f:a:b:t:s:g:GDRroqh?"); #endif if(c == -1) break; @@ -233,10 +231,6 @@ int main(int argc, char **argv){ data.import->start_position = atoi(optarg); break; - case 'z' : - data.import->reimport = 1; - break; - case 'a' : data.import->extra_recipient = optarg; break;