Index: spo_log_tcpdump.c =================================================================== RCS file: /cvsroot/snort/snort/Attic/spo_log_tcpdump.c,v retrieving revision 1.16.2.1 diff -u -r1.16.2.1 spo_log_tcpdump.c --- spo_log_tcpdump.c 15 Mar 2002 14:42:32 -0000 1.16.2.1 +++ spo_log_tcpdump.c 4 Jul 2002 05:56:58 -0000 @@ -129,7 +129,7 @@ { LogTcpdumpData *data; - data = (LogTcpdumpData *)malloc(sizeof(LogTcpdumpData)); + data = (LogTcpdumpData *) calloc(1, sizeof(LogTcpdumpData)); #ifdef DEBUG printf("Args: %s<>\n", args); @@ -186,7 +186,12 @@ if(!pv.line_buffer_flag) { - fflush((FILE *)data->dumpd); +#ifdef WIN32 + fflush( NULL ); /* flush all open output streams */ +#else + /* we happen to know that pcap_dumper_t* is really just a FILE* */ + fflush( (FILE*) data->dumpd ); +#endif } } else @@ -236,7 +241,8 @@ printf("Opening %s\n", logdir); #endif - if((data->dumpd=pcap_dump_open(pd,logdir)) == NULL) + data->dumpd = pcap_dump_open(pd,logdir); + if(data->dumpd == NULL) { FatalError("log_tcpdump TcpdumpInitLogFile(): %s\n", strerror(errno)); } @@ -244,8 +250,8 @@ /* keep a copy of the filename for later reference */ if(data->filename != NULL) { + bzero( data->filename, strlen(data->filename) ); free(data->filename); - data->filename = strdup(logdir); } @@ -273,21 +279,30 @@ printf("SpoLogTcpdumpCleanExitFunc\n"); #endif - /* close the output file */ - pcap_dump_close(data->dumpd); + /* close the output file */ + if( data->dumpd != NULL ) + { + pcap_dump_close(data->dumpd); + data->dumpd = NULL; + } /* * if we haven't written any data, dump the output file so there aren't * fragments all over the disk */ - if(pc.alert_pkts==0 && pc.log_pkts==0) + if(data->filename!=NULL && pc.alert_pkts==0 && pc.log_pkts==0) { unlink(data->filename); } /* free up initialized memory */ - free(data->filename); - free(data); + if( data->filename != NULL ) + { + bzero(data->filename, strlen(data->filename)); + free(data->filename); + } + bzero(data, sizeof(LogTcpdumpData)); + free(data); } @@ -310,19 +325,27 @@ printf("SpoLogTcpdumpRestartFunc\n"); #endif - pcap_dump_close(data->dumpd); + if( data->dumpd != NULL ) + { + pcap_dump_close(data->dumpd); + data->dumpd = NULL; + } /* * if we haven't written any data, dump the output file so there aren't * fragments all over the disk */ - if(pc.alert_pkts==0 && pc.log_pkts==0) + if(data->filename!=NULL && pc.alert_pkts==0 && pc.log_pkts==0) { unlink(data->filename); } - free(data->filename); - free(data->dumpd); + if( data->filename != NULL ) + { + bzero(data->filename, strlen(data->filename)); + free(data->filename); + } + bzero(data, sizeof(LogTcpdumpData)); free(data); }