Skip to content

Commit

Permalink
Change: Differentiate report formats of scan and audit reports
Browse files Browse the repository at this point in the history
  • Loading branch information
a-h-abdelsalam committed Feb 12, 2025
1 parent 4fe2e52 commit 3d0c5a9
Show file tree
Hide file tree
Showing 11 changed files with 222 additions and 50 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ include (CPack)

## Variables

set (GVMD_DATABASE_VERSION 256)
set (GVMD_DATABASE_VERSION 257)

set (GVMD_SCAP_DATABASE_VERSION 22)

Expand Down
79 changes: 59 additions & 20 deletions src/gmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -14978,29 +14978,66 @@ handle_get_reports (gmp_parser_t *gmp_parser, GError **error)
no_report_format = (get_reports_data->format_id == NULL)
|| (strcmp(get_reports_data->format_id, "") == 0);

if ((!no_report_format)
&& find_report_format_with_permission (get_reports_data->format_id,
&report_format,
"get_report_formats"))
if (!no_report_format)
{
get_reports_data_reset (get_reports_data);
SEND_TO_CLIENT_OR_FAIL (XML_INTERNAL_ERROR ("get_reports"));
set_client_state (CLIENT_AUTHENTIC);
return;
}
if (find_report_format_with_permission (get_reports_data->format_id,
&report_format,
"get_report_formats"))
{
get_reports_data_reset (get_reports_data);
SEND_TO_CLIENT_OR_FAIL (XML_INTERNAL_ERROR ("get_reports"));
set_client_state (CLIENT_AUTHENTIC);
return;
}

if ((!no_report_format) && (report_format == 0))
{
if (send_find_error_to_client ("get_reports", "report format",
get_reports_data->format_id,
gmp_parser))
if (report_format == 0)
{
error_send_to_client (error);
if (send_find_error_to_client ("get_reports", "report format",
get_reports_data->format_id,
gmp_parser))
{
error_send_to_client (error);
return;
}
get_reports_data_reset (get_reports_data);
set_client_state (CLIENT_AUTHENTIC);
return;
}
get_reports_data_reset (get_reports_data);
set_client_state (CLIENT_AUTHENTIC);
return;

task_t task;
gchar *usage_type, *report_type;
if(report_task (request_report, &task) || (task == 0))
{
get_reports_data_reset (get_reports_data);
SEND_TO_CLIENT_OR_FAIL
(XML_ERROR_SYNTAX ("get_reports",
"Failed to get report task"));
set_client_state (CLIENT_AUTHENTIC);
return;
}
if (task_usage_type(task, &usage_type))
{
get_reports_data_reset (get_reports_data);
SEND_TO_CLIENT_OR_FAIL
(XML_ERROR_SYNTAX ("get_reports",
"Failed to get usage type"));
set_client_state (CLIENT_AUTHENTIC);
return;
}
report_type = report_format_report_type (report_format);
if (report_type)
{
if (strcmp(report_type, usage_type) && strcmp(report_type, "all"))
{
get_reports_data_reset (get_reports_data);
SEND_TO_CLIENT_OR_FAIL
(XML_ERROR_SYNTAX ("get_reports",
"Report format is not compatible with"
" the report type"));
set_client_state (CLIENT_AUTHENTIC);
return;
}
}
}

if (!no_report_config)
Expand Down Expand Up @@ -15896,7 +15933,8 @@ handle_get_report_formats (gmp_parser_t *gmp_parser, GError **error)
"<summary>%s</summary>"
"<description>%s</description>"
"<predefined>%i</predefined>"
"<configurable>%i</configurable>",
"<configurable>%i</configurable>"
"<report_type>%s</report_type>",
report_format_iterator_extension (&report_formats),
report_format_iterator_content_type (&report_formats),
report_format_iterator_summary (&report_formats),
Expand All @@ -15906,7 +15944,8 @@ handle_get_report_formats (gmp_parser_t *gmp_parser, GError **error)
(get_iterator_resource (&report_formats))
: report_format_predefined
(get_iterator_resource (&report_formats)),
report_format_iterator_configurable (&report_formats));
report_format_iterator_configurable (&report_formats),
report_format_iterator_report_type (&report_formats) ?: "");

if (resource_id_deprecated ("report_format",
get_iterator_uuid (&report_formats)))
Expand Down
21 changes: 18 additions & 3 deletions src/gmp_report_formats.c
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ params_options_free (array_t *params_options)
* @param[out] params Address for params.
* @param[out] params_options Address for param options.
* @param[out] deprecated Address for deprecation status.
* @param[out] report_type Address for report type.
*/
void
parse_report_format_entity (entity_t report_format,
Expand All @@ -165,7 +166,7 @@ parse_report_format_entity (entity_t report_format,
char **summary, char **description,
char **signature, array_t **files,
array_t **params, array_t **params_options,
char **deprecated)
char **deprecated, char **report_type)
{
entity_t file, param_entity;
entities_t children;
Expand All @@ -181,6 +182,18 @@ parse_report_format_entity (entity_t report_format,
*signature = child_or_null (report_format, "signature");
if (deprecated)
*deprecated = child_or_null (report_format, "deprecated");
if (report_type)
*report_type = child_or_null (report_format, "report_type");

if (*report_type == NULL)
*report_type = "scan";
else if (strcmp (*report_type, "scan") && strcmp (*report_type, "audit")
&& strcmp (*report_type, "all"))
{
g_warning ("report_type for report format %s is invalid.",
*report_format_id);
*report_type = "scan";
}

*files = make_array ();
*params = make_array ();
Expand Down Expand Up @@ -362,7 +375,7 @@ create_report_format_run (gmp_parser_t *gmp_parser, GError **error)
&& (report_format = entity_child (get_report_formats_response, "report_format")))
{
char *import_name, *content_type, *extension, *summary, *description;
char *signature;
char *signature, *report_type;
const char *report_format_id;
array_t *files, *params, *params_options;

Expand All @@ -371,7 +384,8 @@ create_report_format_run (gmp_parser_t *gmp_parser, GError **error)
parse_report_format_entity (report_format, &report_format_id,
&import_name, &content_type, &extension,
&summary, &description, &signature, &files,
&params, &params_options, NULL);
&params, &params_options, NULL,
&report_type);

/* Check data, then create report format. */

Expand Down Expand Up @@ -410,6 +424,7 @@ create_report_format_run (gmp_parser_t *gmp_parser, GError **error)
params,
params_options,
signature,
report_type,
&new_report_format))
{
case -1:
Expand Down
3 changes: 2 additions & 1 deletion src/gmp_report_formats.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ params_options_free (array_t *);
void
parse_report_format_entity (entity_t, const char **, char **, char **,
char **, char **, char **, char **,
array_t **, array_t **, array_t **, char **);
array_t **, array_t **, array_t **, char **,
char **);

