Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 0 additions & 21 deletions src/manage.h
Original file line number Diff line number Diff line change
Expand Up @@ -2287,30 +2287,9 @@ asset_iterator_in_use (iterator_t *);
int
asset_host_count (const get_data_t *);

int
init_asset_os_iterator (iterator_t *, const get_data_t *);

int
init_resource_names_os_iterator (iterator_t *, get_data_t *);

const char*
asset_os_iterator_title (iterator_t *);

int
asset_os_iterator_installs (iterator_t *);

const char*
asset_os_iterator_latest_severity (iterator_t *);

const char*
asset_os_iterator_highest_severity (iterator_t *);

const char*
asset_os_iterator_average_severity (iterator_t *);

int
asset_os_iterator_all_installs (iterator_t *);

int
asset_os_count (const get_data_t *);

Expand Down
21 changes: 21 additions & 0 deletions src/manage_assets.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,25 @@ init_asset_host_iterator (iterator_t *, const get_data_t *);
const char *
asset_host_iterator_severity (iterator_t *);

int
init_asset_os_iterator (iterator_t *, const get_data_t *);

const char*
asset_os_iterator_title (iterator_t *);

int
asset_os_iterator_installs (iterator_t *);

const char*
asset_os_iterator_latest_severity (iterator_t *);

const char*
asset_os_iterator_highest_severity (iterator_t *);

const char*
asset_os_iterator_average_severity (iterator_t *);

int
asset_os_iterator_all_installs (iterator_t *);

#endif /* not _GVMD_MANAGE_ASSETS_H */
257 changes: 1 addition & 256 deletions src/manage_sql.c
Original file line number Diff line number Diff line change
Expand Up @@ -3642,7 +3642,7 @@ resource_uuid (const gchar *type, resource_t resource)
* @return 0 success, 1 failed to find resource, 2 failed to find filter, -1
* error.
*/
static int
int
init_get_iterator2_with (iterator_t* iterator, const char *type,
const get_data_t *get, column_t *select_columns,
column_t *trash_select_columns,
Expand Down Expand Up @@ -41001,191 +41001,6 @@ asset_host_count (const get_data_t *get)
filter_columns, 0, NULL, NULL, NULL, TRUE);
}

/**
* @brief Filter columns for os iterator.
*/
#define OS_ITERATOR_FILTER_COLUMNS \
{ GET_ITERATOR_FILTER_COLUMNS, "title", "hosts", "latest_severity", \
"highest_severity", "average_severity", "average_severity_score", \
"severity", "all_hosts", NULL }

/**
* @brief OS iterator columns.
*/
#define OS_ITERATOR_COLUMNS \
{ \
GET_ITERATOR_COLUMNS (oss), \
{ \
"0", \
"writable", \
KEYWORD_TYPE_INTEGER \
}, \
{ \
"(SELECT count (*) > 0 FROM host_oss WHERE os = oss.id)", \
"in_use", \
KEYWORD_TYPE_INTEGER \
}, \
{ \
"(SELECT coalesce (cpe_title (oss.name), ''))", \
"title", \
KEYWORD_TYPE_STRING \
}, \
{ \
"(SELECT count(*)" \
" FROM (SELECT inner_cpes[1] AS cpe, host" \
" FROM (SELECT array_agg (host_details.value" \
" ORDER BY host_details.id DESC)" \
" AS inner_cpes," \
" host" \
" FROM host_details, hosts" \
" WHERE host_details.name = 'best_os_cpe'" \
" AND hosts.id = host_details.host" \
" AND (" ACL_USER_MAY_OPTS ("hosts") ")" \
" GROUP BY host)" \
" AS host_details_subselect)" \
" AS array_removal_subselect" \
" WHERE cpe = oss.name)", \
"hosts", \
KEYWORD_TYPE_INTEGER \
}, \
{ \
"(SELECT round (CAST (severity AS numeric), 1) FROM host_max_severities" \
" WHERE host = (SELECT host FROM host_oss" \
" WHERE os = oss.id" \
" ORDER BY creation_time DESC LIMIT 1)" \
" ORDER BY creation_time DESC LIMIT 1)", \
"latest_severity", \
KEYWORD_TYPE_DOUBLE \
}, \
{ \
"(SELECT round (max (CAST (severity AS numeric)), 1)" \
" FROM host_max_severities" \
" WHERE host IN (SELECT DISTINCT host FROM host_oss" \
" WHERE os = oss.id))", \
"highest_severity", \
KEYWORD_TYPE_DOUBLE \
}, \
{ \
"(SELECT round (CAST (avg (severity) AS numeric), 2)" \
" FROM (SELECT (SELECT severity FROM host_max_severities" \
" WHERE host = hosts.host" \
" ORDER BY creation_time DESC LIMIT 1)" \
" AS severity" \
" FROM (SELECT distinct host FROM host_oss WHERE os = oss.id)" \
" AS hosts)" \
" AS severities)", \
"average_severity", \
KEYWORD_TYPE_DOUBLE \
}, \
{ \
"(SELECT count(DISTINCT host) FROM host_oss WHERE os = oss.id)", \
"all_hosts", \
KEYWORD_TYPE_INTEGER \
}, \
{ NULL, NULL, KEYWORD_TYPE_UNKNOWN } \
}

