mirror of
https://github.com/bol-van/zapret.git
synced 2025-02-06 07:14:18 +05:00
nfqws,tpws: r/o open instead of stat() for list file check
This commit is contained in:
parent
bd67b41f32
commit
5f9fa28251
@ -9,6 +9,7 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
int unique_size_t(size_t *pu, int ct)
|
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;
|
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)
|
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);
|
return port && (((!pf->from && !pf->to) || (port>=pf->from && port<=pf->to)) ^ pf->neg);
|
||||||
|
@ -77,6 +77,7 @@ typedef struct
|
|||||||
#define FILE_MOD_RESET(ms) memset(ms,0,sizeof(file_mod_sig))
|
#define FILE_MOD_RESET(ms) memset(ms,0,sizeof(file_mod_sig))
|
||||||
bool file_mod_signature(const char *filename, file_mod_sig *ms);
|
bool file_mod_signature(const char *filename, file_mod_sig *ms);
|
||||||
time_t file_mod_time(const char *filename);
|
time_t file_mod_time(const char *filename);
|
||||||
|
bool file_open_test(const char *filename, int flags);
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -126,16 +126,16 @@ static bool test_list_files()
|
|||||||
struct ipset_file *ifile;
|
struct ipset_file *ifile;
|
||||||
|
|
||||||
LIST_FOREACH(hfile, ¶ms.hostlists, next)
|
LIST_FOREACH(hfile, ¶ms.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);
|
DLOG_ERR("cannot access hostlist file '%s'\n",hfile->filename);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
LIST_FOREACH(ifile, ¶ms.ipsets, next)
|
LIST_FOREACH(ifile, ¶ms.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);
|
DLOG_ERR("cannot access ipset file '%s'\n",ifile->filename);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
#include "andr/ifaddrs.h"
|
#include "andr/ifaddrs.h"
|
||||||
@ -327,6 +328,17 @@ bool file_mod_signature(const char *filename, file_mod_sig *ms)
|
|||||||
return true;
|
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)
|
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);
|
return port && (((!pf->from && !pf->to) || (port >= pf->from && port <= pf->to)) ^ pf->neg);
|
||||||
|
@ -71,6 +71,7 @@ typedef struct
|
|||||||
#define FILE_MOD_RESET(ms) memset(ms,0,sizeof(file_mod_sig))
|
#define FILE_MOD_RESET(ms) memset(ms,0,sizeof(file_mod_sig))
|
||||||
bool file_mod_signature(const char *filename, file_mod_sig *ms);
|
bool file_mod_signature(const char *filename, file_mod_sig *ms);
|
||||||
time_t file_mod_time(const char *filename);
|
time_t file_mod_time(const char *filename);
|
||||||
|
bool file_open_test(const char *filename, int flags);
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -122,16 +122,16 @@ static bool test_list_files()
|
|||||||
struct ipset_file *ifile;
|
struct ipset_file *ifile;
|
||||||
|
|
||||||
LIST_FOREACH(hfile, ¶ms.hostlists, next)
|
LIST_FOREACH(hfile, ¶ms.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);
|
DLOG_ERR("cannot access hostlist file '%s'\n",hfile->filename);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
LIST_FOREACH(ifile, ¶ms.ipsets, next)
|
LIST_FOREACH(ifile, ¶ms.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);
|
DLOG_ERR("cannot access ipset file '%s'\n",ifile->filename);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user