Rename the views from white/black to allow/deny as well as some internal constants for consistency. Note that this requires an increase in gravity database version

Signed-off-by: DL6ER <dl6er@dl6er.de>
This commit is contained in:
DL6ER
2025-08-15 19:35:32 +02:00
parent 52a5cca859
commit fe29217860
6 changed files with 92 additions and 92 deletions

View File

@@ -39,10 +39,10 @@
// Process-private prepared statements are used to support multiple forks (might // Process-private prepared statements are used to support multiple forks (might
// be TCP workers) to use the database simultaneously without corrupting the // be TCP workers) to use the database simultaneously without corrupting the
// gravity database // gravity database
sqlite3_stmt_vec *whitelist_stmt = NULL; sqlite3_stmt_vec *allowlist_stmt = NULL;
sqlite3_stmt_vec *gravity_stmt = NULL; sqlite3_stmt_vec *gravity_stmt = NULL;
sqlite3_stmt_vec *antigravity_stmt = NULL; sqlite3_stmt_vec *antigravity_stmt = NULL;
sqlite3_stmt_vec *blacklist_stmt = NULL; sqlite3_stmt_vec *denylist_stmt = NULL;
// Private variables // Private variables
static sqlite3 *gravity_db = NULL; static sqlite3 *gravity_db = NULL;
@@ -53,16 +53,16 @@ static bool gravity_abp_format = false;
// Variables memorizing the parent gravity database connection and prepared // Variables memorizing the parent gravity database connection and prepared
// statements to avoid valgrind warnings about memory leaks // statements to avoid valgrind warnings about memory leaks
static sqlite3 *parent_gravity_db = NULL; static sqlite3 *parent_gravity_db = NULL;
sqlite3_stmt_vec *parent_whitelist_stmt = NULL; sqlite3_stmt_vec *parent_allowlist_stmt = NULL;
sqlite3_stmt_vec *parent_gravity_stmt = NULL; sqlite3_stmt_vec *parent_gravity_stmt = NULL;
sqlite3_stmt_vec *parent_antigravity_stmt = NULL; sqlite3_stmt_vec *parent_antigravity_stmt = NULL;
sqlite3_stmt_vec *parent_blacklist_stmt = NULL; sqlite3_stmt_vec *parent_denylist_stmt = NULL;
// Private prototypes // Private prototypes
static bool gravityDB_open(void); static bool gravityDB_open(void);
// Table names corresponding to the enum defined in gravity-db.h // Table names corresponding to the enum defined in gravity-db.h
static const char* tablename[] = { "vw_gravity", "vw_blacklist", "vw_whitelist", "vw_regex_blacklist", "vw_regex_whitelist" , "client", "group", "adlist", "denied_domains", "allowed_domains", "" }; static const char* tablename[] = { "vw_gravity", "vw_denylist", "vw_allowlist", "vw_regex_denylist", "vw_regex_allowlist" , "client", "group", "adlist", "denied_domains", "allowed_domains", "" };
// Prototypes from functions in dnsmasq's source // Prototypes from functions in dnsmasq's source
extern void rehash(int size); extern void rehash(int size);
@@ -101,10 +101,10 @@ void gravityDB_forked(void)
gravity_db = NULL; gravity_db = NULL;
// Also pretend we have not yet prepared the list statements // Also pretend we have not yet prepared the list statements
parent_whitelist_stmt = whitelist_stmt; parent_allowlist_stmt = allowlist_stmt;
whitelist_stmt = NULL; allowlist_stmt = NULL;
parent_blacklist_stmt = blacklist_stmt; parent_denylist_stmt = denylist_stmt;
blacklist_stmt = NULL; denylist_stmt = NULL;
parent_gravity_stmt = gravity_stmt; parent_gravity_stmt = gravity_stmt;
gravity_stmt = NULL; gravity_stmt = NULL;
parent_antigravity_stmt = antigravity_stmt; parent_antigravity_stmt = antigravity_stmt;
@@ -197,10 +197,10 @@ static bool gravityDB_open(void)
sqlite3_busy_timeout(gravity_db, DATABASE_BUSY_TIMEOUT); sqlite3_busy_timeout(gravity_db, DATABASE_BUSY_TIMEOUT);
// Prepare private vector of statements for this process (might be a TCP fork!) // Prepare private vector of statements for this process (might be a TCP fork!)
if(whitelist_stmt == NULL) if(allowlist_stmt == NULL)
whitelist_stmt = new_sqlite3_stmt_vec(counters->clients); allowlist_stmt = new_sqlite3_stmt_vec(counters->clients);
if(blacklist_stmt == NULL) if(denylist_stmt == NULL)
blacklist_stmt = new_sqlite3_stmt_vec(counters->clients); denylist_stmt = new_sqlite3_stmt_vec(counters->clients);
if(gravity_stmt == NULL) if(gravity_stmt == NULL)
gravity_stmt = new_sqlite3_stmt_vec(counters->clients); gravity_stmt = new_sqlite3_stmt_vec(counters->clients);
if(antigravity_stmt == NULL) if(antigravity_stmt == NULL)
@@ -836,10 +836,10 @@ char *__attribute__ ((malloc)) get_client_names_from_ids(const char *group_ids)
return result; return result;
} }
// Prepare statements for scanning white- and blacklist as well as gravit for one client // Prepare statements for scanning white- and denylist as well as gravit for one client
// Prepare statements for scanning white- and blacklist as well as gravit for one client // Prepare statements for scanning white- and denylist as well as gravit for one client
bool gravityDB_prepare_client_statements(clientsData *client) bool gravityDB_prepare_client_statements(clientsData *client)
{ {
// Return early if gravity database is not available // Return early if gravity database is not available
@@ -857,7 +857,7 @@ bool gravityDB_prepare_client_statements(clientsData *client)
// Allocate memory for SQL statement preparation // Allocate memory for SQL statement preparation
// We need to have space for 60 characters // We need to have space for 60 characters
// plus the longest table name (vw_blacklist = 17) // plus the longest table name (vw_denylist = 17)
// plus the dynamic length of the client's group selector // plus the dynamic length of the client's group selector
const size_t querystrsz = 100 + strlen(client_groups); const size_t querystrsz = 100 + strlen(client_groups);
char *querystr = calloc(querystrsz, sizeof(char)); char *querystr = calloc(querystrsz, sizeof(char));
@@ -867,14 +867,14 @@ bool gravityDB_prepare_client_statements(clientsData *client)
return false; return false;
} }
// Prepare whitelist statement // Prepare allowlist statement
// We use SELECT EXISTS() as this is known to efficiently use the index // We use SELECT EXISTS() as this is known to efficiently use the index
// We are only interested in whether the domain exists or not in the // We are only interested in whether the domain exists or not in the
// list but don't case about duplicates or similar. SELECT EXISTS(...) // list but don't case about duplicates or similar. SELECT EXISTS(...)
// returns true as soon as it sees the first row from the query inside // returns true as soon as it sees the first row from the query inside
// of EXISTS(). // of EXISTS().
log_debug(DEBUG_DATABASE, "gravityDB_open(): Preparing vw_whitelist statement for client %s", clientip); log_debug(DEBUG_DATABASE, "gravityDB_open(): Preparing vw_allowlist statement for client %s", clientip);
if(!get_client_querystr(querystr, querystrsz, "vw_whitelist", "id", client_groups)) if(!get_client_querystr(querystr, querystrsz, "vw_allowlist", "id", client_groups))
{ {
free(querystr); free(querystr);
return false; return false;
@@ -883,13 +883,13 @@ bool gravityDB_prepare_client_statements(clientsData *client)
int rc = sqlite3_prepare_v3(gravity_db, querystr, -1, SQLITE_PREPARE_PERSISTENT, &stmt, NULL); int rc = sqlite3_prepare_v3(gravity_db, querystr, -1, SQLITE_PREPARE_PERSISTENT, &stmt, NULL);
if( rc != SQLITE_OK ) if( rc != SQLITE_OK )
{ {
log_err("gravityDB_open(\"SELECT(... vw_whitelist ...)\") - SQL error prepare: %s", sqlite3_errstr(rc)); log_err("gravityDB_open(\"SELECT(... vw_allowlist ...)\") - SQL error prepare: %s", sqlite3_errstr(rc));
whitelist_stmt->set(whitelist_stmt, client->id, NULL); allowlist_stmt->set(allowlist_stmt, client->id, NULL);
gravityDB_close(); gravityDB_close();
free(querystr); free(querystr);
return false; return false;
} }
whitelist_stmt->set(whitelist_stmt, client->id, stmt); allowlist_stmt->set(allowlist_stmt, client->id, stmt);
// Prepare gravity statement // Prepare gravity statement
log_debug(DEBUG_DATABASE, "gravityDB_open(): Preparing vw_gravity statement for client %s", clientip); log_debug(DEBUG_DATABASE, "gravityDB_open(): Preparing vw_gravity statement for client %s", clientip);
@@ -927,9 +927,9 @@ bool gravityDB_prepare_client_statements(clientsData *client)
} }
antigravity_stmt->set(antigravity_stmt, client->id, stmt); antigravity_stmt->set(antigravity_stmt, client->id, stmt);
// Prepare blacklist statement // Prepare denylist statement
log_debug(DEBUG_DATABASE, "gravityDB_open(): Preparing vw_blacklist statement for client %s", clientip); log_debug(DEBUG_DATABASE, "gravityDB_open(): Preparing vw_denylist statement for client %s", clientip);
if(!get_client_querystr(querystr, querystrsz, "vw_blacklist", "id", client_groups)) if(!get_client_querystr(querystr, querystrsz, "vw_denylist", "id", client_groups))
{ {
free(querystr); free(querystr);
return false; return false;
@@ -937,13 +937,13 @@ bool gravityDB_prepare_client_statements(clientsData *client)
rc = sqlite3_prepare_v3(gravity_db, querystr, -1, SQLITE_PREPARE_PERSISTENT, &stmt, NULL); rc = sqlite3_prepare_v3(gravity_db, querystr, -1, SQLITE_PREPARE_PERSISTENT, &stmt, NULL);
if( rc != SQLITE_OK ) if( rc != SQLITE_OK )
{ {
log_err("gravityDB_open(\"SELECT(... vw_blacklist ...)\") - SQL error prepare: %s", sqlite3_errstr(rc)); log_err("gravityDB_open(\"SELECT(... vw_denylist ...)\") - SQL error prepare: %s", sqlite3_errstr(rc));
blacklist_stmt->set(blacklist_stmt, client->id, NULL); denylist_stmt->set(denylist_stmt, client->id, NULL);
gravityDB_close(); gravityDB_close();
free(querystr); free(querystr);
return false; return false;
} }
blacklist_stmt->set(blacklist_stmt, client->id, stmt); denylist_stmt->set(denylist_stmt, client->id, stmt);
// Free allocated memory // Free allocated memory
free(querystr); free(querystr);
@@ -956,17 +956,17 @@ static inline void gravityDB_finalize_client_statements(clientsData *client)
{ {
log_debug(DEBUG_DATABASE, "Finalizing gravity statements for %s", getstr(client->ippos)); log_debug(DEBUG_DATABASE, "Finalizing gravity statements for %s", getstr(client->ippos));
if(whitelist_stmt != NULL && if(allowlist_stmt != NULL &&
whitelist_stmt->get(whitelist_stmt, client->id) != NULL) allowlist_stmt->get(allowlist_stmt, client->id) != NULL)
{ {
sqlite3_finalize(whitelist_stmt->get(whitelist_stmt, client->id)); sqlite3_finalize(allowlist_stmt->get(allowlist_stmt, client->id));
whitelist_stmt->set(whitelist_stmt, client->id, NULL); allowlist_stmt->set(allowlist_stmt, client->id, NULL);
} }
if(blacklist_stmt != NULL && if(denylist_stmt != NULL &&
blacklist_stmt->get(blacklist_stmt, client->id) != NULL) denylist_stmt->get(denylist_stmt, client->id) != NULL)
{ {
sqlite3_finalize(blacklist_stmt->get(blacklist_stmt, client->id)); sqlite3_finalize(denylist_stmt->get(denylist_stmt, client->id));
blacklist_stmt->set(blacklist_stmt, client->id, NULL); denylist_stmt->set(denylist_stmt, client->id, NULL);
} }
if(gravity_stmt != NULL && if(gravity_stmt != NULL &&
gravity_stmt->get(gravity_stmt, client->id) != NULL) gravity_stmt->get(gravity_stmt, client->id) != NULL)
@@ -1002,8 +1002,8 @@ void gravityDB_close(void)
} }
// Free allocated memory for vectors of prepared client statements // Free allocated memory for vectors of prepared client statements
free_sqlite3_stmt_vec(&whitelist_stmt); free_sqlite3_stmt_vec(&allowlist_stmt);
free_sqlite3_stmt_vec(&blacklist_stmt); free_sqlite3_stmt_vec(&denylist_stmt);
free_sqlite3_stmt_vec(&gravity_stmt); free_sqlite3_stmt_vec(&gravity_stmt);
free_sqlite3_stmt_vec(&antigravity_stmt); free_sqlite3_stmt_vec(&antigravity_stmt);
@@ -1037,14 +1037,14 @@ bool gravityDB_getTable(const unsigned char list)
// when domains are included in more than one group // when domains are included in more than one group
if(list == GRAVITY_TABLE) if(list == GRAVITY_TABLE)
querystr = "SELECT DISTINCT domain FROM vw_gravity"; querystr = "SELECT DISTINCT domain FROM vw_gravity";
else if(list == EXACT_BLACKLIST_TABLE) else if(list == EXACT_DENY_TABLE)
querystr = "SELECT domain, id FROM vw_blacklist GROUP BY id"; querystr = "SELECT domain, id FROM vw_denylist GROUP BY id";
else if(list == EXACT_WHITELIST_TABLE) else if(list == EXACT_ALLOW_TABLE)
querystr = "SELECT domain, id FROM vw_whitelist GROUP BY id"; querystr = "SELECT domain, id FROM vw_allowlist GROUP BY id";
else if(list == REGEX_DENY_TABLE) else if(list == REGEX_DENY_TABLE)
querystr = "SELECT domain, id FROM vw_regex_blacklist GROUP BY id"; querystr = "SELECT domain, id FROM vw_regex_denylist GROUP BY id";
else if(list == REGEX_ALLOW_TABLE) else if(list == REGEX_ALLOW_TABLE)
querystr = "SELECT domain, id FROM vw_regex_whitelist GROUP BY id"; querystr = "SELECT domain, id FROM vw_regex_allowlist GROUP BY id";
// Prepare SQLite3 statement // Prepare SQLite3 statement
int rc = sqlite3_prepare_v2(gravity_db, querystr, -1, &table_stmt, NULL); int rc = sqlite3_prepare_v2(gravity_db, querystr, -1, &table_stmt, NULL);
@@ -1128,17 +1128,17 @@ int gravityDB_count(const enum gravity_tables list)
// very low-end devices such as the Raspierry Pi Zero // very low-end devices such as the Raspierry Pi Zero
querystr = "SELECT value FROM info WHERE property = 'gravity_count';"; querystr = "SELECT value FROM info WHERE property = 'gravity_count';";
break; break;
case EXACT_BLACKLIST_TABLE: case EXACT_DENY_TABLE:
querystr = "SELECT COUNT(DISTINCT domain) FROM vw_blacklist"; querystr = "SELECT COUNT(DISTINCT domain) FROM vw_denylist";
break; break;
case EXACT_WHITELIST_TABLE: case EXACT_ALLOW_TABLE:
querystr = "SELECT COUNT(DISTINCT domain) FROM vw_whitelist"; querystr = "SELECT COUNT(DISTINCT domain) FROM vw_allowlist";
break; break;
case REGEX_DENY_TABLE: case REGEX_DENY_TABLE:
querystr = "SELECT COUNT(DISTINCT domain) FROM vw_regex_blacklist"; querystr = "SELECT COUNT(DISTINCT domain) FROM vw_regex_denylist";
break; break;
case REGEX_ALLOW_TABLE: case REGEX_ALLOW_TABLE:
querystr = "SELECT COUNT(DISTINCT domain) FROM vw_regex_whitelist"; querystr = "SELECT COUNT(DISTINCT domain) FROM vw_regex_allowlist";
break; break;
case CLIENTS_TABLE: case CLIENTS_TABLE:
querystr = "SELECT COUNT(1) FROM client"; querystr = "SELECT COUNT(1) FROM client";
@@ -1287,7 +1287,7 @@ enum db_result in_allowlist(const char *domain, DNSCacheData *dns_cache, clients
{ {
// If list statement is not ready and cannot be initialized (e.g. no // If list statement is not ready and cannot be initialized (e.g. no
// access to the database), we return false to prevent an FTL crash // access to the database), we return false to prevent an FTL crash
if(whitelist_stmt == NULL) if(allowlist_stmt == NULL)
return LIST_NOT_AVAILABLE; return LIST_NOT_AVAILABLE;
// Check if this client needs a rechecking of group membership // Check if this client needs a rechecking of group membership
@@ -1295,14 +1295,14 @@ enum db_result in_allowlist(const char *domain, DNSCacheData *dns_cache, clients
// Check again as the client may have been reloaded if this is a TCP // Check again as the client may have been reloaded if this is a TCP
// worker // worker
if(whitelist_stmt == NULL) if(allowlist_stmt == NULL)
return LIST_NOT_AVAILABLE; return LIST_NOT_AVAILABLE;
// Get whitelist statement from vector of prepared statements if available // Get allowlist statement from vector of prepared statements if available
sqlite3_stmt *stmt = whitelist_stmt->get(whitelist_stmt, client->id); sqlite3_stmt *stmt = allowlist_stmt->get(allowlist_stmt, client->id);
// If client statement is not ready and cannot be initialized (e.g. no access to // If client statement is not ready and cannot be initialized (e.g. no access to
// the database), we return false (not in whitelist) to prevent an FTL crash // the database), we return false (not in allowlist) to prevent an FTL crash
if(stmt == NULL && !gravityDB_prepare_client_statements(client)) if(stmt == NULL && !gravityDB_prepare_client_statements(client))
{ {
log_err("Gravity database not available (allowlist)"); log_err("Gravity database not available (allowlist)");
@@ -1311,12 +1311,12 @@ enum db_result in_allowlist(const char *domain, DNSCacheData *dns_cache, clients
// Update statement if has just been initialized // Update statement if has just been initialized
if(stmt == NULL) if(stmt == NULL)
stmt = whitelist_stmt->get(whitelist_stmt, client->id); stmt = allowlist_stmt->get(allowlist_stmt, client->id);
// We have to check both the exact whitelist (using a prepared database statement) // We have to check both the exact allowlist (using a prepared database statement)
// as well the compiled regex whitelist filters to check if the current domain is // as well the compiled regex allowlist filters to check if the current domain is
// whitelisted. // allowlisted.
return domain_in_list(domain, stmt, "whitelist", &dns_cache->list_id); return domain_in_list(domain, stmt, "allowlist", &dns_cache->list_id);
} }
cJSON *gen_abp_patterns(const char *domain, const bool antigravity) cJSON *gen_abp_patterns(const char *domain, const bool antigravity)
@@ -1436,7 +1436,7 @@ enum db_result in_gravity(const char *domain, clientsData *client, const bool an
if(gravity_stmt == NULL || antigravity_stmt == NULL) if(gravity_stmt == NULL || antigravity_stmt == NULL)
return LIST_NOT_AVAILABLE; return LIST_NOT_AVAILABLE;
// Get whitelist statement from vector of prepared statements // Get allowlist statement from vector of prepared statements
sqlite3_stmt *stmt = antigravity ? sqlite3_stmt *stmt = antigravity ?
antigravity_stmt->get(antigravity_stmt, client->id) : antigravity_stmt->get(antigravity_stmt, client->id) :
gravity_stmt->get(gravity_stmt, client->id); gravity_stmt->get(gravity_stmt, client->id);
@@ -1504,7 +1504,7 @@ enum db_result in_denylist(const char *domain, DNSCacheData *dns_cache, clientsD
{ {
// If list statement is not ready and cannot be initialized (e.g. no // If list statement is not ready and cannot be initialized (e.g. no
// access to the database), we return false to prevent an FTL crash // access to the database), we return false to prevent an FTL crash
if(blacklist_stmt == NULL) if(denylist_stmt == NULL)
return LIST_NOT_AVAILABLE; return LIST_NOT_AVAILABLE;
// Check if this client needs a rechecking of group membership // Check if this client needs a rechecking of group membership
@@ -1512,14 +1512,14 @@ enum db_result in_denylist(const char *domain, DNSCacheData *dns_cache, clientsD
// Check again as the client may have been reloaded if this is a TCP // Check again as the client may have been reloaded if this is a TCP
// worker // worker
if(blacklist_stmt == NULL) if(denylist_stmt == NULL)
return LIST_NOT_AVAILABLE; return LIST_NOT_AVAILABLE;
// Get whitelist statement from vector of prepared statements // Get allowlist statement from vector of prepared statements
sqlite3_stmt *stmt = blacklist_stmt->get(blacklist_stmt, client->id); sqlite3_stmt *stmt = denylist_stmt->get(denylist_stmt, client->id);
// If client statement is not ready and cannot be initialized (e.g. no access to // If client statement is not ready and cannot be initialized (e.g. no access to
// the database), we return false (not in blacklist) to prevent an FTL crash // the database), we return false (not in denylist) to prevent an FTL crash
if(stmt == NULL && !gravityDB_prepare_client_statements(client)) if(stmt == NULL && !gravityDB_prepare_client_statements(client))
{ {
log_err("Gravity database not available (denylist)"); log_err("Gravity database not available (denylist)");
@@ -1528,9 +1528,9 @@ enum db_result in_denylist(const char *domain, DNSCacheData *dns_cache, clientsD
// Update statement if has just been initialized // Update statement if has just been initialized
if(stmt == NULL) if(stmt == NULL)
stmt = blacklist_stmt->get(blacklist_stmt, client->id); stmt = denylist_stmt->get(denylist_stmt, client->id);
return domain_in_list(domain, stmt, "blacklist", &dns_cache->list_id); return domain_in_list(domain, stmt, "denylist", &dns_cache->list_id);
} }
bool gravityDB_get_regex_client_groups(clientsData *client, const unsigned int numregex, const regexData *regex, bool gravityDB_get_regex_client_groups(clientsData *client, const unsigned int numregex, const regexData *regex,

View File

@@ -686,8 +686,8 @@ void FTL_reload_all_domainlists(void)
counters->database.groups = gravityDB_count(GROUPS_TABLE); counters->database.groups = gravityDB_count(GROUPS_TABLE);
counters->database.clients = gravityDB_count(CLIENTS_TABLE); counters->database.clients = gravityDB_count(CLIENTS_TABLE);
counters->database.lists = gravityDB_count(ADLISTS_TABLE); counters->database.lists = gravityDB_count(ADLISTS_TABLE);
counters->database.domains.allowed.exact = gravityDB_count(EXACT_WHITELIST_TABLE); counters->database.domains.allowed.exact = gravityDB_count(EXACT_ALLOW_TABLE);
counters->database.domains.denied.exact = gravityDB_count(EXACT_BLACKLIST_TABLE); counters->database.domains.denied.exact = gravityDB_count(EXACT_DENY_TABLE);
counters->database.domains.allowed.regex = gravityDB_count(REGEX_ALLOW_TABLE); counters->database.domains.allowed.regex = gravityDB_count(REGEX_ALLOW_TABLE);
counters->database.domains.denied.regex = gravityDB_count(REGEX_DENY_TABLE); counters->database.domains.denied.regex = gravityDB_count(REGEX_DENY_TABLE);

View File

@@ -192,8 +192,8 @@ enum gravity_list_type {
enum gravity_tables { enum gravity_tables {
GRAVITY_TABLE, GRAVITY_TABLE,
EXACT_BLACKLIST_TABLE, EXACT_DENY_TABLE,
EXACT_WHITELIST_TABLE, EXACT_ALLOW_TABLE,
REGEX_DENY_TABLE, REGEX_DENY_TABLE,
REGEX_ALLOW_TABLE, REGEX_ALLOW_TABLE,
CLIENTS_TABLE, CLIENTS_TABLE,

View File

@@ -702,13 +702,13 @@ void reload_per_client_regex(clientsData *client)
if(num_regex[REGEX_DENY] > 0) if(num_regex[REGEX_DENY] > 0)
gravityDB_get_regex_client_groups(client, num_regex[REGEX_DENY], gravityDB_get_regex_client_groups(client, num_regex[REGEX_DENY],
deny_regex, REGEX_DENY, deny_regex, REGEX_DENY,
"vw_regex_blacklist"); "vw_regex_denylist");
// Load regex per-group allow regex for this client // Load regex per-group allow regex for this client
if(num_regex[REGEX_ALLOW] > 0) if(num_regex[REGEX_ALLOW] > 0)
gravityDB_get_regex_client_groups(client, num_regex[REGEX_ALLOW], gravityDB_get_regex_client_groups(client, num_regex[REGEX_ALLOW],
allow_regex, REGEX_ALLOW, allow_regex, REGEX_ALLOW,
"vw_regex_whitelist"); "vw_regex_allowlist");
} }
static void read_regex_table(const enum regex_type regexid) static void read_regex_table(const enum regex_type regexid)

View File

@@ -64,7 +64,7 @@ CREATE TABLE info
value TEXT NOT NULL value TEXT NOT NULL
); );
INSERT INTO "info" VALUES('version','19'); INSERT INTO "info" VALUES('version','20');
CREATE TABLE domainlist_by_group CREATE TABLE domainlist_by_group
( (
@@ -104,7 +104,7 @@ CREATE TRIGGER tr_domainlist_update AFTER UPDATE ON domainlist
UPDATE domainlist SET date_modified = (cast(strftime('%s', 'now') as int)) WHERE domain = NEW.domain; UPDATE domainlist SET date_modified = (cast(strftime('%s', 'now') as int)) WHERE domain = NEW.domain;
END; END;
CREATE VIEW vw_whitelist AS SELECT domain, domainlist.id AS id, domainlist_by_group.group_id AS group_id CREATE VIEW vw_allowlist AS SELECT domain, domainlist.id AS id, domainlist_by_group.group_id AS group_id
FROM domainlist FROM domainlist
LEFT JOIN domainlist_by_group ON domainlist_by_group.domainlist_id = domainlist.id LEFT JOIN domainlist_by_group ON domainlist_by_group.domainlist_id = domainlist.id
LEFT JOIN "group" ON "group".id = domainlist_by_group.group_id LEFT JOIN "group" ON "group".id = domainlist_by_group.group_id
@@ -112,7 +112,7 @@ CREATE VIEW vw_whitelist AS SELECT domain, domainlist.id AS id, domainlist_by_gr
AND domainlist.type = 0 AND domainlist.type = 0
ORDER BY domainlist.id; ORDER BY domainlist.id;
CREATE VIEW vw_blacklist AS SELECT domain, domainlist.id AS id, domainlist_by_group.group_id AS group_id CREATE VIEW vw_denylist AS SELECT domain, domainlist.id AS id, domainlist_by_group.group_id AS group_id
FROM domainlist FROM domainlist
LEFT JOIN domainlist_by_group ON domainlist_by_group.domainlist_id = domainlist.id LEFT JOIN domainlist_by_group ON domainlist_by_group.domainlist_id = domainlist.id
LEFT JOIN "group" ON "group".id = domainlist_by_group.group_id LEFT JOIN "group" ON "group".id = domainlist_by_group.group_id
@@ -120,7 +120,7 @@ CREATE VIEW vw_blacklist AS SELECT domain, domainlist.id AS id, domainlist_by_gr
AND domainlist.type = 1 AND domainlist.type = 1
ORDER BY domainlist.id; ORDER BY domainlist.id;
CREATE VIEW vw_regex_whitelist AS SELECT domain, domainlist.id AS id, domainlist_by_group.group_id AS group_id CREATE VIEW vw_regex_allowlist AS SELECT domain, domainlist.id AS id, domainlist_by_group.group_id AS group_id
FROM domainlist FROM domainlist
LEFT JOIN domainlist_by_group ON domainlist_by_group.domainlist_id = domainlist.id LEFT JOIN domainlist_by_group ON domainlist_by_group.domainlist_id = domainlist.id
LEFT JOIN "group" ON "group".id = domainlist_by_group.group_id LEFT JOIN "group" ON "group".id = domainlist_by_group.group_id
@@ -128,7 +128,7 @@ CREATE VIEW vw_regex_whitelist AS SELECT domain, domainlist.id AS id, domainlist
AND domainlist.type = 2 AND domainlist.type = 2
ORDER BY domainlist.id; ORDER BY domainlist.id;
CREATE VIEW vw_regex_blacklist AS SELECT domain, domainlist.id AS id, domainlist_by_group.group_id AS group_id CREATE VIEW vw_regex_denylist AS SELECT domain, domainlist.id AS id, domainlist_by_group.group_id AS group_id
FROM domainlist FROM domainlist
LEFT JOIN domainlist_by_group ON domainlist_by_group.domainlist_id = domainlist.id LEFT JOIN domainlist_by_group ON domainlist_by_group.domainlist_id = domainlist.id
LEFT JOIN "group" ON "group".id = domainlist_by_group.group_id LEFT JOIN "group" ON "group".id = domainlist_by_group.group_id

View File

@@ -125,7 +125,7 @@
[[ ${lines[0]} == "0.0.0.0" ]] [[ ${lines[0]} == "0.0.0.0" ]]
} }
@test "Client 2: Regex denylist match matching unassociated whitelist is blocked" { @test "Client 2: Regex denylist match matching unassociated allowlist is blocked" {
run bash -c "dig regex1.ftl -b 127.0.0.2 @127.0.0.1 +short" run bash -c "dig regex1.ftl -b 127.0.0.2 @127.0.0.1 +short"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} == "0.0.0.0" ]] [[ ${lines[0]} == "0.0.0.0" ]]
@@ -176,16 +176,16 @@
run bash -c "grep -c \"Gravity database: Client aa:bb:cc:dd:ee:ff found. Using groups (4)\" /var/log/pihole/FTL.log" run bash -c "grep -c \"Gravity database: Client aa:bb:cc:dd:ee:ff found. Using groups (4)\" /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} != "0" ]] [[ ${lines[0]} != "0" ]]
run bash -c "grep -c 'Regex deny: Querying groups for client 127.0.0.4: \"SELECT id from vw_regex_blacklist WHERE group_id IN (4);\"' /var/log/pihole/FTL.log" run bash -c "grep -c 'Regex deny: Querying groups for client 127.0.0.4: \"SELECT id from vw_regex_denylist WHERE group_id IN (4);\"' /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} == "1" ]] [[ ${lines[0]} == "1" ]]
run bash -c "grep -c 'Regex allow: Querying groups for client 127.0.0.4: \"SELECT id from vw_regex_whitelist WHERE group_id IN (4);\"' /var/log/pihole/FTL.log" run bash -c "grep -c 'Regex allow: Querying groups for client 127.0.0.4: \"SELECT id from vw_regex_allowlist WHERE group_id IN (4);\"' /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} == "1" ]] [[ ${lines[0]} == "1" ]]
run bash -c "grep -c 'get_client_querystr: SELECT id from vw_whitelist WHERE domain = ? AND group_id IN (4);' /var/log/pihole/FTL.log" run bash -c "grep -c 'get_client_querystr: SELECT id from vw_allowlist WHERE domain = ? AND group_id IN (4);' /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} != "0" ]] [[ ${lines[0]} != "0" ]]
run bash -c "grep -c 'get_client_querystr: SELECT id from vw_blacklist WHERE domain = ? AND group_id IN (4);' /var/log/pihole/FTL.log" run bash -c "grep -c 'get_client_querystr: SELECT id from vw_denylist WHERE domain = ? AND group_id IN (4);' /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} != "0" ]] [[ ${lines[0]} != "0" ]]
run bash -c "grep -c 'get_client_querystr: SELECT adlist_id from vw_gravity WHERE domain = ? AND group_id IN (4);' /var/log/pihole/FTL.log" run bash -c "grep -c 'get_client_querystr: SELECT adlist_id from vw_gravity WHERE domain = ? AND group_id IN (4);' /var/log/pihole/FTL.log"
@@ -208,16 +208,16 @@
run bash -c "grep -c \"Gravity database: Client aa:bb:cc:dd:ee:ff found. Using groups (4)\" /var/log/pihole/FTL.log" run bash -c "grep -c \"Gravity database: Client aa:bb:cc:dd:ee:ff found. Using groups (4)\" /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} != "0" ]] [[ ${lines[0]} != "0" ]]
run bash -c "grep -c 'Regex deny: Querying groups for client 127.0.0.5: \"SELECT id from vw_regex_blacklist WHERE group_id IN (4);\"' /var/log/pihole/FTL.log" run bash -c "grep -c 'Regex deny: Querying groups for client 127.0.0.5: \"SELECT id from vw_regex_denylist WHERE group_id IN (4);\"' /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} == "1" ]] [[ ${lines[0]} == "1" ]]
run bash -c "grep -c 'Regex allow: Querying groups for client 127.0.0.5: \"SELECT id from vw_regex_whitelist WHERE group_id IN (4);\"' /var/log/pihole/FTL.log" run bash -c "grep -c 'Regex allow: Querying groups for client 127.0.0.5: \"SELECT id from vw_regex_allowlist WHERE group_id IN (4);\"' /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} == "1" ]] [[ ${lines[0]} == "1" ]]
run bash -c "grep -c 'get_client_querystr: SELECT id from vw_whitelist WHERE domain = ? AND group_id IN (4);' /var/log/pihole/FTL.log" run bash -c "grep -c 'get_client_querystr: SELECT id from vw_allowlist WHERE domain = ? AND group_id IN (4);' /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} != "0" ]] [[ ${lines[0]} != "0" ]]
run bash -c "grep -c 'get_client_querystr: SELECT id from vw_blacklist WHERE domain = ? AND group_id IN (4);' /var/log/pihole/FTL.log" run bash -c "grep -c 'get_client_querystr: SELECT id from vw_denylist WHERE domain = ? AND group_id IN (4);' /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} != "0" ]] [[ ${lines[0]} != "0" ]]
run bash -c "grep -c 'get_client_querystr: SELECT adlist_id from vw_gravity WHERE domain = ? AND group_id IN (4);' /var/log/pihole/FTL.log" run bash -c "grep -c 'get_client_querystr: SELECT adlist_id from vw_gravity WHERE domain = ? AND group_id IN (4);' /var/log/pihole/FTL.log"
@@ -246,16 +246,16 @@
run bash -c "grep -c \"Gravity database: Client 00:11:22:33:44:55 found (identified by interface enp0s123). Using groups (5)\" /var/log/pihole/FTL.log" run bash -c "grep -c \"Gravity database: Client 00:11:22:33:44:55 found (identified by interface enp0s123). Using groups (5)\" /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} == "1" ]] [[ ${lines[0]} == "1" ]]
run bash -c "grep -c 'Regex deny: Querying groups for client 127.0.0.6: \"SELECT id from vw_regex_blacklist WHERE group_id IN (5);\"' /var/log/pihole/FTL.log" run bash -c "grep -c 'Regex deny: Querying groups for client 127.0.0.6: \"SELECT id from vw_regex_denylist WHERE group_id IN (5);\"' /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} == "1" ]] [[ ${lines[0]} == "1" ]]
run bash -c "grep -c 'Regex allow: Querying groups for client 127.0.0.6: \"SELECT id from vw_regex_whitelist WHERE group_id IN (5);\"' /var/log/pihole/FTL.log" run bash -c "grep -c 'Regex allow: Querying groups for client 127.0.0.6: \"SELECT id from vw_regex_allowlist WHERE group_id IN (5);\"' /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} == "1" ]] [[ ${lines[0]} == "1" ]]
run bash -c "grep -c 'get_client_querystr: SELECT id from vw_whitelist WHERE domain = ? AND group_id IN (5);' /var/log/pihole/FTL.log" run bash -c "grep -c 'get_client_querystr: SELECT id from vw_allowlist WHERE domain = ? AND group_id IN (5);' /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} == "1" ]] [[ ${lines[0]} == "1" ]]
run bash -c "grep -c 'get_client_querystr: SELECT id from vw_blacklist WHERE domain = ? AND group_id IN (5);' /var/log/pihole/FTL.log" run bash -c "grep -c 'get_client_querystr: SELECT id from vw_denylist WHERE domain = ? AND group_id IN (5);' /var/log/pihole/FTL.log"
printf "%s\n" "${lines[@]}" printf "%s\n" "${lines[@]}"
[[ ${lines[0]} == "1" ]] [[ ${lines[0]} == "1" ]]
run bash -c "grep -c 'get_client_querystr: SELECT adlist_id from vw_gravity WHERE domain = ? AND group_id IN (5);' /var/log/pihole/FTL.log" run bash -c "grep -c 'get_client_querystr: SELECT adlist_id from vw_gravity WHERE domain = ? AND group_id IN (5);' /var/log/pihole/FTL.log"