Skip to content

Commit

Permalink
Add: GET_NVTS attribute skip_tags
Browse files Browse the repository at this point in the history
  • Loading branch information
mattmundell committed Aug 29, 2023
1 parent 27bd71a commit 50e4886
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 15 deletions.
21 changes: 18 additions & 3 deletions src/gmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1825,6 +1825,7 @@ typedef struct
int preference_count; ///< Boolean. Whether to include NVT preference count.
int preferences; ///< Boolean. Whether to include NVT preferences.
int skip_cert_refs; ///< Boolean. Whether to exclude CERT refs.
int skip_tags; ///< Boolean. Whether to exclude tags.
char *sort_field; ///< Field to sort results on.
int sort_order; ///< Result sort order: 0 descending, else ascending.
int timeout; ///< Boolean. Whether to include timeout preference.
Expand Down Expand Up @@ -5317,6 +5318,11 @@ gmp_xml_handle_start_element (/* unused */ GMarkupParseContext* context,
get_nvts_data->skip_cert_refs = strcmp (attribute, "0");
else
get_nvts_data->skip_cert_refs = 0;
if (find_attribute (attribute_names, attribute_values,
"skip_tags", &attribute))
get_nvts_data->skip_tags = strcmp (attribute, "0");
else
get_nvts_data->skip_tags = 0;
if (find_attribute (attribute_names, attribute_values,
"timeout", &attribute))
get_nvts_data->timeout = strcmp (attribute, "0");
Expand Down Expand Up @@ -7861,6 +7867,7 @@ gmp_xml_handle_start_element (/* unused */ GMarkupParseContext* context,
* @param[in] timeout Timeout. Used if details is true.
* @param[in] config Config, used if preferences is true.
* @param[in] skip_cert_refs If true, exclude CERT refs.
* @param[in] skip_tags If true, exclude tags.
* @param[in] write_to_client Function to write to client.
* @param[in] write_to_client_data Argument to \p write_to_client.
*
Expand All @@ -7869,13 +7876,14 @@ gmp_xml_handle_start_element (/* unused */ GMarkupParseContext* context,
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 (*write_to_client) (const char *, void*),
void* write_to_client_data)
{
gchar *msg;

msg = get_nvt_xml (nvts, details, pref_count, preferences, timeout, config,
0, skip_cert_refs);
0, skip_cert_refs, skip_cert_refs);
if (send_to_client (msg, write_to_client, write_to_client_data))
{
g_free (msg);
Expand Down Expand Up @@ -13176,7 +13184,7 @@ handle_get_info (gmp_parser_t *gmp_parser, GError **error)
dfn_cert_adv_info_iterator_cve_refs (&info));
else if (g_strcmp0 ("nvt", get_info_data->type) == 0)
{
if (send_nvt (&info, 1, 1, -1, NULL, 0, 0,
if (send_nvt (&info, 1, 1, -1, NULL, 0, 0, 0,
gmp_parser->client_writer,
gmp_parser->client_writer_data))
{
Expand Down Expand Up @@ -13391,6 +13399,12 @@ handle_get_nvts (gmp_parser_t *gmp_parser, GError **error)
(XML_ERROR_SYNTAX ("get_nvts",
"The skip_cert_refs attribute"
" requires the details attribute"));
else if ((get_nvts_data->details == 0)
&& get_nvts_data->skip_tags)
SEND_TO_CLIENT_OR_FAIL
(XML_ERROR_SYNTAX ("get_nvts",
"The skip_tags attribute"
" requires the details attribute"));
else if (((get_nvts_data->details == 0)
|| ((get_nvts_data->config_id == NULL)
&& (get_nvts_data->preferences_config_id == NULL)))
Expand Down Expand Up @@ -13500,6 +13514,7 @@ handle_get_nvts (gmp_parser_t *gmp_parser, GError **error)
if (send_nvt (&nvts, 1, get_nvts_data->preferences,
pref_count, timeout, config,
get_nvts_data->skip_cert_refs,
get_nvts_data->skip_tags,
gmp_parser->client_writer,
gmp_parser->client_writer_data))
{
Expand All @@ -13515,7 +13530,7 @@ handle_get_nvts (gmp_parser_t *gmp_parser, GError **error)
else
while (next (&nvts))
{
if (send_nvt (&nvts, 0, 0, -1, NULL, 0, 0,
if (send_nvt (&nvts, 0, 0, -1, NULL, 0, 0, 0,
gmp_parser->client_writer,
gmp_parser->client_writer_data))
{
Expand Down
30 changes: 19 additions & 11 deletions src/manage.c
Original file line number Diff line number Diff line change
Expand Up @@ -5638,13 +5638,14 @@ xsl_transform (gchar *stylesheet, gchar *xmlfile, gchar **param_names,
* @param[in] config Config, used if preferences is true.
* @param[in] close_tag Whether to close the NVT tag or not.
* @param[in] skip_cert_refs Whether to exclude the CERT REFs.
* @param[in] skip_tags Whether to exclude the tags.
*
* @return A dynamically allocated string containing the XML description.
*/
gchar *
get_nvt_xml (iterator_t *nvts, int details, int pref_count,
int preferences, const char *timeout, config_t config,
int close_tag, int skip_cert_refs)
int close_tag, int skip_cert_refs, int skip_tags)
{
const char* oid = nvt_iterator_oid (nvts);
const char* name = nvt_iterator_name (nvts);
Expand Down Expand Up @@ -5755,12 +5756,17 @@ get_nvt_xml (iterator_t *nvts, int details, int pref_count,

xml_append_nvt_refs (refs_str, oid, NULL);

tags_str = g_string_new ("");
tag_count = resource_tag_count ("nvt",
get_iterator_resource (nvts),
1);
if (skip_tags)
tags_str = NULL;
else
{
tags_str = g_string_new ("");
tag_count = resource_tag_count ("nvt",
get_iterator_resource (nvts),
1);
}

if (tag_count)
if (tags_str && tag_count)
{
g_string_append_printf (tags_str,
"<user_tags>"
Expand Down Expand Up @@ -5820,7 +5826,7 @@ get_nvt_xml (iterator_t *nvts, int details, int pref_count,
get_iterator_modification_time (nvts)
? get_iterator_modification_time (nvts)
: "",
tags_str->str,
tags_str ? tags_str->str : "",
nvt_iterator_category (nvts),
family_text,
nvt_iterator_cvss_base (nvts)
Expand Down Expand Up @@ -5868,9 +5874,10 @@ get_nvt_xml (iterator_t *nvts, int details, int pref_count,
timeout ? timeout : "",
default_timeout ? default_timeout : "");
g_free (family_text);
g_string_free(nvt_tags, 1);
g_string_free(refs_str, 1);
g_string_free(tags_str, 1);
g_string_free (nvt_tags, 1);
g_string_free (refs_str, 1);
if (tags_str)
g_string_free (tags_str, 1);

if (nvt_iterator_solution (nvts) ||
nvt_iterator_solution_type (nvts) ||
Expand Down Expand Up @@ -6047,7 +6054,8 @@ manage_read_info (gchar *type, gchar *uid, gchar *name, gchar **result)
NULL, /* Timeout. */
0, /* Config. */
1, /* Close tag. */
0); /* Skip CERT refs. */
0, /* Skip CERT refs. */
0); /* Skip tags. */

cleanup_iterator (&nvts);
}
Expand Down
2 changes: 1 addition & 1 deletion src/manage.h
Original file line number Diff line number Diff line change
Expand Up @@ -1998,7 +1998,7 @@ void
xml_append_nvt_refs (GString *, const char *, int *);

gchar*
get_nvt_xml (iterator_t*, int, int, int, const char*, config_t, int, int);
get_nvt_xml (iterator_t*, int, int, int, const char*, config_t, int, int, int);

char*
task_preference_value (task_t, const char *);
Expand Down

0 comments on commit 50e4886

Please sign in to comment.