From 88c2bffb35b16a54de4fd54af66fb66370c8f0e7 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 2 Jan 2024 19:39:30 +0200 Subject: [PATCH 01/30] 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 17f2335e5..009352ef4 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/30] 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 009352ef4..9599fbc6a 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/30] 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 0b3ce888c..4a5813826 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/30] 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 4a5813826..9df36c12a 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/30] 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 9df36c12a..318a36397 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/30] 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 9599fbc6a..217826c8e 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 77977728e..82595adaf 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 318a36397..5ae9078e0 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/30] 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 217826c8e..e9db68682 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/30] 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 e9db68682..a1f5b287a 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/30] 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 a1f5b287a..ac11af593 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/30] 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 ac11af593..2e95143d3 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/30] 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 2e95143d3..83cbce52b 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/30] 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 83cbce52b..8ffa34612 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/30] 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 8ffa34612..9d4c0cc47 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 e8a1f6276..5b04a3c04 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 f9d25c965..ee38bebb9 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/30] 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 9d4c0cc47..38c7eedda 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 5b04a3c04..3ccab8a76 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 ee38bebb9..d2fcc31c4 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/30] 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 38c7eedda..9eb085f15 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 3ccab8a76..6c4591040 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 d2fcc31c4..99c42e157 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 f7d550dd4..30f940228 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 f15a34a05..b4f8caecd 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 a89b2cd30..cdba72d9d 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 37ccdce1d..208a828d9 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 4e3358c06..89d31a035 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 fb2be18d6..8a4ca918b 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/30] 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 9eb085f15..c61248012 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 6c4591040..e762f68a4 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 99c42e157..4141dc527 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 3793a49d6..b1821a241 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 e1c724e04..1b19a24bf 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 82595adaf..14fa77fa9 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 5ae9078e0..464ea3859 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/30] 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 c61248012..cbe2c865f 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/30] 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 cbe2c865f..60f18e120 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/30] 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 60f18e120..8477fe87a 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/30] 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 8477fe87a..0eda71659 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/30] 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 0eda71659..4a136b6c5 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/30] 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 4a136b6c5..de5abbe24 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/30] 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 de5abbe24..c8b877399 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/30] 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 c8b877399..28198985b 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/30] 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 28198985b..d7f58bbf6 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/30] 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 d7f58bbf6..d20c52860 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/30] 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 d20c52860..55dff50a2 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/30] 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 55dff50a2..5c1879458 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/30] 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 4141dc527..8e0d0caf3 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 1b19a24bf..df65bab51 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/30] 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 5c1879458..c53f20274 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: