diff --git a/src/defs.h b/src/defs.h index 0d7a11f..40f119b 100644 --- a/src/defs.h +++ b/src/defs.h @@ -338,7 +338,7 @@ struct import *import; struct licence licence; char *dedup; - int child_serial; + unsigned char child_serial; int pos; #ifdef HAVE_TRE diff --git a/src/import.c b/src/import.c index 254a884..7e8e185 100644 --- a/src/import.c +++ b/src/import.c @@ -26,7 +26,7 @@ struct counters counters; - init_session_data(sdata, cfg); + init_session_data(sdata, 0, cfg); if(data->import->extra_recipient){ snprintf(sdata->rcptto[0], SMALLBUFSIZE-1, "%s", data->import->extra_recipient); diff --git a/src/misc.c b/src/misc.c index 9643acd..29a1c25 100644 --- a/src/misc.c +++ b/src/misc.c @@ -331,13 +331,13 @@ } -void create_id(char *id, unsigned char server_id){ +void create_id(char *id, unsigned char server_id, unsigned char child_serial){ int i; unsigned char buf[RND_STR_LEN/2]; memset(id, 0, SMALLBUFSIZE); - get_random_bytes(buf, RND_STR_LEN/2, server_id); + get_random_bytes(buf, RND_STR_LEN/2, server_id, child_serial); for(i=0; i < RND_STR_LEN/2; i++){ sprintf(id, "%02x", buf[i]); @@ -351,7 +351,7 @@ * reading from pool */ -int get_random_bytes(unsigned char *buf, int len, unsigned char server_id){ +int get_random_bytes(unsigned char *buf, int len, unsigned char server_id, unsigned char child_serial){ int fd, ret=0; struct taia now; char nowpack[TAIA_PACK]; @@ -367,8 +367,9 @@ if(fd == -1) return ret; *(buf + 12) = server_id; + *(buf + 13) = child_serial; - if(readFromEntropyPool(fd, buf+12+1, len-12-1) != len-12-1){ + if(readFromEntropyPool(fd, buf+13+1, len-13-1) != len-13-1){ syslog(LOG_PRIORITY, "%s: %s", ERR_CANNOT_READ_FROM_POOL, RANDOM_POOL); } @@ -544,13 +545,13 @@ } -void init_session_data(struct session_data *sdata, struct config *cfg){ +void init_session_data(struct session_data *sdata, unsigned char child_serial, struct config *cfg){ int i; sdata->fd = -1; - create_id(&(sdata->ttmpfile[0]), cfg->server_id); + create_id(&(sdata->ttmpfile[0]), cfg->server_id, child_serial); unlink(sdata->ttmpfile); snprintf(sdata->filename, SMALLBUFSIZE-1, "%s", sdata->ttmpfile); diff --git a/src/misc.h b/src/misc.h index ff58cdc..c4a3f38 100644 --- a/src/misc.h +++ b/src/misc.h @@ -28,8 +28,8 @@ int trimBuffer(char *s); int extractEmail(char *rawmail, char *email); void make_random_string(char *buf, int buflen); -void create_id(char *id, unsigned char server_id); -int get_random_bytes(unsigned char *buf, int len, unsigned char server_id); +void create_id(char *id, unsigned char server_id, unsigned char child_serial); +int get_random_bytes(unsigned char *buf, int len, unsigned char server_id, unsigned char child_serial); int readFromEntropyPool(int fd, void *_s, ssize_t n); int recvtimeout(int s, char *buf, int len, int timeout); int write1(struct net *net, void *buf, int buflen); @@ -39,7 +39,7 @@ void write_pid_file(char *pidfile); int drop_privileges(struct passwd *pwd); -void init_session_data(struct session_data *sdata, struct config *cfg); +void init_session_data(struct session_data *sdata, unsigned char child_serial, struct config *cfg); int read_from_stdin(struct session_data *sdata); void strtolower(char *s); diff --git a/src/piler.c b/src/piler.c index 1738274..55d7c77 100644 --- a/src/piler.c +++ b/src/piler.c @@ -110,7 +110,7 @@ } #endif - init_session_data(sdata, cfg); + init_session_data(sdata, data->child_serial, cfg); sdata->tot_len = size; @@ -247,6 +247,8 @@ if(cfg.verbosity >= _LOG_DEBUG) syslog(LOG_PRIORITY, "child (pid: %d, serial: %d) started main() working on '%s'", getpid(), ptr->serial, dir); + data.child_serial = ptr->serial % 255; + while(1){ if(received_sighup == 1){ if(cfg.verbosity >= _LOG_DEBUG) syslog(LOG_PRIORITY, "child (pid: %d) caught HUP signal", getpid()); diff --git a/src/pilerexport.c b/src/pilerexport.c index 92428da..f24bf30 100644 --- a/src/pilerexport.c +++ b/src/pilerexport.c @@ -571,7 +571,7 @@ if(read_key(&cfg)) p_clean_exit(ERR_READING_KEY, 1); - init_session_data(&sdata, &cfg); + init_session_data(&sdata, 0, &cfg); if(open_database(&sdata, &cfg) == ERR){ @@ -581,7 +581,7 @@ if(where_condition){ - init_session_data(&sdata2, &cfg); + init_session_data(&sdata2, 0, &cfg); strcpy(cfg.mysqlhost, "127.0.0.1"); cfg.mysqlport = 9306; diff --git a/src/pilerimport.c b/src/pilerimport.c index b648c36..b609f82 100644 --- a/src/pilerimport.c +++ b/src/pilerimport.c @@ -76,6 +76,7 @@ srand(getpid()); data.folder = 0; + data.child_serial = 0; data.recursive_folder_names = 0; data.quiet = 0; diff --git a/src/reindex.c b/src/reindex.c index b42b589..b1bfe8e 100644 --- a/src/reindex.c +++ b/src/reindex.c @@ -234,7 +234,7 @@ initrules(data.retention_rules); initrules(data.folder_rules); - init_session_data(&sdata, &cfg); + init_session_data(&sdata, 0, &cfg); if(open_database(&sdata, &cfg) == ERR){ diff --git a/src/test.c b/src/test.c index d10d98e..3f22d35 100644 --- a/src/test.c +++ b/src/test.c @@ -73,7 +73,7 @@ load_rules(&sdata, &data, data.folder_rules, SQL_FOLDER_RULE_TABLE); - init_session_data(&sdata, &cfg); + init_session_data(&sdata, 0, &cfg); sdata.delivered = 0; sdata.tot_len = st.st_size; diff --git a/unit_tests/check_digest.c b/unit_tests/check_digest.c index bab35dc..c7cbffc 100644 --- a/unit_tests/check_digest.c +++ b/unit_tests/check_digest.c @@ -86,7 +86,7 @@ continue; } - init_session_data(&sdata, cfg); + init_session_data(&sdata, 0, cfg); sdata.delivered = 0; sdata.tot_len = st.st_size; diff --git a/unit_tests/check_parser.c b/unit_tests/check_parser.c index f4606ca..93d349c 100644 --- a/unit_tests/check_parser.c +++ b/unit_tests/check_parser.c @@ -66,7 +66,7 @@ continue; } - init_session_data(&sdata, cfg); + init_session_data(&sdata, 0, cfg); sdata.delivered = 0; sdata.tot_len = st.st_size; diff --git a/unit_tests/check_rules.c b/unit_tests/check_rules.c index b205308..e007134 100644 --- a/unit_tests/check_rules.c +++ b/unit_tests/check_rules.c @@ -113,7 +113,7 @@ continue; } - init_session_data(&sdata, cfg); + init_session_data(&sdata, 0, cfg); sdata.delivered = 0; sdata.tot_len = st.st_size;