From df92297c8d504f119324a6ab1d0c3e2dd878d036 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 28 May 2024 21:43:20 +0200 Subject: [PATCH 1/5] Move body of buffer_notes_xml to new function buffer_note_xml --- src/gmp.c | 488 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 251 insertions(+), 237 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 94bd97dae..dade21a0e 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -8091,7 +8091,7 @@ utf8_substring (const gchar *str, glong start_pos, glong end_pos) } /** - * @brief Buffer XML for some notes. + * @brief Buffer XML for a single note. * * @param[in] buffer Buffer into which to buffer notes. * @param[in] notes Notes iterator. @@ -8100,278 +8100,292 @@ utf8_substring (const gchar *str, glong start_pos, glong end_pos) * @param[out] count Number of notes. */ static void -buffer_notes_xml (GString *buffer, iterator_t *notes, int include_notes_details, - int include_result, int *count) +buffer_note_xml (GString *buffer, iterator_t *notes, int include_notes_details, + int include_result, int *count) { - while (next (notes)) - { - int tag_count; - char *uuid_task, *uuid_result; + int tag_count; + char *uuid_task, *uuid_result; - tag_count = resource_tag_count ("note", - get_iterator_resource (notes), - 1); - - if (count) - (*count)++; + tag_count = resource_tag_count ("note", + get_iterator_resource (notes), + 1); - if (note_iterator_task (notes)) - task_uuid (note_iterator_task (notes), - &uuid_task); - else - uuid_task = NULL; + if (count) + (*count)++; - if (note_iterator_result (notes)) - result_uuid (note_iterator_result (notes), - &uuid_result); - else - uuid_result = NULL; + if (note_iterator_task (notes)) + task_uuid (note_iterator_task (notes), + &uuid_task); + else + uuid_task = NULL; - buffer_xml_append_printf (buffer, - "" - "", - get_iterator_uuid (notes)); + if (note_iterator_result (notes)) + result_uuid (note_iterator_result (notes), + &uuid_result); + else + uuid_result = NULL; - if (/* The user is the owner. */ - (current_credentials.username - && get_iterator_owner_name (notes) - && (strcmp (get_iterator_owner_name (notes), - current_credentials.username) - == 0)) - /* Or the user is effectively the owner. */ - || acl_user_has_super (current_credentials.uuid, - get_iterator_owner (notes))) + buffer_xml_append_printf (buffer, + "" + "", + get_iterator_uuid (notes)); + + if (/* The user is the owner. */ + (current_credentials.username + && get_iterator_owner_name (notes) + && (strcmp (get_iterator_owner_name (notes), + current_credentials.username) + == 0)) + /* Or the user is effectively the owner. */ + || acl_user_has_super (current_credentials.uuid, + get_iterator_owner (notes))) + buffer_xml_append_printf (buffer, + "Everything" + ""); + else + { + iterator_t perms; + get_data_t perms_get; + + memset (&perms_get, '\0', sizeof (perms_get)); + perms_get.filter = g_strdup_printf ("resource_uuid=%s" + " owner=any" + " permission=any", + get_iterator_uuid (notes)); + init_permission_iterator (&perms, &perms_get); + g_free (perms_get.filter); + while (next (&perms)) buffer_xml_append_printf (buffer, - "Everything" - ""); - else - { - iterator_t perms; - get_data_t perms_get; + "%s", + get_iterator_name (&perms)); + cleanup_iterator (&perms); - memset (&perms_get, '\0', sizeof (perms_get)); - perms_get.filter = g_strdup_printf ("resource_uuid=%s" - " owner=any" - " permission=any", - get_iterator_uuid (notes)); - init_permission_iterator (&perms, &perms_get); - g_free (perms_get.filter); - while (next (&perms)) - buffer_xml_append_printf (buffer, - "%s", - get_iterator_name (&perms)); - cleanup_iterator (&perms); - - buffer_xml_append_printf (buffer, ""); - } + buffer_xml_append_printf (buffer, ""); + } - if (include_notes_details == 0) - { - gchar *excerpt; - const char *text; + if (include_notes_details == 0) + { + gchar *excerpt; + const char *text; - text = note_iterator_text (notes); - excerpt = utf8_substring (text, 0, setting_excerpt_size_int ()); + text = note_iterator_text (notes); + excerpt = utf8_substring (text, 0, setting_excerpt_size_int ()); - /* This must match send_get_common. */ + /* This must match send_get_common. */ - buffer_xml_append_printf (buffer, - "%s" - "" - "%s" - "%s" - "", - get_iterator_owner_name (notes) - ? get_iterator_owner_name (notes) - : "", - note_iterator_nvt_oid (notes), - note_iterator_nvt_name (notes), - note_iterator_nvt_type (notes)); + buffer_xml_append_printf (buffer, + "%s" + "" + "%s" + "%s" + "", + get_iterator_owner_name (notes) + ? get_iterator_owner_name (notes) + : "", + note_iterator_nvt_oid (notes), + note_iterator_nvt_name (notes), + note_iterator_nvt_type (notes)); - buffer_xml_append_printf (buffer, - "%s", - iso_if_time (get_iterator_creation_time (notes))); + buffer_xml_append_printf (buffer, + "%s", + iso_if_time (get_iterator_creation_time (notes))); - buffer_xml_append_printf (buffer, - "%s", - iso_if_time (get_iterator_modification_time (notes))); + buffer_xml_append_printf (buffer, + "%s", + iso_if_time (get_iterator_modification_time (notes))); + buffer_xml_append_printf (buffer, + "1" + "0" + "%i" + "%s" + "%i", + note_iterator_active (notes), + strlen (excerpt) < strlen (text), + excerpt, + ((note_iterator_task (notes) + && (uuid_task == NULL)) + || (note_iterator_result (notes) + && (uuid_result == NULL)))); + + if (tag_count) + { buffer_xml_append_printf (buffer, - "1" - "0" - "%i" - "%s" - "%i", - note_iterator_active (notes), - strlen (excerpt) < strlen (text), - excerpt, - ((note_iterator_task (notes) - && (uuid_task == NULL)) - || (note_iterator_result (notes) - && (uuid_result == NULL)))); + "" + "%i" + "", + tag_count); + } - if (tag_count) - { - buffer_xml_append_printf (buffer, - "" - "%i" - "", - tag_count); - } + g_string_append (buffer, ""); - g_string_append (buffer, ""); + g_free (excerpt); + } + else + { + char *name_task; + int trash_task; + time_t end_time; + iterator_t tags; - g_free (excerpt); + if (uuid_task) + { + name_task = task_name (note_iterator_task (notes)); + trash_task = task_in_trash (note_iterator_task (notes)); } else { - char *name_task; - int trash_task; - time_t end_time; - iterator_t tags; - - if (uuid_task) - { - name_task = task_name (note_iterator_task (notes)); - trash_task = task_in_trash (note_iterator_task (notes)); - } - else - { - name_task = NULL; - trash_task = 0; - } + name_task = NULL; + trash_task = 0; + } - end_time = note_iterator_end_time (notes); + end_time = note_iterator_end_time (notes); - /* This must match send_get_common. */ + /* This must match send_get_common. */ - buffer_xml_append_printf - (buffer, - "%s" - "" - "%s" - "%s" - "", - get_iterator_owner_name (notes) - ? get_iterator_owner_name (notes) - : "", - note_iterator_nvt_oid (notes), - note_iterator_nvt_name (notes), - note_iterator_nvt_type (notes)); + buffer_xml_append_printf + (buffer, + "%s" + "" + "%s" + "%s" + "", + get_iterator_owner_name (notes) + ? get_iterator_owner_name (notes) + : "", + note_iterator_nvt_oid (notes), + note_iterator_nvt_name (notes), + note_iterator_nvt_type (notes)); - buffer_xml_append_printf - (buffer, - "%s", - iso_if_time (get_iterator_creation_time (notes))); + buffer_xml_append_printf + (buffer, + "%s", + iso_if_time (get_iterator_creation_time (notes))); - buffer_xml_append_printf - (buffer, - "%s", - iso_if_time (get_iterator_modification_time (notes))); + buffer_xml_append_printf + (buffer, + "%s", + iso_if_time (get_iterator_modification_time (notes))); - buffer_xml_append_printf - (buffer, - "1" - "0" - "%i" - "%s" - "%s" - "%s" - "%s" - "%s" - "%s%i" - "%i", - note_iterator_active (notes), - end_time > 1 ? iso_time (&end_time) : "", - note_iterator_text (notes), - note_iterator_hosts (notes) - ? note_iterator_hosts (notes) : "", - note_iterator_port (notes) - ? note_iterator_port (notes) : "", - note_iterator_severity (notes) - ? note_iterator_severity (notes) : "", - uuid_task ? uuid_task : "", - name_task ? name_task : "", - trash_task, - ((note_iterator_task (notes) && (uuid_task == NULL)) - || (note_iterator_result (notes) && (uuid_result == NULL)))); + buffer_xml_append_printf + (buffer, + "1" + "0" + "%i" + "%s" + "%s" + "%s" + "%s" + "%s" + "%s%i" + "%i", + note_iterator_active (notes), + end_time > 1 ? iso_time (&end_time) : "", + note_iterator_text (notes), + note_iterator_hosts (notes) + ? note_iterator_hosts (notes) : "", + note_iterator_port (notes) + ? note_iterator_port (notes) : "", + note_iterator_severity (notes) + ? note_iterator_severity (notes) : "", + uuid_task ? uuid_task : "", + name_task ? name_task : "", + trash_task, + ((note_iterator_task (notes) && (uuid_task == NULL)) + || (note_iterator_result (notes) && (uuid_result == NULL)))); + + free (name_task); + + if (include_result && uuid_result && note_iterator_result (notes)) + { + iterator_t results; + get_data_t *result_get; + result_get = report_results_get_data (1, 1, + 1, /* apply_overrides */ + 0 /* min_qod */); + result_get->id = g_strdup (uuid_result); + init_result_get_iterator (&results, result_get, + 0, /* No report restriction */ + NULL, /* No host restriction */ + NULL); /* No extra order SQL. */ + get_data_reset (result_get); + free (result_get); + + while (next (&results)) + buffer_results_xml (buffer, + &results, + 0, + 0, /* Notes. */ + 0, /* Note details. */ + 0, /* Overrides. */ + 0, /* Override details. */ + 0, /* Tags. */ + 0, /* Tag details. */ + 0, /* Result details. */ + NULL, + NULL, + 0, + -1, + 0, /* Lean. */ + 0); /* Delta fields. */ + cleanup_iterator (&results); + } + else + buffer_xml_append_printf (buffer, + "", + uuid_result ? uuid_result : ""); + if (tag_count) + { + buffer_xml_append_printf (buffer, + "" + "%i", + tag_count); - free (name_task); + init_resource_tag_iterator (&tags, "note", + get_iterator_resource (notes), + 1, NULL, 1); - if (include_result && uuid_result && note_iterator_result (notes)) + while (next (&tags)) { - iterator_t results; - get_data_t *result_get; - result_get = report_results_get_data (1, 1, - 1, /* apply_overrides */ - 0 /* min_qod */); - result_get->id = g_strdup (uuid_result); - init_result_get_iterator (&results, result_get, - 0, /* No report restriction */ - NULL, /* No host restriction */ - NULL); /* No extra order SQL. */ - get_data_reset (result_get); - free (result_get); - - while (next (&results)) - buffer_results_xml (buffer, - &results, - 0, - 0, /* Notes. */ - 0, /* Note details. */ - 0, /* Overrides. */ - 0, /* Override details. */ - 0, /* Tags. */ - 0, /* Tag details. */ - 0, /* Result details. */ - NULL, - NULL, - 0, - -1, - 0, /* Lean. */ - 0); /* Delta fields. */ - cleanup_iterator (&results); + buffer_xml_append_printf + (buffer, + "" + "%s" + "%s" + "%s" + "", + resource_tag_iterator_uuid (&tags), + resource_tag_iterator_name (&tags), + resource_tag_iterator_value (&tags), + resource_tag_iterator_comment (&tags)); } - else - buffer_xml_append_printf (buffer, - "", - uuid_result ? uuid_result : ""); - if (tag_count) - { - buffer_xml_append_printf (buffer, - "" - "%i", - tag_count); - - init_resource_tag_iterator (&tags, "note", - get_iterator_resource (notes), - 1, NULL, 1); - - while (next (&tags)) - { - buffer_xml_append_printf - (buffer, - "" - "%s" - "%s" - "%s" - "", - resource_tag_iterator_uuid (&tags), - resource_tag_iterator_name (&tags), - resource_tag_iterator_value (&tags), - resource_tag_iterator_comment (&tags)); - } - cleanup_iterator (&tags); + cleanup_iterator (&tags); - g_string_append (buffer, ""); - } - - g_string_append (buffer, ""); + g_string_append (buffer, ""); } - free (uuid_task); - free (uuid_result); + + g_string_append (buffer, ""); } + free (uuid_task); + free (uuid_result); +} + +/** + * @brief Buffer XML for some notes. + * + * @param[in] buffer Buffer into which to buffer notes. + * @param[in] notes Notes iterator. + * @param[in] include_notes_details Whether to include details of notes. + * @param[in] include_result Whether to include associated result. + * @param[out] count Number of notes. + */ +static void +buffer_notes_xml (GString *buffer, iterator_t *notes, int include_notes_details, + int include_result, int *count) +{ + while (next (notes)) + buffer_note_xml (buffer, notes, include_notes_details, include_result, count); } /** From 8e613360758f0b1ea425332160a3bc0a97f32376 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 28 May 2024 22:15:48 +0200 Subject: [PATCH 2/5] Remove const from get_next initializer arg Some of the GET iterator initializers modify their get_data_t arg, so this allows these initializers to be passed to get_next. In particular this allows init_note_iterator_all to be passed to get_next, for a fix to handle_get_notes. Note that init_note_iterator_all itself does not modify its get_data_t arg, but init_note_iterator_all is passed to select_resource_iterator which also accepts initializers that do modify their get_data_t args. As a result drop the const from any initializer passed to get_next. --- src/gmp_get.c | 2 +- src/gmp_get.h | 2 +- src/manage.h | 26 +++++++++++++------------- src/manage_configs.h | 2 +- src/manage_port_lists.h | 2 +- src/manage_report_configs.h | 2 +- src/manage_report_formats.h | 2 +- src/manage_sql.c | 26 +++++++++++++------------- src/manage_sql_configs.c | 2 +- src/manage_sql_port_lists.c | 2 +- src/manage_sql_report_configs.c | 2 +- src/manage_sql_report_formats.c | 2 +- src/manage_sql_tickets.c | 2 +- src/manage_sql_tls_certificates.c | 2 +- src/manage_tickets.h | 2 +- src/manage_tls_certificates.h | 2 +- 16 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/gmp_get.c b/src/gmp_get.c index 3793a49d6..3cd3d5bc2 100644 --- a/src/gmp_get.c +++ b/src/gmp_get.c @@ -225,7 +225,7 @@ init_get (gchar *command, get_data_t * get, const gchar *setting_name, */ int get_next (iterator_t *resources, get_data_t *get, int *first, int *count, - int (*init) (iterator_t*, const get_data_t *)) + int (*init) (iterator_t*, get_data_t *)) { if (next (resources) == FALSE) { diff --git a/src/gmp_get.h b/src/gmp_get.h index 428a8b344..f6001736b 100644 --- a/src/gmp_get.h +++ b/src/gmp_get.h @@ -57,7 +57,7 @@ init_get (gchar *, get_data_t *, const gchar *, int *); int get_next (iterator_t *, get_data_t *, int *, int *, - int (*) (iterator_t *, const get_data_t *)); + int (*) (iterator_t *, get_data_t *)); int send_get_start (const char *, int (*) (const char *, void *), void *); diff --git a/src/manage.h b/src/manage.h index 74ec69c88..a272cb20d 100644 --- a/src/manage.h +++ b/src/manage.h @@ -630,7 +630,7 @@ int alert_count (const get_data_t *); int -init_alert_iterator (iterator_t*, const get_data_t*); +init_alert_iterator (iterator_t*, get_data_t*); int alert_iterator_event (iterator_t*); @@ -730,7 +730,7 @@ unsigned int task_count (const get_data_t *); int -init_task_iterator (iterator_t*, const get_data_t *); +init_task_iterator (iterator_t*, get_data_t *); task_status_t task_iterator_run_status (iterator_t*); @@ -1743,7 +1743,7 @@ void init_target_iterator_one (iterator_t*, target_t); int -init_target_iterator (iterator_t*, const get_data_t *); +init_target_iterator (iterator_t*, get_data_t *); const char* target_iterator_hosts (iterator_t*); @@ -2212,7 +2212,7 @@ void init_credential_iterator_one (iterator_t*, credential_t); int -init_credential_iterator (iterator_t*, const get_data_t *); +init_credential_iterator (iterator_t*, get_data_t *); const char* credential_iterator_login (iterator_t*); @@ -2730,7 +2730,7 @@ char * openvas_default_scanner_host (); int -init_scanner_iterator (iterator_t*, const get_data_t *); +init_scanner_iterator (iterator_t*, get_data_t *); const char* scanner_iterator_host (iterator_t*); @@ -2915,7 +2915,7 @@ int schedule_info (schedule_t, int, gchar **, gchar **); int -init_schedule_iterator (iterator_t*, const get_data_t *); +init_schedule_iterator (iterator_t*, get_data_t *); const char* schedule_iterator_timezone (iterator_t *); @@ -2967,7 +2967,7 @@ set_schedule_timeout (int); /* Groups. */ int -init_group_iterator (iterator_t *, const get_data_t *); +init_group_iterator (iterator_t *, get_data_t *); int copy_group (const char *, const char *, const char *, group_t *); @@ -3034,7 +3034,7 @@ int permission_count (const get_data_t *); int -init_permission_iterator (iterator_t*, const get_data_t *); +init_permission_iterator (iterator_t*, get_data_t *); const char* permission_iterator_resource_type (iterator_t*); @@ -3091,7 +3091,7 @@ int manage_get_roles (GSList *, const db_conn_info_t *, int); int -init_role_iterator (iterator_t *, const get_data_t *); +init_role_iterator (iterator_t *, get_data_t *); int copy_role (const char *, const char *, const char *, role_t *); @@ -3248,7 +3248,7 @@ int filter_count (const get_data_t*); int -init_filter_iterator (iterator_t*, const get_data_t*); +init_filter_iterator (iterator_t*, get_data_t*); const char* filter_iterator_type (iterator_t*); @@ -3546,7 +3546,7 @@ gchar * keyfile_to_auth_conf_settings_xml (const gchar *); int -init_user_iterator (iterator_t*, const get_data_t*); +init_user_iterator (iterator_t*, get_data_t*); const char* user_iterator_role (iterator_t*); @@ -3692,7 +3692,7 @@ modify_tag (const char *, const char *, const char *, const char *, gchar **); int -init_tag_iterator (iterator_t*, const get_data_t*); +init_tag_iterator (iterator_t*, get_data_t*); int tag_count (const get_data_t *get); @@ -3725,7 +3725,7 @@ int tag_resource_iterator_readable (iterator_t*); int -init_tag_name_iterator (iterator_t*, const get_data_t*); +init_tag_name_iterator (iterator_t*, get_data_t*); const char* tag_name_iterator_name (iterator_t*); diff --git a/src/manage_configs.h b/src/manage_configs.h index a97f515ad..7c4699a8a 100644 --- a/src/manage_configs.h +++ b/src/manage_configs.h @@ -69,7 +69,7 @@ void init_user_config_iterator (iterator_t*, config_t, int, int, const char*); int -init_config_iterator (iterator_t*, const get_data_t*); +init_config_iterator (iterator_t*, get_data_t*); const char* config_iterator_nvt_selector (iterator_t*); diff --git a/src/manage_port_lists.h b/src/manage_port_lists.h index 5769f43ee..ce08e6196 100644 --- a/src/manage_port_lists.h +++ b/src/manage_port_lists.h @@ -62,7 +62,7 @@ int port_list_count (const get_data_t *); int -init_port_list_iterator (iterator_t *, const get_data_t *); +init_port_list_iterator (iterator_t *, get_data_t *); int port_list_iterator_count_all (iterator_t *); diff --git a/src/manage_report_configs.h b/src/manage_report_configs.h index 43944f8f1..9ab5bd874 100644 --- a/src/manage_report_configs.h +++ b/src/manage_report_configs.h @@ -89,7 +89,7 @@ report_config_count (const get_data_t *); int -init_report_config_iterator (iterator_t*, const get_data_t *); +init_report_config_iterator (iterator_t*, get_data_t *); const char* report_config_iterator_report_format_id (iterator_t *); diff --git a/src/manage_report_formats.h b/src/manage_report_formats.h index 990f9436f..2df307d35 100644 --- a/src/manage_report_formats.h +++ b/src/manage_report_formats.h @@ -111,7 +111,7 @@ int report_format_count (const get_data_t *); int -init_report_format_iterator (iterator_t*, const get_data_t *); +init_report_format_iterator (iterator_t*, get_data_t *); const char* report_format_iterator_extension (iterator_t *); diff --git a/src/manage_sql.c b/src/manage_sql.c index e5b1b67d3..1efbe7dc3 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -8505,7 +8505,7 @@ trash_alert_writable (alert_t alert) * -1 error. */ int -init_alert_iterator (iterator_t* iterator, const get_data_t *get) +init_alert_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = ALERT_ITERATOR_FILTER_COLUMNS; static column_t columns[] = ALERT_ITERATOR_COLUMNS; @@ -15366,7 +15366,7 @@ init_user_task_iterator (iterator_t* iterator, int trash, int ignore_severity) * -1 error. */ int -init_task_iterator (iterator_t* iterator, const get_data_t *get) +init_task_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = TASK_ITERATOR_FILTER_COLUMNS; static column_t columns[] = TASK_ITERATOR_COLUMNS; @@ -34214,7 +34214,7 @@ init_target_iterator_one (iterator_t* iterator, target_t target) * -1 error. */ int -init_target_iterator (iterator_t* iterator, const get_data_t *get) +init_target_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = TARGET_ITERATOR_FILTER_COLUMNS; static column_t columns[] = TARGET_ITERATOR_COLUMNS; @@ -37559,7 +37559,7 @@ init_credential_iterator_one (iterator_t* iterator, * filter (filt_id), -1 error. */ int -init_credential_iterator (iterator_t* iterator, const get_data_t *get) +init_credential_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = CREDENTIAL_ITERATOR_FILTER_COLUMNS; static column_t columns[] = CREDENTIAL_ITERATOR_COLUMNS; @@ -41675,7 +41675,7 @@ delete_scanner (const char *scanner_id, int ultimate) * @return 0 success, 1 failed to find scanner, 2 failed to find filter, -1 error. */ int -init_scanner_iterator (iterator_t* iterator, const get_data_t *get) +init_scanner_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = SCANNER_ITERATOR_FILTER_COLUMNS; static column_t columns[] = SCANNER_ITERATOR_COLUMNS; @@ -43157,7 +43157,7 @@ schedule_count (const get_data_t *get) * filter (filt_id), -1 error. */ int -init_schedule_iterator (iterator_t* iterator, const get_data_t *get) +init_schedule_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = SCHEDULE_ITERATOR_FILTER_COLUMNS; static column_t columns[] = SCHEDULE_ITERATOR_COLUMNS; @@ -44273,7 +44273,7 @@ group_count (const get_data_t *get) * -1 error. */ int -init_group_iterator (iterator_t* iterator, const get_data_t *get) +init_group_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = GROUP_ITERATOR_FILTER_COLUMNS; static column_t columns[] = GROUP_ITERATOR_COLUMNS; @@ -45521,7 +45521,7 @@ permission_count (const get_data_t *get) * -1 error. */ int -init_permission_iterator (iterator_t* iterator, const get_data_t *get) +init_permission_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = PERMISSION_ITERATOR_FILTER_COLUMNS; static column_t columns[] = PERMISSION_ITERATOR_COLUMNS; @@ -47141,7 +47141,7 @@ role_count (const get_data_t *get) * -1 error. */ int -init_role_iterator (iterator_t* iterator, const get_data_t *get) +init_role_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = ROLE_ITERATOR_FILTER_COLUMNS; static column_t columns[] = ROLE_ITERATOR_COLUMNS; @@ -47820,7 +47820,7 @@ filter_count (const get_data_t *get) * -1 error. */ int -init_filter_iterator (iterator_t* iterator, const get_data_t *get) +init_filter_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = FILTER_ITERATOR_FILTER_COLUMNS; static column_t columns[] = FILTER_ITERATOR_COLUMNS; @@ -55240,7 +55240,7 @@ user_count (const get_data_t *get) * -1 error. */ int -init_user_iterator (iterator_t* iterator, const get_data_t *get) +init_user_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = USER_ITERATOR_FILTER_COLUMNS; static column_t columns[] = USER_ITERATOR_COLUMNS; @@ -57148,7 +57148,7 @@ modify_tag (const char *tag_id, const char *name, const char *comment, * -1 error. */ int -init_tag_iterator (iterator_t* iterator, const get_data_t *get) +init_tag_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = TAG_ITERATOR_FILTER_COLUMNS; static column_t columns[] = TAG_ITERATOR_COLUMNS; @@ -57243,7 +57243,7 @@ tag_iterator_resources (iterator_t* iterator) * @return 0 success, -1 error. */ int -init_tag_name_iterator (iterator_t* iterator, const get_data_t *get) +init_tag_name_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = TAG_NAME_ITERATOR_FILTER_COLUMNS; static column_t columns[] = TAG_NAME_ITERATOR_COLUMNS; diff --git a/src/manage_sql_configs.c b/src/manage_sql_configs.c index ae4b9454f..bdda274b2 100644 --- a/src/manage_sql_configs.c +++ b/src/manage_sql_configs.c @@ -3176,7 +3176,7 @@ init_user_config_iterator (iterator_t* iterator, config_t config, int trash, * -1 error. */ int -init_config_iterator (iterator_t* iterator, const get_data_t *get) +init_config_iterator (iterator_t* iterator, get_data_t *get) { int rc; static const char *filter_columns[] = CONFIG_ITERATOR_FILTER_COLUMNS; diff --git a/src/manage_sql_port_lists.c b/src/manage_sql_port_lists.c index ce0771219..c24abaea6 100644 --- a/src/manage_sql_port_lists.c +++ b/src/manage_sql_port_lists.c @@ -1967,7 +1967,7 @@ port_list_count (const get_data_t *get) * -1 error. */ int -init_port_list_iterator (iterator_t* iterator, const get_data_t *get) +init_port_list_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = PORT_LIST_ITERATOR_FILTER_COLUMNS; static column_t columns[] = PORT_LIST_ITERATOR_COLUMNS; diff --git a/src/manage_sql_report_configs.c b/src/manage_sql_report_configs.c index 69efaca5f..88d8fc542 100644 --- a/src/manage_sql_report_configs.c +++ b/src/manage_sql_report_configs.c @@ -749,7 +749,7 @@ report_config_count (const get_data_t *get) * -1 error. */ int -init_report_config_iterator (iterator_t* iterator, const get_data_t *get) +init_report_config_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = REPORT_CONFIG_ITERATOR_FILTER_COLUMNS; static column_t columns[] = REPORT_CONFIG_ITERATOR_COLUMNS; diff --git a/src/manage_sql_report_formats.c b/src/manage_sql_report_formats.c index 788428bed..1579b3a71 100644 --- a/src/manage_sql_report_formats.c +++ b/src/manage_sql_report_formats.c @@ -2872,7 +2872,7 @@ report_format_count (const get_data_t *get) * -1 error. */ int -init_report_format_iterator (iterator_t* iterator, const get_data_t *get) +init_report_format_iterator (iterator_t* iterator, get_data_t *get) { static const char *filter_columns[] = REPORT_FORMAT_ITERATOR_FILTER_COLUMNS; static column_t columns[] = REPORT_FORMAT_ITERATOR_COLUMNS; diff --git a/src/manage_sql_tickets.c b/src/manage_sql_tickets.c index 224166aa5..1c30088d4 100644 --- a/src/manage_sql_tickets.c +++ b/src/manage_sql_tickets.c @@ -277,7 +277,7 @@ ticket_count (const get_data_t *get) * -1 error. */ int -init_ticket_iterator (iterator_t *iterator, const get_data_t *get) +init_ticket_iterator (iterator_t *iterator, get_data_t *get) { static const char *filter_columns[] = TICKET_ITERATOR_FILTER_COLUMNS; static column_t columns[] = TICKET_ITERATOR_COLUMNS; diff --git a/src/manage_sql_tls_certificates.c b/src/manage_sql_tls_certificates.c index 48cffb3e8..e10ca729d 100644 --- a/src/manage_sql_tls_certificates.c +++ b/src/manage_sql_tls_certificates.c @@ -298,7 +298,7 @@ tls_certificate_count (const get_data_t *get) * 2 failed to find filter, -1 error. */ int -init_tls_certificate_iterator (iterator_t *iterator, const get_data_t *get) +init_tls_certificate_iterator (iterator_t *iterator, get_data_t *get) { static const char *filter_columns[] = TLS_CERTIFICATE_ITERATOR_FILTER_COLUMNS; static column_t columns[] = TLS_CERTIFICATE_ITERATOR_COLUMNS; diff --git a/src/manage_tickets.h b/src/manage_tickets.h index 310bf808e..b00508341 100644 --- a/src/manage_tickets.h +++ b/src/manage_tickets.h @@ -26,7 +26,7 @@ int ticket_count (const get_data_t *); int -init_ticket_iterator (iterator_t *, const get_data_t *); +init_ticket_iterator (iterator_t *, get_data_t *); const char* ticket_iterator_user_id (iterator_t*); diff --git a/src/manage_tls_certificates.h b/src/manage_tls_certificates.h index 7329e5bba..3596ee1ee 100644 --- a/src/manage_tls_certificates.h +++ b/src/manage_tls_certificates.h @@ -33,7 +33,7 @@ int tls_certificate_count (const get_data_t *); int -init_tls_certificate_iterator (iterator_t *, const get_data_t *); +init_tls_certificate_iterator (iterator_t *, get_data_t *); const char* tls_certificate_iterator_certificate (iterator_t*); From e238c7128834cb23133715a0a7b66ed132c3a896 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 28 May 2024 22:19:15 +0200 Subject: [PATCH 3/5] Fix: iterate with get_next in handle_get_notes --- src/gmp.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index dade21a0e..a39dd9908 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -13665,9 +13665,21 @@ handle_get_notes (gmp_parser_t *gmp_parser, GError **error) buffer = g_string_new (""); - // TODO: Do the iteration with get_next so it checks "first". - buffer_notes_xml (buffer, ¬es, get_notes_data->get.details, - get_notes_data->result, &count); + while (1) + { + ret = get_next (¬es, &get_notes_data->get, &first, &count, + init_note_iterator_all); + if (ret == 1) + break; + if (ret == -1) + { + internal_error_send_to_client (error); + return; + } + + buffer_note_xml (buffer, ¬es, get_notes_data->get.details, + get_notes_data->result, &count); + } SEND_TO_CLIENT_OR_FAIL (buffer->str); g_string_free (buffer, TRUE); From 7751b12b04138db6d24ea5ffc62c9764599d597e Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 28 May 2024 22:26:34 +0200 Subject: [PATCH 4/5] Move body of buffer_overrides_xml to new function buffer_override_xml --- src/gmp.c | 542 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 279 insertions(+), 263 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index a39dd9908..5b27ee2e4 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -8093,9 +8093,9 @@ utf8_substring (const gchar *str, glong start_pos, glong end_pos) /** * @brief Buffer XML for a single note. * - * @param[in] buffer Buffer into which to buffer notes. + * @param[in] buffer Buffer into which to buffer note. * @param[in] notes Notes iterator. - * @param[in] include_notes_details Whether to include details of notes. + * @param[in] include_notes_details Whether to include details of note. * @param[in] include_result Whether to include associated result. * @param[out] count Number of notes. */ @@ -8389,308 +8389,324 @@ buffer_notes_xml (GString *buffer, iterator_t *notes, int include_notes_details, } /** - * @brief Buffer XML for some overrides. + * @brief Buffer XML for a single override. * - * @param[in] buffer Buffer into which to buffer overrides. + * @param[in] buffer Buffer into which to buffer override. * @param[in] overrides Overrides iterator. - * @param[in] include_overrides_details Whether to include details of overrides. + * @param[in] include_overrides_details Whether to include details of override. * @param[in] include_result Whether to include associated result. * @param[out] count Number of overrides. */ static void -buffer_overrides_xml (GString *buffer, iterator_t *overrides, - int include_overrides_details, int include_result, - int *count) +buffer_override_xml (GString *buffer, iterator_t *overrides, + int include_overrides_details, int include_result, + int *count) { - while (next (overrides)) - { - int tag_count; - char *uuid_task, *uuid_result; - tag_count = resource_tag_count ("override", - get_iterator_resource (overrides), - 1); + int tag_count; + char *uuid_task, *uuid_result; + tag_count = resource_tag_count ("override", + get_iterator_resource (overrides), + 1); + + if (count) + (*count)++; - if (count) - (*count)++; + if (override_iterator_task (overrides)) + task_uuid (override_iterator_task (overrides), + &uuid_task); + else + uuid_task = NULL; - if (override_iterator_task (overrides)) - task_uuid (override_iterator_task (overrides), - &uuid_task); - else - uuid_task = NULL; + if (override_iterator_result (overrides)) + result_uuid (override_iterator_result (overrides), + &uuid_result); + else + uuid_result = NULL; - if (override_iterator_result (overrides)) - result_uuid (override_iterator_result (overrides), - &uuid_result); - else - uuid_result = NULL; + buffer_xml_append_printf (buffer, + "" + "", + get_iterator_uuid (overrides)); - buffer_xml_append_printf (buffer, - "" - "", - get_iterator_uuid (overrides)); - - if (/* The user is the owner. */ - (current_credentials.username - && get_iterator_owner_name (overrides) - && (strcmp (get_iterator_owner_name (overrides), - current_credentials.username) - == 0)) - /* Or the user is effectively the owner. */ - || acl_user_has_super (current_credentials.uuid, - get_iterator_owner (overrides))) + if (/* The user is the owner. */ + (current_credentials.username + && get_iterator_owner_name (overrides) + && (strcmp (get_iterator_owner_name (overrides), + current_credentials.username) + == 0)) + /* Or the user is effectively the owner. */ + || acl_user_has_super (current_credentials.uuid, + get_iterator_owner (overrides))) + buffer_xml_append_printf (buffer, + "Everything" + ""); + else + { + iterator_t perms; + get_data_t perms_get; + + memset (&perms_get, '\0', sizeof (perms_get)); + perms_get.filter = g_strdup_printf ("resource_uuid=%s" + " owner=any" + " permission=any", + get_iterator_uuid (overrides)); + init_permission_iterator (&perms, &perms_get); + g_free (perms_get.filter); + while (next (&perms)) buffer_xml_append_printf (buffer, - "Everything" - ""); - else - { - iterator_t perms; - get_data_t perms_get; - - memset (&perms_get, '\0', sizeof (perms_get)); - perms_get.filter = g_strdup_printf ("resource_uuid=%s" - " owner=any" - " permission=any", - get_iterator_uuid (overrides)); - init_permission_iterator (&perms, &perms_get); - g_free (perms_get.filter); - while (next (&perms)) - buffer_xml_append_printf (buffer, - "%s", - get_iterator_name (&perms)); - cleanup_iterator (&perms); - - buffer_xml_append_printf (buffer, ""); - } + "%s", + get_iterator_name (&perms)); + cleanup_iterator (&perms); - if (include_overrides_details == 0) - { - gchar *excerpt; - const char *text; + buffer_xml_append_printf (buffer, ""); + } - text = override_iterator_text (overrides); - excerpt = utf8_substring (text, 0, setting_excerpt_size_int ()); + if (include_overrides_details == 0) + { + gchar *excerpt; + const char *text; - /* This must match send_get_common. */ + text = override_iterator_text (overrides); + excerpt = utf8_substring (text, 0, setting_excerpt_size_int ()); - buffer_xml_append_printf (buffer, - "%s" - "" - "%s" - "%s" - "", - get_iterator_owner_name (overrides) - ? get_iterator_owner_name (overrides) - : "", - override_iterator_nvt_oid (overrides), - override_iterator_nvt_name (overrides), - override_iterator_nvt_type (overrides)); + /* This must match send_get_common. */ - buffer_xml_append_printf (buffer, - "%s", - iso_if_time (get_iterator_creation_time (overrides))); + buffer_xml_append_printf (buffer, + "%s" + "" + "%s" + "%s" + "", + get_iterator_owner_name (overrides) + ? get_iterator_owner_name (overrides) + : "", + override_iterator_nvt_oid (overrides), + override_iterator_nvt_name (overrides), + override_iterator_nvt_type (overrides)); + + buffer_xml_append_printf (buffer, + "%s", + iso_if_time (get_iterator_creation_time (overrides))); - buffer_xml_append_printf (buffer, - "%s", - iso_if_time (get_iterator_modification_time (overrides))); + buffer_xml_append_printf (buffer, + "%s", + iso_if_time (get_iterator_modification_time (overrides))); + + buffer_xml_append_printf (buffer, + "1" + "0" + "%i" + "%s" + "%s" + "%s" + "%s" + "%s" + "%i", + override_iterator_active (overrides), + strlen (excerpt) < strlen (text), + excerpt, + override_iterator_threat (overrides) + ? override_iterator_threat (overrides) + : "", + override_iterator_severity (overrides) + ? override_iterator_severity (overrides) + : "", + override_iterator_new_threat (overrides), + override_iterator_new_severity (overrides), + ((override_iterator_task (overrides) + && (uuid_task == NULL)) + || (override_iterator_result (overrides) + && (uuid_result == NULL)))); + if (tag_count) + { buffer_xml_append_printf (buffer, - "1" - "0" - "%i" - "%s" - "%s" - "%s" - "%s" - "%s" - "%i", - override_iterator_active (overrides), - strlen (excerpt) < strlen (text), - excerpt, - override_iterator_threat (overrides) - ? override_iterator_threat (overrides) - : "", - override_iterator_severity (overrides) - ? override_iterator_severity (overrides) - : "", - override_iterator_new_threat (overrides), - override_iterator_new_severity (overrides), - ((override_iterator_task (overrides) - && (uuid_task == NULL)) - || (override_iterator_result (overrides) - && (uuid_result == NULL)))); - - if (tag_count) - { - buffer_xml_append_printf (buffer, - "" - "%i" - "", - tag_count); - } + "" + "%i" + "", + tag_count); + } - g_string_append (buffer, ""); + g_string_append (buffer, ""); + + g_free (excerpt); + } + else + { + char *name_task; + int trash_task; + time_t end_time; + iterator_t tags; - g_free (excerpt); + if (uuid_task) + { + name_task = task_name (override_iterator_task (overrides)); + trash_task = task_in_trash (override_iterator_task (overrides)); } else { - char *name_task; - int trash_task; - time_t end_time; - iterator_t tags; + name_task = NULL; + trash_task = 0; + } - if (uuid_task) - { - name_task = task_name (override_iterator_task (overrides)); - trash_task = task_in_trash (override_iterator_task (overrides)); - } - else - { - name_task = NULL; - trash_task = 0; - } + end_time = override_iterator_end_time (overrides); - end_time = override_iterator_end_time (overrides); + /* This must match send_get_common. */ - /* This must match send_get_common. */ + buffer_xml_append_printf + (buffer, + "%s" + "" + "%s" + "%s" + "", + get_iterator_owner_name (overrides) + ? get_iterator_owner_name (overrides) + : "", + override_iterator_nvt_oid (overrides), + override_iterator_nvt_name (overrides), + override_iterator_nvt_type (overrides)); - buffer_xml_append_printf - (buffer, - "%s" - "" - "%s" - "%s" - "", - get_iterator_owner_name (overrides) - ? get_iterator_owner_name (overrides) - : "", - override_iterator_nvt_oid (overrides), - override_iterator_nvt_name (overrides), - override_iterator_nvt_type (overrides)); + buffer_xml_append_printf + (buffer, + "%s", + iso_if_time (get_iterator_creation_time (overrides))); - buffer_xml_append_printf - (buffer, - "%s", - iso_if_time (get_iterator_creation_time (overrides))); + buffer_xml_append_printf + (buffer, + "%s", + iso_if_time (get_iterator_modification_time (overrides))); - buffer_xml_append_printf - (buffer, - "%s", - iso_if_time (get_iterator_modification_time (overrides))); + buffer_xml_append_printf + (buffer, + "1" + "0" + "%i" + "%s" + "%s" + "%s" + "%s" + "%s" + "%s" + "%s" + "%s" + "%s%i" + "%i", + override_iterator_active (overrides), + end_time > 1 ? iso_time (&end_time) : "", + override_iterator_text (overrides), + override_iterator_hosts (overrides) + ? override_iterator_hosts (overrides) : "", + override_iterator_port (overrides) + ? override_iterator_port (overrides) : "", + override_iterator_threat (overrides) + ? override_iterator_threat (overrides) : "", + override_iterator_severity (overrides) + ? override_iterator_severity (overrides) : "", + override_iterator_new_threat (overrides), + override_iterator_new_severity (overrides), + uuid_task ? uuid_task : "", + name_task ? name_task : "", + trash_task, + ((override_iterator_task (overrides) && (uuid_task == NULL)) + || (override_iterator_result (overrides) && (uuid_result == NULL)))); - buffer_xml_append_printf - (buffer, - "1" - "0" - "%i" - "%s" - "%s" - "%s" - "%s" - "%s" - "%s" - "%s" - "%s" - "%s%i" - "%i", - override_iterator_active (overrides), - end_time > 1 ? iso_time (&end_time) : "", - override_iterator_text (overrides), - override_iterator_hosts (overrides) - ? override_iterator_hosts (overrides) : "", - override_iterator_port (overrides) - ? override_iterator_port (overrides) : "", - override_iterator_threat (overrides) - ? override_iterator_threat (overrides) : "", - override_iterator_severity (overrides) - ? override_iterator_severity (overrides) : "", - override_iterator_new_threat (overrides), - override_iterator_new_severity (overrides), - uuid_task ? uuid_task : "", - name_task ? name_task : "", - trash_task, - ((override_iterator_task (overrides) && (uuid_task == NULL)) - || (override_iterator_result (overrides) && (uuid_result == NULL)))); - - free (name_task); - - if (include_result && uuid_result - && override_iterator_result (overrides)) - { - iterator_t results; - get_data_t *result_get; - result_get = report_results_get_data (1, 1, - 1, /* apply_overrides */ - 0 /* min_qod */); - result_get->id = g_strdup (uuid_result); - init_result_get_iterator (&results, result_get, - 0, /* No report restriction */ - NULL, /* No host restriction */ - NULL); /* No extra order SQL. */ - get_data_reset (result_get); - free (result_get); - - while (next (&results)) - buffer_results_xml (buffer, - &results, - 0, - 0, /* Overrides. */ - 0, /* Override details. */ - 0, /* Overrides. */ - 0, /* Override details. */ - 0, /* Tags. */ - 0, /* Tag details. */ - 0, /* Result details. */ - NULL, - NULL, - 0, - -1, - 0, /* Lean. */ - 0); /* Delta fields. */ - cleanup_iterator (&results); - } - else - buffer_xml_append_printf (buffer, - "", - uuid_result ? uuid_result : ""); + free (name_task); - if (tag_count) - { - buffer_xml_append_printf (buffer, - "" - "%i", - tag_count); + if (include_result && uuid_result + && override_iterator_result (overrides)) + { + iterator_t results; + get_data_t *result_get; + result_get = report_results_get_data (1, 1, + 1, /* apply_overrides */ + 0 /* min_qod */); + result_get->id = g_strdup (uuid_result); + init_result_get_iterator (&results, result_get, + 0, /* No report restriction */ + NULL, /* No host restriction */ + NULL); /* No extra order SQL. */ + get_data_reset (result_get); + free (result_get); - init_resource_tag_iterator (&tags, "override", - get_iterator_resource (overrides), - 1, NULL, 1); + while (next (&results)) + buffer_results_xml (buffer, + &results, + 0, + 0, /* Overrides. */ + 0, /* Override details. */ + 0, /* Overrides. */ + 0, /* Override details. */ + 0, /* Tags. */ + 0, /* Tag details. */ + 0, /* Result details. */ + NULL, + NULL, + 0, + -1, + 0, /* Lean. */ + 0); /* Delta fields. */ + cleanup_iterator (&results); + } + else + buffer_xml_append_printf (buffer, + "", + uuid_result ? uuid_result : ""); - while (next (&tags)) - { - buffer_xml_append_printf - (buffer, - "" - "%s" - "%s" - "%s" - "", - resource_tag_iterator_uuid (&tags), - resource_tag_iterator_name (&tags), - resource_tag_iterator_value (&tags), - resource_tag_iterator_comment (&tags)); - } + if (tag_count) + { + buffer_xml_append_printf (buffer, + "" + "%i", + tag_count); - cleanup_iterator (&tags); + init_resource_tag_iterator (&tags, "override", + get_iterator_resource (overrides), + 1, NULL, 1); - g_string_append (buffer, ""); + while (next (&tags)) + { + buffer_xml_append_printf + (buffer, + "" + "%s" + "%s" + "%s" + "", + resource_tag_iterator_uuid (&tags), + resource_tag_iterator_name (&tags), + resource_tag_iterator_value (&tags), + resource_tag_iterator_comment (&tags)); } - g_string_append (buffer, ""); + cleanup_iterator (&tags); + + g_string_append (buffer, ""); } - free (uuid_task); - free (uuid_result); + + g_string_append (buffer, ""); } + free (uuid_task); + free (uuid_result); +} + +/** + * @brief Buffer XML for some overrides. + * + * @param[in] buffer Buffer into which to buffer overrides. + * @param[in] overrides Overrides iterator. + * @param[in] include_overrides_details Whether to include details of overrides. + * @param[in] include_result Whether to include associated result. + * @param[out] count Number of overrides. + */ +static void +buffer_overrides_xml (GString *buffer, iterator_t *overrides, + int include_overrides_details, int include_result, + int *count) +{ + while (next (overrides)) + buffer_override_xml (buffer, overrides, include_overrides_details, + include_result, count); } /* External for manage.c. */ From 26d9b4dead25fc9d3a82731503f413c70f666b08 Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Tue, 28 May 2024 22:29:46 +0200 Subject: [PATCH 5/5] Fix: iterate with get_next in handle_get_overrides --- src/gmp.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/gmp.c b/src/gmp.c index 5b27ee2e4..ef2b612ee 100644 --- a/src/gmp.c +++ b/src/gmp.c @@ -14088,10 +14088,22 @@ handle_get_overrides (gmp_parser_t *gmp_parser, GError **error) buffer = g_string_new (""); - // TODO: Do the iteration with get_next so it checks "first". - buffer_overrides_xml (buffer, &overrides, - get_overrides_data->get.details, - get_overrides_data->result, &count); + while (1) + { + ret = get_next (&overrides, &get_overrides_data->get, &first, &count, + init_override_iterator_all); + if (ret == 1) + break; + if (ret == -1) + { + internal_error_send_to_client (error); + return; + } + + buffer_override_xml (buffer, &overrides, + get_overrides_data->get.details, + get_overrides_data->result, &count); + } SEND_TO_CLIENT_OR_FAIL (buffer->str); g_string_free (buffer, TRUE);