diff --git a/src/gvmd.c b/src/gvmd.c index d507993157..5192c0897a 100644 --- a/src/gvmd.c +++ b/src/gvmd.c @@ -1132,55 +1132,76 @@ update_nvt_cache_retry () } else if (child_pid == 0) { + scanner_type_t sc_type; init_sentry (); -#if OPENVASD - int ret; - setproctitle ("openvasd: Updating NVT cache"); - ret = manage_update_nvt_cache_openvasd (); - if (ret == 1) - { - g_message ( - "Rebuilding all NVTs because of a hash value mismatch"); - ret = update_or_rebuild_nvts (0); - if (ret) - g_warning ("%s: rebuild failed", __func__); - else - g_message ("%s: rebuild successful", __func__); - } + sc_type = get_scanner_type_by_uuid (SCANNER_UUID_DEFAULT); + switch (sc_type) + { + case SCANNER_TYPE_OPENVAS: + { + const char *osp_update_socket; + + osp_update_socket = get_osp_vt_update_socket (); + if (osp_update_socket) + { + int ret; + + setproctitle ("OSP: Updating NVT cache"); + ret = manage_update_nvt_cache_osp (osp_update_socket); + if (ret == 1) + { + g_message ("Rebuilding all NVTs because of a" + " hash value mismatch"); + ret = update_or_rebuild_nvts (0); + if (ret) + g_warning ("%s: rebuild failed", __func__); + else + g_message ("%s: rebuild successful", __func__); + } + + gvm_close_sentry (); + exit (ret); + } + else + { + g_warning ("%s: No OSP VT update socket set", __func__); + gvm_close_sentry (); + exit (EXIT_FAILURE); + } + } + case SCANNER_TYPE_OPENVASD: + { +#if OPENVASD + int ret; + + setproctitle ("openvasd: Updating NVT cache"); + ret = manage_update_nvt_cache_openvasd (); + if (ret == 1) + { + g_message ( + "Rebuilding all NVTs because of a hash value mismatch"); + ret = update_or_rebuild_nvts (0); + if (ret) + g_warning ("%s: rebuild failed", __func__); + else + g_message ("%s: rebuild successful", __func__); + } - gvm_close_sentry (); - exit (ret); + gvm_close_sentry (); + exit (ret); #else - const char *osp_update_socket; - - osp_update_socket = get_osp_vt_update_socket (); - if (osp_update_socket) - { - int ret; - - setproctitle ("OSP: Updating NVT cache"); - ret = manage_update_nvt_cache_osp (osp_update_socket); - if (ret == 1) - { - g_message ("Rebuilding all NVTs because of a hash value mismatch"); - ret = update_or_rebuild_nvts (0); - if (ret) - g_warning ("%s: rebuild failed", __func__); - else - g_message ("%s: rebuild successful", __func__); - } - - gvm_close_sentry (); - exit (ret); - } - else - { - g_warning ("%s: No OSP VT update socket set", __func__); - gvm_close_sentry (); - exit (EXIT_FAILURE); - } + g_critical ("%s: Default scanner is an openvasd one," + " but gvmd is not built to support this.", + __func__); + exit (EXIT_FAILURE); #endif + } + default: + g_critical ("%s: scanner type %d is not supported as default", + __func__, sc_type); + exit (EXIT_FAILURE); + } } } } diff --git a/src/manage.c b/src/manage.c index 7b42a0a5a1..75a0bb52a1 100644 --- a/src/manage.c +++ b/src/manage.c @@ -807,6 +807,27 @@ scanner_type_supports_unix_sockets (scanner_type_t scanner_type) return 0; } +/** + * @brief Gets the type of a scanner given its uuid. + * + * @param[in] scanner_id UUID of the scanner + * + * @return The scanner type or SCANNER_TYPE_NONE if scanner could not be found. + */ +scanner_type_t +get_scanner_type_by_uuid (const char *scanner_id) +{ + scanner_t scanner; + if (scanner_id == NULL) + return SCANNER_TYPE_NONE; + if (find_resource_no_acl ("scanner", scanner_id, &scanner)) + { + g_warning ("%s: Error finding scanner %s", __func__, scanner_id); + return SCANNER_TYPE_NONE; + } + return get_scanner_type (scanner); +} + /* Severity related functions. */ @@ -6172,7 +6193,6 @@ gvm_get_sync_script_feed_version (const gchar * sync_script, return TRUE; } -#if OPENVASD == 0 /** * @brief Get VTs feed information from a scanner. * @@ -6227,7 +6247,6 @@ nvts_feed_info_internal (const gchar *update_socket, return 0; } -#endif /** * @brief Get VTs feed information from the scanner using VT update socket. @@ -6244,20 +6263,32 @@ int nvts_feed_info (gchar **vts_version, gchar **feed_name, gchar **feed_vendor, gchar **feed_home) { + scanner_type_t sc_type = get_scanner_type_by_uuid (SCANNER_UUID_DEFAULT); + switch (sc_type) + { + case SCANNER_TYPE_OPENVAS: + return nvts_feed_info_internal (get_osp_vt_update_socket (), + vts_version, + feed_name, + feed_vendor, + feed_home); + case SCANNER_TYPE_OPENVASD: #if OPENVASD == 1 - return nvts_feed_info_internal_from_openvasd (SCANNER_UUID_OPENVASD_DEFAULT, - vts_version); + return nvts_feed_info_internal_from_openvasd (SCANNER_UUID_DEFAULT, + vts_version); #else - return nvts_feed_info_internal (get_osp_vt_update_socket (), - vts_version, - feed_name, - feed_vendor, - feed_home); - + g_critical ("%s: Default scanner is an openvasd one," + " but gvmd is not built to support this.", + __func__); + return -1; #endif + default: + g_critical ("%s: scanner type %d is not supported as default", + __func__, sc_type); + return -1; + } } -#if OPENVASD == 0 /** * @brief Check the VTs feed sync for information using a OSP socket. * @@ -6300,7 +6331,6 @@ nvts_check_feed_internal (const char *update_socket, return 0; } -#endif /** * @brief Check the VTs feed sync for information using the default OSP socket. @@ -6316,30 +6346,45 @@ nvts_check_feed (int *lockfile_in_use, int *self_test_exit_error, char **self_test_error_msg) { + scanner_type_t sc_type = get_scanner_type_by_uuid (SCANNER_UUID_DEFAULT); + switch (sc_type) + { + case SCANNER_TYPE_OPENVAS: + return nvts_check_feed_internal (get_osp_vt_update_socket (), + lockfile_in_use, + self_test_exit_error, + self_test_error_msg); + case SCANNER_TYPE_OPENVASD: #if OPENVASD == 1 - int ret = 0; - char *vts_version = NULL; - - ret = nvts_feed_info_internal_from_openvasd (SCANNER_UUID_OPENVASD_DEFAULT, - &vts_version); - self_test_exit_error = 0; - *self_test_error_msg = NULL; - if (ret == 0 && vts_version) - lockfile_in_use = 0; - else if (ret == 2) - { - ret = 0; - *lockfile_in_use = 1; - } - - return ret; + { + int ret = 0; + char *vts_version = NULL; + + ret = nvts_feed_info_internal_from_openvasd (SCANNER_UUID_DEFAULT, + &vts_version); + self_test_exit_error = 0; + *self_test_error_msg = NULL; + if (ret == 0 && vts_version) + lockfile_in_use = 0; + else if (ret == 2) + { + ret = 0; + *lockfile_in_use = 1; + } + return ret; + } #else - return nvts_check_feed_internal (get_osp_vt_update_socket (), - lockfile_in_use, - self_test_exit_error, - self_test_error_msg); + g_critical ("%s: Default scanner is an openvasd one," + " but gvmd is not built to support this.", + __func__); + return -1; #endif + default: + g_critical ("%s: scanner type %d is not supported as default", + __func__, sc_type); + return -1; + } } /** diff --git a/src/manage.h b/src/manage.h index 5005d1fc5c..3cc0f42a6e 100644 --- a/src/manage.h +++ b/src/manage.h @@ -356,6 +356,12 @@ scanner_type_valid (scanner_type_t); int scanner_type_supports_unix_sockets (scanner_type_t); +scanner_type_t +get_scanner_type (scanner_t); + +scanner_type_t +get_scanner_type_by_uuid (const char *); + /* Resources. */ diff --git a/src/manage_sql.c b/src/manage_sql.c index 23b15369fc..f3e0f1072e 100644 --- a/src/manage_sql.c +++ b/src/manage_sql.c @@ -6422,29 +6422,25 @@ check_db_scanners () if (sql_int ("SELECT count(*) FROM scanners WHERE uuid = '%s';", SCANNER_UUID_DEFAULT) == 0) { +#if OPENVASD sql ("INSERT INTO scanners" " (uuid, owner, name, host, port, type, ca_pub, credential," " creation_time, modification_time)" " VALUES ('" SCANNER_UUID_DEFAULT "', NULL, 'OpenVAS Default'," - " '%s', 0, %d, NULL, NULL, m_now ()," + " 'localhost', 3000, %d, NULL, NULL, m_now ()," " m_now ());", - OPENVAS_DEFAULT_SOCKET, - SCANNER_TYPE_OPENVAS); - } - -#if OPENVASD - if (sql_int ("SELECT count(*) FROM scanners WHERE uuid = '%s';", - SCANNER_UUID_OPENVASD_DEFAULT) == 0) - { + SCANNER_TYPE_OPENVASD); +#else sql ("INSERT INTO scanners" " (uuid, owner, name, host, port, type, ca_pub, credential," " creation_time, modification_time)" - " VALUES ('" SCANNER_UUID_OPENVASD_DEFAULT "', NULL, 'OpenVASD'," - " 'localhost', 3000, %d, NULL, NULL, m_now ()," + " VALUES ('" SCANNER_UUID_DEFAULT "', NULL, 'OpenVAS Default'," + " '%s', 0, %d, NULL, NULL, m_now ()," " m_now ());", - SCANNER_TYPE_OPENVASD); - } + OPENVAS_DEFAULT_SOCKET, + SCANNER_TYPE_OPENVAS); #endif + } #if ENABLE_CONTAINER_SCANNING if (sql_int ("SELECT count(*) FROM scanners WHERE uuid = '%s';", @@ -32012,6 +32008,15 @@ find_scanner_with_permission (const char* uuid, scanner_t* scanner, 0); } +scanner_type_t +get_scanner_type (scanner_t scanner) +{ + if (scanner == 0) + return SCANNER_TYPE_NONE; + return sql_int ("SELECT type FROM scanners WHERE id=%llu", scanner); +} + + /** * @brief Insert a scanner for create_scanner. * @@ -33786,6 +33791,7 @@ manage_get_scanners (GSList *log_config, const db_conn_info_t *database) break; case SCANNER_TYPE_OPENVASD: scanner_type_str = "openvasd"; + break; case SCANNER_TYPE_OPENVASD_SENSOR: scanner_type_str = "openvasd-sensor"; break; diff --git a/src/manage_sql_nvts.c b/src/manage_sql_nvts.c index cdbac04a3e..2fbf107a9f 100644 --- a/src/manage_sql_nvts.c +++ b/src/manage_sql_nvts.c @@ -1217,13 +1217,27 @@ DEF_ACCESS (nvt_severity_iterator_value, 4); int nvts_feed_version_status_from_scanner () { + scanner_type_t sc_type = get_scanner_type_by_uuid (SCANNER_UUID_DEFAULT); + switch (sc_type) + { + case SCANNER_TYPE_OPENVAS: + return nvts_feed_version_status_internal_osp (get_osp_vt_update_socket (), + NULL, + NULL); + case SCANNER_TYPE_OPENVASD: #if OPENVASD - return nvts_feed_version_status_internal_openvasd (NULL, NULL); + return nvts_feed_version_status_internal_openvasd (NULL, NULL); #else - return nvts_feed_version_status_internal_osp (get_osp_vt_update_socket (), - NULL, - NULL); + g_critical ("%s: Default scanner is an openvasd one," + " but gvmd is not built to support this.", + __func__); + return -1; #endif + default: + g_critical ("%s: scanner type %d is not supported as default", + __func__, sc_type); + return -1; + } } /** @@ -1736,31 +1750,47 @@ update_scanner_preferences () g_info ("%s: Updating scanner preferences", __func__); + scanner_type_t sc_type = get_scanner_type_by_uuid (SCANNER_UUID_DEFAULT);( + switch (sc_type) + { + case SCANNER_TYPE_OPENVAS: + if (check_osp_vt_update_socket ()) + { + g_warning ("No OSP VT update socket found." + " Use --osp-vt-update or change the 'OpenVAS Default'" + " scanner to use the main ospd-openvas socket."); + return -1; + } + + const char *osp_update_socket = get_osp_vt_update_socket (); + if (osp_update_socket == NULL) + { + g_warning ("No OSP VT update socket set."); + return -1; + } + + ret = update_scanner_preferences_osp (osp_update_socket); + break; + case SCANNER_TYPE_OPENVASD: #if OPENVASD - scanner_t scanner; + scanner_t scanner; - if (find_resource_no_acl ("scanner", SCANNER_UUID_OPENVASD_DEFAULT, &scanner)) - return -1; - - ret = update_scanner_preferences_openvasd (scanner); -#else - if (check_osp_vt_update_socket ()) - { - g_warning ("No OSP VT update socket found." - " Use --osp-vt-update or change the 'OpenVAS Default'" - " scanner to use the main ospd-openvas socket."); - return -1; - } + if (find_resource_no_acl ("scanner", SCANNER_UUID_DEFAULT, &scanner)) + return -1; - const char *osp_update_socket = get_osp_vt_update_socket (); - if (osp_update_socket == NULL) - { - g_warning ("No OSP VT update socket set."); + ret = update_scanner_preferences_openvasd (scanner); + break; +#else + g_critical ("%s: Default scanner is an openvasd one," + " but gvmd is not built to support this.", + __func__); return -1; - } - - ret = update_scanner_preferences_osp (osp_update_socket); #endif + default: + g_critical ("%s: scanner type %d is not supported as default", + __func__, sc_type); + return -1; + } if (ret) { diff --git a/src/manage_sql_nvts.h b/src/manage_sql_nvts.h index bdddad4899..af3920783a 100644 --- a/src/manage_sql_nvts.h +++ b/src/manage_sql_nvts.h @@ -26,9 +26,8 @@ #if OPENVASD #include "manage_sql_nvts_openvasd.h" -#else -#include "manage_sql_nvts_osp.h" #endif +#include "manage_sql_nvts_osp.h" /** * @brief Filter columns for NVT info iterator. diff --git a/src/manage_sql_nvts_openvasd.c b/src/manage_sql_nvts_openvasd.c index d1ab3d8271..7a0e686ffc 100644 --- a/src/manage_sql_nvts_openvasd.c +++ b/src/manage_sql_nvts_openvasd.c @@ -326,7 +326,7 @@ update_scanner_preferences_openvasd (scanner_t scan) if (!connector) { g_warning ("%s: failed to connect to scanner (%s)", __func__, - SCANNER_UUID_OPENVASD_DEFAULT); + SCANNER_UUID_DEFAULT); return -1; } @@ -411,7 +411,7 @@ update_nvt_cache_openvasd (gchar *db_feed_version, = (time_t) sql_int64_0 ("SELECT max(modification_time) FROM nvts"); /* Update NVTs. */ - if (find_resource_no_acl ("scanner", SCANNER_UUID_OPENVASD_DEFAULT, &scan)) + if (find_resource_no_acl ("scanner", SCANNER_UUID_DEFAULT, &scan)) return -1; if (scan == 0) return -1; @@ -420,7 +420,7 @@ update_nvt_cache_openvasd (gchar *db_feed_version, if (!connector) { g_warning ("%s: failed to connect to scanner (%s)", __func__, - SCANNER_UUID_OPENVASD_DEFAULT); + SCANNER_UUID_DEFAULT); return -1; } @@ -517,7 +517,7 @@ nvts_feed_version_status_internal_openvasd (gchar **db_feed_version_out, if (db_feed_version_out && db_feed_version) *db_feed_version_out = g_strdup (db_feed_version); - nvts_feed_info_internal_from_openvasd (SCANNER_UUID_OPENVASD_DEFAULT, + nvts_feed_info_internal_from_openvasd (SCANNER_UUID_DEFAULT, &scanner_feed_version); g_debug ("%s: scanner_feed_version: %s", __func__, scanner_feed_version);