From 7d8df963b4a345f8388bd1ed49a9a2485bea0e2c Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Wed, 7 Oct 2020 11:50:19 +0200 Subject: [PATCH 01/10] In result iterator access severity directly if possible --- src/manage_sql.c | 84 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 70 insertions(+), 14 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index 3e52b7eb9..ae1338591 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -21449,7 +21449,7 @@ where_qod (int min_qod) /** * @brief Result iterator columns. */ -#define BASE_RESULT_ITERATOR_COLUMNS \ +#define PRE_BASE_RESULT_ITERATOR_COLUMNS(new_severity_sql) \ { "results.id", NULL, KEYWORD_TYPE_INTEGER }, \ { "results.uuid", NULL, KEYWORD_TYPE_STRING }, \ { "nvts.name", \ @@ -21472,12 +21472,7 @@ where_qod (int min_qod) { "port", "location", KEYWORD_TYPE_STRING }, \ { "nvt", NULL, KEYWORD_TYPE_STRING }, \ { "severity_to_type (severity)", "original_type", KEYWORD_TYPE_STRING }, \ - { "severity_to_type ((SELECT new_severity FROM result_new_severities" \ - " WHERE result_new_severities.result = results.id" \ - " AND result_new_severities.user = opts.user_id" \ - " AND result_new_severities.override = opts.override" \ - " AND result_new_severities.dynamic = opts.dynamic" \ - " LIMIT 1))", \ + { "severity_to_type (" new_severity_sql ")", \ "type", \ KEYWORD_TYPE_STRING }, \ { "description", NULL, KEYWORD_TYPE_STRING }, \ @@ -21488,12 +21483,7 @@ where_qod (int min_qod) KEYWORD_TYPE_DOUBLE }, \ { "nvt_version", NULL, KEYWORD_TYPE_STRING }, \ { "severity", "original_severity", KEYWORD_TYPE_DOUBLE }, \ - { "(SELECT new_severity FROM result_new_severities" \ - " WHERE result_new_severities.result = results.id" \ - " AND result_new_severities.user = opts.user_id" \ - " AND result_new_severities.override = opts.override" \ - " AND result_new_severities.dynamic = opts.dynamic" \ - " LIMIT 1)", \ + { new_severity_sql, \ "severity", \ KEYWORD_TYPE_DOUBLE }, \ { "nvts.name", \ @@ -21590,6 +21580,24 @@ where_qod (int min_qod) NULL, \ KEYWORD_TYPE_STRING }, +/** + * @brief Result iterator columns. + */ +#define BASE_RESULT_ITERATOR_COLUMNS \ + PRE_BASE_RESULT_ITERATOR_COLUMNS("results.severity") + +/** + * @brief Result iterator columns. + */ +#define BASE_RESULT_ITERATOR_COLUMNS_OD \ + PRE_BASE_RESULT_ITERATOR_COLUMNS("(SELECT new_severity" \ + " FROM result_new_severities" \ + " WHERE result_new_severities.result = results.id" \ + " AND result_new_severities.user = opts.user_id" \ + " AND result_new_severities.override = opts.override" \ + " AND result_new_severities.dynamic = opts.dynamic" \ + " LIMIT 1)") + /** * @brief Result iterator columns. */ @@ -21605,6 +21613,21 @@ where_qod (int min_qod) { NULL, NULL, KEYWORD_TYPE_UNKNOWN } \ } +/** + * @brief Result iterator columns. + */ +#define RESULT_ITERATOR_COLUMNS_OD \ + { \ + BASE_RESULT_ITERATOR_COLUMNS_OD \ + { SECINFO_SQL_RESULT_CERT_BUNDS, \ + NULL, \ + KEYWORD_TYPE_INTEGER }, \ + { SECINFO_SQL_RESULT_DFN_CERTS, \ + NULL, \ + KEYWORD_TYPE_INTEGER }, \ + { NULL, NULL, KEYWORD_TYPE_UNKNOWN } \ + } + /** * @brief Result iterator columns, when CERT db is not loaded. */ @@ -21620,6 +21643,21 @@ where_qod (int min_qod) { NULL, NULL, KEYWORD_TYPE_UNKNOWN } \ } +/** + * @brief Result iterator columns, when CERT db is not loaded. + */ +#define RESULT_ITERATOR_COLUMNS_OD_NO_CERT \ + { \ + BASE_RESULT_ITERATOR_COLUMNS_OD \ + { "0", \ + NULL, \ + KEYWORD_TYPE_INTEGER }, \ + { "0", \ + NULL, \ + KEYWORD_TYPE_INTEGER }, \ + { NULL, NULL, KEYWORD_TYPE_UNKNOWN } \ + } + /** * @brief Generate the extra_tables string for a result iterator. * @@ -22007,10 +22045,13 @@ init_result_get_iterator (iterator_t* iterator, const get_data_t *get, { static const char *filter_columns[] = RESULT_ITERATOR_FILTER_COLUMNS; static column_t columns[] = RESULT_ITERATOR_COLUMNS; + static column_t columns_overrides_dynamic[] = RESULT_ITERATOR_COLUMNS_OD; static column_t columns_no_cert[] = RESULT_ITERATOR_COLUMNS_NO_CERT; + static column_t columns_overrides_dynamic_no_cert[] = RESULT_ITERATOR_COLUMNS_OD_NO_CERT; int ret; gchar *filter, *extra_tables, *extra_where, *opts_tables; int apply_overrides, dynamic_severity; + column_t *actual_columns; if (report == -1) { @@ -22031,6 +22072,21 @@ init_result_get_iterator (iterator_t* iterator, const get_data_t *get, = filter_term_apply_overrides (filter ? filter : get->filter); dynamic_severity = setting_dynamic_severity_int (); + if (manage_cert_loaded ()) + { + if (apply_overrides == 0 && dynamic_severity == 0) + actual_columns = columns; + else + actual_columns = columns_overrides_dynamic; + } + else + { + if (apply_overrides == 0 && dynamic_severity == 0) + actual_columns = columns_no_cert; + else + actual_columns = columns_overrides_dynamic_no_cert; + } + opts_tables = result_iterator_opts_table (apply_overrides, dynamic_severity); extra_tables = g_strdup_printf (" LEFT OUTER JOIN nvts" " ON results.nvt = nvts.oid %s", @@ -22047,7 +22103,7 @@ init_result_get_iterator (iterator_t* iterator, const get_data_t *get, "result", get, /* SELECT columns. */ - manage_cert_loaded () ? columns : columns_no_cert, + actual_columns, NULL, /* Filterable columns not in SELECT columns. */ NULL, From c7c37b5d7a7936ff4af36fde923b947c58a66832 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Wed, 7 Oct 2020 12:03:01 +0200 Subject: [PATCH 02/10] Also access severity directly for WHERE clause --- src/manage_sql.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index ae1338591..810c72fa2 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -21746,17 +21746,20 @@ results_extra_where (int trash, report_t report, const gchar* host, // Build clause fragments - new_severity_sql - = g_strdup_printf ("(SELECT new_severity FROM result_new_severities" - " WHERE result_new_severities.result = results.id" - " AND result_new_severities.user" - " = (SELECT id FROM users WHERE uuid = '%s')" - " AND override = %d" - " AND dynamic = %d" - " LIMIT 1)", - current_credentials.uuid, - apply_overrides, - dynamic_severity); + if (apply_overrides == 0 && dynamic_severity == 0) + new_severity_sql = g_strdup ("results.severity"); + else + new_severity_sql + = g_strdup_printf ("(SELECT new_severity FROM result_new_severities" + " WHERE result_new_severities.result = results.id" + " AND result_new_severities.user" + " = (SELECT id FROM users WHERE uuid = '%s')" + " AND override = %d" + " AND dynamic = %d" + " LIMIT 1)", + current_credentials.uuid, + apply_overrides, + dynamic_severity); // Build filter clauses From bfc621926a1fe0a813a7f04e9f644f110f1273c5 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Wed, 7 Oct 2020 12:10:31 +0200 Subject: [PATCH 03/10] Also access severity directly for counts and hosts --- src/manage_sql.c | 48 +++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index 810c72fa2..d59bd0787 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -21850,15 +21850,17 @@ init_result_get_iterator_severity (iterator_t* iterator, const get_data_t *get, column_array_set (filterable_columns, "type", - g_strdup_printf ("severity_to_type" - " ((SELECT new_severity FROM result_new_severities" - " WHERE result_new_severities.result = results.id" - " AND result_new_severities.user = opts.user_id" - " AND result_new_severities.override = %i" - " AND result_new_severities.dynamic = %i" - " LIMIT 1))", - apply_overrides, - dynamic_severity)); + apply_overrides == 0 && dynamic_severity == 0 + ? g_strdup ("results.severity") + : g_strdup_printf ("severity_to_type" + " ((SELECT new_severity FROM result_new_severities" + " WHERE result_new_severities.result = results.id" + " AND result_new_severities.user = opts.user_id" + " AND result_new_severities.override = %i" + " AND result_new_severities.dynamic = %i" + " LIMIT 1))", + apply_overrides, + dynamic_severity)); if (dynamic_severity) { @@ -46843,7 +46845,7 @@ void hosts_set_max_severity (report_t report, int *overrides_arg, int *min_qod_arg) { gchar *new_severity_sql; - int overrides, min_qod; + int dynamic_severity, overrides, min_qod; if (overrides_arg) overrides = *overrides_arg; @@ -46881,17 +46883,21 @@ hosts_set_max_severity (report_t report, int *overrides_arg, int *min_qod_arg) } } - new_severity_sql - = g_strdup_printf ("(SELECT new_severity FROM result_new_severities" - " WHERE result_new_severities.result = results.id" - " AND result_new_severities.user" - " = (SELECT id FROM users WHERE uuid = '%s')" - " AND override = %d" - " AND dynamic = %d" - " LIMIT 1)", - current_credentials.uuid, - overrides, - setting_dynamic_severity_int ()); + dynamic_severity = setting_dynamic_severity_int (); + if (overrides == 0 && dynamic_severity == 0) + new_severity_sql = g_strdup ("results.severity"); + else + new_severity_sql + = g_strdup_printf ("(SELECT new_severity FROM result_new_severities" + " WHERE result_new_severities.result = results.id" + " AND result_new_severities.user" + " = (SELECT id FROM users WHERE uuid = '%s')" + " AND override = %d" + " AND dynamic = %d" + " LIMIT 1)", + current_credentials.uuid, + overrides, + dynamic_severity); sql ("INSERT INTO host_max_severities" " (host, severity, source_type, source_id, creation_time)" From 850fee0028dd63c6ed6344c3764dff09f70bf569 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Wed, 7 Oct 2020 12:46:40 +0200 Subject: [PATCH 04/10] Removed unused cases from result_new_severities --- src/manage_pg.c | 45 ++++++++++++++++++--------------------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/src/manage_pg.c b/src/manage_pg.c index ee92cd302..3b2b5dac9 100644 --- a/src/manage_pg.c +++ b/src/manage_pg.c @@ -2706,37 +2706,28 @@ create_tables () g_free (owned_clause); sql ("CREATE OR REPLACE VIEW result_new_severities AS" - " SELECT results.id as result, users.id as user, dynamic, override," + " SELECT results.id as result, users.id as user, dynamic, 1 AS override," " CASE WHEN dynamic != 0 THEN" - " CASE WHEN override != 0 THEN" - " coalesce ((SELECT ov_new_severity FROM result_overrides" - " WHERE result = results.id" - " AND result_overrides.user = users.id" - " AND severity_matches_ov" - " (current_severity (results.severity," - " results.nvt)," - " ov_old_severity)" - " LIMIT 1)," - " current_severity (results.severity, results.nvt))" - " ELSE" - " current_severity (results.severity, results.nvt)" - " END" + " coalesce ((SELECT ov_new_severity FROM result_overrides" + " WHERE result = results.id" + " AND result_overrides.user = users.id" + " AND severity_matches_ov" + " (current_severity (results.severity," + " results.nvt)," + " ov_old_severity)" + " LIMIT 1)," + " current_severity (results.severity, results.nvt))" " ELSE" - " CASE WHEN override != 0 THEN" - " coalesce ((SELECT ov_new_severity FROM result_overrides" - " WHERE result = results.id" - " AND result_overrides.user = users.id" - " AND severity_matches_ov" - " (results.severity," - " ov_old_severity)" - " LIMIT 1)," - " results.severity)" - " ELSE" - " results.severity" - " END" + " coalesce ((SELECT ov_new_severity FROM result_overrides" + " WHERE result = results.id" + " AND result_overrides.user = users.id" + " AND severity_matches_ov" + " (results.severity," + " ov_old_severity)" + " LIMIT 1)," + " results.severity)" " END AS new_severity" " FROM results, users," - " (SELECT 0 AS override UNION SELECT 1 AS override) AS override_opts," " (SELECT 0 AS dynamic UNION SELECT 1 AS dynamic) AS dynamic_opts;"); sql ("CREATE OR REPLACE VIEW tls_certificate_source_origins AS" From 7671758580e050ca466746d60adf6fbd0cf4a61c Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Wed, 7 Oct 2020 12:50:14 +0200 Subject: [PATCH 05/10] Remove clauses, as result_new_severities.overrides is always 1 --- src/manage_sql.c | 7 ------- src/manage_sql_tickets.c | 1 - 2 files changed, 8 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index d59bd0787..ffc09d35e 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -21594,7 +21594,6 @@ where_qod (int min_qod) " FROM result_new_severities" \ " WHERE result_new_severities.result = results.id" \ " AND result_new_severities.user = opts.user_id" \ - " AND result_new_severities.override = opts.override" \ " AND result_new_severities.dynamic = opts.dynamic" \ " LIMIT 1)") @@ -21754,11 +21753,9 @@ results_extra_where (int trash, report_t report, const gchar* host, " WHERE result_new_severities.result = results.id" " AND result_new_severities.user" " = (SELECT id FROM users WHERE uuid = '%s')" - " AND override = %d" " AND dynamic = %d" " LIMIT 1)", current_credentials.uuid, - apply_overrides, dynamic_severity); // Build filter clauses @@ -21856,10 +21853,8 @@ init_result_get_iterator_severity (iterator_t* iterator, const get_data_t *get, " ((SELECT new_severity FROM result_new_severities" " WHERE result_new_severities.result = results.id" " AND result_new_severities.user = opts.user_id" - " AND result_new_severities.override = %i" " AND result_new_severities.dynamic = %i" " LIMIT 1))", - apply_overrides, dynamic_severity)); if (dynamic_severity) @@ -46892,11 +46887,9 @@ hosts_set_max_severity (report_t report, int *overrides_arg, int *min_qod_arg) " WHERE result_new_severities.result = results.id" " AND result_new_severities.user" " = (SELECT id FROM users WHERE uuid = '%s')" - " AND override = %d" " AND dynamic = %d" " LIMIT 1)", current_credentials.uuid, - overrides, dynamic_severity); sql ("INSERT INTO host_max_severities" diff --git a/src/manage_sql_tickets.c b/src/manage_sql_tickets.c index f7ae754f3..f2dcc3abd 100644 --- a/src/manage_sql_tickets.c +++ b/src/manage_sql_tickets.c @@ -115,7 +115,6 @@ ticket_status_integer (const char *status) " FROM users" \ " WHERE users.uuid" \ " = (SELECT current_setting ('gvmd.user.uuid')))" \ - " AND result_new_severities.override = 1" \ " AND result_new_severities.dynamic = 0" \ " LIMIT 1)" \ " ELSE severity" \ From d7ad4adb4a180624631ffc03408dccf7e67761f1 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Wed, 7 Oct 2020 13:19:33 +0200 Subject: [PATCH 06/10] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 261a820eb..82d914dd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed - Move EXE credential generation to a Python script [#1260](https://github.com/greenbone/gvmd/pull/1260) [#1262](https://github.com/greenbone/gvmd/pull/1262) - Clarify documentation for --scan-host parameter [#1277](https://github.com/greenbone/gvmd/pull/1277) +- In result iterator access severity directly if possible [#1321](https://github.com/greenbone/gvmd/pull/1321) ### Fixed - Use GMP version with leading zero for feed dirs [#1287](https://github.com/greenbone/gvmd/pull/1287) From 9fd0e428c9240c5e6def671cfc7ca525c497eff8 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Oct 2020 13:41:44 +0200 Subject: [PATCH 07/10] Add missing dynamic severity case --- src/manage_sql.c | 67 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 6 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index ffc09d35e..8e17f62df 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -21586,6 +21586,13 @@ where_qod (int min_qod) #define BASE_RESULT_ITERATOR_COLUMNS \ PRE_BASE_RESULT_ITERATOR_COLUMNS("results.severity") +/** + * @brief Result iterator columns. + */ +#define BASE_RESULT_ITERATOR_COLUMNS_O \ + PRE_BASE_RESULT_ITERATOR_COLUMNS("current_severity (results.severity," \ + " results.nvt)") + /** * @brief Result iterator columns. */ @@ -21612,6 +21619,21 @@ where_qod (int min_qod) { NULL, NULL, KEYWORD_TYPE_UNKNOWN } \ } +/** + * @brief Result iterator columns. + */ +#define RESULT_ITERATOR_COLUMNS_O \ + { \ + BASE_RESULT_ITERATOR_COLUMNS_O \ + { SECINFO_SQL_RESULT_CERT_BUNDS, \ + NULL, \ + KEYWORD_TYPE_INTEGER }, \ + { SECINFO_SQL_RESULT_DFN_CERTS, \ + NULL, \ + KEYWORD_TYPE_INTEGER }, \ + { NULL, NULL, KEYWORD_TYPE_UNKNOWN } \ + } + /** * @brief Result iterator columns. */ @@ -21642,6 +21664,21 @@ where_qod (int min_qod) { NULL, NULL, KEYWORD_TYPE_UNKNOWN } \ } +/** + * @brief Result iterator columns, when CERT db is not loaded. + */ +#define RESULT_ITERATOR_COLUMNS_O_NO_CERT \ + { \ + BASE_RESULT_ITERATOR_COLUMNS_O \ + { "0", \ + NULL, \ + KEYWORD_TYPE_INTEGER }, \ + { "0", \ + NULL, \ + KEYWORD_TYPE_INTEGER }, \ + { NULL, NULL, KEYWORD_TYPE_UNKNOWN } \ + } + /** * @brief Result iterator columns, when CERT db is not loaded. */ @@ -22045,8 +22082,10 @@ init_result_get_iterator (iterator_t* iterator, const get_data_t *get, { static const char *filter_columns[] = RESULT_ITERATOR_FILTER_COLUMNS; static column_t columns[] = RESULT_ITERATOR_COLUMNS; + static column_t columns_dynamic[] = RESULT_ITERATOR_COLUMNS_O; static column_t columns_overrides_dynamic[] = RESULT_ITERATOR_COLUMNS_OD; static column_t columns_no_cert[] = RESULT_ITERATOR_COLUMNS_NO_CERT; + static column_t columns_dynamic_no_cert[] = RESULT_ITERATOR_COLUMNS_O_NO_CERT; static column_t columns_overrides_dynamic_no_cert[] = RESULT_ITERATOR_COLUMNS_OD_NO_CERT; int ret; gchar *filter, *extra_tables, *extra_where, *opts_tables; @@ -22074,17 +22113,33 @@ init_result_get_iterator (iterator_t* iterator, const get_data_t *get, if (manage_cert_loaded ()) { - if (apply_overrides == 0 && dynamic_severity == 0) - actual_columns = columns; - else + if (apply_overrides) + /* Overrides, maybe dynamic. */ actual_columns = columns_overrides_dynamic; + else + { + if (dynamic_severity) + /* Dynamic, no overrides. */ + actual_columns = columns_dynamic; + else + /* No dynamic, no overrides. */ + actual_columns = columns; + } } else { - if (apply_overrides == 0 && dynamic_severity == 0) - actual_columns = columns_no_cert; - else + if (apply_overrides) + /* Overrides, maybe dynamic. */ actual_columns = columns_overrides_dynamic_no_cert; + else + { + if (dynamic_severity) + /* Dynamic, no overrides. */ + actual_columns = columns_dynamic_no_cert; + else + /* No dynamic, no overrides. */ + actual_columns = columns_no_cert; + } } opts_tables = result_iterator_opts_table (apply_overrides, dynamic_severity); From a178542b440f7b5efceba94a0b93884873c8afbe Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Oct 2020 14:30:06 +0200 Subject: [PATCH 08/10] Add missing dynamic severity cases --- src/manage_sql.c | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index f581e5305..1942ccf5d 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -21802,9 +21802,8 @@ results_extra_where (int trash, report_t report, const gchar* host, // Build clause fragments - if (apply_overrides == 0 && dynamic_severity == 0) - new_severity_sql = g_strdup ("results.severity"); - else + if (apply_overrides) + /* Overrides, maybe dynamic. */ new_severity_sql = g_strdup_printf ("(SELECT new_severity FROM result_new_severities" " WHERE result_new_severities.result = results.id" @@ -21814,6 +21813,17 @@ results_extra_where (int trash, report_t report, const gchar* host, " LIMIT 1)", current_credentials.uuid, dynamic_severity); + else + { + if (dynamic_severity) + /* Dynamic, no overrides. */ + new_severity_sql = g_strdup ("current_severity (results.severity," + " results.nvt)"); + else + /* No dynamic, no overrides. */ + new_severity_sql = g_strdup ("results.severity"); + + } // Build filter clauses @@ -21904,15 +21914,21 @@ init_result_get_iterator_severity (iterator_t* iterator, const get_data_t *get, column_array_set (filterable_columns, "type", - apply_overrides == 0 && dynamic_severity == 0 - ? g_strdup ("results.severity") - : g_strdup_printf ("severity_to_type" + apply_overrides + /* Overrides, maybe dynamic. */ + ? g_strdup_printf ("severity_to_type" " ((SELECT new_severity FROM result_new_severities" " WHERE result_new_severities.result = results.id" " AND result_new_severities.user = opts.user_id" " AND result_new_severities.dynamic = %i" " LIMIT 1))", - dynamic_severity)); + dynamic_severity) + : (dynamic_severity + /* Dynamic, no overrides. */ + ? g_strdup ("current_severity (results.severity," + " results.nvt)") + /* No dynamic, no overrides. */ + : g_strdup ("results.severity"))); if (dynamic_severity) { @@ -47045,9 +47061,8 @@ hosts_set_max_severity (report_t report, int *overrides_arg, int *min_qod_arg) } dynamic_severity = setting_dynamic_severity_int (); - if (overrides == 0 && dynamic_severity == 0) - new_severity_sql = g_strdup ("results.severity"); - else + if (overrides) + /* Overrides, maybe dynamic. */ new_severity_sql = g_strdup_printf ("(SELECT new_severity FROM result_new_severities" " WHERE result_new_severities.result = results.id" @@ -47057,6 +47072,16 @@ hosts_set_max_severity (report_t report, int *overrides_arg, int *min_qod_arg) " LIMIT 1)", current_credentials.uuid, dynamic_severity); + else + { + if (dynamic_severity) + /* Dynamic, no overrides. */ + new_severity_sql = g_strdup ("current_severity (results.severity," + " results.nvt)"); + else + /* No dynamic, no overrides. */ + new_severity_sql = g_strdup ("results.severity"); + } sql ("INSERT INTO host_max_severities" " (host, severity, source_type, source_id, creation_time)" From 459550ecd9b8f97a1a490a0e341e47627658b58b Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Oct 2020 14:50:09 +0200 Subject: [PATCH 09/10] Use function for new severity clauses --- src/manage_sql.c | 76 +++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 43 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index b9ef058b8..ff283f57a 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -21737,6 +21737,37 @@ result_iterator_opts_table (int override, int dynamic) return ret; } +/** + * @brief Get new severity clause. + * + * @param[in] apply_overrides Whether to apply overrides. + * @param[in] dynamic_severity Whether to use dynamic severity. + * + * @return Newly allocated clause. + */ +static gchar* +new_severity_clause (int apply_overrides, int dynamic_severity) +{ + if (apply_overrides) + /* Overrides, maybe dynamic. */ + return g_strdup_printf ("(SELECT new_severity FROM result_new_severities" + " WHERE result_new_severities.result = results.id" + " AND result_new_severities.user" + " = (SELECT id FROM users WHERE uuid = '%s')" + " AND dynamic = %d" + " LIMIT 1)", + current_credentials.uuid, + dynamic_severity); + + if (dynamic_severity) + /* Dynamic, no overrides. */ + return g_strdup ("current_severity (results.severity," + " results.nvt)"); + + /* No dynamic, no overrides. */ + return g_strdup ("results.severity"); +} + /** * @brief Get extra_where string for a result iterator or count. * @@ -21769,28 +21800,7 @@ results_extra_where (int trash, report_t report, const gchar* host, // Build clause fragments - if (apply_overrides) - /* Overrides, maybe dynamic. */ - new_severity_sql - = g_strdup_printf ("(SELECT new_severity FROM result_new_severities" - " WHERE result_new_severities.result = results.id" - " AND result_new_severities.user" - " = (SELECT id FROM users WHERE uuid = '%s')" - " AND dynamic = %d" - " LIMIT 1)", - current_credentials.uuid, - dynamic_severity); - else - { - if (dynamic_severity) - /* Dynamic, no overrides. */ - new_severity_sql = g_strdup ("current_severity (results.severity," - " results.nvt)"); - else - /* No dynamic, no overrides. */ - new_severity_sql = g_strdup ("results.severity"); - - } + new_severity_sql = new_severity_clause (apply_overrides, dynamic_severity); // Build filter clauses @@ -46983,27 +46993,7 @@ hosts_set_max_severity (report_t report, int *overrides_arg, int *min_qod_arg) } dynamic_severity = setting_dynamic_severity_int (); - if (overrides) - /* Overrides, maybe dynamic. */ - new_severity_sql - = g_strdup_printf ("(SELECT new_severity FROM result_new_severities" - " WHERE result_new_severities.result = results.id" - " AND result_new_severities.user" - " = (SELECT id FROM users WHERE uuid = '%s')" - " AND dynamic = %d" - " LIMIT 1)", - current_credentials.uuid, - dynamic_severity); - else - { - if (dynamic_severity) - /* Dynamic, no overrides. */ - new_severity_sql = g_strdup ("current_severity (results.severity," - " results.nvt)"); - else - /* No dynamic, no overrides. */ - new_severity_sql = g_strdup ("results.severity"); - } + new_severity_sql = new_severity_clause (overrides, dynamic_severity); sql ("INSERT INTO host_max_severities" " (host, severity, source_type, source_id, creation_time)" From a41d96946c4e31f98b4838b78b5c65306bbd2c72 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 13 Oct 2020 23:26:14 +0200 Subject: [PATCH 10/10] Rename dynamic severity macros with D --- src/manage_sql.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index c27a98e79..62faff074 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -21575,7 +21575,7 @@ where_qod (int min_qod) /** * @brief Result iterator columns. */ -#define BASE_RESULT_ITERATOR_COLUMNS_O \ +#define BASE_RESULT_ITERATOR_COLUMNS_D \ PRE_BASE_RESULT_ITERATOR_COLUMNS("current_severity (results.severity," \ " results.nvt)") @@ -21608,9 +21608,9 @@ where_qod (int min_qod) /** * @brief Result iterator columns. */ -#define RESULT_ITERATOR_COLUMNS_O \ +#define RESULT_ITERATOR_COLUMNS_D \ { \ - BASE_RESULT_ITERATOR_COLUMNS_O \ + BASE_RESULT_ITERATOR_COLUMNS_D \ { SECINFO_SQL_RESULT_CERT_BUNDS, \ NULL, \ KEYWORD_TYPE_INTEGER }, \ @@ -21653,9 +21653,9 @@ where_qod (int min_qod) /** * @brief Result iterator columns, when CERT db is not loaded. */ -#define RESULT_ITERATOR_COLUMNS_O_NO_CERT \ +#define RESULT_ITERATOR_COLUMNS_D_NO_CERT \ { \ - BASE_RESULT_ITERATOR_COLUMNS_O \ + BASE_RESULT_ITERATOR_COLUMNS_D \ { "0", \ NULL, \ KEYWORD_TYPE_INTEGER }, \ @@ -22100,10 +22100,10 @@ init_result_get_iterator (iterator_t* iterator, const get_data_t *get, { static const char *filter_columns[] = RESULT_ITERATOR_FILTER_COLUMNS; static column_t columns[] = RESULT_ITERATOR_COLUMNS; - static column_t columns_dynamic[] = RESULT_ITERATOR_COLUMNS_O; + static column_t columns_dynamic[] = RESULT_ITERATOR_COLUMNS_D; static column_t columns_overrides_dynamic[] = RESULT_ITERATOR_COLUMNS_OD; static column_t columns_no_cert[] = RESULT_ITERATOR_COLUMNS_NO_CERT; - static column_t columns_dynamic_no_cert[] = RESULT_ITERATOR_COLUMNS_O_NO_CERT; + static column_t columns_dynamic_no_cert[] = RESULT_ITERATOR_COLUMNS_D_NO_CERT; static column_t columns_overrides_dynamic_no_cert[] = RESULT_ITERATOR_COLUMNS_OD_NO_CERT; int ret; gchar *filter, *extra_tables, *extra_where, *extra_where_single, *opts_tables;