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. */