#endif /* not _GVMD_GMP_REPORT_FORMATS_H */
38 changes: 38 additions & 0 deletions src/manage_migrators.c
Original file line number Diff line number Diff line change
Expand Up @@ -3218,6 +3218,43 @@ migrate_255_to_256 ()
return 0;
}

/**
* @brief Migrate the database from version 256 to version 257.
*
* @return 0 success, -1 error.
*/
int
migrate_256_to_257 ()
{
sql_begin_immediate ();

/* Ensure that the database is currently version 256. */

if (manage_db_version () != 256)
{
sql_rollback ();
return -1;
}

/* Update the database. */

// Add new columns

sql ("ALTER TABLE report_formats ADD COLUMN"
" report_type text DEFAULT 'scan';");

sql ("ALTER TABLE report_formats_trash ADD COLUMN"
" report_type text DEFAULT 'scan';");

/* Set the database version to 257. */

set_db_version (257);

sql_commit ();

return 0;
}

#undef UPDATE_DASHBOARD_SETTINGS

/**
Expand Down Expand Up @@ -3280,6 +3317,7 @@ static migrator_t database_migrators[] = {
{254, migrate_253_to_254},
{255, migrate_254_to_255},
{256, migrate_255_to_256},
{257, migrate_256_to_257},
/* End marker. */
{-1, NULL}};

Expand Down
2 changes: 2 additions & 0 deletions src/manage_pg.c
Original file line number Diff line number Diff line change
Expand Up @@ -2979,6 +2979,7 @@ create_tables ()
" trust_time integer,"
" flags integer,"
" predefined integer,"
" report_type text,"
" creation_time integer,"
" modification_time integer);");

Expand All @@ -3005,6 +3006,7 @@ create_tables ()
* Feed ("predefined") report formats are not given a new UUID because
* they are not created if they already exist in the trash. */
" original_uuid text,"
" report_type text,"
" creation_time integer,"
" modification_time integer);");

Expand Down
11 changes: 6 additions & 5 deletions src/manage_report_formats.c
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,7 @@ update_report_format_from_file (report_format_t report_format,
entity_t entity;
array_t *files, *params, *params_options;
char *name, *content_type, *extension, *summary, *description, *signature;
char *deprecated;
char *deprecated, *report_type;
const char *report_format_id;

g_debug ("%s: updating %s", __func__, path);
Expand All @@ -410,13 +410,13 @@ update_report_format_from_file (report_format_t report_format,
parse_report_format_entity (entity, &report_format_id, &name,
&content_type, &extension, &summary,
&description, &signature, &files, &params,
&params_options, &deprecated);
&params_options, &deprecated, &report_type);

/* Update the report format. */

update_report_format (report_format, report_format_id, name, content_type,
extension, summary, description, signature, files,
params, params_options, deprecated);
params, params_options, deprecated, report_type);

/* Cleanup. */

Expand Down Expand Up @@ -487,7 +487,7 @@ create_report_format_from_file (const gchar *path)
entity_t report_format;
array_t *files, *params, *params_options;
char *name, *content_type, *extension, *summary, *description, *signature;
char *deprecated;
char *deprecated, *report_type;
const char *report_format_id;
report_format_t new_report_format;

Expand All @@ -503,7 +503,7 @@ create_report_format_from_file (const gchar *path)
parse_report_format_entity (report_format, &report_format_id, &name,
&content_type, &extension, &summary,
&description, &signature, &files, &params,
&params_options, &deprecated);
&params_options, &deprecated, &report_type);

/* Handle deprecation status */

Expand All @@ -528,6 +528,7 @@ create_report_format_from_file (const gchar *path)
params_options,
signature,
1,
report_type,
&new_report_format))
{
case 0:
Expand Down
9 changes: 8 additions & 1 deletion src/manage_report_formats.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ typedef struct
int
create_report_format (const char *, const char *, const char *, const char *,
const char *, const char *, array_t *, array_t *,
array_t *, const char *, report_format_t *);
array_t *, const char *, const char *,
report_format_t *);

int
copy_report_format (const char *, const char *, report_format_t*);
Expand Down Expand Up @@ -73,6 +74,9 @@ report_format_content_type (report_format_t);
char *
report_format_extension (report_format_t);

char *
report_format_report_type (report_format_t);

int
report_format_global (report_format_t);

Expand Down Expand Up @@ -119,6 +123,9 @@ report_format_iterator_extension (iterator_t *);
const char*
report_format_iterator_content_type (iterator_t *);

const char*
report_format_iterator_report_type (iterator_t *);

const char*
report_format_iterator_description (iterator_t *);

Expand Down
Loading

0 comments on commit 3d0c5a9

Please sign in to comment.