From 152e2c922e8c0b1713f148e34782ac8a80a01fc2 Mon Sep 17 00:00:00 2001 From: DL6ER Date: Tue, 18 Jul 2017 12:09:49 +0200 Subject: [PATCH 1/2] Improve error messages and check for more return codes in various database subroutines Signed-off-by: DL6ER --- database.c | 64 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 20 deletions(-) diff --git a/database.c b/database.c index f85cc4a0..7ab9d3f3 100644 --- a/database.c +++ b/database.c @@ -49,7 +49,7 @@ bool dbopen(void) pthread_mutex_lock(&dblock); int rc = sqlite3_open_v2(FTLfiles.db, &db, SQLITE_OPEN_READWRITE, NULL); if( rc ){ - logg("Cannot open database: %s", sqlite3_errmsg(db)); + logg("dbopen() - SQL error (%i): %s", rc, sqlite3_errmsg(db)); dbclose(); return false; } @@ -70,7 +70,6 @@ bool dbquery(const char *format, ...) if(query == NULL) { logg("Memory allocation failed in dbquery()"); - va_end(args); return false; } @@ -96,7 +95,7 @@ bool db_create(void) bool ret; int rc = sqlite3_open_v2(FTLfiles.db, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL); if( rc ){ - logg("Can't create database: %s", sqlite3_errmsg(db)); + logg("db_create() - SQL error (%i): %s", rc, sqlite3_errmsg(db)); dbclose(); return false; } @@ -131,7 +130,7 @@ void db_init(void) { int rc = sqlite3_open_v2(FTLfiles.db, &db, SQLITE_OPEN_READWRITE, NULL); if( rc ){ - logg("Cannot open database: %s", sqlite3_errmsg(db)); + logg("db_init() - Cannot open database (%i): %s", rc, sqlite3_errmsg(db)); dbclose(); logg("Creating new (empty) database"); @@ -171,16 +170,16 @@ int db_get_FTL_property(unsigned int ID) rc = sqlite3_prepare(db, querystring, -1, &dbstmt, NULL); if( rc ){ - logg("Cannot read from database: %s", sqlite3_errmsg(db)); + logg("db_get_FTL_property() - SQL error prepare (%i): %s", rc, sqlite3_errmsg(db)); dbclose(); return -1; } free(querystring); // Evaluate SQL statement - sqlite3_step(dbstmt); - if( rc ){ - logg("Cannot evaluate in database: %s", sqlite3_errmsg(db)); + rc = sqlite3_step(dbstmt); + if( rc != SQLITE_ROW ){ + logg("db_get_FTL_property() - SQL error step (%i): %s", rc, sqlite3_errmsg(db)); dbclose(); return -1; } @@ -200,15 +199,23 @@ bool db_set_FTL_property(unsigned int ID, int value) int number_of_queries_in_DB(void) { sqlite3_stmt* stmt; - int result = -1; // Count number of rows using the index timestamp is faster than select(*) - sqlite3_prepare_v2(db, "SELECT COUNT(timestamp) FROM queries", -1, &stmt, NULL); - int rc = sqlite3_step(stmt); - if (rc == SQLITE_ROW) - result = sqlite3_column_int(stmt, 0); - else - logg("get_number_of_queries_in_DB() - SQL error: %s", sqlite3_errmsg(db)); + int rc = sqlite3_prepare_v2(db, "SELECT COUNT(timestamp) FROM queries", -1, &stmt, NULL); + if( rc ){ + logg("number_of_queries_in_DB() - SQL error prepare (%i): %s", rc, sqlite3_errmsg(db)); + dbclose(); + return -1; + } + + rc = sqlite3_step(stmt); + if( rc != SQLITE_ROW ){ + logg("number_of_queries_in_DB() - SQL error step (%i): %s", rc, sqlite3_errmsg(db)); + dbclose(); + return -1; + } + + int result = sqlite3_column_int(stmt, 0); sqlite3_finalize(stmt); @@ -238,11 +245,16 @@ void save_to_DB(void) // Open database if(!dbopen()) { - logg("Failed to open DB in save_to_DB()"); + logg("save_to_DB() - failed to open DB"); return; } int lasttimestamp = db_get_FTL_property(DB_LASTTIMESTAMP); + if(lasttimestamp < 0) + { + logg("save_to_DB() - error in trying to get last time stamp from database"); + return; + } int newlasttimestamp = lasttimestamp; unsigned int saved = 0, saved_error = 0; @@ -250,8 +262,20 @@ void save_to_DB(void) sqlite3_stmt* stmt; bool ret = dbquery("BEGIN TRANSACTION"); - if(!ret){ dbclose(); return; } - sqlite3_prepare_v2(db, "INSERT INTO queries VALUES (NULL,?,?,?,?,?,?)", -1, &stmt, NULL); + if(!ret) + { + logg("save_to_DB() - unable to begin transaction (%i): %s", ret, sqlite3_errmsg(db)); + dbclose(); + return; + } + + int rc = sqlite3_prepare_v2(db, "INSERT INTO queries VALUES (NULL,?,?,?,?,?,?)", -1, &stmt, NULL); + if( rc ) + { + logg("save_to_DB() - error in preparing SQL statement (%i): %s", ret, sqlite3_errmsg(db)); + dbclose(); + return; + } for(i = lastdbindex; i < counters.queries; i++) { @@ -298,12 +322,12 @@ void save_to_DB(void) } // Step and check if successful - int rc = sqlite3_step(stmt); + rc = sqlite3_step(stmt); sqlite3_clear_bindings(stmt); sqlite3_reset(stmt); if( rc != SQLITE_DONE ){ - logg("save_to_DB() - SQL error: %s", sqlite3_errmsg(db)); + logg("save_to_DB() - SQL error (%i): %s", rc, sqlite3_errmsg(db)); saved_error++; continue; } From c74e8eb92fb7358b320edd7f1edc443cf502a163 Mon Sep 17 00:00:00 2001 From: Mcat12 Date: Sat, 29 Jul 2017 19:11:38 -0400 Subject: [PATCH 2/2] Ignore invalid domains (containing ") Signed-off-by: Mcat12 --- parser.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/parser.c b/parser.c index 0ff46b7c..08bf7207 100644 --- a/parser.c +++ b/parser.c @@ -203,6 +203,12 @@ void process_pihole_log(int file) continue; } + if(strstr(readbuffer, "\"") != NULL) + { + if(debug) logg("Ignoring \" domain (query)"); + continue; + } + if(!config.analyze_AAAA && strstr(readbuffer,"]: query[AAAA]") != NULL) { if(debug) logg("Not analyzing AAAA query");