Re: [PATCH ulogd2 v3 1/2] pcap: simplify opening of output file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2023-03-16, at 20:02:15 +0100, Pablo Neira Ayuso wrote:
> On Thu, Mar 16, 2023 at 11:07:53AM +0000, Jeremy Sowden wrote:
> > Instead of statting the file, and choosing the mode with which to open
> > it and whether to write the PCAP header based on the result, always open
> > it with mode "a" and _then_ stat it.  This simplifies the flow-control
> > and avoids a race between statting and opening.
> > 
> > Signed-off-by: Jeremy Sowden <jeremy@xxxxxxxxxx>
> > ---
> >  output/pcap/ulogd_output_PCAP.c | 42 ++++++++++++---------------------
> >  1 file changed, 15 insertions(+), 27 deletions(-)
> > 
> > diff --git a/output/pcap/ulogd_output_PCAP.c b/output/pcap/ulogd_output_PCAP.c
> > index e7798f20c8fc..220fc6dec5fe 100644
> > --- a/output/pcap/ulogd_output_PCAP.c
> > +++ b/output/pcap/ulogd_output_PCAP.c
> > @@ -220,33 +220,21 @@ static int append_create_outfile(struct ulogd_pluginstance *upi)
> >  {
> >  	struct pcap_instance *pi = (struct pcap_instance *) &upi->private;
> >  	char *filename = upi->config_kset->ces[0].u.string;
> > -	struct stat st_dummy;
> > -	int exist = 0;
> > -
> > -	if (stat(filename, &st_dummy) == 0 && st_dummy.st_size > 0)
> > -		exist = 1;
> > -
> > -	if (!exist) {
> > -		pi->of = fopen(filename, "w");
> > -		if (!pi->of) {
> > -			ulogd_log(ULOGD_ERROR, "can't open pcap file %s: %s\n",
> > -				  filename,
> > -				  strerror(errno));
> > -			return -EPERM;
> > -		}
> > -		if (!write_pcap_header(pi)) {
> > -			ulogd_log(ULOGD_ERROR, "can't write pcap header: %s\n",
> > -				  strerror(errno));
> > -			return -ENOSPC;
> > -		}
> > -	} else {
> > -		pi->of = fopen(filename, "a");
> > -		if (!pi->of) {
> > -			ulogd_log(ULOGD_ERROR, "can't open pcap file %s: %s\n", 
> > -				filename,
> > -				strerror(errno));
> > -			return -EPERM;
> > -		}		
> > +	struct stat st_of;
> > +
> > +	pi->of = fopen(filename, "a");
> > +	if (!pi->of) {
> > +		ulogd_log(ULOGD_ERROR, "can't open pcap file %s: %s\n",
> > +			  filename,
> > +			  strerror(errno));
> > +		return -EPERM;
> > +	}
> > +	if (fstat(fileno(pi->of), &st_of) == 0 && st_of.st_size == 0) {
> > +	    if (!write_pcap_header(pi)) {
>         ^^^^
> coding style nitpick,

Whoops.  Not sure what happened there.

> it can be fixed before applying it.

Please.

J.

> > +		    ulogd_log(ULOGD_ERROR, "can't write pcap header: %s\n",
> > +			      strerror(errno));
> > +		    return -ENOSPC;
> > +	    }
> >  	}
> >  
> >  	return 0;
> > -- 
> > 2.39.2
> > 
> 

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Netfitler Users]     [Berkeley Packet Filter]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux