@ -59,6 +59,7 @@ typedef struct PcapFiles_ {
time_t delay ;
time_t poll_interval ;
bool continuous ;
bool should_delete ;
TAILQ_ENTRY ( PcapFiles_ ) next ;
} PcapFiles ;
@ -238,6 +239,7 @@ static void PcapFilesFree(PcapFiles *cfile)
* \ param output_dir absolute name of directory where log will be put
* \ param tenant_id Id of tenant associated with this file
* \ param continuous If file should be run in continuous mode
* \ param delete If file should be deleted when done
* \ param delay Delay required for file modified time before being processed
* \ param poll_interval How frequently directory mode polls for new files
*
@ -249,6 +251,7 @@ static TmEcode UnixListAddFile(
const char * output_dir ,
int tenant_id ,
bool continuous ,
bool should_delete ,
time_t delay ,
time_t poll_interval
)
@ -282,6 +285,7 @@ static TmEcode UnixListAddFile(
cfile - > tenant_id = tenant_id ;
cfile - > continuous = continuous ;
cfile - > should_delete = should_delete ;
cfile - > delay = delay ;
cfile - > poll_interval = poll_interval ;
@ -304,6 +308,7 @@ static TmEcode UnixSocketAddPcapFileImpl(json_t *cmd, json_t* answer, void *data
const char * filename ;
const char * output_dir ;
int tenant_id = 0 ;
bool should_delete = false ;
time_t delay = 30 ;
time_t poll_interval = 5 ;
# ifdef OS_WIN32
@ -368,6 +373,11 @@ static TmEcode UnixSocketAddPcapFileImpl(json_t *cmd, json_t* answer, void *data
tenant_id = json_number_value ( targ ) ;
}
json_t * delete_arg = json_object_get ( cmd , " delete-when-done " ) ;
if ( delete_arg ! = NULL ) {
should_delete = json_is_true ( delete_arg ) ;
}
json_t * delay_arg = json_object_get ( cmd , " delay " ) ;
if ( delay_arg ! = NULL ) {
if ( ! json_is_integer ( delay_arg ) ) {
@ -392,7 +402,7 @@ static TmEcode UnixSocketAddPcapFileImpl(json_t *cmd, json_t* answer, void *data
}
switch ( UnixListAddFile ( this , filename , output_dir , tenant_id , continuous ,
delay, poll_interval ) ) {
should_delete, delay, poll_interval ) ) {
case TM_ECODE_FAILED :
case TM_ECODE_DONE :
json_object_set_new ( answer , " message " ,
@ -502,6 +512,16 @@ static TmEcode UnixSocketPcapFilesCheck(void *data)
PcapFilesFree ( cfile ) ;
return TM_ECODE_FAILED ;
}
if ( cfile - > should_delete ) {
set_res = ConfSetFinal ( " pcap-file.delete-when-done " , " true " ) ;
} else {
set_res = ConfSetFinal ( " pcap-file.delete-when-done " , " false " ) ;
}
if ( set_res ! = 1 ) {
SCLogError ( SC_ERR_INVALID_ARGUMENT , " Can not set delete mode for pcap processing " ) ;
PcapFilesFree ( cfile ) ;
return TM_ECODE_FAILED ;
}
if ( cfile - > delay > 0 ) {
char tstr [ 32 ] ;