Commit 5f9fa282 authored by bol-van's avatar bol-van
Browse files

nfqws,tpws: r/o open instead of stat() for list file check

parent bd67b41f
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
#include <ctype.h>
#include <sys/stat.h>
#include <libgen.h>
#include <fcntl.h>

int unique_size_t(size_t *pu, int ct)
{
@@ -313,6 +314,17 @@ bool file_mod_signature(const char *filename, file_mod_sig *ms)
	return true;
}

bool file_open_test(const char *filename, int flags)
{
	int fd = open(filename,flags);
	if (fd>=0)
	{
		close(fd);
		return true;
	}
	return false;
}

bool pf_in_range(uint16_t port, const port_filter *pf)
{
	return port && (((!pf->from && !pf->to) || (port>=pf->from && port<=pf->to)) ^ pf->neg);
+1 −0
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@ typedef struct
#define FILE_MOD_RESET(ms) memset(ms,0,sizeof(file_mod_sig))
bool file_mod_signature(const char *filename, file_mod_sig *ms);
time_t file_mod_time(const char *filename);
bool file_open_test(const char *filename, int flags);

typedef struct
{
+4 −4
Original line number Diff line number Diff line
@@ -126,16 +126,16 @@ static bool test_list_files()
	struct ipset_file *ifile;

	LIST_FOREACH(hfile, &params.hostlists, next)
		if (!file_mod_time(hfile->filename))
		if (!file_open_test(hfile->filename, O_RDONLY))
		{
			DLOG_PERROR("file_mod_time");
			DLOG_PERROR("file_open_test");
			DLOG_ERR("cannot access hostlist file '%s'\n",hfile->filename);
			return false;
		}
	LIST_FOREACH(ifile, &params.ipsets, next)
		if (!file_mod_time(ifile->filename))
		if (!file_open_test(ifile->filename, O_RDONLY))
		{
			DLOG_PERROR("file_mod_time");
			DLOG_PERROR("file_open_test");
			DLOG_ERR("cannot access ipset file '%s'\n",ifile->filename);
			return false;
		}
+12 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@
#include <sys/stat.h>
#include <libgen.h>
#include <unistd.h>
#include <fcntl.h>

#ifdef __ANDROID__
#include "andr/ifaddrs.h"
@@ -327,6 +328,17 @@ bool file_mod_signature(const char *filename, file_mod_sig *ms)
	return true;
}

bool file_open_test(const char *filename, int flags)
{
	int fd = open(filename,flags);
	if (fd>=0)
	{
		close(fd);
		return true;
	}
	return false;
}

bool pf_in_range(uint16_t port, const port_filter *pf)
{
	return port && (((!pf->from && !pf->to) || (port >= pf->from && port <= pf->to)) ^ pf->neg);
+1 −0
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ typedef struct
#define FILE_MOD_RESET(ms) memset(ms,0,sizeof(file_mod_sig))
bool file_mod_signature(const char *filename, file_mod_sig *ms);
time_t file_mod_time(const char *filename);
bool file_open_test(const char *filename, int flags);

typedef struct
{
Loading