/**
* @brief OS iterator optional filtering columns.
*/
#define OS_ITERATOR_WHERE_COLUMNS \
{ \
{ \
"(SELECT round (CAST (avg (severity) AS numeric)" \
" * (SELECT count (distinct host)" \
" FROM host_oss WHERE os = oss.id), 2)" \
" FROM (SELECT (SELECT severity FROM host_max_severities" \
" WHERE host = hosts.host" \
" ORDER BY creation_time DESC LIMIT 1)" \
" AS severity" \
" FROM (SELECT distinct host FROM host_oss WHERE os = oss.id)" \
" AS hosts)" \
" AS severities)", \
"average_severity_score", \
KEYWORD_TYPE_DOUBLE \
}, \
{ \
"(SELECT round (CAST (avg (severity) AS numeric), 2)" \
" FROM (SELECT (SELECT severity FROM host_max_severities" \
" WHERE host = hosts.host" \
" ORDER BY creation_time DESC LIMIT 1)" \
" AS severity" \
" FROM (SELECT distinct host FROM host_oss WHERE os = oss.id)" \
" AS hosts)" \
" AS severities)", \
"severity", \
KEYWORD_TYPE_DOUBLE \
}, \
{ NULL, NULL, KEYWORD_TYPE_UNKNOWN } \
}

/**
* @brief Generate the extra_tables string for an OS iterator.
*
* @return Newly allocated string.
*/
static gchar *
asset_os_iterator_opts_table ()
{
assert (current_credentials.uuid);

return g_strdup_printf (", (SELECT"
" (SELECT id FROM users"
" WHERE users.uuid = '%s')"
" AS user_id,"
" 'host' AS type)"
" AS opts",
current_credentials.uuid);
}

/**
* @brief Initialise an OS iterator.
*
* @param[in] iterator Iterator.
* @param[in] get GET data.
*
* @return 0 success, 1 failed to find os, 2 failed to find filter,
* -1 error.
*/
int
init_asset_os_iterator (iterator_t *iterator, const get_data_t *get)
{
int ret;
static const char *filter_columns[] = OS_ITERATOR_FILTER_COLUMNS;
static column_t columns[] = OS_ITERATOR_COLUMNS;
static column_t where_columns[] = OS_ITERATOR_WHERE_COLUMNS;
gchar *extra_tables;

extra_tables = asset_os_iterator_opts_table ();

ret = init_get_iterator2_with (iterator,
"os",
get,
/* Columns. */
columns,
/* Columns for trashcan. */
NULL,
/* WHERE Columns. */
where_columns,
/* WHERE Columns for trashcan. */
NULL,
filter_columns,
0,
extra_tables,
NULL,
NULL,
TRUE,
FALSE,
NULL,
NULL,
0,
0);

g_free (extra_tables);

return ret;
}

/**
* @brief Initialise an OS iterator for GET_RESOURCE_NAMES.
*
Expand Down Expand Up @@ -41228,76 +41043,6 @@ init_resource_names_os_iterator (iterator_t *iterator, get_data_t *get)
return ret;
}

/**
* @brief Get the title from an OS iterator.
*
* @param[in] iterator Iterator.
*
* @return The title of the OS, or NULL if iteration is
* complete. Freed by cleanup_iterator.
*/
DEF_ACCESS (asset_os_iterator_title, GET_ITERATOR_COLUMN_COUNT + 2);

/**
* @brief Get the number of installs from an asset OS iterator.
*
* @param[in] iterator Iterator.
*
* @return Number of hosts that have the OS.
*/
int
asset_os_iterator_installs (iterator_t* iterator)
{
if (iterator->done) return 0;
return iterator_int (iterator, GET_ITERATOR_COLUMN_COUNT + 3);
}

/**
* @brief Get the latest severity from an OS iterator.
*
* @param[in] iterator Iterator.
*
* @return The severity of the OS, or NULL if iteration is
* complete. Freed by cleanup_iterator.
*/
DEF_ACCESS (asset_os_iterator_latest_severity, GET_ITERATOR_COLUMN_COUNT + 4);

/**
* @brief Get the highest severity from an OS iterator.
*
* @param[in] iterator Iterator.
*
* @return The severity of the OS, or NULL if iteration is
* complete. Freed by cleanup_iterator.
*/
DEF_ACCESS (asset_os_iterator_highest_severity, GET_ITERATOR_COLUMN_COUNT + 5);

/**
* @brief Get the average severity from an OS iterator.
*
* @param[in] iterator Iterator.
*
* @return The severity of the OS, or NULL if iteration is
* complete. Freed by cleanup_iterator.
*/
DEF_ACCESS (asset_os_iterator_average_severity, GET_ITERATOR_COLUMN_COUNT + 6);

/**
* @brief Get the number of all installs from an asset OS iterator.
*
* This includes hosts where the OS is not the best match.
*
* @param[in] iterator Iterator.
*
* @return Number of any hosts that have the OS not only as the best match.
*/
int
asset_os_iterator_all_installs (iterator_t* iterator)
{
if (iterator->done) return 0;
return iterator_int (iterator, GET_ITERATOR_COLUMN_COUNT + 7);
}

/**
* @brief Count number of oss.
*
Expand Down
7 changes: 7 additions & 0 deletions src/manage_sql.h
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,13 @@ init_get_iterator2 (iterator_t *, const char *, const get_data_t *, column_t *,
const char *, const char *, const char *, int, int,
const char *);

int
init_get_iterator2_with (iterator_t *, const char *, const get_data_t *,
column_t *, column_t *, column_t *, column_t *,
const char **, int, const char *, const char *,
const char *, int, int, const char *, const char *,
int, int);

int
openvasd_get_details_from_iterator (iterator_t *, char **, GSList **);

Expand Down
Loading
Loading