From 0477d25d4bdfc5f1932958c9777b9350a64b7084 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Thu, 6 Feb 2025 18:14:34 +0100 Subject: [PATCH] Continued: - delete all solved obfuscation patterns at once - only vacuum database if rows have been deleted --- fba/commands.py | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/fba/commands.py b/fba/commands.py index 3aee14c..5a1d960 100644 --- a/fba/commands.py +++ b/fba/commands.py @@ -2050,32 +2050,40 @@ def check_obfuscations(args: argparse.Namespace) -> int: locking.acquire() # Init variables - deleted = 0 + deleted = [] database.cursor.execute("SELECT pattern FROM obfuscation ORDER BY pattern ASC") rows = database.cursor.fetchall() logger.info("Checking %d obfuscations ...", len(rows)) for row in rows: - logger.debug("row[pattern]='%s'", row["pattern"]) + logger.debug("row[pattern]='%s' - BEFORE!", row["pattern"]) pattern = row["pattern"].replace("*", "_").replace("?", "_") + logger.debug("pattern='%s' - AFTER!", pattern) database.cursor.execute("SELECT domain FROM instances WHERE domain LIKE '" + pattern + "' LIMIT 1") - check = database.cursor.fetchone() + instance = database.cursor.fetchone() - logger.debug("check[]='%s'", type(check)) - if check is not None: - logger.info("Deleting row[pattern]='%s', solved to check[domain]='%s' ...", row["pattern"], check["domain"]) - database.cursor.execute("DELETE FROM instances WHERE domain=? LIMIT 1", [row["pattern"]]) - deleted = deleted + 1 + logger.debug("instance[]='%s'", type(instance)) + if instance is not None: + logger.info("Deleting row[pattern]='%s', solved to instance[domain]='%s' ...", row["pattern"], instance["domain"]) + deleted.append(row["pattern"]) - logger.info("Deleted %d patterns ...", deleted) + logger.debug("deleted()=%d", len(deleted)) + if len(deleted) > 0: + logger.info("Deleting %d pattern(s) ...", len(deleted)) + delete_sql = ", ".join([f"\'{pattern}\'" for pattern in deleted]) - logger.debug("Invoking commit() ...") - database.connection.commit() + logger.debug("delete_sql='%s'", delete_sql) + database.cursor.execute("DELETE FROM obfuscation WHERE pattern IN (%s)" % delete_sql) - logger.debug("Vaccum cleaning database ...") - database.cursor.execute("VACUUM") + logger.debug("Invoking commit() ...") + database.connection.commit() + + logger.info("Vaccum cleaning database ...") + database.cursor.execute("VACUUM") + else: + logger.info("No pattern could be found as solved domain.") logger.debug("Success! - EXIT!") return 0 -- 2.39.5