From 88c2bffb35b16a54de4fd54af66fb66370c8f0e7 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 2 Jan 2024 19:39:30 +0200 Subject: [PATCH 01/43] Change: Check trash target references before accessing In the trash case of GET_TARGETS check that dependent resources like credentials exist before trying to access info about them. This speeds up the GSA trashcan, by skipping some SQL queries that would always return NULL. --- src/gmp.c | 218 +++++++++++++++++++++++++++++------------------------- 1 file changed, 117 insertions(+), 101 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 17f2335e56..009352ef46 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -16956,147 +16956,163 @@ handle_get_targets (gmp_parser_t *gmp_parser, GError **error) snmp_credential = target_iterator_snmp_credential (&targets); ssh_elevate_credential = target_iterator_ssh_elevate_credential (&targets); + ssh_credential_available = 1; - if (get_targets_data->get.trash - && target_iterator_ssh_trash (&targets)) - { - ssh_name = trash_credential_name (ssh_credential); - ssh_uuid = trash_credential_uuid (ssh_credential); - ssh_credential_available - = trash_credential_readable (ssh_credential); - } - else if (ssh_credential) + if (ssh_credential) { - credential_t found; - - ssh_name = credential_name (ssh_credential); - ssh_uuid = credential_uuid (ssh_credential); - if (find_credential_with_permission - (ssh_uuid, - &found, - "get_credentials")) - abort (); - ssh_credential_available = (found > 0); + if (get_targets_data->get.trash + && target_iterator_ssh_trash (&targets)) + { + ssh_name = trash_credential_name (ssh_credential); + ssh_uuid = trash_credential_uuid (ssh_credential); + ssh_credential_available + = trash_credential_readable (ssh_credential); + } + else + { + credential_t found; + + ssh_name = credential_name (ssh_credential); + ssh_uuid = credential_uuid (ssh_credential); + if (find_credential_with_permission (ssh_uuid, + &found, + "get_credentials")) + abort (); + ssh_credential_available = (found > 0); + } } else { ssh_name = NULL; ssh_uuid = NULL; } + smb_credential_available = 1; - if (get_targets_data->get.trash - && target_iterator_smb_trash (&targets)) - { - smb_name = trash_credential_name (smb_credential); - smb_uuid = trash_credential_uuid (smb_credential); - smb_credential_available - = trash_credential_readable (smb_credential); - } - else if (smb_credential) + if (smb_credential) { - credential_t found; - - smb_name = credential_name (smb_credential); - smb_uuid = credential_uuid (smb_credential); - if (find_credential_with_permission - (smb_uuid, - &found, - "get_credentials")) - abort (); - smb_credential_available = (found > 0); + if (get_targets_data->get.trash + && target_iterator_smb_trash (&targets)) + { + smb_name = trash_credential_name (smb_credential); + smb_uuid = trash_credential_uuid (smb_credential); + smb_credential_available + = trash_credential_readable (smb_credential); + } + else + { + credential_t found; + + smb_name = credential_name (smb_credential); + smb_uuid = credential_uuid (smb_credential); + if (find_credential_with_permission (smb_uuid, + &found, + "get_credentials")) + abort (); + smb_credential_available = (found > 0); + } } else { smb_name = NULL; smb_uuid = NULL; } + esxi_credential_available = 1; - if (get_targets_data->get.trash - && target_iterator_esxi_trash (&targets)) - { - esxi_name - = trash_credential_name (esxi_credential); - esxi_uuid - = trash_credential_uuid (esxi_credential); - esxi_credential_available - = trash_credential_readable (esxi_credential); - } - else if (esxi_credential) + if (esxi_credential) { - credential_t found; - - esxi_name = credential_name (esxi_credential); - esxi_uuid = credential_uuid (esxi_credential); - if (find_credential_with_permission - (esxi_uuid, - &found, - "get_credentials")) - abort (); - esxi_credential_available = (found > 0); + if (get_targets_data->get.trash + && target_iterator_esxi_trash (&targets)) + { + esxi_name + = trash_credential_name (esxi_credential); + esxi_uuid + = trash_credential_uuid (esxi_credential); + esxi_credential_available + = trash_credential_readable (esxi_credential); + } + else + { + credential_t found; + + esxi_name = credential_name (esxi_credential); + esxi_uuid = credential_uuid (esxi_credential); + if (find_credential_with_permission (esxi_uuid, + &found, + "get_credentials")) + abort (); + esxi_credential_available = (found > 0); + } } else { esxi_name = NULL; esxi_uuid = NULL; } + snmp_credential_available = 1; - if (get_targets_data->get.trash - && target_iterator_snmp_trash (&targets)) - { - snmp_name - = trash_credential_name (snmp_credential); - snmp_uuid - = trash_credential_uuid (snmp_credential); - snmp_credential_available - = trash_credential_readable (snmp_credential); - } - else if (snmp_credential) + if (snmp_credential) { - credential_t found; - - snmp_name = credential_name (snmp_credential); - snmp_uuid = credential_uuid (snmp_credential); - if (find_credential_with_permission - (snmp_uuid, - &found, - "get_credentials")) - abort (); - snmp_credential_available = (found > 0); + if (get_targets_data->get.trash + && target_iterator_snmp_trash (&targets)) + { + snmp_name + = trash_credential_name (snmp_credential); + snmp_uuid + = trash_credential_uuid (snmp_credential); + snmp_credential_available + = trash_credential_readable (snmp_credential); + } + else + { + credential_t found; + + snmp_name = credential_name (snmp_credential); + snmp_uuid = credential_uuid (snmp_credential); + if (find_credential_with_permission (snmp_uuid, + &found, + "get_credentials")) + abort (); + snmp_credential_available = (found > 0); + } } else { snmp_name = NULL; snmp_uuid = NULL; } + ssh_elevate_credential_available = 1; - if (get_targets_data->get.trash - && target_iterator_ssh_elevate_trash (&targets)) - { - ssh_elevate_name - = trash_credential_name (ssh_elevate_credential); - ssh_elevate_uuid - = trash_credential_uuid (ssh_elevate_credential); - ssh_elevate_credential_available - = trash_credential_readable (ssh_elevate_credential); - } - else if (ssh_elevate_credential) + if (ssh_elevate_credential) { - credential_t found; - - ssh_elevate_name = credential_name (ssh_elevate_credential); - ssh_elevate_uuid = credential_uuid (ssh_elevate_credential); - if (find_credential_with_permission - (ssh_elevate_uuid, - &found, - "get_credentials")) - abort (); - ssh_elevate_credential_available = (found > 0); + if (get_targets_data->get.trash + && target_iterator_ssh_elevate_trash (&targets)) + { + ssh_elevate_name + = trash_credential_name (ssh_elevate_credential); + ssh_elevate_uuid + = trash_credential_uuid (ssh_elevate_credential); + ssh_elevate_credential_available + = trash_credential_readable (ssh_elevate_credential); + } + else + { + credential_t found; + + ssh_elevate_name = credential_name (ssh_elevate_credential); + ssh_elevate_uuid = credential_uuid (ssh_elevate_credential); + if (find_credential_with_permission (ssh_elevate_uuid, + &found, + "get_credentials")) + abort (); + ssh_elevate_credential_available = (found > 0); + } } else { ssh_elevate_name = NULL; ssh_elevate_uuid = NULL; } + port_list_uuid = target_iterator_port_list_uuid (&targets); port_list_name = target_iterator_port_list_name (&targets); port_list_trash = target_iterator_port_list_trash (&targets); From decd117c83eaead5e30afa3a73439757b3beee99 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 8 Jan 2024 16:16:33 +0200 Subject: [PATCH 02/43] Move variables to where they are used --- src/gmp.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 009352ef46..9599fbc6a4 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -12163,7 +12163,7 @@ handle_get_credentials (gmp_parser_t *gmp_parser, GError **error) SEND_GET_START("credential"); while (1) { - const char *private_key, *public_key, *login, *type, *cert; + const char *login, *type, *cert; gchar *formats_xml; ret = get_next (&credentials, &get_credentials_data->get, @@ -12177,8 +12177,6 @@ handle_get_credentials (gmp_parser_t *gmp_parser, GError **error) } SEND_GET_COMMON (credential, &get_credentials_data->get, &credentials); - private_key = credential_iterator_private_key (&credentials); - public_key = credential_iterator_public_key (&credentials); login = credential_iterator_login (&credentials); type = credential_iterator_type (&credentials); cert = credential_iterator_certificate (&credentials); @@ -12257,6 +12255,10 @@ handle_get_credentials (gmp_parser_t *gmp_parser, GError **error) case CREDENTIAL_FORMAT_KEY: { + const char *public_key; + + public_key = credential_iterator_public_key (&credentials); + if (public_key && strcmp (public_key, "")) { SENDF_TO_CLIENT_OR_FAIL @@ -12265,8 +12267,9 @@ handle_get_credentials (gmp_parser_t *gmp_parser, GError **error) else { char *pub; - const char *pass; + const char *pass, *private_key; + private_key = credential_iterator_private_key (&credentials); pass = credential_iterator_password (&credentials); pub = gvm_ssh_public_from_private (private_key, pass); SENDF_TO_CLIENT_OR_FAIL From 4d55aa06ba68633d14d6e74eea34635c982458aa Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 8 Jan 2024 16:51:29 +0200 Subject: [PATCH 03/43] Combine CREDENTIAL_ITERATOR_COLUMNS and CREDENTIAL_ITERATOR_TRASH_COLUMNS --- src/manage_sql.c | 105 ++++++++++++++--------------------------------- 1 file changed, 30 insertions(+), 75 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index 0b3ce888c2..4a5813826a 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -36788,114 +36788,69 @@ delete_credential (const char *credential_id, int ultimate) /** * @brief LSC Credential iterator columns. */ -#define CREDENTIAL_ITERATOR_COLUMNS \ +#define CREDENTIAL_ITERATOR_COLUMNS_TABLE(table) \ { \ - GET_ITERATOR_COLUMNS (credentials), \ + GET_ITERATOR_COLUMNS (table), \ /* public generic data */ \ { "type", NULL, KEYWORD_TYPE_STRING }, \ { "allow_insecure", NULL, KEYWORD_TYPE_INTEGER }, \ /* public type specific data */ \ - { "(SELECT value FROM credentials_data" \ - " WHERE credential = credentials.id AND type = 'username')", \ + { "(SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'username')", \ "login", \ KEYWORD_TYPE_STRING \ }, \ - { "(SELECT value FROM credentials_data" \ - " WHERE credential = credentials.id AND type = 'certificate')", \ + { "(SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'certificate')", \ NULL, \ KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_data" \ - " WHERE credential = credentials.id AND type = 'auth_algorithm')", \ + { "(SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'auth_algorithm')", \ NULL, \ KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_data" \ - " WHERE credential = credentials.id AND type = 'privacy_algorithm')", \ + { "(SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'privacy_algorithm')", \ NULL, \ KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_data" \ - " WHERE credential = credentials.id AND type = 'public_key')", \ + { "(SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'public_key')", \ NULL, \ KEYWORD_TYPE_STRING }, \ /* private data */ \ - { "(SELECT value FROM credentials_data" \ - " WHERE credential = credentials.id AND type = 'secret')", \ + { "(SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'secret')", \ "secret", \ KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_data" \ - " WHERE credential = credentials.id AND type = 'password')", \ + { "(SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'password')", \ "password", \ KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_data" \ - " WHERE credential = credentials.id AND type = 'private_key')", \ + { "(SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'private_key')", \ "private_key", \ KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_data" \ - " WHERE credential = credentials.id AND type = 'community')", \ + { "(SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'community')", \ "community", \ KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_data" \ - " WHERE credential = credentials.id AND type = 'privacy_password')", \ + { "(SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'privacy_password')", \ "privacy_password", \ KEYWORD_TYPE_STRING }, \ { NULL, NULL, KEYWORD_TYPE_UNKNOWN } \ } +/** + * @brief LSC Credential iterator columns. + */ +#define CREDENTIAL_ITERATOR_COLUMNS \ +CREDENTIAL_ITERATOR_COLUMNS_TABLE("credentials") + /** * @brief LSC Credential iterator columns for trash case. */ -#define CREDENTIAL_ITERATOR_TRASH_COLUMNS \ - { \ - GET_ITERATOR_COLUMNS (credentials_trash), \ - /* public generic data */ \ - { "type", NULL, KEYWORD_TYPE_STRING }, \ - { "allow_insecure", NULL, KEYWORD_TYPE_INTEGER }, \ - /* public type specific data */ \ - { "(SELECT value FROM credentials_trash_data" \ - " WHERE credential = credentials_trash.id AND type = 'username')", \ - "login", \ - KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_trash_data" \ - " WHERE credential = credentials_trash.id AND type = 'certificate')", \ - NULL, \ - KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_trash_data" \ - " WHERE credential = credentials_trash.id" \ - " AND type = 'auth_algorithm')", \ - NULL, \ - KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_trash_data" \ - " WHERE credential = credentials_trash.id" \ - " AND type = 'privacy_algorithm')", \ - NULL, \ - KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_data" \ - " WHERE credential = credentials_trash.id AND type = 'public_key')", \ - NULL, \ - KEYWORD_TYPE_STRING }, \ - /* private data */ \ - { "(SELECT value FROM credentials_trash_data" \ - " WHERE credential = credentials_trash.id AND type = 'secret')", \ - "secret", \ - KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_trash_data" \ - " WHERE credential = credentials_trash.id AND type = 'password')", \ - "password", \ - KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_trash_data" \ - " WHERE credential = credentials_trash.id AND type = 'private_key')", \ - "private_key", \ - KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_trash_data" \ - " WHERE credential = credentials_trash.id AND type = 'community')", \ - "community", \ - KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM credentials_trash_data" \ - " WHERE credential = credentials_trash.id" \ - " AND type = 'privacy_password')", \ - "privacy_password", \ - KEYWORD_TYPE_STRING }, \ - { NULL, NULL, KEYWORD_TYPE_UNKNOWN } \ - } +#define CREDENTIAL_ITERATOR_TRASH_COLUMNS \ +CREDENTIAL_ITERATOR_COLUMNS_TABLE("credentials_trash") /** * @brief Count number of LSC Credentials. From 15661bf1b0150ea954660bb7fc11e45f8a2857f3 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 9 Jan 2024 14:21:39 +0200 Subject: [PATCH 04/43] Make credential_iterator_format_available variable use more obvious --- src/manage_sql.c | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index 4a5813826a..9df36c12ac 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -37671,34 +37671,32 @@ credential_iterator_format_available (iterator_t* iterator, { const char *type, *login, *private_key; + if (format == CREDENTIAL_FORMAT_NONE) + return TRUE; + + if (format == CREDENTIAL_FORMAT_ERROR) + return FALSE; + type = credential_iterator_type (iterator); login = credential_iterator_login (iterator); + + if (format == CREDENTIAL_FORMAT_EXE + && strcasecmp (type, "up") == 0) + return validate_credential_username_for_format (login, format); + + if (format == CREDENTIAL_FORMAT_PEM + && strcasecmp (type, "cc") == 0) + return validate_credential_username_for_format (login, format); + private_key = credential_iterator_private_key (iterator); - switch (format) - { - case CREDENTIAL_FORMAT_NONE: - return TRUE; - case CREDENTIAL_FORMAT_KEY: - case CREDENTIAL_FORMAT_RPM: - case CREDENTIAL_FORMAT_DEB: - if (strcasecmp (type, "usk") == 0 && private_key) - return validate_credential_username_for_format (login, format); - else - return FALSE; - case CREDENTIAL_FORMAT_EXE: - if (strcasecmp (type, "up") == 0) - return validate_credential_username_for_format (login, format); - else - return FALSE; - case CREDENTIAL_FORMAT_PEM: - if (strcasecmp (type, "cc") == 0) - return validate_credential_username_for_format (login, format); - else - return FALSE; - case CREDENTIAL_FORMAT_ERROR: - return FALSE; - } + if ((format == CREDENTIAL_FORMAT_KEY + || format == CREDENTIAL_FORMAT_RPM + || format == CREDENTIAL_FORMAT_DEB) + && strcasecmp (type, "usk") == 0 + && private_key) + return validate_credential_username_for_format (login, format); + return FALSE; } From 222f9aa07c980658bf461f241566c6510e627153 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 9 Jan 2024 14:39:23 +0200 Subject: [PATCH 05/43] Note credential iterator field use --- src/manage_sql.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/manage_sql.c b/src/manage_sql.c index 9df36c12ac..318a36397a 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -36812,6 +36812,7 @@ delete_credential (const char *credential_id, int ultimate) " WHERE credential = " table ".id AND type = 'privacy_algorithm')", \ NULL, \ KEYWORD_TYPE_STRING }, \ + /* Only one used by credential_iterator_formats_xml (excl login, type) */ \ { "(SELECT value FROM " table "_data" \ " WHERE credential = " table ".id AND type = 'public_key')", \ NULL, \ From fc8765d4758b466c1adb7121770af85d9832e593 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 9 Jan 2024 15:53:47 +0200 Subject: [PATCH 06/43] Change: Use fewer queries in credential iterator when possible --- src/gmp.c | 5 +- src/manage.h | 4 ++ src/manage_sql.c | 119 +++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 107 insertions(+), 21 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 9599fbc6a4..217826c8ea 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -12124,8 +12124,9 @@ handle_get_credentials (gmp_parser_t *gmp_parser, GError **error) INIT_GET (credential, Credential); - ret = init_credential_iterator (&credentials, - &get_credentials_data->get); + ret = init_credential_iterator_format (&credentials, + &get_credentials_data->get, + format); if (ret) { switch (ret) diff --git a/src/manage.h b/src/manage.h index 77977728e5..82595adaf0 100644 --- a/src/manage.h +++ b/src/manage.h @@ -2183,6 +2183,10 @@ init_credential_iterator_one (iterator_t*, credential_t); int init_credential_iterator (iterator_t*, const get_data_t *); +int +init_credential_iterator_format (iterator_t*, const get_data_t *, + credential_format_t); + const char* credential_iterator_login (iterator_t*); diff --git a/src/manage_sql.c b/src/manage_sql.c index 318a36397a..5ae9078e0e 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -36788,7 +36788,7 @@ delete_credential (const char *credential_id, int ultimate) /** * @brief LSC Credential iterator columns. */ -#define CREDENTIAL_ITERATOR_COLUMNS_TABLE(table) \ +#define CREDENTIAL_ITERATOR_COLUMNS_TABLE(table, lean) \ { \ GET_ITERATOR_COLUMNS (table), \ /* public generic data */ \ @@ -36804,12 +36804,20 @@ delete_credential (const char *credential_id, int ultimate) " WHERE credential = " table ".id AND type = 'certificate')", \ NULL, \ KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM " table "_data" \ - " WHERE credential = " table ".id AND type = 'auth_algorithm')", \ + { "(CASE" \ + " WHEN type = 'snmp'" \ + " THEN (SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'auth_algorithm')" \ + " ELSE ''" \ + " END)", \ NULL, \ KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM " table "_data" \ - " WHERE credential = " table ".id AND type = 'privacy_algorithm')", \ + { "(CASE" \ + " WHEN type = 'snmp'" \ + " THEN (SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'privacy_algorithm')" \ + " ELSE ''" \ + " END)", \ NULL, \ KEYWORD_TYPE_STRING }, \ /* Only one used by credential_iterator_formats_xml (excl login, type) */ \ @@ -36818,24 +36826,44 @@ delete_credential (const char *credential_id, int ultimate) NULL, \ KEYWORD_TYPE_STRING }, \ /* private data */ \ - { "(SELECT value FROM " table "_data" \ - " WHERE credential = " table ".id AND type = 'secret')", \ + { "(CASE" \ + " WHEN " lean \ + " THEN ''" \ + " ELSE (SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'secret')" \ + " END)", \ "secret", \ KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM " table "_data" \ - " WHERE credential = " table ".id AND type = 'password')", \ + { "(CASE" \ + " WHEN " lean \ + " THEN ''" \ + " ELSE (SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'password')" \ + " END)", \ "password", \ KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM " table "_data" \ - " WHERE credential = " table ".id AND type = 'private_key')", \ + { "(CASE" \ + " WHEN " lean \ + " THEN ''" \ + " ELSE (SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'private_key')" \ + " END)", \ "private_key", \ KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM " table "_data" \ - " WHERE credential = " table ".id AND type = 'community')", \ + { "(CASE" \ + " WHEN " lean \ + " THEN ''" \ + " ELSE (SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'community')" \ + " END)", \ "community", \ KEYWORD_TYPE_STRING }, \ - { "(SELECT value FROM " table "_data" \ - " WHERE credential = " table ".id AND type = 'privacy_password')", \ + { "(CASE" \ + " WHEN " lean \ + " THEN ''" \ + " ELSE (SELECT value FROM " table "_data" \ + " WHERE credential = " table ".id AND type = 'privacy_password')" \ + " END)", \ "privacy_password", \ KEYWORD_TYPE_STRING }, \ { NULL, NULL, KEYWORD_TYPE_UNKNOWN } \ @@ -36844,14 +36872,26 @@ delete_credential (const char *credential_id, int ultimate) /** * @brief LSC Credential iterator columns. */ -#define CREDENTIAL_ITERATOR_COLUMNS \ -CREDENTIAL_ITERATOR_COLUMNS_TABLE("credentials") +#define CREDENTIAL_ITERATOR_COLUMNS \ + CREDENTIAL_ITERATOR_COLUMNS_TABLE("credentials", "FALSE") + +/** + * @brief LSC Credential iterator columns for trash case. + */ +#define CREDENTIAL_ITERATOR_TRASH_COLUMNS \ + CREDENTIAL_ITERATOR_COLUMNS_TABLE("credentials_trash", "FALSE") + +/** + * @brief LSC Credential iterator columns. + */ +#define CREDENTIAL_ITERATOR_LEAN_COLUMNS \ + CREDENTIAL_ITERATOR_COLUMNS_TABLE("credentials", "TRUE") /** * @brief LSC Credential iterator columns for trash case. */ -#define CREDENTIAL_ITERATOR_TRASH_COLUMNS \ -CREDENTIAL_ITERATOR_COLUMNS_TABLE("credentials_trash") +#define CREDENTIAL_ITERATOR_LEAN_TRASH_COLUMNS \ + CREDENTIAL_ITERATOR_COLUMNS_TABLE("credentials_trash", "TRUE") /** * @brief Count number of LSC Credentials. @@ -37339,6 +37379,47 @@ init_credential_iterator (iterator_t* iterator, const get_data_t *get) TRUE); } +/** + * @brief Initialise a Credential iterator, where the format is known. + * + * @param[in] iterator Iterator. + * @param[in] get GET data. + * @param[in] format Credential format. + * + * @return 0 success, 1 failed to find filter, 2 failed to find + * filter (filt_id), -1 error. + */ +int +init_credential_iterator_format (iterator_t* iterator, const get_data_t *get, + credential_format_t format) +{ + static const char *filter_columns[] = CREDENTIAL_ITERATOR_FILTER_COLUMNS; + static column_t columns[] = CREDENTIAL_ITERATOR_COLUMNS; + static column_t trash_columns[] = CREDENTIAL_ITERATOR_TRASH_COLUMNS; + static column_t lean_columns[] = CREDENTIAL_ITERATOR_LEAN_COLUMNS; + static column_t lean_trash_columns[] = CREDENTIAL_ITERATOR_LEAN_TRASH_COLUMNS; + column_t *actual_columns, *actual_trash_columns; + + actual_columns = columns; + actual_trash_columns = trash_columns; + if (format == CREDENTIAL_FORMAT_NONE) + { + actual_columns = lean_columns; + actual_trash_columns = lean_trash_columns; + } + + return init_get_iterator (iterator, + "credential", + get, + actual_columns, + actual_trash_columns, + filter_columns, + 0, + NULL, + NULL, + TRUE); +} + /** * @brief Get possibly encrypted data from credentials. * From f0d4458eb4d7f840008257a4debb83a3b598100a Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Thu, 8 Feb 2024 00:27:55 +0200 Subject: [PATCH 07/43] Declare variables where they are used --- src/gmp.c | 53 +++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 217826c8ea..e9db68682e 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17478,34 +17478,8 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) while (1) { task_t index; - gchar *progress_xml; target_t target; - scanner_t scanner; - const char *first_report_id, *last_report_id; - char *config_name, *config_uuid; - gchar *config_name_escaped; - char *task_target_uuid, *task_target_name; - gchar *task_target_name_escaped; gchar *task_schedule_xml; - char *task_scanner_uuid, *task_scanner_name; - gchar *task_scanner_name_escaped; - gchar *last_report; - gchar *second_last_report_id; - gchar *current_report; - report_t running_report; - char *owner, *observers; - int target_in_trash, scanner_in_trash; - int holes = 0, infos = 0, logs = 0, warnings = 0; - int holes_2 = 0, infos_2 = 0, warnings_2 = 0; - int false_positives = 0, task_scanner_type; - int target_available, config_available; - int scanner_available; - double severity = 0, severity_2 = 0; - gchar *response; - iterator_t alerts, groups, roles; - gchar *in_assets, *max_checks, *max_hosts; - gchar *auto_delete, *auto_delete_data, *assets_apply_overrides; - gchar *assets_min_qod; ret = get_next (&tasks, &get_tasks_data->get, &first, &count, init_task_iterator); @@ -17537,6 +17511,33 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) } else { + scanner_t scanner; + const char *first_report_id, *last_report_id; + char *config_name, *config_uuid; + gchar *progress_xml; + gchar *config_name_escaped; + char *task_target_uuid, *task_target_name; + gchar *task_target_name_escaped; + char *task_scanner_uuid, *task_scanner_name; + gchar *task_scanner_name_escaped; + gchar *last_report; + gchar *second_last_report_id; + gchar *current_report; + report_t running_report; + char *owner, *observers; + int target_in_trash, scanner_in_trash; + int holes = 0, infos = 0, logs = 0, warnings = 0; + int holes_2 = 0, infos_2 = 0, warnings_2 = 0; + int false_positives = 0, task_scanner_type; + int target_available, config_available; + int scanner_available; + double severity = 0, severity_2 = 0; + gchar *response; + iterator_t alerts, groups, roles; + gchar *in_assets, *max_checks, *max_hosts; + gchar *auto_delete, *auto_delete_data, *assets_apply_overrides; + gchar *assets_min_qod; + SEND_GET_COMMON (task, &get_tasks_data->get, &tasks); target_in_trash = task_target_in_trash (index); if ((target == 0) From 2da21a6ab4b2d24a15b1a7f04bf9078607d3aa76 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Thu, 8 Feb 2024 00:29:40 +0200 Subject: [PATCH 08/43] Move get_task_schedule_xml into branches --- src/gmp.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index e9db68682e..a1f5b287a1 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17479,7 +17479,6 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) { task_t index; target_t target; - gchar *task_schedule_xml; ret = get_next (&tasks, &get_tasks_data->get, &first, &count, init_task_iterator); @@ -17494,15 +17493,16 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) index = get_iterator_resource (&tasks); target = task_target (index); - task_schedule_xml = get_task_schedule_xml (index); - if (get_tasks_data->schedules_only) { + gchar *task_schedule_xml; + SENDF_TO_CLIENT_OR_FAIL ("" "%s", get_iterator_uuid (&tasks), get_iterator_name (&tasks)); + task_schedule_xml = get_task_schedule_xml (index); SEND_TO_CLIENT_OR_FAIL (task_schedule_xml); g_free (task_schedule_xml); @@ -17515,6 +17515,7 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) const char *first_report_id, *last_report_id; char *config_name, *config_uuid; gchar *progress_xml; + gchar *task_schedule_xml; gchar *config_name_escaped; char *task_target_uuid, *task_target_name; gchar *task_target_name_escaped; @@ -17856,6 +17857,8 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) ? g_markup_escape_text (task_scanner_name, -1) : NULL; + task_schedule_xml = get_task_schedule_xml (index); + response = g_strdup_printf ("%i" "%s" From 9fdaaa017d97b44dbd094a46a7fd0d1906633b14 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Thu, 8 Feb 2024 00:33:19 +0200 Subject: [PATCH 09/43] Move task_target into branch that uses it --- src/gmp.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index a1f5b287a1..ac11af5933 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17478,7 +17478,6 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) while (1) { task_t index; - target_t target; ret = get_next (&tasks, &get_tasks_data->get, &first, &count, init_task_iterator); @@ -17491,7 +17490,6 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) } index = get_iterator_resource (&tasks); - target = task_target (index); if (get_tasks_data->schedules_only) { @@ -17511,6 +17509,7 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) } else { + target_t target; scanner_t scanner; const char *first_report_id, *last_report_id; char *config_name, *config_uuid; @@ -17539,6 +17538,8 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) gchar *auto_delete, *auto_delete_data, *assets_apply_overrides; gchar *assets_min_qod; + target = task_target (index); + SEND_GET_COMMON (task, &get_tasks_data->get, &tasks); target_in_trash = task_target_in_trash (index); if ((target == 0) From fb8882d814b60101fb5127ad3ba3f50d2b8b6d25 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Thu, 8 Feb 2024 00:35:38 +0200 Subject: [PATCH 10/43] Move get_iterator_resource into branches --- src/gmp.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index ac11af5933..2e95143d39 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17477,8 +17477,6 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) while (1) { - task_t index; - ret = get_next (&tasks, &get_tasks_data->get, &first, &count, init_task_iterator); if (ret == 1) @@ -17489,10 +17487,9 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) return; } - index = get_iterator_resource (&tasks); - if (get_tasks_data->schedules_only) { + task_t index; gchar *task_schedule_xml; SENDF_TO_CLIENT_OR_FAIL ("" @@ -17500,6 +17497,7 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) get_iterator_uuid (&tasks), get_iterator_name (&tasks)); + index = get_iterator_resource (&tasks); task_schedule_xml = get_task_schedule_xml (index); SEND_TO_CLIENT_OR_FAIL (task_schedule_xml); g_free (task_schedule_xml); @@ -17509,6 +17507,7 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) } else { + task_t index; target_t target; scanner_t scanner; const char *first_report_id, *last_report_id; @@ -17538,6 +17537,7 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) gchar *auto_delete, *auto_delete_data, *assets_apply_overrides; gchar *assets_min_qod; + index = get_iterator_resource (&tasks); target = task_target (index); SEND_GET_COMMON (task, &get_tasks_data->get, &tasks); From e09e76427f738c41ed01315e546bdb8e89dc9f07 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Thu, 8 Feb 2024 00:50:06 +0200 Subject: [PATCH 11/43] Move schedules_only case out to function --- src/gmp.c | 56 ++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 2e95143d39..83cbce52ba 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17389,6 +17389,45 @@ get_task_schedule_xml (task_t task) } +/** + * @brief Handle end of GET_TASKS element. + * + * @param[in] gmp_parser GMP parser. + * @param[in] error Error parameter. + * @param[in] tasks Task iterator. + * + * @return 1 if error, else 0. + */ +static int +get_tasks_send_schedules_only (gmp_parser_t *gmp_parser, + GError **error, + iterator_t *tasks) +{ + task_t index; + gchar *task_schedule_xml; + + SENDF_TO_CLIENT_OR_FAIL_WITH_RETURN (1, + "" + "%s", + get_iterator_uuid (tasks), + get_iterator_name (tasks)); + + index = get_iterator_resource (tasks); + task_schedule_xml = get_task_schedule_xml (index); + if (send_to_client (task_schedule_xml, + gmp_parser->client_writer, + gmp_parser->client_writer_data)) + { + error_send_to_client (error); + return 1; + } + g_free (task_schedule_xml); + + SENDF_TO_CLIENT_OR_FAIL_WITH_RETURN (1, ""); + + return 0; +} + /** * @brief Handle end of GET_TASKS element. * @@ -17489,21 +17528,8 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) if (get_tasks_data->schedules_only) { - task_t index; - gchar *task_schedule_xml; - - SENDF_TO_CLIENT_OR_FAIL ("" - "%s", - get_iterator_uuid (&tasks), - get_iterator_name (&tasks)); - - index = get_iterator_resource (&tasks); - task_schedule_xml = get_task_schedule_xml (index); - SEND_TO_CLIENT_OR_FAIL (task_schedule_xml); - g_free (task_schedule_xml); - - SENDF_TO_CLIENT_OR_FAIL (""); - + if (get_tasks_send_schedules_only (gmp_parser, error, &tasks)) + return; } else { From 65f515fe7519b56a3924baa4ba6e7e3f3f8b9ce7 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Thu, 8 Feb 2024 00:55:16 +0200 Subject: [PATCH 12/43] Use send instead of sendf for simple string --- src/gmp.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gmp.c b/src/gmp.c index 83cbce52ba..8ffa34612c 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17423,7 +17423,13 @@ get_tasks_send_schedules_only (gmp_parser_t *gmp_parser, } g_free (task_schedule_xml); - SENDF_TO_CLIENT_OR_FAIL_WITH_RETURN (1, ""); + if (send_to_client ("", + gmp_parser->client_writer, + gmp_parser->client_writer_data)) + { + error_send_to_client (error); + return 1; + } return 0; } From 2ff4aeb7f2488782d9ab82297501807df9866b68 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Thu, 8 Feb 2024 01:30:03 +0200 Subject: [PATCH 13/43] Use new function sendf_to_client instead of obscure macro --- src/gmp.c | 14 +++++++++----- src/gmp_base.c | 30 ++++++++++++++++++++++++++++++ src/gmp_base.h | 3 +++ 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 8ffa34612c..9d4c0cc478 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17406,11 +17406,15 @@ get_tasks_send_schedules_only (gmp_parser_t *gmp_parser, task_t index; gchar *task_schedule_xml; - SENDF_TO_CLIENT_OR_FAIL_WITH_RETURN (1, - "" - "%s", - get_iterator_uuid (tasks), - get_iterator_name (tasks)); + if (sendf_to_client (gmp_parser, + "" + "%s", + get_iterator_uuid (tasks), + get_iterator_name (tasks))) + { + error_send_to_client (error); + return 1; + } index = get_iterator_resource (tasks); task_schedule_xml = get_task_schedule_xml (index); diff --git a/src/gmp_base.c b/src/gmp_base.c index e8a1f62765..5b04a3c04d 100644 --- a/src/gmp_base.c +++ b/src/gmp_base.c @@ -134,6 +134,36 @@ send_to_client (const char* msg, return FALSE; } +/** + * @brief Send a response message to the client. + * + * @param[in] gmp_parser GMP parser. + * @param[in] format Format string. + * + * @return TRUE if error, else FALSE. + */ +gboolean +sendf_to_client (gmp_parser_t *parser, const char *format, ...) +{ + if (format) + { + va_list args; + gchar *msg; + + va_start (args, format); + msg = g_markup_vprintf_escaped (format, args); + va_end (args); + + if (parser->client_writer (msg, parser->client_writer_data)) + { + g_free (msg); + return TRUE; + } + g_free (msg); + } + return FALSE; +} + /** * @brief Send an XML find error response message to the client. * diff --git a/src/gmp_base.h b/src/gmp_base.h index f9d25c9650..ee38bebb92 100644 --- a/src/gmp_base.h +++ b/src/gmp_base.h @@ -46,6 +46,9 @@ buffer_xml_append_printf (GString *, const char *, ...); gboolean send_to_client (const char *, int (*) (const char *, void *), void *); +gboolean +sendf_to_client (gmp_parser_t *, const char *format, ...); + gboolean send_find_error_to_client (const char *, const char *, const char *, gmp_parser_t *); From ef279162113ca47abc8bcde005d4750d2b7cb379 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Thu, 8 Feb 2024 16:45:49 +0200 Subject: [PATCH 14/43] Make sendf_to_client more convenient --- src/gmp.c | 6 ++---- src/gmp_base.c | 3 ++- src/gmp_base.h | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 9d4c0cc478..38c7eeddac 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17407,14 +17407,12 @@ get_tasks_send_schedules_only (gmp_parser_t *gmp_parser, gchar *task_schedule_xml; if (sendf_to_client (gmp_parser, + error, "" "%s", get_iterator_uuid (tasks), get_iterator_name (tasks))) - { - error_send_to_client (error); - return 1; - } + return 1; index = get_iterator_resource (tasks); task_schedule_xml = get_task_schedule_xml (index); diff --git a/src/gmp_base.c b/src/gmp_base.c index 5b04a3c04d..3ccab8a76d 100644 --- a/src/gmp_base.c +++ b/src/gmp_base.c @@ -143,7 +143,7 @@ send_to_client (const char* msg, * @return TRUE if error, else FALSE. */ gboolean -sendf_to_client (gmp_parser_t *parser, const char *format, ...) +sendf_to_client (gmp_parser_t *parser, GError **error, const char *format, ...) { if (format) { @@ -157,6 +157,7 @@ sendf_to_client (gmp_parser_t *parser, const char *format, ...) if (parser->client_writer (msg, parser->client_writer_data)) { g_free (msg); + error_send_to_client (error); return TRUE; } g_free (msg); diff --git a/src/gmp_base.h b/src/gmp_base.h index ee38bebb92..d2fcc31c4f 100644 --- a/src/gmp_base.h +++ b/src/gmp_base.h @@ -47,7 +47,7 @@ gboolean send_to_client (const char *, int (*) (const char *, void *), void *); gboolean -sendf_to_client (gmp_parser_t *, const char *format, ...); +sendf_to_client (gmp_parser_t *, GError **, const char *format, ...); gboolean send_find_error_to_client (const char *, const char *, const char *, From 7487ae0b831770d0fa28026fed0e7594563b2a79 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Thu, 8 Feb 2024 16:47:24 +0200 Subject: [PATCH 15/43] Make send_find_error_to_client more convenient --- src/gmp.c | 1188 +++++++++++------------------------- src/gmp_base.c | 8 +- src/gmp_base.h | 2 +- src/gmp_configs.c | 15 +- src/gmp_delete.c | 7 +- src/gmp_port_lists.c | 8 +- src/gmp_report_formats.c | 8 +- src/gmp_tickets.c | 42 +- src/gmp_tls_certificates.c | 23 +- 9 files changed, 406 insertions(+), 895 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 38c7eeddac..9eb085f15f 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -10871,11 +10871,8 @@ buffer_aggregate_xml (GString *xml, iterator_t* aggregate, const gchar* type, ("delete_" G_STRINGIFY (type), \ G_STRINGIFY (type), \ delete_ ## type ## _data-> type ## _id, \ - gmp_parser)) \ - { \ - error_send_to_client (error); \ - return; \ - } \ + gmp_parser, error)) \ + return; \ log_event_fail (G_STRINGIFY(type), capital, \ delete_ ## type ## _data-> type ## _id, \ "deleted"); \ @@ -11187,20 +11184,14 @@ handle_get_alerts (gmp_parser_t *gmp_parser, GError **error) case 1: if (send_find_error_to_client ("get_alerts", "alert", get_alerts_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: if (send_find_error_to_client ("get_alerts", "filter", get_alerts_data->get.filt_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -11543,11 +11534,8 @@ handle_get_assets (gmp_parser_t *gmp_parser, GError **error) } else { - if (send_find_error_to_client ("get_assets", "type", - get_assets_data->type, gmp_parser)) - { - error_send_to_client (error); - } + send_find_error_to_client ("get_assets", "type", + get_assets_data->type, gmp_parser, error); get_assets_data_reset (get_assets_data); set_client_state (CLIENT_AUTHENTIC); return; @@ -11561,20 +11549,14 @@ handle_get_assets (gmp_parser_t *gmp_parser, GError **error) case 1: if (send_find_error_to_client ("get_assets", "type", get_assets_data->type, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: if (send_find_error_to_client ("get_assets", "filter", get_assets_data->get.filt_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -11822,20 +11804,14 @@ handle_get_configs (gmp_parser_t *gmp_parser, GError **error) case 1: if (send_find_error_to_client ("get_configs", "config", get_configs_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: if (send_find_error_to_client ("get_configs", "filter", get_configs_data->get.filt_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL (XML_INTERNAL_ERROR ("get_configs")); @@ -12135,21 +12111,15 @@ handle_get_credentials (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("get_credentials", "credential", get_credentials_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: if (send_find_error_to_client ("get_credentials", "filter", get_credentials_data->get.filt_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -12870,20 +12840,14 @@ handle_get_filters (gmp_parser_t *gmp_parser, GError **error) case 1: if (send_find_error_to_client ("get_filters", "filter", get_filters_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: if (send_find_error_to_client ("get_filters", "filter", - get_filters_data->get.filt_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_filters_data->get.filt_id, gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -12976,20 +12940,14 @@ handle_get_groups (gmp_parser_t *gmp_parser, GError **error) case 1: if (send_find_error_to_client ("get_groups", "group", get_groups_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: if (send_find_error_to_client ("get_groups", "filter", get_groups_data->get.filt_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -13120,12 +13078,9 @@ handle_get_info (gmp_parser_t *gmp_parser, GError **error) else { if (send_find_error_to_client ("get_info", "type", - get_info_data->type, - gmp_parser)) - { - error_send_to_client (error); - return; - } + get_info_data->type, + gmp_parser, error)) + return; get_info_data_reset (get_info_data); set_client_state (CLIENT_AUTHENTIC); return; @@ -13176,11 +13131,8 @@ handle_get_info (gmp_parser_t *gmp_parser, GError **error) } else { - if (send_find_error_to_client ("get_info", "type", - get_info_data->type, gmp_parser)) - { - error_send_to_client (error); - } + send_find_error_to_client ("get_info", "type", + get_info_data->type, gmp_parser, error); return; } @@ -13197,20 +13149,15 @@ handle_get_info (gmp_parser_t *gmp_parser, GError **error) get_info_data->name ? get_info_data->name : get_info_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; break; case 2: if (send_find_error_to_client ("get_info", "filter", get_info_data->get.filt_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -13486,11 +13433,8 @@ handle_get_notes (gmp_parser_t *gmp_parser, GError **error) { if (send_find_error_to_client ("get_notes", "task", get_notes_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else if (get_notes_data->nvt_oid && find_nvt (get_notes_data->nvt_oid, &nvt)) @@ -13499,11 +13443,8 @@ handle_get_notes (gmp_parser_t *gmp_parser, GError **error) { if (send_find_error_to_client ("get_notes", "NVT", get_notes_data->nvt_oid, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else { @@ -13522,20 +13463,14 @@ handle_get_notes (gmp_parser_t *gmp_parser, GError **error) case 1: if (send_find_error_to_client ("get_notes", "note", get_notes_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: if (send_find_error_to_client ("get_notes", "filter", - get_notes_data->get.filt_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_notes_data->get.filt_id, gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -13650,12 +13585,9 @@ handle_get_nvts (gmp_parser_t *gmp_parser, GError **error) else if (get_nvts_data->nvt_oid && nvt == 0) { if (send_find_error_to_client ("get_nvts", "NVT", - get_nvts_data->nvt_oid, - gmp_parser)) - { - error_send_to_client (error); - return; - } + get_nvts_data->nvt_oid, + gmp_parser, error)) + return; } else if (get_nvts_data->config_id && get_nvts_data->preferences_config_id) @@ -13673,11 +13605,8 @@ handle_get_nvts (gmp_parser_t *gmp_parser, GError **error) { if (send_find_error_to_client ("get_nvts", "config", get_nvts_data->config_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else if (get_nvts_data->preferences_config_id && find_config_with_permission @@ -13691,12 +13620,9 @@ handle_get_nvts (gmp_parser_t *gmp_parser, GError **error) { if (send_find_error_to_client ("get_nvts", "config", - get_nvts_data->preferences_config_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + get_nvts_data->preferences_config_id, + gmp_parser, error)) + return; } else { @@ -13880,11 +13806,8 @@ handle_get_overrides (gmp_parser_t *gmp_parser, GError **error) { if (send_find_error_to_client ("get_overrides", "task", get_overrides_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else if (get_overrides_data->nvt_oid && find_nvt (get_overrides_data->nvt_oid, &nvt)) @@ -13893,11 +13816,8 @@ handle_get_overrides (gmp_parser_t *gmp_parser, GError **error) { if (send_find_error_to_client ("get_overrides", "NVT", get_overrides_data->nvt_oid, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else { @@ -13917,20 +13837,14 @@ handle_get_overrides (gmp_parser_t *gmp_parser, GError **error) case 1: if (send_find_error_to_client ("get_overrides", "override", - get_overrides_data->get.id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_overrides_data->get.id, gmp_parser, error)) + return; break; case 2: if (send_find_error_to_client ("get_overrides", "filter", - get_overrides_data->get.filt_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_overrides_data->get.filt_id, gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -13990,20 +13904,15 @@ handle_get_permissions (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("get_permissions", "permission", get_permissions_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; break; case 2: if (send_find_error_to_client ("get_permissions", "filter", - get_permissions_data->get.filt_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_permissions_data->get.filt_id, gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -14106,20 +14015,15 @@ handle_get_port_lists (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("get_port_lists", "port_list", get_port_lists_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; break; case 2: if (send_find_error_to_client ("get_port_lists", "filter", - get_port_lists_data->get.filt_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_port_lists_data->get.filt_id, gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -14270,11 +14174,8 @@ handle_get_preferences (gmp_parser_t *gmp_parser, GError **error) { if (send_find_error_to_client ("get_preferences", "NVT", get_preferences_data->nvt_oid, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else if (get_preferences_data->config_id && find_config_with_permission (get_preferences_data->config_id, @@ -14285,11 +14186,8 @@ handle_get_preferences (gmp_parser_t *gmp_parser, GError **error) { if (send_find_error_to_client ("get_preferences", "config", get_preferences_data->config_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else { @@ -14458,11 +14356,8 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error) { if (send_find_error_to_client ("get_reports", "report format", get_reports_data->format_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; get_reports_data_reset (get_reports_data); set_client_state (CLIENT_AUTHENTIC); return; @@ -14487,11 +14382,8 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error) { if (send_find_error_to_client ("get_reports", "filter", get_reports_data->get.filt_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; get_reports_data_reset (get_reports_data); set_client_state (CLIENT_AUTHENTIC); return; @@ -14503,11 +14395,8 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error) { if (send_find_error_to_client ("get_reports", "report", get_reports_data->report_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; get_reports_data_reset (get_reports_data); set_client_state (CLIENT_AUTHENTIC); return; @@ -14519,11 +14408,8 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error) { if (send_find_error_to_client ("get_reports", "report", get_reports_data->delta_report_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; get_reports_data_reset (get_reports_data); set_client_state (CLIENT_AUTHENTIC); return; @@ -14627,20 +14513,14 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error) case 1: if (send_find_error_to_client ("get_reports", "report", get_reports_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: if (send_find_error_to_client ("get_reports", "filter", - get_reports_data->get.filt_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_reports_data->get.filt_id, gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -14806,11 +14686,8 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error) case 1: if (send_find_error_to_client ("get_reports", "alert", - get_reports_data->alert_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_reports_data->alert_id, gmp_parser, error)) + return; /* Close the connection with the client, as part of the * response may have been sent before the error * occurred. */ @@ -14824,11 +14701,8 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error) case 2: if (send_find_error_to_client ("get_reports", "filter", - get_reports_data->get.filt_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_reports_data->get.filt_id, gmp_parser, error)) + return; /* This error always occurs before anything is sent * to the client, so the connection can stay up. */ if (request_report == 0) @@ -14887,11 +14761,8 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error) { if (send_find_error_to_client ("get_reports", "filter", - get_reports_data->get.filt_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_reports_data->get.filt_id, gmp_parser, error)) + return; /* This error always occurs before anything is sent * to the client, so the connection can stay up. */ if (request_report == 0) @@ -14971,20 +14842,15 @@ handle_get_report_formats (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("get_report_formats", "report_format", get_report_formats_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; break; case 2: if (send_find_error_to_client ("get_report_formats", "filter", - get_report_formats_data->get.filt_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_report_formats_data->get.filt_id, gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -15451,15 +15317,13 @@ handle_get_resource_names (gmp_parser_t *gmp_parser, GError **error) if (select_resource_iterator(get_resource_names_data, &init_resource_iterator)) { - if (send_find_error_to_client ("get_resource_names", "type", - get_resource_names_data->type, gmp_parser)) - { - error_send_to_client (error); - } + send_find_error_to_client ("get_resource_names", "type", + get_resource_names_data->type, gmp_parser, + error); get_resource_names_data_reset (get_resource_names_data); set_client_state (CLIENT_AUTHENTIC); return; - }; + } ret = init_resource_iterator (&resource, &get_resource_names_data->get); if (ret) @@ -15469,20 +15333,14 @@ handle_get_resource_names (gmp_parser_t *gmp_parser, GError **error) case 1: if (send_find_error_to_client ("get_resource_names", "type", get_resource_names_data->type, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: if (send_find_error_to_client ("get_resource_names", "filter", get_resource_names_data->get.filt_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -15608,12 +15466,9 @@ handle_get_results (gmp_parser_t *gmp_parser, GError **error) else if (get_results_data->get.id && result == 0) { if (send_find_error_to_client ("get_results", "result", - get_results_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + get_results_data->get.id, + gmp_parser, error)) + return; } else if (get_results_data->task_id && find_task_with_permission (get_results_data->task_id, @@ -15623,12 +15478,9 @@ handle_get_results (gmp_parser_t *gmp_parser, GError **error) else if (get_results_data->task_id && task == 0) { if (send_find_error_to_client ("get_results", "task", - get_results_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + get_results_data->task_id, + gmp_parser, error)) + return; } else { @@ -15801,21 +15653,15 @@ handle_get_roles (gmp_parser_t *gmp_parser, GError **error) { case 1: if (send_find_error_to_client ("get_roles", "role", - get_roles_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + get_roles_data->get.id, + gmp_parser, error)) + return; break; case 2: if (send_find_error_to_client ("get_roles", "filter", get_roles_data->get.filt_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -15883,20 +15729,14 @@ handle_get_scanners (gmp_parser_t *gmp_parser, GError **error) case 1: if (send_find_error_to_client ("get_scanners", "scanners", get_scanners_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - break; - } + gmp_parser, error)) + break; break; case 2: if (send_find_error_to_client ("get_scanners", "filter", get_scanners_data->get.filt_id, - gmp_parser)) - { - error_send_to_client (error); - break; - } + gmp_parser, error)) + break; break; case -1: SEND_TO_CLIENT_OR_FAIL (XML_INTERNAL_ERROR ("get_scanners")); @@ -16164,20 +16004,15 @@ handle_get_schedules (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("get_schedules", "schedule", get_schedules_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; break; case 2: if (send_find_error_to_client ("get_schedules", "filter", - get_schedules_data->get.filt_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_schedules_data->get.filt_id, gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -16292,11 +16127,8 @@ handle_create_schedule (gmp_parser_t *gmp_parser, GError **error) case 2: if (send_find_error_to_client ("create_schedule", "schedule", create_schedule_data->copy, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("schedule", "Schedule", NULL, "created"); break; case 99: @@ -16447,12 +16279,9 @@ handle_modify_schedule (gmp_parser_t *gmp_parser, GError **error) break; case 1: if (send_find_error_to_client ("modify_schedule", "schedule", - modify_schedule_data->schedule_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + modify_schedule_data->schedule_id, + gmp_parser, error)) + return; log_event_fail ("schedule", "Schedule", modify_schedule_data->schedule_id, "modified"); @@ -16657,20 +16486,14 @@ handle_get_system_reports (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("get_system_reports", "system report", get_system_reports_data->name, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: if (send_find_error_to_client ("get_system_reports", "slave", - get_system_reports_data->slave_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_system_reports_data->slave_id, gmp_parser, error)) + return; break; case 4: SEND_TO_CLIENT_OR_FAIL @@ -16793,20 +16616,14 @@ handle_get_tags (gmp_parser_t *gmp_parser, GError **error) case 1: if (send_find_error_to_client ("get_tags", "tag", get_tags_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: if (send_find_error_to_client ("get_tags", "filter", get_tags_data->get.filt_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; default: SEND_TO_CLIENT_OR_FAIL @@ -16900,20 +16717,15 @@ handle_get_targets (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("get_targets", "target", get_targets_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; break; case 2: if (send_find_error_to_client ("get_targets", "filter", - get_targets_data->get.filt_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_targets_data->get.filt_id, gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -17474,20 +17286,15 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("get_tasks", "task", get_tasks_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; break; case 2: if (send_find_error_to_client ("get_tasks", "filter", get_tasks_data->get.filt_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -18167,20 +17974,15 @@ handle_get_users (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("get_users", "user", get_users_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; break; case 2: if (send_find_error_to_client ("get_users", "filter", get_users_data->get.filt_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -18317,20 +18119,15 @@ handle_get_vulns (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("get_vulns", "vuln", get_vulns_data->get.id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; break; case 2: if (send_find_error_to_client ("get_vulns", "filter", - get_vulns_data->get.filt_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + get_vulns_data->get.filt_id, gmp_parser, error)) + return; break; case -1: SEND_TO_CLIENT_OR_FAIL @@ -18435,11 +18232,9 @@ handle_create_scanner (gmp_parser_t *gmp_parser, GError **error) goto create_scanner_leave; case 2: if (send_find_error_to_client ("create_scanner", "scanner", - create_scanner_data->copy, gmp_parser)) - { - error_send_to_client (error); - goto create_scanner_leave; - } + create_scanner_data->copy, gmp_parser, + error)) + goto create_scanner_leave; log_event_fail ("scanner", "Scanner", NULL, "created"); goto create_scanner_leave; case 98: @@ -18531,11 +18326,8 @@ handle_create_scanner (gmp_parser_t *gmp_parser, GError **error) case 3: if (send_find_error_to_client ("create_scanner", "credential", create_scanner_data->credential_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("scanner", "Scanner", NULL, "created"); break; case 4: @@ -18618,11 +18410,8 @@ handle_modify_scanner (gmp_parser_t *gmp_parser, GError **error) case 1: if (send_find_error_to_client ("modify_scanner", "scanner", modify_scanner_data->scanner_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("scanner", "Scanner", modify_scanner_data->scanner_id, "modified"); break; @@ -18648,11 +18437,8 @@ handle_modify_scanner (gmp_parser_t *gmp_parser, GError **error) case 5: if (send_find_error_to_client ("create_scanner", "credential", modify_scanner_data->credential_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("scanner", "Scanner", modify_scanner_data->scanner_id, "modified"); break; @@ -19018,11 +18804,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, ("delete_asset", "asset", delete_asset_data->asset_id, - gmp_parser)) - { - error_send_to_client (error); + gmp_parser, + error)) return; - } log_event_fail ("asset", "Asset", delete_asset_data->asset_id, "deleted"); @@ -19093,11 +18877,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, if (send_find_error_to_client ("delete_report", "report", delete_report_data->report_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("report", "Report", delete_report_data->report_id, "deleted"); @@ -19173,11 +18954,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 3: /* Failed to find task. */ if (send_find_error_to_client ("delete_task", "task", delete_task_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 4: SENDF_TO_CLIENT_OR_FAIL( @@ -19253,11 +19031,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, delete_user_data->user_id ? delete_user_data->user_id : delete_user_data->name, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; log_event_fail ("user", "User", delete_user_data->user_id, "deleted"); break; @@ -19280,11 +19056,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 6: if (send_find_error_to_client ("delete_user", "inheriting user", delete_user_data->inheritor_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 7: SEND_TO_CLIENT_OR_FAIL @@ -19757,11 +19530,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: assert (help_data->format); if (send_find_error_to_client ("help", "schema_format", - help_data->format, gmp_parser)) - { - error_send_to_client (error); - return; - } + help_data->format, gmp_parser, + error)) + return; break; default: SEND_TO_CLIENT_OR_FAIL (XML_INTERNAL_ERROR ("help")); @@ -19927,11 +19698,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 2: if (send_find_error_to_client ("create_alert", "alert", create_alert_data->copy, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("alert", "Alert", NULL, "created"); break; case 99: @@ -20023,11 +19791,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 3: if (send_find_error_to_client ("create_alert", "filter", create_alert_data->filter_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("alert", "Alert", NULL, "created"); break; case 4: @@ -20377,11 +20142,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, if (send_find_error_to_client ("create_credential", "credential", create_credential_data->copy, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("credential", "Credential", NULL, "created"); break; case 99: @@ -20633,11 +20395,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 2: if (send_find_error_to_client ("create_filter", "filter", create_filter_data->copy, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("filter", "Filter", NULL, "created"); break; case 99: @@ -20744,11 +20503,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 2: if (send_find_error_to_client ("create_group", "group", create_group_data->copy, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("group", "Group", NULL, "created"); break; case 4: @@ -20866,11 +20622,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 2: if (send_find_error_to_client ("create_note", "note", create_note_data->copy, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("note", "Note", NULL, "created"); break; case 99: @@ -20914,11 +20667,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, { if (send_find_error_to_client ("create_note", "task", create_note_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else if (create_note_data->result_id && find_result_with_permission (create_note_data->result_id, @@ -20929,11 +20679,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, { if (send_find_error_to_client ("create_note", "result", create_note_data->result_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else switch (create_note (create_note_data->active, create_note_data->nvt_oid, @@ -20959,11 +20706,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("create_note", "nvt", create_note_data->nvt_oid, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: SEND_TO_CLIENT_OR_FAIL @@ -21030,11 +20774,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 2: if (send_find_error_to_client ("create_override", "override", create_override_data->copy, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("override", "Override", NULL, "created"); break; case 99: @@ -21085,11 +20826,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, { if (send_find_error_to_client ("create_override", "task", create_override_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else if (create_override_data->result_id && find_result_with_permission (create_override_data->result_id, @@ -21100,11 +20838,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, { if (send_find_error_to_client ("create_override", "result", create_override_data->result_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else switch (create_override (create_override_data->active, create_override_data->nvt_oid, @@ -21132,11 +20867,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("create_override", "nvt", create_override_data->nvt_oid, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: SEND_TO_CLIENT_OR_FAIL @@ -21211,11 +20943,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, if (send_find_error_to_client ("create_permission", "permission", create_permission_data->copy, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("permission", "Permission", NULL, "created"); break; case 99: @@ -21262,21 +20991,15 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 2: if (send_find_error_to_client ("create_permission", "subject", - create_permission_data->subject_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + create_permission_data->subject_id, gmp_parser, error)) + return; log_event_fail ("permission", "Permission", NULL, "created"); break; case 3: if (send_find_error_to_client ("create_permission", "resource", - create_permission_data->resource_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + create_permission_data->resource_id, gmp_parser, error)) + return; log_event_fail ("permission", "Permission", NULL, "created"); break; case 5: @@ -21377,11 +21100,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 3: if (send_find_error_to_client ("create_port_range", "port_range", - create_port_range_data->port_list_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + create_port_range_data->port_list_id, gmp_parser, error)) + return; log_event_fail ("port_range", "Port Range", NULL, "created"); break; case 4: @@ -21484,11 +21204,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, log_event_fail ("report", "Report", NULL, "created"); if (send_find_error_to_client ("create_report", "task", - create_report_data->task_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + create_report_data->task_id, gmp_parser, error)) + return; break; case -5: SEND_TO_CLIENT_OR_FAIL @@ -21759,11 +21476,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 2: if (send_find_error_to_client ("create_role", "role", create_role_data->copy, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("role", "Role", NULL, "created"); break; case 4: @@ -21903,11 +21617,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 2: if (send_find_error_to_client ("create_tag", "tag", create_tag_data->copy, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("tag", "Tag", NULL, "created"); break; case 99: @@ -21978,9 +21689,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("create_tag", "resource", error_extra, - gmp_parser)) + gmp_parser, error)) { - error_send_to_client (error); g_free (error_extra); return; } @@ -22063,11 +21773,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 2: if (send_find_error_to_client ("create_target", "target", create_target_data->copy, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("target", "Target", NULL, "created"); break; case 99: @@ -22126,11 +21833,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, create_target_data->ssh_credential_id ? create_target_data->ssh_credential_id : create_target_data->ssh_lsc_credential_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else if (create_target_data->ssh_elevate_credential_id && find_credential_with_permission @@ -22160,11 +21864,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, create_target_data->smb_credential_id ? create_target_data->smb_credential_id : create_target_data->smb_lsc_credential_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else if (create_target_data->esxi_credential_id && find_credential_with_permission @@ -22188,11 +21889,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, create_target_data->esxi_credential_id ? create_target_data->esxi_credential_id : create_target_data->esxi_lsc_credential_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else if (create_target_data->snmp_credential_id && find_credential_with_permission @@ -22206,11 +21904,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, if (send_find_error_to_client ("create_target", "Credential", create_target_data->snmp_credential_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } /* Create target from host string. */ else switch (create_target @@ -22270,11 +21965,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, log_event_fail ("target", "Target", NULL, "created"); if (send_find_error_to_client ("create_target", "port_list", - create_target_data->port_list_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + create_target_data->port_list_id, gmp_parser, error)) + return; break; case 7: SEND_TO_CLIENT_OR_FAIL @@ -22456,11 +22148,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 2: if (send_find_error_to_client ("create_task", "task", create_task_data->copy, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("task", "Task", NULL, "created"); break; case 99: @@ -22669,11 +22358,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, break; case 1: if (send_find_error_to_client - ("create_task", "group", fail_group_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + ("create_task", "group", fail_group_id, gmp_parser, + error)) + return; log_event_fail ("task", "Task", NULL, "created"); goto create_task_fail; case -1: @@ -22694,10 +22381,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, } if (create_task_data->scanner_id && scanner == 0) { - if (send_find_error_to_client ("create_task", "scanner", - create_task_data->scanner_id, - gmp_parser)) - error_send_to_client (error); + send_find_error_to_client ("create_task", "scanner", + create_task_data->scanner_id, + gmp_parser, error); goto create_task_fail; } if ((scanner == 0) || (scanner_type (scanner) != SCANNER_TYPE_CVE)) @@ -22711,10 +22397,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, } if (config == 0) { - if (send_find_error_to_client ("create_task", "config", - create_task_data->config_id, - gmp_parser)) - error_send_to_client (error); + send_find_error_to_client ("create_task", "config", + create_task_data->config_id, + gmp_parser, error); goto create_task_fail; } @@ -22735,10 +22420,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, } if (target == 0) { - if (send_find_error_to_client ("create_task", "target", - create_task_data->target_id, - gmp_parser)) - error_send_to_client (error); + send_find_error_to_client ("create_task", "target", + create_task_data->target_id, + gmp_parser, error); goto create_task_fail; } @@ -22862,12 +22546,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 2: if (send_find_error_to_client ("create_user", "user", create_user_data->copy, - gmp_parser)) - { - error_send_to_client (error); - return; - } - log_event_fail ("user", "User", NULL, "created"); + gmp_parser, error)) + return; + log_event_fail ("user", "User", NULL, "created"); break; case 99: SEND_TO_CLIENT_OR_FAIL @@ -22917,20 +22598,14 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, } case 1: if (send_find_error_to_client - ("create_user", "group", fail_group_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + ("create_user", "group", fail_group_id, gmp_parser, error)) + return; log_event_fail ("user", "User", NULL, "created"); break; case 2: if (send_find_error_to_client - ("create_user", "role", fail_role_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + ("create_user", "role", fail_role_id, gmp_parser, error)) + return; log_event_fail ("user", "User", NULL, "created"); break; case 3: @@ -23077,11 +22752,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("modify_alert", "alert", modify_alert_data->alert_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("alert", "Alert", modify_alert_data->alert_id, "modified"); break; @@ -23102,11 +22774,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 4: if (send_find_error_to_client ("modify_alert", "filter", modify_alert_data->filter_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("alert", "Alert", modify_alert_data->alert_id, "modified"); break; @@ -23442,11 +23111,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("modify_asset", "asset", modify_asset_data->asset_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("asset", "Asset", modify_asset_data->asset_id, "modified"); break; @@ -23662,11 +23328,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, if (send_find_error_to_client ("modify_credential", "credential", modify_credential_data->credential_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("credential", "Credential", modify_credential_data->credential_id, "modified"); @@ -23800,11 +23463,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("modify_filter", "filter", modify_filter_data->filter_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("filter", "Filter", modify_filter_data->filter_id, "modified"); break; @@ -23885,11 +23545,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("modify_group", "group", modify_group_data->group_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("group", "Group", modify_group_data->group_id, "modified"); break; @@ -24015,33 +23672,24 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 5: if (send_find_error_to_client ("modify_note", "note", modify_note_data->note_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("note", "Note", modify_note_data->note_id, "modified"); break; case 6: if (send_find_error_to_client ("modify_note", "task", modify_note_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("note", "Note", modify_note_data->note_id, "modified"); break; case 7: if (send_find_error_to_client ("modify_note", "result", modify_note_data->result_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("note", "Note", modify_note_data->note_id, "modified"); break; @@ -24147,11 +23795,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 5: if (send_find_error_to_client ("modify_override", "override", modify_override_data->override_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("override", "Override", modify_override_data->override_id, "modified"); @@ -24159,11 +23804,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 6: if (send_find_error_to_client ("modify_override", "task", modify_override_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("override", "Override", modify_override_data->override_id, "modified"); @@ -24171,11 +23813,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 7: if (send_find_error_to_client ("modify_override", "result", modify_override_data->result_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("override", "Override", modify_override_data->override_id, "modified"); @@ -24264,11 +23903,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 2: if (send_find_error_to_client ("modify_permission", "subject", - modify_permission_data->subject_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + modify_permission_data->subject_id, gmp_parser, error)) + return; log_event_fail ("permission", "Permission", modify_permission_data->permission_id, "modified"); @@ -24276,11 +23912,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 3: if (send_find_error_to_client ("modify_permission", "resource", - modify_permission_data->resource_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + modify_permission_data->resource_id, gmp_parser, error)) + return; log_event_fail ("permission", "Permission", modify_permission_data->permission_id, "modified"); @@ -24382,11 +24015,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("modify_port_list", "port_list", modify_port_list_data->port_list_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("port_list", "Port List", modify_port_list_data->port_list_id, "modified"); @@ -24451,11 +24081,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, if (send_find_error_to_client ("modify_report_format", "report_format", modify_report_format_data->report_format_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("report_format", "Report Format", modify_report_format_data->report_format_id, "modified"); @@ -24472,11 +24099,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 3: if (send_find_error_to_client ("modify_report_format", "report format param", - modify_report_format_data->param_name, gmp_parser)) - { - error_send_to_client (error); - return; - } + modify_report_format_data->param_name, gmp_parser, error)) + return; log_event_fail ("report_format", "Report Format", modify_report_format_data->report_format_id, "modified"); @@ -24534,11 +24158,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("modify_role", "role", modify_role_data->role_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("role", "Role", modify_role_data->role_id, "modified"); break; @@ -24720,11 +24341,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("modify_tag", "tag", modify_tag_data->tag_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("tag", "Tag", modify_tag_data->tag_id, "modified"); break; @@ -24746,10 +24364,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, break; case 4: if (send_find_error_to_client ("modify_tag", "resource", - error_extra, - gmp_parser)) + error_extra, + gmp_parser, error)) { - error_send_to_client (error); g_free (error_extra); return; } @@ -24878,11 +24495,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, "modified"); if (send_find_error_to_client ("modify_target", "port_list", - modify_target_data->port_list_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + modify_target_data->port_list_id, gmp_parser, error)) + return; break; case 7: log_event_fail ("target", "Target", @@ -24893,11 +24507,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, modify_target_data->ssh_credential_id ? modify_target_data->ssh_credential_id : modify_target_data->ssh_lsc_credential_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 8: log_event_fail ("target", "Target", @@ -24908,11 +24519,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, modify_target_data->smb_credential_id ? modify_target_data->smb_credential_id : modify_target_data->smb_lsc_credential_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 9: log_event_fail ("target", "Target", @@ -24920,11 +24528,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, "modified"); if (send_find_error_to_client ("modify_target", "target", modify_target_data->target_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 10: SEND_TO_CLIENT_OR_FAIL @@ -24987,11 +24592,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, modify_target_data->esxi_credential_id ? modify_target_data->esxi_credential_id : modify_target_data->esxi_lsc_credential_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 17: log_event_fail ("target", "Target", @@ -25000,11 +24602,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, if (send_find_error_to_client ("modify_target", "Credential", modify_target_data->snmp_credential_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 18: SEND_TO_CLIENT_OR_FAIL @@ -25045,11 +24644,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, if (send_find_error_to_client ("modify_target", "Credential", modify_target_data->ssh_elevate_credential_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 23: SEND_TO_CLIENT_OR_FAIL @@ -25170,11 +24766,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("modify_task", "Task", modify_task_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; default: case -1: @@ -25198,11 +24791,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("modify_task", "Task", modify_task_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; default: case -1: @@ -25249,11 +24839,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("modify_task", "Task", modify_task_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: SEND_TO_CLIENT_OR_FAIL @@ -25264,20 +24851,14 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 3: if (send_find_error_to_client ("modify_task", "scanner", - modify_task_data->scanner_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + modify_task_data->scanner_id, gmp_parser, error)) + return; break; case 4: if (send_find_error_to_client ("modify_task", "config", - modify_task_data->config_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + modify_task_data->config_id, gmp_parser, error)) + return; break; case 5: SEND_TO_CLIENT_OR_FAIL @@ -25296,11 +24877,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, break; case 8: if (send_find_error_to_client ("modify_task", "alert", - fail_alert_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + fail_alert_id, gmp_parser, + error)) + return; log_event_fail ("task", "Task", modify_task_data->task_id, "modified"); @@ -25316,11 +24895,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, break; case 10: if (send_find_error_to_client ("modify_task", "group", - fail_group_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + fail_group_id, gmp_parser, + error)) + return; log_event_fail ("task", "Task", modify_task_data->task_id, "modified"); @@ -25328,11 +24905,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 11: if (send_find_error_to_client ("modify_task", "schedule", - modify_task_data->schedule_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + modify_task_data->schedule_id, gmp_parser, error)) + return; log_event_fail ("task", "Task", modify_task_data->task_id, "modified"); @@ -25340,11 +24914,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 12: if (send_find_error_to_client ("modify_task", "target", - modify_task_data->target_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + modify_task_data->target_id, gmp_parser, error)) + return; log_event_fail ("task", "Task", modify_task_data->task_id, "modified"); @@ -25487,21 +25058,16 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, break; case 1: if (send_find_error_to_client - ("modify_user", "group", fail_group_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + ("modify_user", "group", fail_group_id, gmp_parser, + error)) + return; break; case 2: if (send_find_error_to_client ("modify_user", "user", modify_user_data->user_id ?: modify_user_data->name, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 3: SEND_TO_CLIENT_OR_FAIL (XML_OK ("modify_user")); @@ -25515,11 +25081,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, break; case 5: if (send_find_error_to_client - ("modify_user", "role", fail_role_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + ("modify_user", "role", fail_role_id, gmp_parser, + error)) + return; break; case 6: SEND_TO_CLIENT_OR_FAIL @@ -25618,23 +25182,19 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, break; case 2: if (send_find_error_to_client ("move_task", - "Task", - move_task_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + "Task", + move_task_data->task_id, + gmp_parser, + error)) + return; break; case 3: if (send_find_error_to_client ("move_task", - "Slave", - move_task_data->slave_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + "Slave", + move_task_data->slave_id, + gmp_parser, + error)) + return; break; case 4: SEND_TO_CLIENT_OR_FAIL @@ -25692,11 +25252,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("test_alert", "alert", test_alert_data->alert_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 99: SEND_TO_CLIENT_OR_FAIL @@ -25784,11 +25341,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, break; case 2: if (send_find_error_to_client ("restore", "resource", - restore_data->id, gmp_parser)) - { - error_send_to_client (error); - return; - } + restore_data->id, gmp_parser, + error)) + return; break; case 3: SEND_TO_CLIENT_OR_FAIL @@ -25882,11 +25437,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 3: /* Find failed. */ if (send_find_error_to_client ("resume_task", "task", resume_task_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 99: SEND_TO_CLIENT_OR_FAIL @@ -26136,11 +25688,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 3: /* Find failed. */ if (send_find_error_to_client ("start_task", "task", start_task_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 99: SEND_TO_CLIENT_OR_FAIL @@ -26232,11 +25781,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 3: /* Find failed. */ if (send_find_error_to_client ("stop_task", "task", stop_task_data->task_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 99: SEND_TO_CLIENT_OR_FAIL @@ -26275,11 +25821,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, if (send_find_error_to_client ("verify_report_format", "report format", verify_report_format_data->report_format_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 99: SEND_TO_CLIENT_OR_FAIL @@ -26317,11 +25860,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, case 1: if (send_find_error_to_client ("verify_scanner", "scanner", - verify_scanner_data->scanner_id, gmp_parser)) - { - error_send_to_client (error); - return; - } + verify_scanner_data->scanner_id, gmp_parser, error)) + return; break; case 2: SEND_TO_CLIENT_OR_FAIL diff --git a/src/gmp_base.c b/src/gmp_base.c index 3ccab8a76d..6c4591040d 100644 --- a/src/gmp_base.c +++ b/src/gmp_base.c @@ -172,12 +172,14 @@ sendf_to_client (gmp_parser_t *parser, GError **error, const char *format, ...) * @param[in] type Resource type. * @param[in] id Resource ID. * @param[in] gmp_parser GMP Parser. + * @param[in] error Error. * * @return TRUE if out of space in to_client, else FALSE. */ gboolean -send_find_error_to_client (const char* command, const char* type, - const char* id, gmp_parser_t *gmp_parser) +send_find_error_to_client (const char *command, const char *type, + const char *id, gmp_parser_t *gmp_parser, + GError **error) { gchar *msg; gboolean ret; @@ -188,6 +190,8 @@ send_find_error_to_client (const char* command, const char* type, command, type, id); ret = send_to_client (msg, gmp_parser->client_writer, gmp_parser->client_writer_data); + if (ret) + error_send_to_client (error); g_free (msg); return ret; } diff --git a/src/gmp_base.h b/src/gmp_base.h index d2fcc31c4f..99c42e1575 100644 --- a/src/gmp_base.h +++ b/src/gmp_base.h @@ -51,7 +51,7 @@ sendf_to_client (gmp_parser_t *, GError **, const char *format, ...); gboolean send_find_error_to_client (const char *, const char *, const char *, - gmp_parser_t *); + gmp_parser_t *, GError **); void error_send_to_client (GError **); diff --git a/src/gmp_configs.c b/src/gmp_configs.c index f7d550dd40..30f9402280 100644 --- a/src/gmp_configs.c +++ b/src/gmp_configs.c @@ -572,11 +572,8 @@ create_config_run (gmp_parser_t *gmp_parser, GError **error) case 2: if (send_find_error_to_client ("create_config", "config", entity_text (copy), - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("config", "Config", NULL, "created"); break; case 99: @@ -1042,11 +1039,9 @@ modify_config_run (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("modify_config", "config", config_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; log_event_fail ("config", "Scan Config", config_id, "modified"); return; default: diff --git a/src/gmp_delete.c b/src/gmp_delete.c index f15a34a05c..b4f8caecda 100644 --- a/src/gmp_delete.c +++ b/src/gmp_delete.c @@ -139,11 +139,8 @@ delete_run (gmp_parser_t *gmp_parser, GError **error) break; case 2: if (send_find_error_to_client - (delete.command, delete.type, delete.id, gmp_parser)) - { - error_send_to_client (error); - return; - } + (delete.command, delete.type, delete.id, gmp_parser, error)) + return; log_event_fail (delete.type, delete.type_capital, delete.id, "deleted"); diff --git a/src/gmp_port_lists.c b/src/gmp_port_lists.c index a89b2cd305..cdba72d9d5 100644 --- a/src/gmp_port_lists.c +++ b/src/gmp_port_lists.c @@ -334,11 +334,9 @@ create_port_list_run (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("create_port_list", "port_list", entity_text (copy), - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; log_event_fail ("port_list", "Port List", NULL, "created"); break; case 99: diff --git a/src/gmp_report_formats.c b/src/gmp_report_formats.c index 37ccdce1d3..208a828d94 100644 --- a/src/gmp_report_formats.c +++ b/src/gmp_report_formats.c @@ -330,11 +330,9 @@ create_report_format_run (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("create_report_format", "report_format", entity_text (copy), - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; log_event_fail ("report_format", "Report Format", NULL, "created"); break; case 99: diff --git a/src/gmp_tickets.c b/src/gmp_tickets.c index 4e3358c064..89d31a035b 100644 --- a/src/gmp_tickets.c +++ b/src/gmp_tickets.c @@ -130,9 +130,9 @@ get_tickets_run (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("get_tickets", "ticket", get_tickets_data.get.id, - gmp_parser)) + gmp_parser, + error)) { - error_send_to_client (error); get_tickets_reset (); return; } @@ -140,9 +140,8 @@ get_tickets_run (gmp_parser_t *gmp_parser, GError **error) case 2: if (send_find_error_to_client ("get_tickets", "filter", - get_tickets_data.get.filt_id, gmp_parser)) + get_tickets_data.get.filt_id, gmp_parser, error)) { - error_send_to_client (error); get_tickets_reset (); return; } @@ -419,11 +418,8 @@ create_ticket_run (gmp_parser_t *gmp_parser, GError **error) case 2: if (send_find_error_to_client ("create_ticket", "ticket", entity_text (copy), - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; log_event_fail ("ticket", "Ticket", NULL, "created"); break; case 99: @@ -525,20 +521,14 @@ create_ticket_run (gmp_parser_t *gmp_parser, GError **error) case 1: log_event_fail ("ticket", "Ticket", NULL, "created"); if (send_find_error_to_client ("create_ticket", "user", user_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 2: log_event_fail ("ticket", "Ticket", NULL, "created"); if (send_find_error_to_client ("create_ticket", "result", result_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 98: SEND_TO_CLIENT_OR_FAIL @@ -747,20 +737,14 @@ modify_ticket_run (gmp_parser_t *gmp_parser, GError **error) case 2: log_event_fail ("ticket", "Ticket", ticket_id, "modified"); if (send_find_error_to_client ("modify_ticket", "ticket", ticket_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 3: log_event_fail ("ticket", "Ticket", ticket_id, "modified"); if (send_find_error_to_client ("modify_ticket", "user", user_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; break; case 4: SEND_TO_CLIENT_OR_FAIL diff --git a/src/gmp_tls_certificates.c b/src/gmp_tls_certificates.c index fb2be18d6f..8a4ca918b7 100644 --- a/src/gmp_tls_certificates.c +++ b/src/gmp_tls_certificates.c @@ -162,9 +162,9 @@ get_tls_certificates_run (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("get_tls_certificates", "tls_certificate", get_tls_certificates_data.get.id, - gmp_parser)) + gmp_parser, + error)) { - error_send_to_client (error); get_tls_certificates_reset (); return; } @@ -172,9 +172,8 @@ get_tls_certificates_run (gmp_parser_t *gmp_parser, GError **error) case 2: if (send_find_error_to_client ("get_tls_certificates", "filter", - get_tls_certificates_data.get.filt_id, gmp_parser)) + get_tls_certificates_data.get.filt_id, gmp_parser, error)) { - error_send_to_client (error); get_tls_certificates_reset (); return; } @@ -472,11 +471,9 @@ create_tls_certificate_run (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("create_tls_certificate", "tls_certificate", entity_text (copy), - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; log_event_fail ("tls_certificate", "TLS Certificate", NULL, @@ -775,11 +772,9 @@ modify_tls_certificate_run (gmp_parser_t *gmp_parser, GError **error) if (send_find_error_to_client ("modify_tls_certificate", "TLS certificate", tls_certificate_id, - gmp_parser)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; break; case 3: SEND_TO_CLIENT_OR_FAIL From b442180c059688e51958470e2c4d709c3a20e66f Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Thu, 8 Feb 2024 17:10:41 +0200 Subject: [PATCH 16/43] Make send_to_client more convenient --- src/gmp.c | 138 +++++++++++++---------------------------------- src/gmp_base.c | 20 +++---- src/gmp_base.h | 20 +++---- src/gmp_get.c | 43 +++++++-------- src/gmp_get.h | 45 ++++++---------- src/manage.h | 3 -- src/manage_sql.c | 11 ++-- 7 files changed, 91 insertions(+), 189 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 9eb085f15f..c612480122 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -4664,9 +4664,6 @@ gmp_xml_handle_start_element (/* unused */ GMarkupParseContext* context, GError **error) { gmp_parser_t *gmp_parser = (gmp_parser_t*) user_data; - int (*write_to_client) (const char *, void*) - = (int (*) (const char *, void*)) gmp_parser->client_writer; - void* write_to_client_data = (void*) gmp_parser->client_writer_data; g_debug (" XML start: %s (%i)", element_name, client_state); @@ -4683,11 +4680,11 @@ gmp_xml_handle_start_element (/* unused */ GMarkupParseContext* context, { /** @todo If a real GMP command, return STATUS_ERROR_MUST_AUTH. */ if (send_to_client - (XML_ERROR_SYNTAX ("gmp", + (gmp_parser, + error, + XML_ERROR_SYNTAX ("gmp", "Only command GET_VERSION is" - " allowed before AUTHENTICATE"), - write_to_client, - write_to_client_data)) + " allowed before AUTHENTICATE"))) { error_send_to_client (error); return; @@ -5980,13 +5977,9 @@ gmp_xml_handle_start_element (/* unused */ GMarkupParseContext* context, } else { - if (send_to_client (XML_ERROR_SYNTAX ("gmp", "Bogus command name"), - write_to_client, - write_to_client_data)) - { - error_send_to_client (error); - return; - } + if (send_to_client (gmp_parser, error, + XML_ERROR_SYNTAX ("gmp", "Bogus command name"))) + return; g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT, @@ -7918,23 +7911,21 @@ gmp_xml_handle_start_element (/* unused */ GMarkupParseContext* context, * @param[in] skip_cert_refs If true, exclude CERT refs. * @param[in] skip_tags If true, exclude tags. * @param[in] lean If true, send fewer details. - * @param[in] write_to_client Function to write to client. - * @param[in] write_to_client_data Argument to \p write_to_client. + * @param[in] gmp_parser GMP Parser. + * @param[in] error Error. * * @return TRUE if out of space in to_client buffer, else FALSE. */ static gboolean send_nvt (iterator_t *nvts, int details, int preferences, int pref_count, const char *timeout, config_t config, int skip_cert_refs, - int skip_tags, int lean, - int (*write_to_client) (const char *, void*), - void* write_to_client_data) + int skip_tags, int lean, gmp_parser_t *gmp_parser, GError **error) { gchar *msg; msg = get_nvt_xml (nvts, details, pref_count, preferences, timeout, config, 0, skip_cert_refs, skip_tags, lean); - if (send_to_client (msg, write_to_client, write_to_client_data)) + if (send_to_client (gmp_parser, error, msg)) { g_free (msg); return TRUE; @@ -11581,14 +11572,10 @@ handle_get_assets (gmp_parser_t *gmp_parser, GError **error) asset = get_iterator_resource (&assets); /* Assets are currently always writable. */ if (send_get_common ("asset", &get_assets_data->get, &assets, - gmp_parser->client_writer, - gmp_parser->client_writer_data, + gmp_parser, error, asset_iterator_writable (&assets), asset_iterator_in_use (&assets))) - { - error_send_to_client (error); - return; - } + return; result = g_string_new (""); @@ -13179,12 +13166,8 @@ handle_get_info (gmp_parser_t *gmp_parser, GError **error) /* Info's are currently always read only */ if (send_get_common ("info", &get_info_data->get, &info, - gmp_parser->client_writer, - gmp_parser->client_writer_data, 0, 0)) - { - error_send_to_client (error); - return; - } + gmp_parser, error, 0, 0)) + return; SENDF_TO_CLIENT_OR_FAIL ("%s", update_time); @@ -13355,11 +13338,9 @@ handle_get_info (gmp_parser_t *gmp_parser, GError **error) else if (g_strcmp0 ("nvt", get_info_data->type) == 0) { if (send_nvt (&info, 1, 1, -1, NULL, 0, 0, 0, 0, - gmp_parser->client_writer, - gmp_parser->client_writer_data)) + gmp_parser, error)) { cleanup_iterator (&info); - error_send_to_client (error); return; } } @@ -13679,12 +13660,11 @@ handle_get_nvts (gmp_parser_t *gmp_parser, GError **error) get_nvts_data->skip_cert_refs, get_nvts_data->skip_tags, get_nvts_data->lean, - gmp_parser->client_writer, - gmp_parser->client_writer_data)) + gmp_parser, + error)) { free (timeout); cleanup_iterator (&nvts); - error_send_to_client (error); return; } free (timeout); @@ -13695,11 +13675,9 @@ handle_get_nvts (gmp_parser_t *gmp_parser, GError **error) while (next (&nvts)) { if (send_nvt (&nvts, 0, 0, -1, NULL, 0, 0, 0, 0, - gmp_parser->client_writer, - gmp_parser->client_writer_data)) + gmp_parser, error)) { cleanup_iterator (&nvts); - error_send_to_client (error); return; } SEND_TO_CLIENT_OR_FAIL (""); @@ -14670,7 +14648,6 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error) && strcmp (get_reports_data->format_id, "5057e5cc-b825-11e4-9d0e-28d24461215b"), - send_to_client, gmp_parser->client_writer, gmp_parser->client_writer_data, get_reports_data->alert_id, @@ -15611,21 +15588,14 @@ handle_get_results (gmp_parser_t *gmp_parser, GError **error) if (send_get_end ("result", &get_results_data->get, count, filtered, resource_count ("result", &get_results_data->get), - gmp_parser->client_writer, - gmp_parser->client_writer_data)) - { - error_send_to_client (error); - return; - } + gmp_parser, error)) + return; } else if (send_get_end_no_counts ("result", &get_results_data->get, - gmp_parser->client_writer, - gmp_parser->client_writer_data)) - { - error_send_to_client (error); - return; - } + gmp_parser, + error)) + return; } get_results_data_reset (get_results_data); @@ -17228,22 +17198,12 @@ get_tasks_send_schedules_only (gmp_parser_t *gmp_parser, index = get_iterator_resource (tasks); task_schedule_xml = get_task_schedule_xml (index); - if (send_to_client (task_schedule_xml, - gmp_parser->client_writer, - gmp_parser->client_writer_data)) - { - error_send_to_client (error); - return 1; - } + if (send_to_client (gmp_parser, error, task_schedule_xml)) + return 1; g_free (task_schedule_xml); - if (send_to_client ("", - gmp_parser->client_writer, - gmp_parser->client_writer_data)) - { - error_send_to_client (error); - return 1; - } + if (send_to_client (gmp_parser, error, "")) + return 1; return 0; } @@ -17774,13 +17734,10 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) g_free (task_scanner_uuid); g_free (task_scanner_name); g_free (task_scanner_name_escaped); - if (send_to_client (response, - gmp_parser->client_writer, - gmp_parser->client_writer_data)) + if (send_to_client (gmp_parser, error, response)) { g_free (response); cleanup_iterator (&tasks); - error_send_to_client (error); cleanup_iterator (&tasks); return; } @@ -18653,9 +18610,6 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, GError **error) { gmp_parser_t *gmp_parser = (gmp_parser_t*) user_data; - int (*write_to_client) (const char *, void*) - = (int (*) (const char *, void*)) gmp_parser->client_writer; - void* write_to_client_data = (void*) gmp_parser->client_writer_data; g_debug (" XML end: %s", element_name); @@ -19498,13 +19452,10 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, gchar *base64; base64 = g_base64_encode ((guchar*) output, output_len); - if (send_to_client (base64, - write_to_client, - write_to_client_data)) + if (send_to_client (gmp_parser, error, base64)) { g_free (output); g_free (base64); - error_send_to_client (error); return; } g_free (base64); @@ -19512,12 +19463,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, else { /* Special case the XML schema, bah. */ - if (send_to_client (output, - write_to_client, - write_to_client_data)) + if (send_to_client (gmp_parser, error, output)) { g_free (output); - error_send_to_client (error); return; } } @@ -25292,10 +25240,8 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, "", script_message); - if (send_to_client (msg, gmp_parser->client_writer, - gmp_parser->client_writer_data)) + if (send_to_client (gmp_parser, error, msg)) { - error_send_to_client (error); g_free (msg); return; } @@ -25396,12 +25342,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, "", report_id); free (report_id); - if (send_to_client (msg, - write_to_client, - write_to_client_data)) + if (send_to_client (gmp_parser, error, msg)) { g_free (msg); - error_send_to_client (error); return; } g_free (msg); @@ -25543,13 +25486,10 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, response ? "" : "", response ? response : "", response ? "" : ""); - if (send_to_client (msg, - write_to_client, - write_to_client_data)) + if (send_to_client (gmp_parser, error, msg)) { g_free (msg); g_free (response); - error_send_to_client (error); return; } g_free (msg); @@ -25584,12 +25524,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, command_error ? command_error : "Internal Error"); if (command_error) g_free (command_error); - if (send_to_client (msg, - write_to_client, - write_to_client_data)) + if (send_to_client (gmp_parser, error, msg)) { g_free (msg); - error_send_to_client (error); return; } g_free (msg); @@ -25664,12 +25601,9 @@ gmp_xml_handle_end_element (/* unused */ GMarkupParseContext* context, "", report_id ?: "0"); g_free (report_id); - if (send_to_client (msg, - write_to_client, - write_to_client_data)) + if (send_to_client (gmp_parser, error, msg)) { g_free (msg); - error_send_to_client (error); return; } g_free (msg); diff --git a/src/gmp_base.c b/src/gmp_base.c index 6c4591040d..e762f68a46 100644 --- a/src/gmp_base.c +++ b/src/gmp_base.c @@ -125,12 +125,16 @@ buffer_xml_append_printf (GString *buffer, const char *format, ...) * @return TRUE if send to client failed, else FALSE. */ gboolean -send_to_client (const char* msg, - int (*user_send_to_client) (const char*, void*), - void* user_send_to_client_data) +send_to_client (gmp_parser_t *parser, GError** error, const char* msg) { - if (user_send_to_client && msg) - return user_send_to_client (msg, user_send_to_client_data); + if (parser + && parser->client_writer + && msg + && parser->client_writer (msg, parser->client_writer_data)) + { + error_send_to_client (error); + return TRUE; + } return FALSE; } @@ -138,6 +142,7 @@ send_to_client (const char* msg, * @brief Send a response message to the client. * * @param[in] gmp_parser GMP parser. + * @param[in] error Error. * @param[in] format Format string. * * @return TRUE if error, else FALSE. @@ -188,10 +193,7 @@ send_find_error_to_client (const char *command, const char *type, STATUS_ERROR_MISSING "\" status_text=\"Failed to find %s '%s'\"/>", command, type, id); - ret = send_to_client (msg, gmp_parser->client_writer, - gmp_parser->client_writer_data); - if (ret) - error_send_to_client (error); + ret = send_to_client (gmp_parser, error, msg); g_free (msg); return ret; } diff --git a/src/gmp_base.h b/src/gmp_base.h index 99c42e1575..4141dc5278 100644 --- a/src/gmp_base.h +++ b/src/gmp_base.h @@ -44,10 +44,10 @@ void buffer_xml_append_printf (GString *, const char *, ...); gboolean -send_to_client (const char *, int (*) (const char *, void *), void *); +send_to_client (gmp_parser_t *, GError **, const char *); gboolean -sendf_to_client (gmp_parser_t *, GError **, const char *format, ...); +sendf_to_client (gmp_parser_t *, GError **, const char *, ...); gboolean send_find_error_to_client (const char *, const char *, const char *, @@ -73,11 +73,9 @@ internal_error_send_to_client (GError **); do \ { \ gchar *msg = g_markup_printf_escaped (format, ##args); \ - if (send_to_client (msg, gmp_parser->client_writer, \ - gmp_parser->client_writer_data)) \ + if (send_to_client (gmp_parser, error, msg)) \ { \ g_free (msg); \ - error_send_to_client (error); \ return err_ret; \ } \ g_free (msg); \ @@ -97,11 +95,9 @@ internal_error_send_to_client (GError **); do \ { \ gchar *msg = g_markup_printf_escaped (format, ##args); \ - if (send_to_client (msg, gmp_parser->client_writer, \ - gmp_parser->client_writer_data)) \ + if (send_to_client (gmp_parser, error, msg)) \ { \ g_free (msg); \ - error_send_to_client (error); \ return; \ } \ g_free (msg); \ @@ -119,12 +115,8 @@ internal_error_send_to_client (GError **); #define SEND_TO_CLIENT_OR_FAIL(msg) \ do \ { \ - if (send_to_client (msg, gmp_parser->client_writer, \ - gmp_parser->client_writer_data)) \ - { \ - error_send_to_client (error); \ - return; \ - } \ + if (send_to_client (gmp_parser, error, msg)) \ + return; \ } \ while (0) diff --git a/src/gmp_get.c b/src/gmp_get.c index 3793a49d69..b1821a2410 100644 --- a/src/gmp_get.c +++ b/src/gmp_get.c @@ -261,15 +261,14 @@ get_next (iterator_t *resources, get_data_t *get, int *first, int *count, /** * @brief Send start of GET response. * + * @param[in] gmp_parser GMP Parser. + * @param[in] error Error. * @param[in] type Type. - * @param[in] write_to_client Function that sends to clients. - * @param[in] write_to_client_data Data for write_to_client. * * @return 0 success, 1 send to client failed. */ int -send_get_start (const char *type, int (*write_to_client) (const char*, void*), - void* write_to_client_data) +send_get_start (gmp_parser_t *gmp_parser, GError **error, const char *type) { gchar *msg; @@ -285,7 +284,7 @@ send_get_start (const char *type, int (*write_to_client) (const char*, void*), type); - if (send_to_client (msg, write_to_client, write_to_client_data)) + if (send_to_client (gmp_parser, error, msg)) { g_free (msg); return 1; @@ -309,8 +308,8 @@ send_get_start (const char *type, int (*write_to_client) (const char*, void*), */ int send_get_common (const char *type, get_data_t *get, iterator_t *iterator, - int (*write_to_client) (const char *, void*), - void* write_to_client_data, int writable, int in_use) + gmp_parser_t *gmp_parser, GError **error, int writable, + int in_use) { GString *buffer; const char *tag_type; @@ -453,7 +452,7 @@ send_get_common (const char *type, get_data_t *get, iterator_t *iterator, } } - if (send_to_client (buffer->str, write_to_client, write_to_client_data)) + if (send_to_client (gmp_parser, error, buffer->str)) { g_string_free (buffer, TRUE); return 1; @@ -550,8 +549,8 @@ buffer_get_filter_xml (GString *msg, const char* type, * @param[in] count Page count. * @param[in] filtered Filtered count. * @param[in] full Full count. - * @param[in] write_to_client Function that sends to clients. - * @param[in] write_to_client_data Data for write_to_client. + * @param[in] gmp_parser GMP Parser. + * @param[in] error Error. * * @return 0 success, 1 sending to client failed, 2 failed to allocate filter * term. @@ -559,8 +558,7 @@ buffer_get_filter_xml (GString *msg, const char* type, static int send_get_end_internal (const char *type, get_data_t *get, int get_counts, int count, int filtered, int full, - int (*write_to_client) (const char *, void*), - void* write_to_client_data) + gmp_parser_t *gmp_parser, GError **error) { gchar *sort_field, *filter; int first, max, sort_order; @@ -685,7 +683,7 @@ send_get_end_internal (const char *type, get_data_t *get, int get_counts, g_free (sort_field); g_free (filter); - if (send_to_client (msg->str, write_to_client, write_to_client_data)) + if (send_to_client (gmp_parser, error, msg->str)) { g_string_free (msg, TRUE); return 1; @@ -702,19 +700,18 @@ send_get_end_internal (const char *type, get_data_t *get, int get_counts, * @param[in] count Page count. * @param[in] filtered Filtered count. * @param[in] full Full count. - * @param[in] write_to_client Function that sends to clients. - * @param[in] write_to_client_data Data for write_to_client. + * @param[in] gmp_parser GMP Parser. + * @param[in] error Error. * * @return 0 success, 1 sending to client failed, 2 failed to allocate filter * term. */ int send_get_end (const char *type, get_data_t *get, int count, int filtered, - int full, int (*write_to_client) (const char *, void*), - void* write_to_client_data) + int full, gmp_parser_t *gmp_parser, GError **error) { return send_get_end_internal (type, get, 1, count, filtered, full, - write_to_client, write_to_client_data); + gmp_parser, error); } /** @@ -722,17 +719,15 @@ send_get_end (const char *type, get_data_t *get, int count, int filtered, * * @param[in] type Type. * @param[in] get GET data. - * @param[in] write_to_client Function that sends to clients. - * @param[in] write_to_client_data Data for write_to_client. + * @param[in] gmp_parser GMP Parser. + * @param[in] error Error. * * @return 0 success, 1 sending to client failed, 2 failed to allocate filter * term. */ int send_get_end_no_counts (const char *type, get_data_t *get, - int (*write_to_client) (const char *, void*), - void* write_to_client_data) + gmp_parser_t *gmp_parser, GError **error) { - return send_get_end_internal (type, get, 0, 0, 0, 0, write_to_client, - write_to_client_data); + return send_get_end_internal (type, get, 0, 0, 0, 0, gmp_parser, error); } diff --git a/src/gmp_get.h b/src/gmp_get.h index e1c724e04e..1b19a24bf7 100644 --- a/src/gmp_get.h +++ b/src/gmp_get.h @@ -19,6 +19,7 @@ #ifndef _GVMD_GMP_GET_H #define _GVMD_GMP_GET_H +#include "gmp_base.h" #include "manage_get.h" void @@ -60,7 +61,7 @@ get_next (iterator_t *, get_data_t *, int *, int *, int (*) (iterator_t *, const get_data_t *)); int -send_get_start (const char *, int (*) (const char *, void *), void *); +send_get_start (gmp_parser_t *, GError **, const char *); /** * @brief Send start of GET response to client, returning on fail. @@ -71,18 +72,14 @@ send_get_start (const char *, int (*) (const char *, void *), void *); #define SEND_GET_START(type) \ do \ { \ - if (send_get_start (type, gmp_parser->client_writer, \ - gmp_parser->client_writer_data)) \ - { \ - error_send_to_client (error); \ - return; \ - } \ + if (send_get_start (gmp_parser, error, type)) \ + return; \ } \ while (0) int send_get_common (const char *, get_data_t *, iterator_t *, - int (*) (const char *, void *), void *, int, int); + gmp_parser_t *, GError **, int, int); /** * @brief Send common part of GET response to client, returning on fail. @@ -95,18 +92,15 @@ send_get_common (const char *, get_data_t *, iterator_t *, do \ { \ if (send_get_common ( \ - G_STRINGIFY (type), get, iterator, gmp_parser->client_writer, \ - gmp_parser->client_writer_data, \ + G_STRINGIFY (type), get, iterator, \ + gmp_parser, error, \ (get)->trash \ ? trash_##type##_writable (get_iterator_resource (iterator)) \ : type##_writable (get_iterator_resource (iterator)), \ (get)->trash \ ? trash_##type##_in_use (get_iterator_resource (iterator)) \ : type##_in_use (get_iterator_resource (iterator)))) \ - { \ - error_send_to_client (error); \ - return; \ - } \ + return; \ } \ while (0) @@ -123,14 +117,10 @@ send_get_common (const char *, get_data_t *, iterator_t *, do \ { \ if (send_get_common (G_STRINGIFY (type), get, iterator, \ - gmp_parser->client_writer, \ - gmp_parser->client_writer_data, \ + gmp_parser, error, \ type##_writable (get_iterator_resource (iterator)), \ type##_in_use (get_iterator_resource (iterator)))) \ - { \ - error_send_to_client (error); \ - return; \ - } \ + return; \ } \ while (0) @@ -139,12 +129,11 @@ buffer_get_filter_xml (GString *, const char *, const get_data_t *, const char *, const char *); int -send_get_end (const char *, get_data_t *, int, int, int, - int (*) (const char *, void *), void *); +send_get_end (const char *, get_data_t *, int, int, int, gmp_parser_t *, + GError **); int -send_get_end_no_counts (const char *, get_data_t *, - int (*) (const char *, void *), void *); +send_get_end_no_counts (const char *, get_data_t *, gmp_parser_t *, GError **); /** * @brief Send end of GET response to client, returning on fail. @@ -156,12 +145,8 @@ send_get_end_no_counts (const char *, get_data_t *, do \ { \ if (send_get_end (type, get, count, filtered, \ - resource_count (type, get), gmp_parser->client_writer, \ - gmp_parser->client_writer_data)) \ - { \ - error_send_to_client (error); \ - return; \ - } \ + resource_count (type, get), gmp_parser, error)) \ + return; \ } \ while (0) diff --git a/src/manage.h b/src/manage.h index 82595adaf0..14fa77fa95 100644 --- a/src/manage.h +++ b/src/manage.h @@ -1639,9 +1639,6 @@ manage_report (report_t, report_t, const get_data_t *, report_format_t, int manage_send_report (report_t, report_t, report_format_t, const get_data_t *, int, int, int, int, int, int, - gboolean (*) (const char *, - int (*) (const char*, void*), - void*), int (*) (const char *, void*), void *, const char *, const gchar *); diff --git a/src/manage_sql.c b/src/manage_sql.c index 5ae9078e0e..464ea3859d 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -30378,10 +30378,7 @@ manage_send_report (report_t report, report_t delta_report, report_format_t report_format, const get_data_t *get, int notes_details, int overrides_details, int result_tags, int ignore_pagination, int lean, int base64, - gboolean (*send) (const char *, - int (*) (const char *, void*), - void*), - int (*send_data_1) (const char *, void*), void *send_data_2, + int (*send) (const char *, void*), void *send_data, const char *alert_id, const gchar* prefix) { @@ -30492,7 +30489,7 @@ manage_send_report (report_t report, report_t delta_report, return -1; } - if (prefix && send (prefix, send_data_1, send_data_2)) + if (prefix && send (prefix, send_data)) { fclose (stream); g_warning ("%s: send prefix error", __func__); @@ -30537,7 +30534,7 @@ manage_send_report (report_t report, report_t delta_report, chunk64 = g_base64_encode ((guchar*) chunk, MANAGE_SEND_REPORT_CHUNK_SIZE - left); - if (send (chunk64, send_data_1, send_data_2)) + if (send (chunk64, send_data)) { g_free (chunk64); fclose (stream); @@ -30550,7 +30547,7 @@ manage_send_report (report_t report, report_t delta_report, else { chunk[MANAGE_SEND_REPORT_CHUNK_SIZE - left] = '\0'; - if (send (chunk, send_data_1, send_data_2)) + if (send (chunk, send_data)) { fclose (stream); g_warning ("%s: send error", __func__); From 23590d7b123158cfc11a32a06bd9c780a9ee0786 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Thu, 8 Feb 2024 17:19:58 +0200 Subject: [PATCH 17/43] Move sending of task out to function --- src/gmp.c | 1192 +++++++++++++++++++++++++++-------------------------- 1 file changed, 605 insertions(+), 587 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index c612480122..cbe2c865fc 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17172,7 +17172,7 @@ get_task_schedule_xml (task_t task) /** - * @brief Handle end of GET_TASKS element. + * @brief Send single task with schedules only, for GET_TASKS. * * @param[in] gmp_parser GMP parser. * @param[in] error Error parameter. @@ -17208,6 +17208,608 @@ get_tasks_send_schedules_only (gmp_parser_t *gmp_parser, return 0; } +/** + * @brief Send single task for GET_TASKS. + * + * @param[in] gmp_parser GMP parser. + * @param[in] error Error parameter. + * @param[in] tasks Task iterator. + * + * @return 1 if error, else 0. + */ +static int +get_tasks_send_task (gmp_parser_t *gmp_parser, + GError **error, + iterator_t *tasks) +{ + task_t index; + target_t target; + scanner_t scanner; + const char *first_report_id, *last_report_id; + char *config_name, *config_uuid; + gchar *progress_xml; + gchar *task_schedule_xml; + gchar *config_name_escaped; + char *task_target_uuid, *task_target_name; + gchar *task_target_name_escaped; + char *task_scanner_uuid, *task_scanner_name; + gchar *task_scanner_name_escaped; + gchar *last_report; + gchar *second_last_report_id; + gchar *current_report; + report_t running_report; + char *owner, *observers; + int target_in_trash, scanner_in_trash; + int holes = 0, infos = 0, logs = 0, warnings = 0; + int holes_2 = 0, infos_2 = 0, warnings_2 = 0; + int false_positives = 0, task_scanner_type; + int target_available, config_available; + int scanner_available; + double severity = 0, severity_2 = 0; + gchar *response; + iterator_t alerts, groups, roles; + gchar *in_assets, *max_checks, *max_hosts; + gchar *auto_delete, *auto_delete_data, *assets_apply_overrides; + gchar *assets_min_qod; + + index = get_iterator_resource (&tasks); + target = task_target (index); + + SEND_GET_COMMON (task, &get_tasks_data->get, &tasks); + target_in_trash = task_target_in_trash (index); + if ((target == 0) + && (task_iterator_run_status (&tasks) + == TASK_STATUS_RUNNING)) + { + progress_xml = g_strdup_printf + ("%i", + task_upload_progress (index)); + running_report = 0; + } + else + { + int progress; + + running_report = task_iterator_current_report (&tasks); + progress + = report_progress (running_report); + progress_xml + = g_strdup_printf ("%i", progress); + } + + if (running_report) + { + gchar *timestamp; + char *scan_start, *scan_end, *current_report_id; + + current_report_id = report_uuid (running_report); + + if (report_timestamp (current_report_id, ×tamp)) + g_error ("%s: GET_TASKS: error getting timestamp" + " of report, aborting", + __func__); + + scan_start = scan_start_time_uuid (current_report_id), + scan_end = scan_end_time_uuid (current_report_id), + + current_report = g_strdup_printf ("" + "" + "" + "%s" + "" + "" + "%s" + "" + "" + "%s" + "" + "" + "", + current_report_id, + timestamp, + scan_start, + scan_end); + free (current_report_id); + free (scan_start); + free (scan_end); + g_free (timestamp); + } + else + current_report = g_strdup (""); + + first_report_id = task_iterator_first_report (&tasks); + if (first_report_id && (get_tasks_data->get.trash == 0)) + { + // TODO Could skip this count for tasks page. + if (report_counts (first_report_id, + &holes_2, &infos_2, &logs, + &warnings_2, &false_positives, + &severity_2, apply_overrides, min_qod)) + g_error ("%s: GET_TASKS: error getting counts for" + " first report, aborting", + __func__); + } + + second_last_report_id = task_second_last_report_id (index); + if (second_last_report_id && (get_tasks_data->get.trash == 0)) + { + /* If the first report is the second last report then skip + * doing the count again. */ + if (((first_report_id == NULL) + || (strcmp (second_last_report_id, first_report_id))) + && report_counts (second_last_report_id, + &holes_2, &infos_2, + &logs, &warnings_2, + &false_positives, &severity_2, + apply_overrides, min_qod)) + g_error ("%s: GET_TASKS: error getting counts for" + " second report, aborting", + __func__); + } + + last_report_id = task_iterator_last_report (&tasks); + if (get_tasks_data->get.trash && last_report_id) + { + gchar *timestamp; + char *scan_start, *scan_end; + + if (report_timestamp (last_report_id, ×tamp)) + g_error ("%s: GET_TASKS: error getting timestamp for" + " last report, aborting", + __func__); + + scan_start = scan_start_time_uuid (last_report_id); + scan_end = scan_end_time_uuid (last_report_id); + + last_report = g_strdup_printf ("" + "" + "%s" + "%s" + "%s" + "" + "", + last_report_id, + timestamp, + scan_start, + scan_end); + + free (scan_start); + free (scan_end); + g_free (timestamp); + } + else if (last_report_id) + { + gchar *timestamp; + char *scan_start, *scan_end; + + /* If the last report is the first report or the second + * last report, then reuse the counts from before. */ + if ((first_report_id == NULL) + || (second_last_report_id == NULL) + || (strcmp (last_report_id, first_report_id) + && strcmp (last_report_id, + second_last_report_id))) + { + if (report_counts + (last_report_id, + &holes, &infos, &logs, + &warnings, &false_positives, &severity, + apply_overrides, min_qod)) + g_error ("%s: GET_TASKS: error getting counts for" + " last report, aborting", + __func__); + } + else + { + holes = holes_2; + infos = infos_2; + warnings = warnings_2; + severity = severity_2; + } + + if (report_timestamp (last_report_id, ×tamp)) + g_error ("%s: GET_TASKS: error getting timestamp for" + " last report, aborting", + __func__); + + scan_start = scan_start_time_uuid (last_report_id); + scan_end = scan_end_time_uuid (last_report_id); + + if (strcmp (task_iterator_usage_type (&tasks), "audit") == 0) + { + int compliance_yes, compliance_no, compliance_incomplete; + + report_compliance_by_uuid (last_report_id, + &compliance_yes, + &compliance_no, + &compliance_incomplete); + + last_report + = g_strdup_printf ("" + "" + "%s" + "%s" + "%s" + "" + "%d" + "%d" + "%d" + "" + "" + "", + last_report_id, + timestamp, + scan_start, + scan_end, + compliance_yes, + compliance_no, + compliance_incomplete); + } + else + last_report + = g_strdup_printf ("" + "" + "%s" + "%s" + "%s" + "" + "%i" + "%i" + "%i" + "%i" + "" + "%i" + "" + "" + "" + "%1.1f" + "" + "" + "", + last_report_id, + timestamp, + scan_start, + scan_end, + holes, + infos, + logs, + warnings, + false_positives, + severity); + free (scan_start); + free (scan_end); + g_free (timestamp); + } + else + last_report = g_strdup (""); + + g_free (second_last_report_id); + + owner = task_owner_name (index); + observers = task_observers (index); + config_name = task_config_name (index); + config_uuid = task_config_uuid (index); + target_available = 1; + if (target_in_trash) + { + task_target_uuid = trash_target_uuid (target); + task_target_name = trash_target_name (target); + target_available = trash_target_readable (target); + } + else if (target) + { + target_t found; + task_target_uuid = target_uuid (target); + task_target_name = target_name (target); + if (find_target_with_permission (task_target_uuid, + &found, + "get_targets")) + g_error ("%s: GET_TASKS: error finding task target," + " aborting", + __func__); + target_available = (found > 0); + } + else + { + task_target_uuid = NULL; + task_target_name = NULL; + } + config_available = 1; + if (task_config_in_trash (index)) + config_available = trash_config_readable_uuid (config_uuid); + else if (config_uuid) + { + config_t found; + if (find_config_with_permission (config_uuid, + &found, + "get_configs")) + g_error ("%s: GET_TASKS: error finding task config," + " aborting", + __func__); + config_available = (found > 0); + } + scanner_available = 1; + scanner = task_iterator_scanner (&tasks); + if (scanner) + { + scanner_in_trash = task_scanner_in_trash (index); + + task_scanner_uuid = scanner_uuid (scanner); + task_scanner_name = scanner_name (scanner); + task_scanner_type = scanner_type (scanner); + if (scanner_in_trash) + scanner_available = trash_scanner_readable (scanner); + else + { + scanner_t found; + + if (find_scanner_with_permission + (task_scanner_uuid, &found, "get_scanners")) + g_error ("%s: GET_TASKS: error finding" + " task scanner, aborting", + __func__); + scanner_available = (found > 0); + } + } + else + { + /* Container tasks have no associated scanner. */ + task_scanner_uuid = g_strdup (""); + task_scanner_name = g_strdup (""); + task_scanner_type = 0; + scanner_in_trash = 0; + } + + config_name_escaped + = config_name + ? g_markup_escape_text (config_name, -1) + : NULL; + task_target_name_escaped + = task_target_name + ? g_markup_escape_text (task_target_name, -1) + : NULL; + task_scanner_name_escaped + = task_scanner_name + ? g_markup_escape_text (task_scanner_name, -1) + : NULL; + + task_schedule_xml = get_task_schedule_xml (index); + + response = g_strdup_printf + ("%i" + "%s" + "" + "%s" + "%i" + "%s" + "" + "" + "%s" + "%i" + "%s" + "" + "%s" + "" + "%s" + "%d" + "%i" + "%s" + "" + "%s" + "%s" + "" + "%u%u" + "" + "%s" + "%s" // Schedule XML + "%s%s", + get_tasks_data->get.trash + ? 0 + : task_alterable (index), + task_iterator_usage_type (&tasks), + config_uuid ?: "", + config_name_escaped ?: "", + task_config_in_trash (index), + config_available ? "" : "", + task_target_uuid ?: "", + task_target_name_escaped ?: "", + target_in_trash, + target_available ? "" : "", + task_iterator_hosts_ordering (&tasks) + ? task_iterator_hosts_ordering (&tasks) + : "", + task_scanner_uuid, + task_scanner_name_escaped, + task_scanner_type, + scanner_in_trash, + scanner_available ? "" : "", + task_iterator_run_status_name (&tasks), + progress_xml, + task_iterator_total_reports (&tasks), + task_iterator_finished_reports (&tasks), + get_tasks_data->get.trash + ? "" + : task_iterator_trend_counts + (&tasks, holes, warnings, infos, severity, + holes_2, warnings_2, infos_2, severity_2), + task_schedule_xml, + current_report, + last_report); + g_free (config_name); + g_free (config_uuid); + g_free (config_name_escaped); + free (task_target_name); + free (task_target_uuid); + g_free (task_target_name_escaped); + g_free (progress_xml); + g_free (current_report); + g_free (last_report); + g_free (task_schedule_xml); + g_free (task_scanner_uuid); + g_free (task_scanner_name); + g_free (task_scanner_name_escaped); + if (send_to_client (gmp_parser, error, response)) + { + g_free (response); + cleanup_iterator (&tasks); + cleanup_iterator (&tasks); + return; + } + g_free (response); + + SENDF_TO_CLIENT_OR_FAIL + ("%s", + ((owner == NULL) + || (strcmp (owner, + current_credentials.username))) + ? "" + : observers); + free (owner); + free (observers); + + init_task_group_iterator (&groups, index); + while (next (&groups)) + SENDF_TO_CLIENT_OR_FAIL + ("" + "%s" + "", + task_group_iterator_uuid (&groups), + task_group_iterator_name (&groups)); + cleanup_iterator (&groups); + + init_task_role_iterator (&roles, index); + while (next (&roles)) + SENDF_TO_CLIENT_OR_FAIL + ("" + "%s" + "", + task_role_iterator_uuid (&roles), + task_role_iterator_name (&roles)); + cleanup_iterator (&roles); + + SENDF_TO_CLIENT_OR_FAIL (""); + + init_task_alert_iterator (&alerts, index); + while (next (&alerts)) + { + alert_t found; + + if (find_alert_with_permission (task_alert_iterator_uuid + (&alerts), + &found, + "get_alerts")) + abort (); + + SENDF_TO_CLIENT_OR_FAIL + ("" + "%s", + task_alert_iterator_uuid (&alerts), + task_alert_iterator_name (&alerts)); + + if (found) + SENDF_TO_CLIENT_OR_FAIL + (""); + else + SENDF_TO_CLIENT_OR_FAIL + ("" + ""); + } + cleanup_iterator (&alerts); + + if (get_tasks_data->get.details + || get_tasks_data->get.id) + { + SENDF_TO_CLIENT_OR_FAIL ("" + "%d" + "", + task_average_scan_duration (index)); + } + + if (get_tasks_data->get.details) + { + /* The detailed version. */ + + SENDF_TO_CLIENT_OR_FAIL ("%i", + task_result_count (index, min_qod)); + } + + in_assets = task_preference_value (index, "in_assets"); + assets_apply_overrides = task_preference_value + (index, "assets_apply_overrides"); + assets_min_qod = task_preference_value (index, "assets_min_qod"); + max_checks = task_preference_value (index, "max_checks"); + max_hosts = task_preference_value (index, "max_hosts"); + auto_delete = task_preference_value (index, "auto_delete"); + auto_delete_data = task_preference_value (index, "auto_delete_data"); + + SENDF_TO_CLIENT_OR_FAIL + ("" + "" + "" + "Maximum concurrently executed NVTs per host" + "" + "max_checks" + "%s" + "" + "" + "" + "Maximum concurrently scanned hosts" + "" + "max_hosts" + "%s" + "" + "" + "" + "Add results to Asset Management" + "" + "in_assets" + "%s" + "" + "" + "" + "Apply Overrides when adding Assets" + "" + "assets_apply_overrides" + "%s" + "" + "" + "" + "Min QOD when adding Assets" + "" + "assets_min_qod" + "%s" + "" + "" + "" + "Auto Delete Reports" + "" + "auto_delete" + "%s" + "" + "" + "" + "Auto Delete Reports Data" + "" + "auto_delete_data" + "%s" + "" + "" + "", + max_checks ? max_checks : "4", + max_hosts ? max_hosts : "20", + in_assets ? in_assets : "yes", + assets_apply_overrides ? assets_apply_overrides : "yes", + assets_min_qod + ? assets_min_qod + : G_STRINGIFY (MIN_QOD_DEFAULT), + auto_delete ? auto_delete : "0", + auto_delete_data ? auto_delete_data : "0"); + + g_free (in_assets); + g_free (max_checks); + g_free (max_hosts); +} + /** * @brief Handle end of GET_TASKS element. * @@ -17308,592 +17910,8 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) } else { - task_t index; - target_t target; - scanner_t scanner; - const char *first_report_id, *last_report_id; - char *config_name, *config_uuid; - gchar *progress_xml; - gchar *task_schedule_xml; - gchar *config_name_escaped; - char *task_target_uuid, *task_target_name; - gchar *task_target_name_escaped; - char *task_scanner_uuid, *task_scanner_name; - gchar *task_scanner_name_escaped; - gchar *last_report; - gchar *second_last_report_id; - gchar *current_report; - report_t running_report; - char *owner, *observers; - int target_in_trash, scanner_in_trash; - int holes = 0, infos = 0, logs = 0, warnings = 0; - int holes_2 = 0, infos_2 = 0, warnings_2 = 0; - int false_positives = 0, task_scanner_type; - int target_available, config_available; - int scanner_available; - double severity = 0, severity_2 = 0; - gchar *response; - iterator_t alerts, groups, roles; - gchar *in_assets, *max_checks, *max_hosts; - gchar *auto_delete, *auto_delete_data, *assets_apply_overrides; - gchar *assets_min_qod; - - index = get_iterator_resource (&tasks); - target = task_target (index); - - SEND_GET_COMMON (task, &get_tasks_data->get, &tasks); - target_in_trash = task_target_in_trash (index); - if ((target == 0) - && (task_iterator_run_status (&tasks) - == TASK_STATUS_RUNNING)) - { - progress_xml = g_strdup_printf - ("%i", - task_upload_progress (index)); - running_report = 0; - } - else - { - int progress; - - running_report = task_iterator_current_report (&tasks); - progress - = report_progress (running_report); - progress_xml - = g_strdup_printf ("%i", progress); - } - - if (running_report) - { - gchar *timestamp; - char *scan_start, *scan_end, *current_report_id; - - current_report_id = report_uuid (running_report); - - if (report_timestamp (current_report_id, ×tamp)) - g_error ("%s: GET_TASKS: error getting timestamp" - " of report, aborting", - __func__); - - scan_start = scan_start_time_uuid (current_report_id), - scan_end = scan_end_time_uuid (current_report_id), - - current_report = g_strdup_printf ("" - "" - "" - "%s" - "" - "" - "%s" - "" - "" - "%s" - "" - "" - "", - current_report_id, - timestamp, - scan_start, - scan_end); - free (current_report_id); - free (scan_start); - free (scan_end); - g_free (timestamp); - } - else - current_report = g_strdup (""); - - first_report_id = task_iterator_first_report (&tasks); - if (first_report_id && (get_tasks_data->get.trash == 0)) - { - // TODO Could skip this count for tasks page. - if (report_counts (first_report_id, - &holes_2, &infos_2, &logs, - &warnings_2, &false_positives, - &severity_2, apply_overrides, min_qod)) - g_error ("%s: GET_TASKS: error getting counts for" - " first report, aborting", - __func__); - } - - second_last_report_id = task_second_last_report_id (index); - if (second_last_report_id && (get_tasks_data->get.trash == 0)) - { - /* If the first report is the second last report then skip - * doing the count again. */ - if (((first_report_id == NULL) - || (strcmp (second_last_report_id, first_report_id))) - && report_counts (second_last_report_id, - &holes_2, &infos_2, - &logs, &warnings_2, - &false_positives, &severity_2, - apply_overrides, min_qod)) - g_error ("%s: GET_TASKS: error getting counts for" - " second report, aborting", - __func__); - } - - last_report_id = task_iterator_last_report (&tasks); - if (get_tasks_data->get.trash && last_report_id) - { - gchar *timestamp; - char *scan_start, *scan_end; - - if (report_timestamp (last_report_id, ×tamp)) - g_error ("%s: GET_TASKS: error getting timestamp for" - " last report, aborting", - __func__); - - scan_start = scan_start_time_uuid (last_report_id); - scan_end = scan_end_time_uuid (last_report_id); - - last_report = g_strdup_printf ("" - "" - "%s" - "%s" - "%s" - "" - "", - last_report_id, - timestamp, - scan_start, - scan_end); - - free (scan_start); - free (scan_end); - g_free (timestamp); - } - else if (last_report_id) - { - gchar *timestamp; - char *scan_start, *scan_end; - - /* If the last report is the first report or the second - * last report, then reuse the counts from before. */ - if ((first_report_id == NULL) - || (second_last_report_id == NULL) - || (strcmp (last_report_id, first_report_id) - && strcmp (last_report_id, - second_last_report_id))) - { - if (report_counts - (last_report_id, - &holes, &infos, &logs, - &warnings, &false_positives, &severity, - apply_overrides, min_qod)) - g_error ("%s: GET_TASKS: error getting counts for" - " last report, aborting", - __func__); - } - else - { - holes = holes_2; - infos = infos_2; - warnings = warnings_2; - severity = severity_2; - } - - if (report_timestamp (last_report_id, ×tamp)) - g_error ("%s: GET_TASKS: error getting timestamp for" - " last report, aborting", - __func__); - - scan_start = scan_start_time_uuid (last_report_id); - scan_end = scan_end_time_uuid (last_report_id); - - if (strcmp (task_iterator_usage_type (&tasks), "audit") == 0) - { - int compliance_yes, compliance_no, compliance_incomplete; - - report_compliance_by_uuid (last_report_id, - &compliance_yes, - &compliance_no, - &compliance_incomplete); - - last_report - = g_strdup_printf ("" - "" - "%s" - "%s" - "%s" - "" - "%d" - "%d" - "%d" - "" - "" - "", - last_report_id, - timestamp, - scan_start, - scan_end, - compliance_yes, - compliance_no, - compliance_incomplete); - } - else - last_report - = g_strdup_printf ("" - "" - "%s" - "%s" - "%s" - "" - "%i" - "%i" - "%i" - "%i" - "" - "%i" - "" - "" - "" - "%1.1f" - "" - "" - "", - last_report_id, - timestamp, - scan_start, - scan_end, - holes, - infos, - logs, - warnings, - false_positives, - severity); - free (scan_start); - free (scan_end); - g_free (timestamp); - } - else - last_report = g_strdup (""); - - g_free (second_last_report_id); - - owner = task_owner_name (index); - observers = task_observers (index); - config_name = task_config_name (index); - config_uuid = task_config_uuid (index); - target_available = 1; - if (target_in_trash) - { - task_target_uuid = trash_target_uuid (target); - task_target_name = trash_target_name (target); - target_available = trash_target_readable (target); - } - else if (target) - { - target_t found; - task_target_uuid = target_uuid (target); - task_target_name = target_name (target); - if (find_target_with_permission (task_target_uuid, - &found, - "get_targets")) - g_error ("%s: GET_TASKS: error finding task target," - " aborting", - __func__); - target_available = (found > 0); - } - else - { - task_target_uuid = NULL; - task_target_name = NULL; - } - config_available = 1; - if (task_config_in_trash (index)) - config_available = trash_config_readable_uuid (config_uuid); - else if (config_uuid) - { - config_t found; - if (find_config_with_permission (config_uuid, - &found, - "get_configs")) - g_error ("%s: GET_TASKS: error finding task config," - " aborting", - __func__); - config_available = (found > 0); - } - scanner_available = 1; - scanner = task_iterator_scanner (&tasks); - if (scanner) - { - scanner_in_trash = task_scanner_in_trash (index); - - task_scanner_uuid = scanner_uuid (scanner); - task_scanner_name = scanner_name (scanner); - task_scanner_type = scanner_type (scanner); - if (scanner_in_trash) - scanner_available = trash_scanner_readable (scanner); - else - { - scanner_t found; - - if (find_scanner_with_permission - (task_scanner_uuid, &found, "get_scanners")) - g_error ("%s: GET_TASKS: error finding" - " task scanner, aborting", - __func__); - scanner_available = (found > 0); - } - } - else - { - /* Container tasks have no associated scanner. */ - task_scanner_uuid = g_strdup (""); - task_scanner_name = g_strdup (""); - task_scanner_type = 0; - scanner_in_trash = 0; - } - - config_name_escaped - = config_name - ? g_markup_escape_text (config_name, -1) - : NULL; - task_target_name_escaped - = task_target_name - ? g_markup_escape_text (task_target_name, -1) - : NULL; - task_scanner_name_escaped - = task_scanner_name - ? g_markup_escape_text (task_scanner_name, -1) - : NULL; - - task_schedule_xml = get_task_schedule_xml (index); - - response = g_strdup_printf - ("%i" - "%s" - "" - "%s" - "%i" - "%s" - "" - "" - "%s" - "%i" - "%s" - "" - "%s" - "" - "%s" - "%d" - "%i" - "%s" - "" - "%s" - "%s" - "" - "%u%u" - "" - "%s" - "%s" // Schedule XML - "%s%s", - get_tasks_data->get.trash - ? 0 - : task_alterable (index), - task_iterator_usage_type (&tasks), - config_uuid ?: "", - config_name_escaped ?: "", - task_config_in_trash (index), - config_available ? "" : "", - task_target_uuid ?: "", - task_target_name_escaped ?: "", - target_in_trash, - target_available ? "" : "", - task_iterator_hosts_ordering (&tasks) - ? task_iterator_hosts_ordering (&tasks) - : "", - task_scanner_uuid, - task_scanner_name_escaped, - task_scanner_type, - scanner_in_trash, - scanner_available ? "" : "", - task_iterator_run_status_name (&tasks), - progress_xml, - task_iterator_total_reports (&tasks), - task_iterator_finished_reports (&tasks), - get_tasks_data->get.trash - ? "" - : task_iterator_trend_counts - (&tasks, holes, warnings, infos, severity, - holes_2, warnings_2, infos_2, severity_2), - task_schedule_xml, - current_report, - last_report); - g_free (config_name); - g_free (config_uuid); - g_free (config_name_escaped); - free (task_target_name); - free (task_target_uuid); - g_free (task_target_name_escaped); - g_free (progress_xml); - g_free (current_report); - g_free (last_report); - g_free (task_schedule_xml); - g_free (task_scanner_uuid); - g_free (task_scanner_name); - g_free (task_scanner_name_escaped); - if (send_to_client (gmp_parser, error, response)) - { - g_free (response); - cleanup_iterator (&tasks); - cleanup_iterator (&tasks); - return; - } - g_free (response); - - SENDF_TO_CLIENT_OR_FAIL - ("%s", - ((owner == NULL) - || (strcmp (owner, - current_credentials.username))) - ? "" - : observers); - free (owner); - free (observers); - - init_task_group_iterator (&groups, index); - while (next (&groups)) - SENDF_TO_CLIENT_OR_FAIL - ("" - "%s" - "", - task_group_iterator_uuid (&groups), - task_group_iterator_name (&groups)); - cleanup_iterator (&groups); - - init_task_role_iterator (&roles, index); - while (next (&roles)) - SENDF_TO_CLIENT_OR_FAIL - ("" - "%s" - "", - task_role_iterator_uuid (&roles), - task_role_iterator_name (&roles)); - cleanup_iterator (&roles); - - SENDF_TO_CLIENT_OR_FAIL (""); - - init_task_alert_iterator (&alerts, index); - while (next (&alerts)) - { - alert_t found; - - if (find_alert_with_permission (task_alert_iterator_uuid - (&alerts), - &found, - "get_alerts")) - abort (); - - SENDF_TO_CLIENT_OR_FAIL - ("" - "%s", - task_alert_iterator_uuid (&alerts), - task_alert_iterator_name (&alerts)); - - if (found) - SENDF_TO_CLIENT_OR_FAIL - (""); - else - SENDF_TO_CLIENT_OR_FAIL - ("" - ""); - } - cleanup_iterator (&alerts); - - if (get_tasks_data->get.details - || get_tasks_data->get.id) - { - SENDF_TO_CLIENT_OR_FAIL ("" - "%d" - "", - task_average_scan_duration (index)); - } - - if (get_tasks_data->get.details) - { - /* The detailed version. */ - - SENDF_TO_CLIENT_OR_FAIL ("%i", - task_result_count (index, min_qod)); - } - - in_assets = task_preference_value (index, "in_assets"); - assets_apply_overrides = task_preference_value - (index, "assets_apply_overrides"); - assets_min_qod = task_preference_value (index, "assets_min_qod"); - max_checks = task_preference_value (index, "max_checks"); - max_hosts = task_preference_value (index, "max_hosts"); - auto_delete = task_preference_value (index, "auto_delete"); - auto_delete_data = task_preference_value (index, "auto_delete_data"); - - SENDF_TO_CLIENT_OR_FAIL - ("" - "" - "" - "Maximum concurrently executed NVTs per host" - "" - "max_checks" - "%s" - "" - "" - "" - "Maximum concurrently scanned hosts" - "" - "max_hosts" - "%s" - "" - "" - "" - "Add results to Asset Management" - "" - "in_assets" - "%s" - "" - "" - "" - "Apply Overrides when adding Assets" - "" - "assets_apply_overrides" - "%s" - "" - "" - "" - "Min QOD when adding Assets" - "" - "assets_min_qod" - "%s" - "" - "" - "" - "Auto Delete Reports" - "" - "auto_delete" - "%s" - "" - "" - "" - "Auto Delete Reports Data" - "" - "auto_delete_data" - "%s" - "" - "" - "", - max_checks ? max_checks : "4", - max_hosts ? max_hosts : "20", - in_assets ? in_assets : "yes", - assets_apply_overrides ? assets_apply_overrides : "yes", - assets_min_qod - ? assets_min_qod - : G_STRINGIFY (MIN_QOD_DEFAULT), - auto_delete ? auto_delete : "0", - auto_delete_data ? auto_delete_data : "0"); - - g_free (in_assets); - g_free (max_checks); - g_free (max_hosts); + if (get_tasks_send_task (gmp_parser, error, &tasks)) + return; } count++; From 9fc89cf6fbbc05a4a7c6fa57161e8586b5d91acd Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Feb 2024 15:19:44 +0200 Subject: [PATCH 18/43] Get get_tasks_send_task working --- src/gmp.c | 169 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 98 insertions(+), 71 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index cbe2c865fc..60f18e1207 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17214,13 +17214,17 @@ get_tasks_send_schedules_only (gmp_parser_t *gmp_parser, * @param[in] gmp_parser GMP parser. * @param[in] error Error parameter. * @param[in] tasks Task iterator. + * @param[in] apply_overrides Whether to apply overrides. + * @param[in] min_qod Minimum QOD. * * @return 1 if error, else 0. */ static int get_tasks_send_task (gmp_parser_t *gmp_parser, GError **error, - iterator_t *tasks) + iterator_t *tasks, + int apply_overrides, + int min_qod) { task_t index; target_t target; @@ -17252,13 +17256,22 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, gchar *auto_delete, *auto_delete_data, *assets_apply_overrides; gchar *assets_min_qod; - index = get_iterator_resource (&tasks); + index = get_iterator_resource (tasks); target = task_target (index); - SEND_GET_COMMON (task, &get_tasks_data->get, &tasks); + if (send_get_common ("task", &get_tasks_data->get, tasks, + gmp_parser, error, + get_tasks_data->get.trash + ? trash_task_writable (index) + : task_writable (index), + get_tasks_data->get.trash + ? trash_task_in_use (index) + : task_in_use (index))) + return 1; + target_in_trash = task_target_in_trash (index); if ((target == 0) - && (task_iterator_run_status (&tasks) + && (task_iterator_run_status (tasks) == TASK_STATUS_RUNNING)) { progress_xml = g_strdup_printf @@ -17270,7 +17283,7 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, { int progress; - running_report = task_iterator_current_report (&tasks); + running_report = task_iterator_current_report (tasks); progress = report_progress (running_report); progress_xml @@ -17317,7 +17330,7 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, else current_report = g_strdup (""); - first_report_id = task_iterator_first_report (&tasks); + first_report_id = task_iterator_first_report (tasks); if (first_report_id && (get_tasks_data->get.trash == 0)) { // TODO Could skip this count for tasks page. @@ -17347,7 +17360,7 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, __func__); } - last_report_id = task_iterator_last_report (&tasks); + last_report_id = task_iterator_last_report (tasks); if (get_tasks_data->get.trash && last_report_id) { gchar *timestamp; @@ -17415,7 +17428,7 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, scan_start = scan_start_time_uuid (last_report_id); scan_end = scan_end_time_uuid (last_report_id); - if (strcmp (task_iterator_usage_type (&tasks), "audit") == 0) + if (strcmp (task_iterator_usage_type (tasks), "audit") == 0) { int compliance_yes, compliance_no, compliance_incomplete; @@ -17529,7 +17542,7 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, config_available = (found > 0); } scanner_available = 1; - scanner = task_iterator_scanner (&tasks); + scanner = task_iterator_scanner (tasks); if (scanner) { scanner_in_trash = task_scanner_in_trash (index); @@ -17606,7 +17619,7 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, get_tasks_data->get.trash ? 0 : task_alterable (index), - task_iterator_usage_type (&tasks), + task_iterator_usage_type (tasks), config_uuid ?: "", config_name_escaped ?: "", task_config_in_trash (index), @@ -17615,22 +17628,22 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, task_target_name_escaped ?: "", target_in_trash, target_available ? "" : "", - task_iterator_hosts_ordering (&tasks) - ? task_iterator_hosts_ordering (&tasks) + task_iterator_hosts_ordering (tasks) + ? task_iterator_hosts_ordering (tasks) : "", task_scanner_uuid, task_scanner_name_escaped, task_scanner_type, scanner_in_trash, scanner_available ? "" : "", - task_iterator_run_status_name (&tasks), + task_iterator_run_status_name (tasks), progress_xml, - task_iterator_total_reports (&tasks), - task_iterator_finished_reports (&tasks), + task_iterator_total_reports (tasks), + task_iterator_finished_reports (tasks), get_tasks_data->get.trash ? "" : task_iterator_trend_counts - (&tasks, holes, warnings, infos, severity, + (tasks, holes, warnings, infos, severity, holes_2, warnings_2, infos_2, severity_2), task_schedule_xml, current_report, @@ -17651,44 +17664,54 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, if (send_to_client (gmp_parser, error, response)) { g_free (response); - cleanup_iterator (&tasks); - cleanup_iterator (&tasks); - return; + cleanup_iterator (tasks); + return 1; } g_free (response); - SENDF_TO_CLIENT_OR_FAIL - ("%s", - ((owner == NULL) - || (strcmp (owner, - current_credentials.username))) - ? "" - : observers); + if (sendf_to_client (gmp_parser, error, + "%s", + ((owner == NULL) + || (strcmp (owner, + current_credentials.username))) + ? "" + : observers)) + goto cleanup_exit; free (owner); free (observers); init_task_group_iterator (&groups, index); while (next (&groups)) - SENDF_TO_CLIENT_OR_FAIL - ("" - "%s" - "", - task_group_iterator_uuid (&groups), - task_group_iterator_name (&groups)); + if (sendf_to_client (gmp_parser, error, + "" + "%s" + "", + task_group_iterator_uuid (&groups), + task_group_iterator_name (&groups))) + { + cleanup_iterator (&groups); + goto cleanup_exit; + } cleanup_iterator (&groups); init_task_role_iterator (&roles, index); while (next (&roles)) - SENDF_TO_CLIENT_OR_FAIL - ("" - "%s" - "", - task_role_iterator_uuid (&roles), - task_role_iterator_name (&roles)); + if (sendf_to_client (gmp_parser, error, + "" + "%s" + "", + task_role_iterator_uuid (&roles), + task_role_iterator_name (&roles))) + { + cleanup_iterator (&roles); + goto cleanup_exit; + } cleanup_iterator (&roles); - SENDF_TO_CLIENT_OR_FAIL (""); - + if (send_to_client (gmp_parser, error, + "")) + goto cleanup_exit; + init_task_alert_iterator (&alerts, index); while (next (&alerts)) { @@ -17700,38 +17723,35 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, "get_alerts")) abort (); - SENDF_TO_CLIENT_OR_FAIL - ("" - "%s", - task_alert_iterator_uuid (&alerts), - task_alert_iterator_name (&alerts)); - - if (found) - SENDF_TO_CLIENT_OR_FAIL - (""); - else - SENDF_TO_CLIENT_OR_FAIL - ("" - ""); + if (sendf_to_client (gmp_parser, error, + "" + "%s", + task_alert_iterator_uuid (&alerts), + task_alert_iterator_name (&alerts)) + || send_to_client (gmp_parser, error, + found ? "" : "")) + { + cleanup_iterator (&alerts); + goto cleanup_exit; + } } cleanup_iterator (&alerts); - if (get_tasks_data->get.details - || get_tasks_data->get.id) - { - SENDF_TO_CLIENT_OR_FAIL ("" - "%d" - "", - task_average_scan_duration (index)); - } + if ((get_tasks_data->get.details + || get_tasks_data->get.id) + && sendf_to_client (gmp_parser, error, + "" + "%d" + "", + task_average_scan_duration (index))) + goto cleanup_exit; - if (get_tasks_data->get.details) - { + if (get_tasks_data->get.details /* The detailed version. */ - - SENDF_TO_CLIENT_OR_FAIL ("%i", - task_result_count (index, min_qod)); - } + && sendf_to_client (gmp_parser, error, + "%i", + task_result_count (index, min_qod))) + goto cleanup_exit; in_assets = task_preference_value (index, "in_assets"); assets_apply_overrides = task_preference_value @@ -17742,8 +17762,8 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, auto_delete = task_preference_value (index, "auto_delete"); auto_delete_data = task_preference_value (index, "auto_delete_data"); - SENDF_TO_CLIENT_OR_FAIL - ("" + if (sendf_to_client (gmp_parser, error, + "" "" "" "Maximum concurrently executed NVTs per host" @@ -17803,11 +17823,17 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, ? assets_min_qod : G_STRINGIFY (MIN_QOD_DEFAULT), auto_delete ? auto_delete : "0", - auto_delete_data ? auto_delete_data : "0"); + auto_delete_data ? auto_delete_data : "0")) + goto cleanup_exit; g_free (in_assets); g_free (max_checks); g_free (max_hosts); + return 0; + + cleanup_exit: + cleanup_iterator (tasks); + return 1; } /** @@ -17910,7 +17936,8 @@ handle_get_tasks (gmp_parser_t *gmp_parser, GError **error) } else { - if (get_tasks_send_task (gmp_parser, error, &tasks)) + if (get_tasks_send_task (gmp_parser, error, &tasks, apply_overrides, + min_qod)) return; } From f345791798f49bbfae7c79195c9d0e785d2224be Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Feb 2024 15:21:43 +0200 Subject: [PATCH 19/43] Fix indent of large string --- src/gmp.c | 122 +++++++++++++++++++++++++++--------------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 60f18e1207..8477fe87a8 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17763,67 +17763,67 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, auto_delete_data = task_preference_value (index, "auto_delete_data"); if (sendf_to_client (gmp_parser, error, - "" - "" - "" - "Maximum concurrently executed NVTs per host" - "" - "max_checks" - "%s" - "" - "" - "" - "Maximum concurrently scanned hosts" - "" - "max_hosts" - "%s" - "" - "" - "" - "Add results to Asset Management" - "" - "in_assets" - "%s" - "" - "" - "" - "Apply Overrides when adding Assets" - "" - "assets_apply_overrides" - "%s" - "" - "" - "" - "Min QOD when adding Assets" - "" - "assets_min_qod" - "%s" - "" - "" - "" - "Auto Delete Reports" - "" - "auto_delete" - "%s" - "" - "" - "" - "Auto Delete Reports Data" - "" - "auto_delete_data" - "%s" - "" - "" - "", - max_checks ? max_checks : "4", - max_hosts ? max_hosts : "20", - in_assets ? in_assets : "yes", - assets_apply_overrides ? assets_apply_overrides : "yes", - assets_min_qod - ? assets_min_qod - : G_STRINGIFY (MIN_QOD_DEFAULT), - auto_delete ? auto_delete : "0", - auto_delete_data ? auto_delete_data : "0")) + "" + "" + "" + "Maximum concurrently executed NVTs per host" + "" + "max_checks" + "%s" + "" + "" + "" + "Maximum concurrently scanned hosts" + "" + "max_hosts" + "%s" + "" + "" + "" + "Add results to Asset Management" + "" + "in_assets" + "%s" + "" + "" + "" + "Apply Overrides when adding Assets" + "" + "assets_apply_overrides" + "%s" + "" + "" + "" + "Min QOD when adding Assets" + "" + "assets_min_qod" + "%s" + "" + "" + "" + "Auto Delete Reports" + "" + "auto_delete" + "%s" + "" + "" + "" + "Auto Delete Reports Data" + "" + "auto_delete_data" + "%s" + "" + "" + "", + max_checks ? max_checks : "4", + max_hosts ? max_hosts : "20", + in_assets ? in_assets : "yes", + assets_apply_overrides ? assets_apply_overrides : "yes", + assets_min_qod + ? assets_min_qod + : G_STRINGIFY (MIN_QOD_DEFAULT), + auto_delete ? auto_delete : "0", + auto_delete_data ? auto_delete_data : "0")) goto cleanup_exit; g_free (in_assets); From 9e8fbdeed22829ea81a99408d713979f7b541614 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Feb 2024 15:30:53 +0200 Subject: [PATCH 20/43] Make large string more manageable --- src/gmp.c | 72 ++++++++++++++++++------------------------------------- 1 file changed, 23 insertions(+), 49 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 8477fe87a8..0eda716598 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17762,57 +17762,29 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, auto_delete = task_preference_value (index, "auto_delete"); auto_delete_data = task_preference_value (index, "auto_delete_data"); +#define PREF(name, scanner_name) \ + "" \ + "" name "" \ + "" scanner_name "" \ + "%s" \ + "" + if (sendf_to_client (gmp_parser, error, "" - "" - "" - "Maximum concurrently executed NVTs per host" - "" - "max_checks" - "%s" - "" - "" - "" - "Maximum concurrently scanned hosts" - "" - "max_hosts" - "%s" - "" - "" - "" - "Add results to Asset Management" - "" - "in_assets" - "%s" - "" - "" - "" - "Apply Overrides when adding Assets" - "" - "assets_apply_overrides" - "%s" - "" - "" - "" - "Min QOD when adding Assets" - "" - "assets_min_qod" - "%s" - "" - "" - "" - "Auto Delete Reports" - "" - "auto_delete" - "%s" - "" - "" - "" - "Auto Delete Reports Data" - "" - "auto_delete_data" - "%s" - "" + PREF("Maximum concurrently executed NVTs per host", + "max_checks") + PREF("Maximum concurrently scanned hosts", + "max_hosts") + PREF("Add results to Asset Management", + "in_assets") + PREF("Apply Overrides when adding Assets", + "assets_apply_overrides") + PREF("Min QOD when adding Assets", + "assets_min_qod") + PREF("Auto Delete Reports", + "auto_delete") + PREF("Auto Delete Reports Data", + "auto_delete_data") "" "", max_checks ? max_checks : "4", @@ -17826,6 +17798,8 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, auto_delete_data ? auto_delete_data : "0")) goto cleanup_exit; +#undef PREF + g_free (in_assets); g_free (max_checks); g_free (max_hosts); From 3bf8b72be91f080488df1ce18de7a2bd42d908b8 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Feb 2024 15:50:14 +0200 Subject: [PATCH 21/43] Neaten start of get_tasks_send_task --- src/gmp.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 0eda716598..4a136b6c53 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17270,24 +17270,19 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, return 1; target_in_trash = task_target_in_trash (index); + + running_report = 0; if ((target == 0) && (task_iterator_run_status (tasks) == TASK_STATUS_RUNNING)) - { - progress_xml = g_strdup_printf - ("%i", - task_upload_progress (index)); - running_report = 0; - } + progress_xml = g_strdup_printf + ("%i", + task_upload_progress (index)); else { - int progress; - running_report = task_iterator_current_report (tasks); - progress - = report_progress (running_report); progress_xml - = g_strdup_printf ("%i", progress); + = g_strdup_printf ("%i", report_progress (running_report)); } if (running_report) From e97ac39ff003982aec56578c1c4c4baf8746c735 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Feb 2024 16:03:12 +0200 Subject: [PATCH 22/43] Move current_report setup out to function --- src/gmp.c | 95 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 56 insertions(+), 39 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 4a136b6c53..de5abbe24e 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17208,6 +17208,61 @@ get_tasks_send_schedules_only (gmp_parser_t *gmp_parser, return 0; } +/** + * @brief Get current report XML. + * + * @param[in] running_report Report. + * + * @return XMl. + */ +static gchar * +get_current_report_xml (report_t running_report) +{ + gchar *current_report; + + if (running_report) + { + gchar *timestamp; + char *scan_start, *scan_end, *current_report_id; + + current_report_id = report_uuid (running_report); + + if (report_timestamp (current_report_id, ×tamp)) + g_error ("%s: GET_TASKS: error getting timestamp" + " of report, aborting", + __func__); + + scan_start = scan_start_time_uuid (current_report_id), + scan_end = scan_end_time_uuid (current_report_id), + + current_report = g_strdup_printf ("" + "" + "" + "%s" + "" + "" + "%s" + "" + "" + "%s" + "" + "" + "", + current_report_id, + timestamp, + scan_start, + scan_end); + free (current_report_id); + free (scan_start); + free (scan_end); + g_free (timestamp); + } + else + current_report = g_strdup (""); + + return current_report; +} + /** * @brief Send single task for GET_TASKS. * @@ -17285,45 +17340,7 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, = g_strdup_printf ("%i", report_progress (running_report)); } - if (running_report) - { - gchar *timestamp; - char *scan_start, *scan_end, *current_report_id; - - current_report_id = report_uuid (running_report); - - if (report_timestamp (current_report_id, ×tamp)) - g_error ("%s: GET_TASKS: error getting timestamp" - " of report, aborting", - __func__); - - scan_start = scan_start_time_uuid (current_report_id), - scan_end = scan_end_time_uuid (current_report_id), - - current_report = g_strdup_printf ("" - "" - "" - "%s" - "" - "" - "%s" - "" - "" - "%s" - "" - "" - "", - current_report_id, - timestamp, - scan_start, - scan_end); - free (current_report_id); - free (scan_start); - free (scan_end); - g_free (timestamp); - } - else - current_report = g_strdup (""); + current_report = get_current_report_xml (running_report); first_report_id = task_iterator_first_report (tasks); if (first_report_id && (get_tasks_data->get.trash == 0)) From 1f880702192b9cf66be00a35c411146b6bfdba00 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Feb 2024 18:32:48 +0200 Subject: [PATCH 23/43] Move last_report setup out to function --- src/gmp.c | 251 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 144 insertions(+), 107 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index de5abbe24e..c8b8773999 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17263,6 +17263,142 @@ get_current_report_xml (report_t running_report) return current_report; } +/** + * @brief Get last report XML. + * + * @param[in] last_report_id ID of last report. + * + * @return XMl. + */ +static gchar * +get_last_report_xml_trash (const char *last_report_id) +{ + gchar *last_report, *timestamp; + char *scan_start, *scan_end; + + if (report_timestamp (last_report_id, ×tamp)) + g_error ("%s: GET_TASKS: error getting timestamp for" + " last report, aborting", + __func__); + + scan_start = scan_start_time_uuid (last_report_id); + scan_end = scan_end_time_uuid (last_report_id); + + last_report = g_strdup_printf ("" + "" + "%s" + "%s" + "%s" + "" + "", + last_report_id, + timestamp, + scan_start, + scan_end); + + free (scan_start); + free (scan_end); + g_free (timestamp); + return last_report; +} + +/** + * @brief Get last report XML. + * + * @param[in] tasks Task iterator. + * @param[in] last_report_id ID of last report. + * @param[in] holes Count of holes. + * @param[in] infos Count of infos. + * @param[in] logs Count of logs. + * @param[in] warnings Count of warnings. + * @param[in] severity Severity. + * + * @return XMl. + */ +static gchar * +get_last_report_xml (iterator_t *tasks, const char *last_report_id, + int holes, int infos, int logs, int warnings, + int false_positives, double severity) +{ + gchar *last_report, *timestamp; + char *scan_start, *scan_end; + + if (report_timestamp (last_report_id, ×tamp)) + g_error ("%s: GET_TASKS: error getting timestamp for" + " last report, aborting", + __func__); + + scan_start = scan_start_time_uuid (last_report_id); + scan_end = scan_end_time_uuid (last_report_id); + + if (strcmp (task_iterator_usage_type (tasks), "audit") == 0) + { + int compliance_yes, compliance_no, compliance_incomplete; + + report_compliance_by_uuid (last_report_id, + &compliance_yes, + &compliance_no, + &compliance_incomplete); + + last_report + = g_strdup_printf ("" + "" + "%s" + "%s" + "%s" + "" + "%d" + "%d" + "%d" + "" + "" + "", + last_report_id, + timestamp, + scan_start, + scan_end, + compliance_yes, + compliance_no, + compliance_incomplete); + } + else + last_report + = g_strdup_printf ("" + "" + "%s" + "%s" + "%s" + "" + "%i" + "%i" + "%i" + "%i" + "" + "%i" + "" + "" + "" + "%1.1f" + "" + "" + "", + last_report_id, + timestamp, + scan_start, + scan_end, + holes, + infos, + logs, + warnings, + false_positives, + severity); + free (scan_start); + free (scan_end); + g_free (timestamp); + + return last_report; +} + /** * @brief Send single task for GET_TASKS. * @@ -17374,49 +17510,19 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, last_report_id = task_iterator_last_report (tasks); if (get_tasks_data->get.trash && last_report_id) - { - gchar *timestamp; - char *scan_start, *scan_end; - - if (report_timestamp (last_report_id, ×tamp)) - g_error ("%s: GET_TASKS: error getting timestamp for" - " last report, aborting", - __func__); - - scan_start = scan_start_time_uuid (last_report_id); - scan_end = scan_end_time_uuid (last_report_id); - - last_report = g_strdup_printf ("" - "" - "%s" - "%s" - "%s" - "" - "", - last_report_id, - timestamp, - scan_start, - scan_end); - - free (scan_start); - free (scan_end); - g_free (timestamp); - } + last_report = get_last_report_xml_trash (last_report_id); else if (last_report_id) { - gchar *timestamp; - char *scan_start, *scan_end; - /* If the last report is the first report or the second - * last report, then reuse the counts from before. */ + * last report, then reuse the counts from before. */ if ((first_report_id == NULL) || (second_last_report_id == NULL) || (strcmp (last_report_id, first_report_id) && strcmp (last_report_id, - second_last_report_id))) + second_last_report_id))) { if (report_counts - (last_report_id, + (last_report_id, &holes, &infos, &logs, &warnings, &false_positives, &severity, apply_overrides, min_qod)) @@ -17432,81 +17538,12 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, severity = severity_2; } - if (report_timestamp (last_report_id, ×tamp)) - g_error ("%s: GET_TASKS: error getting timestamp for" - " last report, aborting", - __func__); - - scan_start = scan_start_time_uuid (last_report_id); - scan_end = scan_end_time_uuid (last_report_id); - - if (strcmp (task_iterator_usage_type (tasks), "audit") == 0) - { - int compliance_yes, compliance_no, compliance_incomplete; - - report_compliance_by_uuid (last_report_id, - &compliance_yes, - &compliance_no, - &compliance_incomplete); - - last_report - = g_strdup_printf ("" - "" - "%s" - "%s" - "%s" - "" - "%d" - "%d" - "%d" - "" - "" - "", - last_report_id, - timestamp, - scan_start, - scan_end, - compliance_yes, - compliance_no, - compliance_incomplete); - } - else - last_report - = g_strdup_printf ("" - "" - "%s" - "%s" - "%s" - "" - "%i" - "%i" - "%i" - "%i" - "" - "%i" - "" - "" - "" - "%1.1f" - "" - "" - "", - last_report_id, - timestamp, - scan_start, - scan_end, - holes, - infos, - logs, - warnings, - false_positives, - severity); - free (scan_start); - free (scan_end); - g_free (timestamp); + last_report = get_last_report_xml (tasks, last_report_id, holes, infos, + logs, warnings, false_positives, + severity); } else - last_report = g_strdup (""); + last_report = g_strdup (""); g_free (second_last_report_id); From 230ed1c5298c7dce142ced1e93db43dcd767d985 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Feb 2024 18:46:22 +0200 Subject: [PATCH 24/43] Move sending of observers out to function --- src/gmp.c | 119 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 74 insertions(+), 45 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index c8b8773999..28198985be 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17399,6 +17399,76 @@ get_last_report_xml (iterator_t *tasks, const char *last_report_id, return last_report; } +/** + * @brief Send observers XML. + * + * @param[in] gmp_parser GMP parser. + * @param[in] error Error parameter. + * @param[in] index Task. + * + * @return 1 if error, else 0. + */ +static int +get_tasks_send_observers (gmp_parser_t *gmp_parser, + GError **error, + task_t index) +{ + char *owner, *observers; + iterator_t groups, roles; + + owner = task_owner_name (index); + observers = task_observers (index); + + if (sendf_to_client (gmp_parser, error, + "%s", + ((owner == NULL) + || (strcmp (owner, + current_credentials.username))) + ? "" + : observers)) + { + free (owner); + free (observers); + return 1; + } + free (owner); + free (observers); + + init_task_group_iterator (&groups, index); + while (next (&groups)) + if (sendf_to_client (gmp_parser, error, + "" + "%s" + "", + task_group_iterator_uuid (&groups), + task_group_iterator_name (&groups))) + { + cleanup_iterator (&groups); + return 1; + } + cleanup_iterator (&groups); + + init_task_role_iterator (&roles, index); + while (next (&roles)) + if (sendf_to_client (gmp_parser, error, + "" + "%s" + "", + task_role_iterator_uuid (&roles), + task_role_iterator_name (&roles))) + { + cleanup_iterator (&roles); + return 1; + } + cleanup_iterator (&roles); + + if (send_to_client (gmp_parser, error, + "")) + return 1; + + return 0; +} + /** * @brief Send single task for GET_TASKS. * @@ -17433,7 +17503,6 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, gchar *second_last_report_id; gchar *current_report; report_t running_report; - char *owner, *observers; int target_in_trash, scanner_in_trash; int holes = 0, infos = 0, logs = 0, warnings = 0; int holes_2 = 0, infos_2 = 0, warnings_2 = 0; @@ -17442,7 +17511,7 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, int scanner_available; double severity = 0, severity_2 = 0; gchar *response; - iterator_t alerts, groups, roles; + iterator_t alerts; gchar *in_assets, *max_checks, *max_hosts; gchar *auto_delete, *auto_delete_data, *assets_apply_overrides; gchar *assets_min_qod; @@ -17547,8 +17616,6 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, g_free (second_last_report_id); - owner = task_owner_name (index); - observers = task_observers (index); config_name = task_config_name (index); config_uuid = task_config_uuid (index); target_available = 1; @@ -17576,6 +17643,7 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, task_target_uuid = NULL; task_target_name = NULL; } + config_available = 1; if (task_config_in_trash (index)) config_available = trash_config_readable_uuid (config_uuid); @@ -17590,6 +17658,7 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, __func__); config_available = (found > 0); } + scanner_available = 1; scanner = task_iterator_scanner (tasks); if (scanner) @@ -17718,49 +17787,9 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, } g_free (response); - if (sendf_to_client (gmp_parser, error, - "%s", - ((owner == NULL) - || (strcmp (owner, - current_credentials.username))) - ? "" - : observers)) + if (get_tasks_send_observers (gmp_parser, error, index)) goto cleanup_exit; - free (owner); - free (observers); - - init_task_group_iterator (&groups, index); - while (next (&groups)) - if (sendf_to_client (gmp_parser, error, - "" - "%s" - "", - task_group_iterator_uuid (&groups), - task_group_iterator_name (&groups))) - { - cleanup_iterator (&groups); - goto cleanup_exit; - } - cleanup_iterator (&groups); - - init_task_role_iterator (&roles, index); - while (next (&roles)) - if (sendf_to_client (gmp_parser, error, - "" - "%s" - "", - task_role_iterator_uuid (&roles), - task_role_iterator_name (&roles))) - { - cleanup_iterator (&roles); - goto cleanup_exit; - } - cleanup_iterator (&roles); - if (send_to_client (gmp_parser, error, - "")) - goto cleanup_exit; - init_task_alert_iterator (&alerts, index); while (next (&alerts)) { From bf71f23b720bf85d1d8e8e7fbd6aa48870147c20 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Feb 2024 20:55:42 +0200 Subject: [PATCH 25/43] Move sending of alerts out to function --- src/gmp.c | 67 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 42 insertions(+), 25 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 28198985be..d7f58bbf6d 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17469,6 +17469,46 @@ get_tasks_send_observers (gmp_parser_t *gmp_parser, return 0; } +/** + * @brief Send alerts XML. + * + * @param[in] gmp_parser GMP parser. + * @param[in] error Error parameter. + * @param[in] index Task. + * + * @return 1 if error, else 0. + */ +static int +get_tasks_send_alerts (gmp_parser_t *gmp_parser, GError **error, task_t index) +{ + iterator_t alerts; + + init_task_alert_iterator (&alerts, index); + while (next (&alerts)) + { + alert_t found; + + if (find_alert_with_permission (task_alert_iterator_uuid (&alerts), + &found, + "get_alerts")) + abort (); + + if (sendf_to_client (gmp_parser, error, + "" + "%s", + task_alert_iterator_uuid (&alerts), + task_alert_iterator_name (&alerts)) + || send_to_client (gmp_parser, error, + found ? "" : "")) + { + cleanup_iterator (&alerts); + return 1; + } + } + cleanup_iterator (&alerts); + return 0; +} + /** * @brief Send single task for GET_TASKS. * @@ -17511,7 +17551,6 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, int scanner_available; double severity = 0, severity_2 = 0; gchar *response; - iterator_t alerts; gchar *in_assets, *max_checks, *max_hosts; gchar *auto_delete, *auto_delete_data, *assets_apply_overrides; gchar *assets_min_qod; @@ -17790,30 +17829,8 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, if (get_tasks_send_observers (gmp_parser, error, index)) goto cleanup_exit; - init_task_alert_iterator (&alerts, index); - while (next (&alerts)) - { - alert_t found; - - if (find_alert_with_permission (task_alert_iterator_uuid - (&alerts), - &found, - "get_alerts")) - abort (); - - if (sendf_to_client (gmp_parser, error, - "" - "%s", - task_alert_iterator_uuid (&alerts), - task_alert_iterator_name (&alerts)) - || send_to_client (gmp_parser, error, - found ? "" : "")) - { - cleanup_iterator (&alerts); - goto cleanup_exit; - } - } - cleanup_iterator (&alerts); + if (get_tasks_send_alerts (gmp_parser, error, index)) + goto cleanup_exit; if ((get_tasks_data->get.details || get_tasks_data->get.id) From 45edb728cd08573d0a078a1e1c8f0eea2ba18c7c Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Feb 2024 21:06:01 +0200 Subject: [PATCH 26/43] Move sending of preferences out to function --- src/gmp.c | 122 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 71 insertions(+), 51 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index d7f58bbf6d..d20c528600 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17509,6 +17509,76 @@ get_tasks_send_alerts (gmp_parser_t *gmp_parser, GError **error, task_t index) return 0; } +/** + * @brief Send preferences. + * + * @param[in] gmp_parser GMP parser. + * @param[in] error Error parameter. + * @param[in] index Task. + * + * @return 1 if error, else 0. + */ +static int +get_tasks_send_prefs (gmp_parser_t *gmp_parser, GError **error, task_t index) +{ + gchar *in_assets, *max_checks, *max_hosts; + gchar *auto_delete, *auto_delete_data, *assets_apply_overrides; + gchar *assets_min_qod; + + in_assets = task_preference_value (index, "in_assets"); + assets_apply_overrides = task_preference_value + (index, "assets_apply_overrides"); + assets_min_qod = task_preference_value (index, "assets_min_qod"); + max_checks = task_preference_value (index, "max_checks"); + max_hosts = task_preference_value (index, "max_hosts"); + auto_delete = task_preference_value (index, "auto_delete"); + auto_delete_data = task_preference_value (index, "auto_delete_data"); + +#define PREF(name, scanner_name) \ + "" \ + "" name "" \ + "" scanner_name "" \ + "%s" \ + "" + + if (sendf_to_client (gmp_parser, error, + "" + PREF("Maximum concurrently executed NVTs per host", + "max_checks") + PREF("Maximum concurrently scanned hosts", + "max_hosts") + PREF("Add results to Asset Management", + "in_assets") + PREF("Apply Overrides when adding Assets", + "assets_apply_overrides") + PREF("Min QOD when adding Assets", + "assets_min_qod") + PREF("Auto Delete Reports", + "auto_delete") + PREF("Auto Delete Reports Data", + "auto_delete_data") + "" + "", + max_checks ? max_checks : "4", + max_hosts ? max_hosts : "20", + in_assets ? in_assets : "yes", + assets_apply_overrides ? assets_apply_overrides : "yes", + assets_min_qod + ? assets_min_qod + : G_STRINGIFY (MIN_QOD_DEFAULT), + auto_delete ? auto_delete : "0", + auto_delete_data ? auto_delete_data : "0")) + return 1; + +#undef PREF + + g_free (in_assets); + g_free (max_checks); + g_free (max_hosts); + + return 0; +} + /** * @brief Send single task for GET_TASKS. * @@ -17551,9 +17621,6 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, int scanner_available; double severity = 0, severity_2 = 0; gchar *response; - gchar *in_assets, *max_checks, *max_hosts; - gchar *auto_delete, *auto_delete_data, *assets_apply_overrides; - gchar *assets_min_qod; index = get_iterator_resource (tasks); target = task_target (index); @@ -17848,56 +17915,9 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, task_result_count (index, min_qod))) goto cleanup_exit; - in_assets = task_preference_value (index, "in_assets"); - assets_apply_overrides = task_preference_value - (index, "assets_apply_overrides"); - assets_min_qod = task_preference_value (index, "assets_min_qod"); - max_checks = task_preference_value (index, "max_checks"); - max_hosts = task_preference_value (index, "max_hosts"); - auto_delete = task_preference_value (index, "auto_delete"); - auto_delete_data = task_preference_value (index, "auto_delete_data"); - -#define PREF(name, scanner_name) \ - "" \ - "" name "" \ - "" scanner_name "" \ - "%s" \ - "" - - if (sendf_to_client (gmp_parser, error, - "" - PREF("Maximum concurrently executed NVTs per host", - "max_checks") - PREF("Maximum concurrently scanned hosts", - "max_hosts") - PREF("Add results to Asset Management", - "in_assets") - PREF("Apply Overrides when adding Assets", - "assets_apply_overrides") - PREF("Min QOD when adding Assets", - "assets_min_qod") - PREF("Auto Delete Reports", - "auto_delete") - PREF("Auto Delete Reports Data", - "auto_delete_data") - "" - "", - max_checks ? max_checks : "4", - max_hosts ? max_hosts : "20", - in_assets ? in_assets : "yes", - assets_apply_overrides ? assets_apply_overrides : "yes", - assets_min_qod - ? assets_min_qod - : G_STRINGIFY (MIN_QOD_DEFAULT), - auto_delete ? auto_delete : "0", - auto_delete_data ? auto_delete_data : "0")) + if (get_tasks_send_prefs (gmp_parser, error, index)) goto cleanup_exit; -#undef PREF - - g_free (in_assets); - g_free (max_checks); - g_free (max_hosts); return 0; cleanup_exit: From c2e368c43f989efc8cfb3a89957bf1d78359b7c6 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Feb 2024 21:09:47 +0200 Subject: [PATCH 27/43] Define variables after declarations --- src/gmp.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index d20c528600..55dff50a2d 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17614,14 +17614,17 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, gchar *current_report; report_t running_report; int target_in_trash, scanner_in_trash; - int holes = 0, infos = 0, logs = 0, warnings = 0; - int holes_2 = 0, infos_2 = 0, warnings_2 = 0; - int false_positives = 0, task_scanner_type; + int holes, infos, logs, warnings; + int holes_2, infos_2, warnings_2; + int false_positives, task_scanner_type; int target_available, config_available; int scanner_available; - double severity = 0, severity_2 = 0; + double severity, severity_2; gchar *response; + holes = infos = logs = warnings = false_positives = 0; + holes_2 = infos_2 = warnings_2 = 0; + severity = severity_2 = 0; index = get_iterator_resource (tasks); target = task_target (index); From 79e308550dcfa2e9caccadbe1e91a2690c239717 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Feb 2024 21:16:05 +0200 Subject: [PATCH 28/43] Group more declarations --- src/gmp.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 55dff50a2d..5c18794587 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17601,26 +17601,16 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, target_t target; scanner_t scanner; const char *first_report_id, *last_report_id; - char *config_name, *config_uuid; - gchar *progress_xml; - gchar *task_schedule_xml; - gchar *config_name_escaped; - char *task_target_uuid, *task_target_name; - gchar *task_target_name_escaped; + char *config_name, *config_uuid, *task_target_uuid, *task_target_name; char *task_scanner_uuid, *task_scanner_name; - gchar *task_scanner_name_escaped; - gchar *last_report; - gchar *second_last_report_id; - gchar *current_report; + gchar *progress_xml, *task_schedule_xml, *config_name_escaped; + gchar *task_target_name_escaped, *task_scanner_name_escaped; + gchar *last_report, *second_last_report_id, *current_report, *response; report_t running_report; - int target_in_trash, scanner_in_trash; - int holes, infos, logs, warnings; - int holes_2, infos_2, warnings_2; - int false_positives, task_scanner_type; - int target_available, config_available; - int scanner_available; + int target_in_trash, scanner_in_trash, task_scanner_type; + int holes, infos, logs, warnings, holes_2, infos_2, warnings_2; + int false_positives, target_available, config_available, scanner_available; double severity, severity_2; - gchar *response; holes = infos = logs = warnings = false_positives = 0; holes_2 = infos_2 = warnings_2 = 0; From 7b76bd9472ca7ec6ec900881cfc52bce850221c0 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 12 Feb 2024 21:33:25 +0200 Subject: [PATCH 29/43] Clang format --- src/gmp_base.h | 12 ++++++------ src/gmp_get.h | 37 ++++++++++++++++++------------------- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/src/gmp_base.h b/src/gmp_base.h index 4141dc5278..8e0d0caf3a 100644 --- a/src/gmp_base.h +++ b/src/gmp_base.h @@ -112,12 +112,12 @@ internal_error_send_to_client (GError **); * * @param[in] msg The message, a string. */ -#define SEND_TO_CLIENT_OR_FAIL(msg) \ - do \ - { \ - if (send_to_client (gmp_parser, error, msg)) \ - return; \ - } \ +#define SEND_TO_CLIENT_OR_FAIL(msg) \ + do \ + { \ + if (send_to_client (gmp_parser, error, msg)) \ + return; \ + } \ while (0) void diff --git a/src/gmp_get.h b/src/gmp_get.h index 1b19a24bf7..df65bab511 100644 --- a/src/gmp_get.h +++ b/src/gmp_get.h @@ -69,17 +69,17 @@ send_get_start (gmp_parser_t *, GError **, const char *); * @param[in] type Type of resource. * @param[in] get GET data. */ -#define SEND_GET_START(type) \ - do \ - { \ - if (send_get_start (gmp_parser, error, type)) \ - return; \ - } \ +#define SEND_GET_START(type) \ + do \ + { \ + if (send_get_start (gmp_parser, error, type)) \ + return; \ + } \ while (0) int -send_get_common (const char *, get_data_t *, iterator_t *, - gmp_parser_t *, GError **, int, int); +send_get_common (const char *, get_data_t *, iterator_t *, gmp_parser_t *, + GError **, int, int); /** * @brief Send common part of GET response to client, returning on fail. @@ -92,8 +92,7 @@ send_get_common (const char *, get_data_t *, iterator_t *, do \ { \ if (send_get_common ( \ - G_STRINGIFY (type), get, iterator, \ - gmp_parser, error, \ + G_STRINGIFY (type), get, iterator, gmp_parser, error, \ (get)->trash \ ? trash_##type##_writable (get_iterator_resource (iterator)) \ : type##_writable (get_iterator_resource (iterator)), \ @@ -116,8 +115,8 @@ send_get_common (const char *, get_data_t *, iterator_t *, #define SEND_GET_COMMON_NO_TRASH(type, get, iterator) \ do \ { \ - if (send_get_common (G_STRINGIFY (type), get, iterator, \ - gmp_parser, error, \ + if (send_get_common (G_STRINGIFY (type), get, iterator, gmp_parser, \ + error, \ type##_writable (get_iterator_resource (iterator)), \ type##_in_use (get_iterator_resource (iterator)))) \ return; \ @@ -141,13 +140,13 @@ send_get_end_no_counts (const char *, get_data_t *, gmp_parser_t *, GError **); * @param[in] type Type of resource. * @param[in] get GET data. */ -#define SEND_GET_END(type, get, count, filtered) \ - do \ - { \ - if (send_get_end (type, get, count, filtered, \ - resource_count (type, get), gmp_parser, error)) \ - return; \ - } \ +#define SEND_GET_END(type, get, count, filtered) \ + do \ + { \ + if (send_get_end (type, get, count, filtered, \ + resource_count (type, get), gmp_parser, error)) \ + return; \ + } \ while (0) #endif /* not _GVMD_GMP_GET_H */ From d1e1689f26ed318276946b1723b2dede4ec87a06 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 13 Feb 2024 15:52:21 +0200 Subject: [PATCH 30/43] Move task end tag back to get_tasks_send_task --- src/gmp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 5c18794587..c53f202746 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17557,8 +17557,7 @@ get_tasks_send_prefs (gmp_parser_t *gmp_parser, GError **error, task_t index) "auto_delete") PREF("Auto Delete Reports Data", "auto_delete_data") - "" - "", + "", max_checks ? max_checks : "4", max_hosts ? max_hosts : "20", in_assets ? in_assets : "yes", @@ -17911,6 +17910,9 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, if (get_tasks_send_prefs (gmp_parser, error, index)) goto cleanup_exit; + if (send_to_client (gmp_parser, error, "")) + goto cleanup_exit; + return 0; cleanup_exit: From 7e34dcaf5d29b21e5ec4ae41bc5ca7f6e26a9643 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 13 Feb 2024 17:41:32 +0200 Subject: [PATCH 31/43] Use new function task_info to save queries in get_tasks_send_task --- src/gmp.c | 28 ++++++++++++++------------- src/manage.h | 16 ++++++++++++++++ src/manage_sql.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 13 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index c53f202746..3ae434cf91 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17599,8 +17599,9 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, task_t index; target_t target; scanner_t scanner; + task_info_t *info; const char *first_report_id, *last_report_id; - char *config_name, *config_uuid, *task_target_uuid, *task_target_name; + char *task_target_uuid, *task_target_name; char *task_scanner_uuid, *task_scanner_name; gchar *progress_xml, *task_schedule_xml, *config_name_escaped; gchar *task_target_name_escaped, *task_scanner_name_escaped; @@ -17714,8 +17715,10 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, g_free (second_last_report_id); - config_name = task_config_name (index); - config_uuid = task_config_uuid (index); + info = task_info (index); + if (info == NULL) + goto cleanup_exit; + target_available = 1; if (target_in_trash) { @@ -17743,12 +17746,12 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, } config_available = 1; - if (task_config_in_trash (index)) - config_available = trash_config_readable_uuid (config_uuid); - else if (config_uuid) + if (info->config_in_trash) + config_available = trash_config_readable_uuid (info->config_uuid); + else if (info->config_uuid) { config_t found; - if (find_config_with_permission (config_uuid, + if (find_config_with_permission (info->config_uuid, &found, "get_configs")) g_error ("%s: GET_TASKS: error finding task config," @@ -17790,8 +17793,8 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, } config_name_escaped - = config_name - ? g_markup_escape_text (config_name, -1) + = info->config_name + ? g_markup_escape_text (info->config_name, -1) : NULL; task_target_name_escaped = task_target_name @@ -17836,9 +17839,9 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, ? 0 : task_alterable (index), task_iterator_usage_type (tasks), - config_uuid ?: "", + info->config_uuid ?: "", config_name_escaped ?: "", - task_config_in_trash (index), + info->config_in_trash, config_available ? "" : "", task_target_uuid ?: "", task_target_name_escaped ?: "", @@ -17864,8 +17867,7 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, task_schedule_xml, current_report, last_report); - g_free (config_name); - g_free (config_uuid); + task_info_free (info); g_free (config_name_escaped); free (task_target_name); free (task_target_uuid); diff --git a/src/manage.h b/src/manage.h index 14fa77fa95..c20de1dbb6 100644 --- a/src/manage.h +++ b/src/manage.h @@ -360,6 +360,16 @@ typedef resource_t scanner_t; typedef resource_t setting_t; typedef resource_t user_t; +/** + * @brief Key info about a task. + */ +typedef struct +{ + int config_in_trash; ///< Whether config is in trash; + gchar *config_name; ///< Config name. + gchar *config_uuid; ///< Config UUID. +} task_info_t; + /* GMP GET support. * @@ -763,6 +773,12 @@ task_iterator_usage_type (iterator_t *); int task_uuid (task_t, char **); +task_info_t * +task_info (task_t); + +void +task_info_free (task_info_t *); + int task_in_trash (task_t); diff --git a/src/manage_sql.c b/src/manage_sql.c index 464ea3859d..d1dff0b213 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -17796,6 +17796,56 @@ task_uuid (task_t task, char ** id) return 0; } +/** + * @brief Return key info about a task, for GET_TASKS. + * + * @param[in] task Task. + * + * @return Info, or NULL on error. + */ +task_info_t * +task_info (task_t task) +{ + task_info_t *info; + + info = g_malloc0 (sizeof (task_info_t)); + + info->config_in_trash = task_config_in_trash (task); + + if (info->config_in_trash) + info->config_name = sql_string ("SELECT name FROM configs_trash WHERE id =" + " (SELECT config FROM tasks WHERE id = %llu);", + task); + info->config_name = sql_string ("SELECT name FROM configs WHERE id =" + " (SELECT config FROM tasks WHERE id = %llu);", + task); + + if (info->config_in_trash) + info->config_uuid = sql_string ("SELECT uuid FROM configs_trash WHERE id =" + " (SELECT config FROM tasks WHERE id = %llu);", + task); + info->config_uuid = sql_string ("SELECT uuid FROM configs WHERE id =" + " (SELECT config FROM tasks WHERE id = %llu);", + task); + + return info; +} + +/** + * @brief Free task info. + * + * @param[in] info Info. + */ +void +task_info_free (task_info_t *info) +{ + if (info == NULL) + return; + + g_free (info->config_name); + g_free (info->config_uuid); +} + /** * @brief Return whether a task is in the trashcan. * From 483b9239cdcbac74fe2463f13e70c2332ed831b2 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 13 Feb 2024 17:45:52 +0200 Subject: [PATCH 32/43] Fix stray commas --- src/gmp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 3ae434cf91..83dfbe0325 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17232,8 +17232,8 @@ get_current_report_xml (report_t running_report) " of report, aborting", __func__); - scan_start = scan_start_time_uuid (current_report_id), - scan_end = scan_end_time_uuid (current_report_id), + scan_start = scan_start_time_uuid (current_report_id); + scan_end = scan_end_time_uuid (current_report_id); current_report = g_strdup_printf ("" "" From 99775483fb92c74168af4dfe908da4e7c8f22ff3 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 19 Feb 2024 15:07:03 +0200 Subject: [PATCH 33/43] Move config_in_trash SQL into task_info --- src/manage_sql.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index d1dff0b213..02512ad840 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -17810,7 +17810,9 @@ task_info (task_t task) info = g_malloc0 (sizeof (task_info_t)); - info->config_in_trash = task_config_in_trash (task); + info->config_in_trash = sql_int ("SELECT config_location = " G_STRINGIFY (LOCATION_TRASH) + " FROM tasks WHERE id = %llu;", + task); if (info->config_in_trash) info->config_name = sql_string ("SELECT name FROM configs_trash WHERE id =" From 88b02d4579064ba1cb9a1d2aee563ab91bc5a836 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 19 Feb 2024 16:32:48 +0200 Subject: [PATCH 34/43] Fix missing else --- src/manage_sql.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index 02512ad840..76973ff59d 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -17818,17 +17818,19 @@ task_info (task_t task) info->config_name = sql_string ("SELECT name FROM configs_trash WHERE id =" " (SELECT config FROM tasks WHERE id = %llu);", task); - info->config_name = sql_string ("SELECT name FROM configs WHERE id =" - " (SELECT config FROM tasks WHERE id = %llu);", - task); + else + info->config_name = sql_string ("SELECT name FROM configs WHERE id =" + " (SELECT config FROM tasks WHERE id = %llu);", + task); if (info->config_in_trash) info->config_uuid = sql_string ("SELECT uuid FROM configs_trash WHERE id =" " (SELECT config FROM tasks WHERE id = %llu);", task); - info->config_uuid = sql_string ("SELECT uuid FROM configs WHERE id =" - " (SELECT config FROM tasks WHERE id = %llu);", - task); + else + info->config_uuid = sql_string ("SELECT uuid FROM configs WHERE id =" + " (SELECT config FROM tasks WHERE id = %llu);", + task); return info; } From 9c02e8968f960afaff8cca83026f1062ad6a6d05 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 19 Feb 2024 16:37:50 +0200 Subject: [PATCH 35/43] Use WITH for config_in_trash --- src/manage_sql.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index 76973ff59d..c1fb08ceb6 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -17806,13 +17806,23 @@ task_uuid (task_t task, char ** id) task_info_t * task_info (task_t task) { + iterator_t rows; task_info_t *info; info = g_malloc0 (sizeof (task_info_t)); - info->config_in_trash = sql_int ("SELECT config_location = " G_STRINGIFY (LOCATION_TRASH) - " FROM tasks WHERE id = %llu;", - task); + init_iterator (&rows, + "WITH tmp AS" + " (SELECT config_location = " G_STRINGIFY (LOCATION_TRASH) + " AS config_in_trash" + " FROM tasks WHERE id = %llu)" + " SELECT config_in_trash FROM tmp;", + task); + if (next (&rows)) + { + info->config_in_trash = iterator_int (&rows, 0); + } + cleanup_iterator (&rows); if (info->config_in_trash) info->config_name = sql_string ("SELECT name FROM configs_trash WHERE id =" From c808fd9eeaa381c532d020a54a5f27318a2db562 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 19 Feb 2024 17:46:55 +0200 Subject: [PATCH 36/43] Combine task_info SQL into single statement --- src/manage_sql.c | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index c1fb08ceb6..688f7f036f 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -17813,35 +17813,39 @@ task_info (task_t task) init_iterator (&rows, "WITH tmp AS" - " (SELECT config_location = " G_STRINGIFY (LOCATION_TRASH) + " (SELECT config," + " config_location = " G_STRINGIFY (LOCATION_TRASH) " AS config_in_trash" " FROM tasks WHERE id = %llu)" - " SELECT config_in_trash FROM tmp;", + " SELECT config_in_trash," + " (CASE WHEN config_in_trash" + " THEN (SELECT name FROM configs_trash" + " WHERE id = config)" + " ELSE (SELECT name FROM configs" + " WHERE id = config)" + " END)," + " (CASE WHEN config_in_trash" + " THEN (SELECT uuid FROM configs_trash" + " WHERE id = config)" + " ELSE (SELECT uuid FROM configs" + " WHERE id = config)" + " END)" + " FROM tmp;", task); if (next (&rows)) { + const char *config_name, *config_uuid; + info->config_in_trash = iterator_int (&rows, 0); + + config_name = iterator_string (&rows, 1); + info->config_name = config_name ? g_strdup (config_name) : NULL; + + config_uuid = iterator_string (&rows, 2); + info->config_uuid = config_uuid ? g_strdup (config_uuid) : NULL; } cleanup_iterator (&rows); - if (info->config_in_trash) - info->config_name = sql_string ("SELECT name FROM configs_trash WHERE id =" - " (SELECT config FROM tasks WHERE id = %llu);", - task); - else - info->config_name = sql_string ("SELECT name FROM configs WHERE id =" - " (SELECT config FROM tasks WHERE id = %llu);", - task); - - if (info->config_in_trash) - info->config_uuid = sql_string ("SELECT uuid FROM configs_trash WHERE id =" - " (SELECT config FROM tasks WHERE id = %llu);", - task); - else - info->config_uuid = sql_string ("SELECT uuid FROM configs WHERE id =" - " (SELECT config FROM tasks WHERE id = %llu);", - task); - return info; } From 6f3f98a7b6a01b95e8c4b97e52b9dc67979cc2fe Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 19 Feb 2024 18:49:05 +0200 Subject: [PATCH 37/43] Move second_last_report_id into task_info --- src/gmp.c | 23 ++++++++++------------- src/manage.h | 1 + src/manage_sql.c | 15 +++++++++++++-- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 83dfbe0325..3d535e5811 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17605,7 +17605,7 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, char *task_scanner_uuid, *task_scanner_name; gchar *progress_xml, *task_schedule_xml, *config_name_escaped; gchar *task_target_name_escaped, *task_scanner_name_escaped; - gchar *last_report, *second_last_report_id, *current_report, *response; + gchar *last_report, *current_report, *response; report_t running_report; int target_in_trash, scanner_in_trash, task_scanner_type; int holes, infos, logs, warnings, holes_2, infos_2, warnings_2; @@ -17659,14 +17659,17 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, __func__); } - second_last_report_id = task_second_last_report_id (index); - if (second_last_report_id && (get_tasks_data->get.trash == 0)) + info = task_info (index); + if (info == NULL) + goto cleanup_exit; + + if (info->second_last_report_id && (get_tasks_data->get.trash == 0)) { /* If the first report is the second last report then skip * doing the count again. */ if (((first_report_id == NULL) - || (strcmp (second_last_report_id, first_report_id))) - && report_counts (second_last_report_id, + || (strcmp (info->second_last_report_id, first_report_id))) + && report_counts (info->second_last_report_id, &holes_2, &infos_2, &logs, &warnings_2, &false_positives, &severity_2, @@ -17684,10 +17687,10 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, /* If the last report is the first report or the second * last report, then reuse the counts from before. */ if ((first_report_id == NULL) - || (second_last_report_id == NULL) + || (info->second_last_report_id == NULL) || (strcmp (last_report_id, first_report_id) && strcmp (last_report_id, - second_last_report_id))) + info->second_last_report_id))) { if (report_counts (last_report_id, @@ -17713,12 +17716,6 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, else last_report = g_strdup (""); - g_free (second_last_report_id); - - info = task_info (index); - if (info == NULL) - goto cleanup_exit; - target_available = 1; if (target_in_trash) { diff --git a/src/manage.h b/src/manage.h index c20de1dbb6..dd418f8a10 100644 --- a/src/manage.h +++ b/src/manage.h @@ -368,6 +368,7 @@ typedef struct int config_in_trash; ///< Whether config is in trash; gchar *config_name; ///< Config name. gchar *config_uuid; ///< Config UUID. + gchar *second_last_report_id; ///< UUID of second last report. } task_info_t; diff --git a/src/manage_sql.c b/src/manage_sql.c index 688f7f036f..8dcc83827b 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -17814,9 +17814,17 @@ task_info (task_t task) init_iterator (&rows, "WITH tmp AS" " (SELECT config," + // " config_location = " G_STRINGIFY (LOCATION_TRASH) - " AS config_in_trash" + " AS config_in_trash," + // + " (SELECT uuid FROM reports" + " WHERE task = tasks.id" + " AND scan_run_status = %u" + " ORDER BY creation_time DESC LIMIT 1 OFFSET 1)" + " AS second_last_report_id" " FROM tasks WHERE id = %llu)" + // " SELECT config_in_trash," " (CASE WHEN config_in_trash" " THEN (SELECT name FROM configs_trash" @@ -17829,8 +17837,10 @@ task_info (task_t task) " WHERE id = config)" " ELSE (SELECT uuid FROM configs" " WHERE id = config)" - " END)" + " END)," + " second_last_report_id" " FROM tmp;", + TASK_STATUS_DONE, task); if (next (&rows)) { @@ -17862,6 +17872,7 @@ task_info_free (task_info_t *info) g_free (info->config_name); g_free (info->config_uuid); + g_free (info->second_last_report_id); } /** From 3e5716b0685a6692b7be0931b09f626daa8689e6 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 19 Feb 2024 21:04:05 +0200 Subject: [PATCH 38/43] Move scanner_in_trash to task_info --- src/gmp.c | 13 +++++-------- src/manage.h | 3 ++- src/manage_sql.c | 8 ++++++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 3d535e5811..736270f03a 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17607,7 +17607,7 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, gchar *task_target_name_escaped, *task_scanner_name_escaped; gchar *last_report, *current_report, *response; report_t running_report; - int target_in_trash, scanner_in_trash, task_scanner_type; + int target_in_trash, task_scanner_type; int holes, infos, logs, warnings, holes_2, infos_2, warnings_2; int false_positives, target_available, config_available, scanner_available; double severity, severity_2; @@ -17659,7 +17659,8 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, __func__); } - info = task_info (index); + scanner = task_iterator_scanner (tasks); + info = task_info (index, scanner); if (info == NULL) goto cleanup_exit; @@ -17758,15 +17759,12 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, } scanner_available = 1; - scanner = task_iterator_scanner (tasks); if (scanner) { - scanner_in_trash = task_scanner_in_trash (index); - task_scanner_uuid = scanner_uuid (scanner); task_scanner_name = scanner_name (scanner); task_scanner_type = scanner_type (scanner); - if (scanner_in_trash) + if (info->scanner_in_trash) scanner_available = trash_scanner_readable (scanner); else { @@ -17786,7 +17784,6 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, task_scanner_uuid = g_strdup (""); task_scanner_name = g_strdup (""); task_scanner_type = 0; - scanner_in_trash = 0; } config_name_escaped @@ -17850,7 +17847,7 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, task_scanner_uuid, task_scanner_name_escaped, task_scanner_type, - scanner_in_trash, + info->scanner_in_trash, scanner_available ? "" : "", task_iterator_run_status_name (tasks), progress_xml, diff --git a/src/manage.h b/src/manage.h index dd418f8a10..670424df2e 100644 --- a/src/manage.h +++ b/src/manage.h @@ -366,6 +366,7 @@ typedef resource_t user_t; typedef struct { int config_in_trash; ///< Whether config is in trash; + int scanner_in_trash; ///< Whether scanner is in trash; gchar *config_name; ///< Config name. gchar *config_uuid; ///< Config UUID. gchar *second_last_report_id; ///< UUID of second last report. @@ -775,7 +776,7 @@ int task_uuid (task_t, char **); task_info_t * -task_info (task_t); +task_info (task_t, scanner_t); void task_info_free (task_info_t *); diff --git a/src/manage_sql.c b/src/manage_sql.c index 8dcc83827b..a651a96aab 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -17799,12 +17799,13 @@ task_uuid (task_t task, char ** id) /** * @brief Return key info about a task, for GET_TASKS. * - * @param[in] task Task. + * @param[in] task Task. + * @param[in] scanner Task's scanner. * * @return Info, or NULL on error. */ task_info_t * -task_info (task_t task) +task_info (task_t task, scanner_t scanner) { iterator_t rows; task_info_t *info; @@ -17853,6 +17854,9 @@ task_info (task_t task) config_uuid = iterator_string (&rows, 2); info->config_uuid = config_uuid ? g_strdup (config_uuid) : NULL; + + if (scanner) + info->scanner_in_trash = task_scanner_in_trash (task); } cleanup_iterator (&rows); From 7b6e8c7bdc0cb3d8280a5ca2c27f7ecda6823097 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 19 Feb 2024 21:16:55 +0200 Subject: [PATCH 39/43] Move other scanner queries to task_info --- src/gmp.c | 27 +++++++-------------------- src/manage.h | 3 +++ src/manage_sql.c | 12 +++++++++++- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 736270f03a..a48569136c 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -17602,12 +17602,11 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, task_info_t *info; const char *first_report_id, *last_report_id; char *task_target_uuid, *task_target_name; - char *task_scanner_uuid, *task_scanner_name; gchar *progress_xml, *task_schedule_xml, *config_name_escaped; gchar *task_target_name_escaped, *task_scanner_name_escaped; gchar *last_report, *current_report, *response; report_t running_report; - int target_in_trash, task_scanner_type; + int target_in_trash; int holes, infos, logs, warnings, holes_2, infos_2, warnings_2; int false_positives, target_available, config_available, scanner_available; double severity, severity_2; @@ -17761,9 +17760,6 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, scanner_available = 1; if (scanner) { - task_scanner_uuid = scanner_uuid (scanner); - task_scanner_name = scanner_name (scanner); - task_scanner_type = scanner_type (scanner); if (info->scanner_in_trash) scanner_available = trash_scanner_readable (scanner); else @@ -17771,20 +17767,13 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, scanner_t found; if (find_scanner_with_permission - (task_scanner_uuid, &found, "get_scanners")) + (info->scanner_uuid, &found, "get_scanners")) g_error ("%s: GET_TASKS: error finding" " task scanner, aborting", __func__); scanner_available = (found > 0); } } - else - { - /* Container tasks have no associated scanner. */ - task_scanner_uuid = g_strdup (""); - task_scanner_name = g_strdup (""); - task_scanner_type = 0; - } config_name_escaped = info->config_name @@ -17795,8 +17784,8 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, ? g_markup_escape_text (task_target_name, -1) : NULL; task_scanner_name_escaped - = task_scanner_name - ? g_markup_escape_text (task_scanner_name, -1) + = info->scanner_name + ? g_markup_escape_text (info->scanner_name, -1) : NULL; task_schedule_xml = get_task_schedule_xml (index); @@ -17844,9 +17833,9 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, task_iterator_hosts_ordering (tasks) ? task_iterator_hosts_ordering (tasks) : "", - task_scanner_uuid, - task_scanner_name_escaped, - task_scanner_type, + info->scanner_uuid ?: "", + task_scanner_name_escaped ?: "", + info->scanner_type, info->scanner_in_trash, scanner_available ? "" : "", task_iterator_run_status_name (tasks), @@ -17870,8 +17859,6 @@ get_tasks_send_task (gmp_parser_t *gmp_parser, g_free (current_report); g_free (last_report); g_free (task_schedule_xml); - g_free (task_scanner_uuid); - g_free (task_scanner_name); g_free (task_scanner_name_escaped); if (send_to_client (gmp_parser, error, response)) { diff --git a/src/manage.h b/src/manage.h index 670424df2e..b9c4fba009 100644 --- a/src/manage.h +++ b/src/manage.h @@ -369,6 +369,9 @@ typedef struct int scanner_in_trash; ///< Whether scanner is in trash; gchar *config_name; ///< Config name. gchar *config_uuid; ///< Config UUID. + gchar *scanner_name; ///< Scanner name. + gchar *scanner_uuid; ///< Scanner UUID. + int scanner_type; ///< Scanner type. gchar *second_last_report_id; ///< UUID of second last report. } task_info_t; diff --git a/src/manage_sql.c b/src/manage_sql.c index a651a96aab..2f33ee64f5 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -17856,7 +17856,17 @@ task_info (task_t task, scanner_t scanner) info->config_uuid = config_uuid ? g_strdup (config_uuid) : NULL; if (scanner) - info->scanner_in_trash = task_scanner_in_trash (task); + { + info->scanner_in_trash = task_scanner_in_trash (task); + info->scanner_uuid = scanner_uuid (scanner); + info->scanner_name = scanner_name (scanner); + info->scanner_type = scanner_type (scanner); + } + else + { + /* Container tasks have no associated scanner. */ + } + } cleanup_iterator (&rows); From 225b279e9e49857b6709ac1f28d13dd949a1abae Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Mon, 19 Feb 2024 21:22:10 +0200 Subject: [PATCH 40/43] Fix: check if trash when getting scanner info in GET_TASKS --- src/manage.h | 3 +++ src/manage_sql.c | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/manage.h b/src/manage.h index b9c4fba009..9c66f2038a 100644 --- a/src/manage.h +++ b/src/manage.h @@ -2777,6 +2777,9 @@ trash_scanner_name (scanner_t); char * trash_scanner_uuid (scanner_t); +int +trash_scanner_type (scanner_t); + int osp_get_version_from_iterator (iterator_t *, char **, char **, char **, char **, char **, char **); diff --git a/src/manage_sql.c b/src/manage_sql.c index 2f33ee64f5..7304424a24 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -17858,9 +17858,18 @@ task_info (task_t task, scanner_t scanner) if (scanner) { info->scanner_in_trash = task_scanner_in_trash (task); - info->scanner_uuid = scanner_uuid (scanner); - info->scanner_name = scanner_name (scanner); - info->scanner_type = scanner_type (scanner); + if (info->scanner_in_trash) + { + info->scanner_uuid = trash_scanner_uuid (scanner); + info->scanner_name = trash_scanner_name (scanner); + info->scanner_type = trash_scanner_type (scanner); + } + else + { + info->scanner_uuid = scanner_uuid (scanner); + info->scanner_name = scanner_name (scanner); + info->scanner_type = scanner_type (scanner); + } } else { @@ -42179,6 +42188,26 @@ trash_scanner_uuid (scanner_t scanner) scanner); } +/** + * @brief Return the type of a scanner in the trashcan. + * + * @param[in] scanner Scanner. + * + * @return Scanner type, -1 if not found; + */ +int +trash_scanner_type (scanner_t scanner) +{ + int type; + char *str; + str = sql_string ("SELECT type FROM scanners_trash WHERE id = %llu;", scanner); + if (!str) + return -1; + type = atoi (str); + g_free (str); + return type; +} + /** * @brief Count number of scanners. * From 14b1da6832be9046ad7ad4518b20c526a7f69b74 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 20 Feb 2024 14:46:43 +0200 Subject: [PATCH 41/43] Call scanner SQL directly in task_info --- src/manage_sql.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index 7304424a24..1d7bba537d 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -17857,18 +17857,39 @@ task_info (task_t task, scanner_t scanner) if (scanner) { - info->scanner_in_trash = task_scanner_in_trash (task); + info->scanner_in_trash = sql_int ("SELECT scanner_location = " G_STRINGIFY (LOCATION_TRASH) + " FROM tasks WHERE id = %llu;", task); if (info->scanner_in_trash) { - info->scanner_uuid = trash_scanner_uuid (scanner); - info->scanner_name = trash_scanner_name (scanner); - info->scanner_type = trash_scanner_type (scanner); + char *str; + + info->scanner_uuid = sql_string ("SELECT uuid FROM scanners_trash WHERE id = %llu;", + scanner); + info->scanner_name = sql_string ("SELECT name FROM scanners_trash WHERE id = %llu;", + scanner); + + str = sql_string ("SELECT type FROM scanners_trash WHERE id = %llu;", scanner); + if (str) + info->scanner_type = atoi (str); + else + info->scanner_type = -1; + g_free (str); } else { - info->scanner_uuid = scanner_uuid (scanner); - info->scanner_name = scanner_name (scanner); - info->scanner_type = scanner_type (scanner); + char *str; + + info->scanner_uuid = sql_string ("SELECT uuid FROM scanners WHERE id = %llu;", + scanner); + info->scanner_name = sql_string ("SELECT name FROM scanners WHERE id = %llu;", + scanner); + + str = sql_string ("SELECT type FROM scanners WHERE id = %llu;", scanner); + if (str) + info->scanner_type = atoi (str); + else + info->scanner_type = -1; + g_free (str); } } else From a5f76b5ebb65100c8621947a7dc6026c0f2af5ab Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 20 Feb 2024 17:46:27 +0200 Subject: [PATCH 42/43] Move scanner SQL into main statement in task_info --- src/manage_sql.c | 83 +++++++++++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 32 deletions(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index 1d7bba537d..8e90ab4726 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -17823,23 +17823,59 @@ task_info (task_t task, scanner_t scanner) " WHERE task = tasks.id" " AND scan_run_status = %u" " ORDER BY creation_time DESC LIMIT 1 OFFSET 1)" - " AS second_last_report_id" + " AS second_last_report_id," + // + " scanner," + " scanner_location = " G_STRINGIFY (LOCATION_TRASH) + " AS scanner_in_trash" " FROM tasks WHERE id = %llu)" // " SELECT config_in_trash," + // 1 " (CASE WHEN config_in_trash" " THEN (SELECT name FROM configs_trash" " WHERE id = config)" " ELSE (SELECT name FROM configs" " WHERE id = config)" " END)," + // 2 " (CASE WHEN config_in_trash" " THEN (SELECT uuid FROM configs_trash" " WHERE id = config)" " ELSE (SELECT uuid FROM configs" " WHERE id = config)" " END)," - " second_last_report_id" + // 3 + " second_last_report_id," + // 4 + " scanner_in_trash," + // 5 + " (CASE WHEN scanner > 0 AND scanner_in_trash" + " THEN (SELECT name FROM scanners_trash" + " WHERE id = scanner)" + " WHEN scanner > 0" + " THEN (SELECT name FROM scanners" + " WHERE id = scanner)" + " ELSE NULL" + " END)," + // 6 + " (CASE WHEN scanner > 0 AND scanner_in_trash" + " THEN (SELECT uuid FROM scanners_trash" + " WHERE id = scanner)" + " WHEN scanner > 0" + " THEN (SELECT uuid FROM scanners" + " WHERE id = scanner)" + " ELSE NULL" + " END)," + // 7 + " (CASE WHEN scanner > 0 AND scanner_in_trash" + " THEN (SELECT type FROM scanners_trash" + " WHERE id = scanner)" + " WHEN scanner > 0" + " THEN (SELECT type FROM scanners" + " WHERE id = scanner)" + " ELSE NULL" + " END)" " FROM tmp;", TASK_STATUS_DONE, task); @@ -17857,40 +17893,21 @@ task_info (task_t task, scanner_t scanner) if (scanner) { - info->scanner_in_trash = sql_int ("SELECT scanner_location = " G_STRINGIFY (LOCATION_TRASH) - " FROM tasks WHERE id = %llu;", task); - if (info->scanner_in_trash) - { - char *str; + const char *scanner_name, *scanner_uuid, *str; - info->scanner_uuid = sql_string ("SELECT uuid FROM scanners_trash WHERE id = %llu;", - scanner); - info->scanner_name = sql_string ("SELECT name FROM scanners_trash WHERE id = %llu;", - scanner); + info->scanner_in_trash = iterator_int (&rows, 4); - str = sql_string ("SELECT type FROM scanners_trash WHERE id = %llu;", scanner); - if (str) - info->scanner_type = atoi (str); - else - info->scanner_type = -1; - g_free (str); - } - else - { - char *str; + scanner_name = iterator_string (&rows, 5); + info->scanner_name = scanner_name ? g_strdup (scanner_name) : NULL; - info->scanner_uuid = sql_string ("SELECT uuid FROM scanners WHERE id = %llu;", - scanner); - info->scanner_name = sql_string ("SELECT name FROM scanners WHERE id = %llu;", - scanner); + scanner_uuid = iterator_string (&rows, 6); + info->scanner_uuid = scanner_uuid ? g_strdup (scanner_uuid) : NULL; - str = sql_string ("SELECT type FROM scanners WHERE id = %llu;", scanner); - if (str) - info->scanner_type = atoi (str); - else - info->scanner_type = -1; - g_free (str); - } + str = iterator_string (&rows, 7); + if (str) + info->scanner_type = atoi (str); + else + info->scanner_type = -1; } else { @@ -17917,6 +17934,8 @@ task_info_free (task_info_t *info) g_free (info->config_name); g_free (info->config_uuid); g_free (info->second_last_report_id); + g_free (info->scanner_name); + g_free (info->scanner_uuid); } /** From 9f1322c1dc91677b68d04f35d6fc03ffa9fc3ddf Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 20 Feb 2024 17:55:17 +0200 Subject: [PATCH 43/43] Actually set second_last_report_id in task_info --- src/manage_sql.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/manage_sql.c b/src/manage_sql.c index 8e90ab4726..71f474d7e3 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -17881,7 +17881,7 @@ task_info (task_t task, scanner_t scanner) task); if (next (&rows)) { - const char *config_name, *config_uuid; + const char *config_name, *config_uuid, *report_id; info->config_in_trash = iterator_int (&rows, 0); @@ -17891,6 +17891,9 @@ task_info (task_t task, scanner_t scanner) config_uuid = iterator_string (&rows, 2); info->config_uuid = config_uuid ? g_strdup (config_uuid) : NULL; + report_id = iterator_string (&rows, 3); + info->second_last_report_id = report_id ? g_strdup (report_id) : NULL; + if (scanner) { const char *scanner_name, *scanner_uuid, *str;